|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
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的两个正弦分量所合成的信号。
- % 小波时频分析
- clc;
- clear;
- close all;
- % 原始信号
- fs=1000;
- f1=50;
- f2=100;
- t=0:1/fs:1;
- s=sin(2*pi*f1*t)+sin(2*pi*f2*t); %原始信号
- figure;
- plot(t, s);
- % 连续小波变换
- wavename='cmor3-3';
- totalscal=256;
- Fc=centfrq(wavename); % 小波的中心频率
- c=2*Fc*totalscal;
- scals=c./(1:totalscal);
- f=scal2frq(scals,wavename,1/fs); % 将尺度转换为频率
- coefs=cwt(s,scals,wavename); % 求连续小波系数
- figure;
- imagesc(t,f,abs(coefs));
- set(gca,'YDir','normal');
- colorbar;
- xlabel('时间 t/s');
- ylabel('频率 f/Hz');
- title('小波时频图');
复制代码
说明:在这个例子中,最好选用复的morlet小波,其它小波的分析效果不好,而且morlet小波的带宽参数和中心频率取得越大,时频图上反映的时频聚集性越好。
三、与其他时频分析对比,如短时傅里叶变换时频图
高频时小波效果好,因为小波在高频处分辨率可以自动调整,分辨率高。
- 代码:
- % 时频分析
- clc;
- clear;
- close all;
- % 原始信号
- fs=1000;
- f1=50;
- f2=100;
- t=0:1/fs:1;
- s = sin(2*pi*f1*t)+sin(2*pi*f2*t);%+randn(1, length(t));
- % s = chirp(t,20,0.3,300);
- s = chirp(t,20,1,500,'q');
- figure;
- plot(t, s); %原始信号图
- % 连续小波变换时频图
- wavename='cmor3-3';
- totalscal=256;
- Fc=centfrq(wavename); % 小波的中心频率
- c=2*Fc*totalscal;
- scals=c./(1:totalscal);
- f=scal2frq(scals,wavename,1/fs); % 将尺度转换为频率
- coefs=cwt(s,scals,wavename); % 求连续小波系数
- figure;
- imagesc(t,f,abs(coefs));
- set(gca,'YDir','normal')
- colorbar;
- xlabel('时间 t/s');
- ylabel('频率 f/Hz');
- title('小波时频图');
- % 短时傅里叶变换时频图
- figure
- spectrogram(s,256,250,256,fs);
- % 时频分析工具箱里的短时傅里叶变换
- f = 0:fs/2;
- tfr = tfrstft(s');
- tfr = tfr(1:floor(length(s)/2), :);
- figure
- imagesc(t, f, abs(tfr));
- set(gca,'YDir','normal')
- colorbar;
- xlabel('时间 t/s');
- ylabel('频率 f/Hz');
- title('短时傅里叶变换时频图');
复制代码
转自:http://blog.sina.com.cn/s/blog_bdfc1ea80102wiis.html
|
|