声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2680|回复: 5

[小波] 关于小波时频图问题

[复制链接]
发表于 2016-4-25 16:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
  一、绘制原理:
  1.需要用到的小波工具箱中的三个函数cwt(),centfrq(),scal2frq()
  (1) COEFS = cwt(x,scales,'wname');
  函数说明:该函数实现连续小波变换,其中x为输入信号,scales为尺度,wname为小波名称。
  (2)FREQ = centfrq('wname');
  函数说明:该函数求以wname命名的母小波的中心频率。
  (3)F = scal2frq(A,'wname',DELTA);
  函数说明:该函数能将尺度A转换为伪频率F,其中A为尺度,wname为小波名称,DELTA为采样周期。
  2.尺度与频率之间的关系
  在尺度与频率之间仅有一个看近似的映射关系。
  在小波分析中,设a为尺度,fs为采样频率,Fc为小波中心频率,则尺度a对应的伪频率Fa为Fa=Fc*fs/a。显然,根据采样定理,为使小波尺度图的频率范围为(0,fs/2),尺度范围应为(2*Fc,inf),其中inf表示为无穷大。在实际应用中,只需取尺度足够大即可。
  3.尺度序列的确定
  由式Fa=Fc*fs/a可以看出,为使转换后的频率序列是一等差序列,尺度序列必须取为以下形式:
  c/totalscal, c/(totalscal-1), ...,c/2,c
  其中,totalscal是对信号进行小波变换时所用尺度序列的长度(通常需要预先设定好),c为一常数。而尺度c/totalscal所对应的实际频率应为fs/2,于是可得c=2*Fc*totalscal,于是可得到所需的尺度序列。
  4.时频图的绘制
  确定了小波基和尺度后,就可以用cwt求小波系数coefs(系数是复数时要取模),然后用scal2frq将尺度序列转换为实际频率序列f,最后结合时间序列t,用imagesc(t,f,abs(coefs))便能画出小波时频图。
  二、应用例子
  下面给出一实际例子来说明小波时频图的绘制。所取仿真信号是由频率分别为50Hz和100Hz的两个正弦分量所合成的信号。
  1.   % 小波时频分析

  2.   clc;

  3.   clear;

  4.   close all;

  5.   % 原始信号

  6.   fs=1000;

  7.   f1=50;

  8.   f2=100;

  9.   t=0:1/fs:1;

  10.   s=sin(2*pi*f1*t)+sin(2*pi*f2*t); %原始信号

  11.   figure;

  12.   plot(t, s);

  13.   % 连续小波变换

  14.   wavename='cmor3-3';

  15.   totalscal=256;

  16.   Fc=centfrq(wavename); % 小波的中心频率

  17.   c=2*Fc*totalscal;

  18.   scals=c./(1:totalscal);

  19.   f=scal2frq(scals,wavename,1/fs); % 将尺度转换为频率

  20.   coefs=cwt(s,scals,wavename); % 求连续小波系数

  21.   figure;

  22.   imagesc(t,f,abs(coefs));

  23.   set(gca,'YDir','normal');

  24.   colorbar;

  25.   xlabel('时间 t/s');

  26.   ylabel('频率 f/Hz');

  27.   title('小波时频图');
复制代码
37.png

38.png

  说明:在这个例子中,最好选用复的morlet小波,其它小波的分析效果不好,而且morlet小波的带宽参数和中心频率取得越大,时频图上反映的时频聚集性越好。
  三、与其他时频分析对比,如短时傅里叶变换时频图

  高频时小波效果好,因为小波在高频处分辨率可以自动调整,分辨率高。
  1.   代码:

  2.   % 时频分析

  3.   clc;

  4.   clear;

  5.   close all;

  6.   % 原始信号

  7.   fs=1000;

  8.   f1=50;

  9.   f2=100;

  10.   t=0:1/fs:1;

  11.   s = sin(2*pi*f1*t)+sin(2*pi*f2*t);%+randn(1, length(t));

  12.   % s = chirp(t,20,0.3,300);

  13.   s = chirp(t,20,1,500,'q');

  14.   figure;

  15.   plot(t, s); %原始信号图

  16.   % 连续小波变换时频图

  17.   wavename='cmor3-3';

  18.   totalscal=256;

  19.   Fc=centfrq(wavename); % 小波的中心频率

  20.   c=2*Fc*totalscal;

  21.   scals=c./(1:totalscal);

  22.   f=scal2frq(scals,wavename,1/fs); % 将尺度转换为频率

  23.   coefs=cwt(s,scals,wavename); % 求连续小波系数

  24.   figure;

  25.   imagesc(t,f,abs(coefs));

  26.   set(gca,'YDir','normal')

  27.   colorbar;

  28.   xlabel('时间 t/s');

  29.   ylabel('频率 f/Hz');

  30.   title('小波时频图');

  31.   % 短时傅里叶变换时频图

  32.   figure

  33.   spectrogram(s,256,250,256,fs);

  34.   % 时频分析工具箱里的短时傅里叶变换

  35.   f = 0:fs/2;

  36.   tfr = tfrstft(s');

  37.   tfr = tfr(1:floor(length(s)/2), :);

  38.   figure

  39.   imagesc(t, f, abs(tfr));

  40.   set(gca,'YDir','normal')

  41.   colorbar;

  42.   xlabel('时间 t/s');

  43.   ylabel('频率 f/Hz');

  44.   title('短时傅里叶变换时频图');
复制代码
39.png
40.png
41.png
42.png


转自:http://blog.sina.com.cn/s/blog_bdfc1ea80102wiis.html

点评

赞成: 5.0
赞成: 5
  发表于 2016-4-30 10:51

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2016-4-26 10:47 | 显示全部楼层
本帖最后由 折戟沉沙boy 于 2016-4-26 10:53 编辑

楼主你好,我有几个疑问希望您能够解答:(1)morlet小波的带宽参数和中心频率取得越大,时频图上反映的时频聚集性越好,这句话理解成复小波的fb和fc越大越好,有没有一个标准或者经常用的值?
(2)totalscal=256;这个尺度长度选择有什么规定,或者我取信号的总长度可以吗?
希望楼主能够解答。谢谢!
发表于 2016-4-26 14:08 | 显示全部楼层
折戟沉沙boy 发表于 2016-4-26 10:47
楼主你好,我有几个疑问希望您能够解答:(1)morlet小波的带宽参数和中心频率取得越大,时频图上反映的时频聚 ...

中心频率和带宽

中心频率和带宽.doc

79.5 KB, 下载次数: 25

发表于 2016-4-26 22:07 | 显示全部楼层

好的,谢谢!
发表于 2018-10-9 10:06 | 显示全部楼层
好资料,谢谢分享。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-4-20 05:58 , Processed in 0.062995 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表