马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
【求助】
最近在做非线性系统识别的小波方法的研究,但是小波刚刚入门,所以不太明白,
其中提到对信号采用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([0 1.4 -100 100]);
%
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([0 1.2 100 200])
不知道哪儿有问题,忘高手指点 |