jackyhe 发表于 2008-4-18 10:15

小波脊线提取

【求助】
最近在做非线性系统识别的小波方法的研究,但是小波刚刚入门,所以不太明白,
其中提到对信号采用Morlet小波函数‘cmor2-1’对响应进行小波变换,小波根据小波系数模的极大值确定脊线,从而得到瞬时频率,
但是得到瞬时频率后,辨识的精度很差,我不知道脊线提取是否正确:
请高手帮忙指点一下:
原始信号为一二阶微分方程:
在am.m文件中代码:
function f=am(t,u,du)
f = -6.8*du - 120*120*u - 1.5*u^3;%原始信号表征
在实现文件***.m中
%四阶龙格库塔方法求方程的数值解
figure(1)
h = 0.001;
a = 0;
b = 1.000;
du = 0;
u = 100;
c = linspace(0,1.000,1000);
g = linspace(0,1.000,1000);
tt = 0:0.001:1.000;
for count=0:(b-a)/h
   k1 = du;
   l1 = feval(@am,a+count*h,u,k1);
   k2 = k1 + h/2*l1;
   l2 = feval(@am,a+count*h,u+h/2*k1,k1+h/2*l1);
   k3 = k1 + h/2*l2;
   l3 = feval(@am,a+count*h,u+h/2*k2,k1+h/2*l2);
   k4 = k1 + h*l3;
   l4 = feval(@am,a+count*h,u+h*k3,k1+h*l3);
   u = u+h/6*(k1+2*k2+2*k3+k4);
   du = du + h/6*(l1+2*l2+2*l3+l4);
   c(count+1) = u;
end
plot(tt,c);
xlabel('时间/s');
ylabel('位移/mm');
axis();

%
figure(2)
a(1)=20;
Te=0.001;
t=0:0.001:1;
% c = hilbert(c);
%用morlet小波进行分析;
kk=length(t);
k=0;
aa=0;
bb=0;
w0=2*pi;%cmor2-1小波的中心频率为2pi
km(1) = 0;
for j=2:kk
    while 1
      wa=cwt(c,a(1),'cmor2-1');%对信号c采用小波变换得到小波系数wa
      %wa=cwt(c,a(1),'morl');
      fai=angle(wa);%小波系数的相位
      fai=unwrap(fai);%相位修正
      dfa=abs(fai(j)-fai(j-1));
      a0=w0*1/dfa;
      if abs((a0-a(1))/a(1))<0.9%阈值不宜过小0.02
            ar(j-1)=a(1)/(2*pi); %信号的瞬时频率
            a(1)=a0;
            km(j-1) = (2*pi)*2*abs(wa(j-1))/a(1);
            ww(j-1)=120/abs(wa(j-1))*1000/1/(ar(j-1)*Te);
            break;
      end
      a(1)=a0;
    end
   km(j-1) =(2*pi)*2*abs(wa(j-1))/a(1);
   ww(j-1)=120/abs(wa(j-1))*1000/1/(ar(j-1)*Te);
end
f=1./(ar*Te);%系统频率
plot(t(1:kk-1),f);
%
xlabel('时间/s');
ylabel('频率/Hz');
axis()
不知道哪儿有问题,忘高手指点

xuxuesan 发表于 2012-10-17 19:39

求解啊,不知楼主解决了没
页: [1]
查看完整版本: 小波脊线提取