如何读取小波时频图的信息
得到小波时频图,完全不懂颜色深浅表示什么,意义是什么,求教时频面上的数据,对应着你的分析信号在(某一瞬时时刻,某一瞬时频率分量)下的功率谱或功率谱密度或信号幅值,具体表征哪一个物理量取决于你的算法。总之颜色越深,代表这一时刻和频率下信号的能量越强。建议你做一个正弦扫频信号然后对其进行小波时频变化,你瞬间就明白了。 江树空 发表于 2013-10-14 17:51 static/image/common/back.gif
时频面上的数据,对应着你的分析信号在(某一瞬时时刻,某一瞬时频率分量)下的功率谱或功率谱密度或信号幅 ...
多谢大侠赐教,我是材料加工专业的,所以信号分析是新接触,算法真的不懂,这是我做时频图的代码,请问这样的算法得到的是什么(功率谱/幅值/功率谱密度)?
wavename='morl';
totalscal=1024; %尺度序列的长度,即scal的长度
wcf=centfrq(wavename); %小波的中心频率
cparam=2*wcf*totalscal; %为得到合适的尺度所求出的参数
a=totalscal:-1:1;
scal=cparam./a; %得到各个尺度,以使转换得到频率序列为等差序列
coefs=cwt(y1,scal,wavename); %得到小波系数
f=scal2frq(scal,wavename,1/fs); %将尺度转换为频率
subplot(212);
imagesc(t,f,abs(coefs)); %绘制色谱图
axis();
colorbar;
xlabel('时间 t/s');
ylabel('频率 f/Hz');
title('小波时频图'); 粤语残片 发表于 2013-10-15 15:25 static/image/common/back.gif
多谢大侠赐教,我是材料加工专业的,所以信号分析是新接触,算法真的不懂,这是我做时频图的代码,请问这 ...
你这个算法其结果应该是代表的幅值,你的程序有些地方可能需要更改,如下:
wavename='cmor3-3'; %建议使用complex morlet小波(cmor后的系数3-3得根据实际情况设置,看matlab help),最好是根据具体信号选择合适的母小波函数,个人经验使用该小波函数做出的时频图比较好
totalscal=128; %尺度序列的长度,即scal的长度,尺度数不要太大,过大的话计算时间长,虽说频率划分的更细,但没那个必要
wcf=centfrq(wavename); %小波的中心频率
cparam=2*wcf*totalscal; %为得到合适的尺度所求出的参数
a=totalscal:-1:1;
scal=cparam./a; %得到各个尺度,以使转换得到频率序列为等差序列
coefs=cwt(y1,scal,wavename); %得到小波系数
f=scal2frq(scal,wavename,1/fs); %将尺度转换为频率
subplot(212);
surf(t,f,abs(coefs)); %绘制色谱图(建议使用surf函数,因为使用它,能在时频面上查看每个点的数值,imagesc则不具备该特点)
shading interp
%axis();
colorbar;
xlabel('时间 t/s');
ylabel('频率 f/Hz');
title('小波时频图');
附件图片为使用修改后你的程序对一正弦扫频信号的分析结果
顺便问一下,如果是刚接触信号处理为什么不用STFT呢?STFT更直观易懂,不过其效果确实比小波时频要差一点。
本帖最后由 粤语残片 于 2013-10-17 15:48 编辑
江树空 发表于 2013-10-17 10:21 static/image/common/back.gif
你这个算法其结果应该是代表的幅值,你的程序有些地方可能需要更改,如下:
wavename='cmor3-3'; % ...
哇~真的是太感谢太感谢了,醍醐灌顶啊,STFT导师已经做出来了,现在是想通过频域特征找出故障信号的时间节点,所以想到了小波的时频分析,我的信号的频率在1~6Hz,所以把尺度数设定大一些,时频图像上看的更清楚,我这样想对吗,再次感谢!啊呀,修改后的程序运行错误啊:
??? Error using ==> surf at 78
Data dimensions must agree.
Error in ==> xuexi20xiugaiSHIPIN at 33
surf(t,f,abs(coefs)); %绘制色谱图(建议使用surf函数,因为使用它,能在时频面上查看每个点的数值,imagesc则不具备该特点)
求解求解
本帖最后由 江树空 于 2013-10-17 21:50 编辑
粤语残片 发表于 2013-10-17 15:27 static/image/common/back.gif
哇~真的是太感谢太感谢了,醍醐灌顶啊,STFT导师已经做出来了,现在是想通过频域特征找出故障信号的时间节 ...
你先在workspace里看你t、f的维度,再看看coefs的维度,看是否一致?要别人帮忙查看的话,最好能贴出你完整的程序;你采样率多少?如果要重点关注低频的话,尺度数确实要求多一些,但是计算量太可怕了,就拿你的1024个尺度来说,画出图来巨卡。再说了小波时频在低频频率分辨率虽好,但时间分辨率差啊,估计你那故障信号的时间节点也不好定。
江树空 发表于 2013-10-17 21:18 static/image/common/back.gif
你先在workspace里看你t、f的维度,再看看coefs的维度,看是否一致?要别人帮忙查看的话,最好能贴出你完 ...
内个,有点不好意思了,维度是什么,不知道怎么看,如果不一样应该怎么办呢,错误提示的意思好像就是维度不一样,非常感谢您的指导,我信号采样频率是1250Hz,信号的频率在1~6Hz,尺度的设定的确有待继续摸索,(不过循序渐进吧,先能确定小波用于自己信号分析能替代FFT,并且有时间信息)下面是我的整段程序
load 'lasuxiajiang.txt';
t1=lasuxiajiang(:,1);
y1=lasuxiajiang(:,2);
fs=1250;
t=16:1/fs:26;
figure(1);
plot(t1,y1);
xlabel('t');ylabel('MDF');
title('original')
wavename='cmor3-3'; %建议使用complex morlet小波(cmor后的系数3-3得根据实际情况设置,看matlab help),最好是根据具体信号选择合适的母小波函数,个人经验使用该小波函数做出的时频图比较好
totalscal=128; %尺度序列的长度,即scal的长度,尺度数不要太大,过大的话计算时间长,虽说频率划分的更细,但没那个必要
wcf=centfrq(wavename); %小波的中心频率
cparam=2*wcf*totalscal; %为得到合适的尺度所求出的参数
a=totalscal:-1:1;
scal=cparam./a; %得到各个尺度,以使转换得到频率序列为等差序列
coefs=cwt(y1,scal,wavename); %得到小波系数
f=scal2frq(scal,wavename,1/fs); %将尺度转换为频率
figure(2);
surf(t,f,abs(coefs)); %绘制色谱图(建议使用surf函数,因为使用它,能在时频面上查看每个点的数值,imagesc则不具备该特点)
shading interp请大神查看错误
本帖最后由 江树空 于 2013-10-18 12:22 编辑
粤语残片 发表于 2013-10-18 09:12 static/image/common/back.gif
内个,有点不好意思了,维度是什么,不知道怎么看,如果不一样应该怎么办呢,错误提示的意思好像就是维度 ...
我拿你的程序用仿真信号试了下,绘图没问题啊,你再查查你的数据维度吧。其原因是你的信号y1和时间t长度不想等,改为surf(t1,f,abs(coefs))估计就OK了。
江树空 发表于 2013-10-18 12:15 static/image/common/back.gif
我拿你的程序用仿真信号试了下,绘图没问题啊,你再查查你的数据维度吧。其原因是你的信号y1和时间t长度不 ...
大侠,您就是个活雷锋啊,谢谢!谢谢!
页:
[1]