我做了一下,结果还是令人满意的,但是过程比较繁琐!
首先,对信号进行时频分析,得出脊线对应的尺度。进而再进行连续小波变换,应用上图中的公式进行计算。如下:
clc
clear all
%a(1)=20;
Te=0.001;
t=0:0.001:1;
s=2*exp(-2*pi*2*t).*cos(2*pi*40*t);
%s=cos(2*pi*40*t);
wavename='cmor2-1';
scal=5:1:100;
coefs=cwt(s,scal,wavename,'glbabs');
%coefs=cwt(s,scal,wavename);
figure(1)
xlabel('时间 t/s');
ylabel('尺度');
title('小波时频图');
grid on;
xlim([0 1]);ylim([20 100])
colorbar;
colormap(jet);
%%
以上是用来确定脊线对应的尺度!
接下来便模态是参数识别:
clc
clear all
a=25;
Te=0.001;
t=0:0.001:1;
s=2*exp(-2*pi*2*t).*cos(2*pi*40*t);
wavename='cmor2-1';
fc=centfrq(wavename);
wa=cwt(s,a,wavename);
fai=angle(wa);
fai=unwrap(fai);
figure(2)
plot(t,fai)
wb=abs(wa);
wc=log(wb);
figure(3)
plot(t,wc)
%nmd1=diff(wc);
%nmd2=diff(fai);
[a,s]=polyfit(t,fai,1);
[b,s]=polyfit(t,wc,1);
nmd1=a(1);nmd2=b(1);
wn=sqrt(nmd1^2+nmd2^2);
kexi=-nmd2/wn;
最后的结果是可以验证,识别精度还挺高!
大家多讨论下吧 |