Molet小波的模态识别
clcclear all
clf
fs=256;
dt=1/fs;
N=1024;
t=(-N/2)*dt:dt:(N/2-1)*dt;
f0=0.4;
a=5;
n=100;
%s=exp(-2*pi*f0*t*i/a-(t/a).^2/2);
s=exp(-2*pi*f0*t*i/a-(t/a).^2/n);%MORLET小波
s1=(1/sqrt(a))*conj(s);
% plot(real(s))
s1=conj(s);
t1=t;
x=0*t;
nfft=N;
%x=0.5*exp(-2*pi*0.0203*20.017*t1).*cos(2*pi*20.017*sqrt(1-0.0203^2)*t1+pi/4);
x=0.5*exp(-2*pi*0.028874*0.7503*t1).*cos(2*pi*0.7503*sqrt(1-0.028874^2)*t1+pi/4);%第3阶自由响应
% x=2.5*exp(2*pi*2.8874*0.7503).*cos(2*pi*0.7503*t+pi/4);
%plot(t1,x)
W=conv(s1,x);%求小波变换
theta=angle(W);
W1=abs(W);
W2=log(W1);
nmd1=diff(W2);
nmd2=diff(theta);
fk=sqrt(nmd1.^2+nmd2.^2)/(2*pi);
epsl=-nmd1/(fk);%求阻尼比
[ 本帖最后由 zhangnan3509 于 2007-12-23 11:42 编辑 ] 图片以下字发多了,不知道怎么删除呀? 我也做过小波的参数识别工作,我用的是二进小波 我用的连续复morlet小波变换进行参数识别,不知道二进小波如何做?楼上介绍介绍 感觉你的diff命令求直线斜率不妥!
我试算了一下,你的辨识精度不高啊?(不知我对不对啊!)
还有,提取脊线的方法是不是还有crazy climber算法啊,这个算法实在是搞不明白,不知大家怎么看?
回复 #6 fudy10 的帖子
谢谢fudy10,我在这边用diff求直线斜率我也看了下精度很不高,但是也不知道这个程序应该怎么修改的[ 本帖最后由 kevin19821 于 2007-12-23 08:54 编辑 ]
回复 #7 kevin19821 的帖子
因为求直线的斜率关系到识别的精度,所以可以考虑用最小二乘法来计算吧!其实,我觉得画出图形也明显些。 谢谢fudy10,我在修改以下 kevin的molet小波选择的是哪个?我用的直接是matlab的cmor1-2回复 #9 hyl2323 的帖子
他使用的是自定义的morlet小波,n是自取的!其实n是可以最优化来求的 是的,我用的自定义的morlet小波 通过调节n可以获得最佳的阻尼比和振荡频率我是参考振动与冲击上的<基于morlet小波变换的模态参数识别研究>,大家可以下载看看 我的程序和人家论文上的结果相差很大谁帮忙给咱修改下程序了
回复 #7 fudy10 的帖子
fudy10,最小二乘求直线斜率不知道在这个程序里面应该怎么写?我真不知道怎么修改了回复 #12 kevin19821 的帖子
我尝试了许久,还是没有成功。我觉得,应该提取出脊线。因为识别的时候模值都是局部极大值的。
但是你的程序里面好像不是这么反映的? diff求斜率肯定不行,误差太大,我写过好几种求微分的方法,有三点法,五点法等,至少用三点法。 theta=angle(W);
nmd2=diff(theta);
你的相位没有用unwrap函数处理一下?
页:
[1]
2