kevin19821 发表于 2007-12-21 08:49

Molet小波的模态识别

clc
clear 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 编辑 ]

kevin19821 发表于 2007-12-21 09:30

图片以下字发多了,不知道怎么删除呀?

xuxinnuaa 发表于 2007-12-21 13:29

我也做过小波的参数识别工作,我用的是二进小波

hyl2323 发表于 2007-12-21 14:05

我用的连续复morlet小波变换进行参数识别,不知道二进小波如何做?楼上介绍介绍

fudy10 发表于 2007-12-22 13:55

感觉你的diff命令求直线斜率不妥!
我试算了一下,你的辨识精度不高啊?(不知我对不对啊!)
还有,提取脊线的方法是不是还有crazy climber算法啊,这个算法实在是搞不明白,不知大家怎么看?

kevin19821 发表于 2007-12-23 08:51

回复 #6 fudy10 的帖子

谢谢fudy10,我在这边用diff求直线斜率我也看了下精度很不高,但是也不知道这个程序应该怎么修改的

[ 本帖最后由 kevin19821 于 2007-12-23 08:54 编辑 ]

fudy10 发表于 2007-12-23 10:17

回复 #7 kevin19821 的帖子

因为求直线的斜率关系到识别的精度,所以可以考虑用最小二乘法来计算吧!其实,我觉得画出图形也明显些。

kevin19821 发表于 2007-12-24 08:53

谢谢fudy10,我在修改以下

hyl2323 发表于 2007-12-24 13:05

kevin的molet小波选择的是哪个?我用的直接是matlab的cmor1-2

fudy10 发表于 2007-12-24 13:18

回复 #9 hyl2323 的帖子

他使用的是自定义的morlet小波,n是自取的!其实n是可以最优化来求的

kevin19821 发表于 2007-12-24 14:05

是的,我用的自定义的morlet小波 通过调节n可以获得最佳的阻尼比和振荡频率
我是参考振动与冲击上的<基于morlet小波变换的模态参数识别研究>,大家可以下载看看 我的程序和人家论文上的结果相差很大谁帮忙给咱修改下程序了

kevin19821 发表于 2007-12-24 18:36

回复 #7 fudy10 的帖子

fudy10,最小二乘求直线斜率不知道在这个程序里面应该怎么写?我真不知道怎么修改了

fudy10 发表于 2007-12-25 11:01

回复 #12 kevin19821 的帖子

我尝试了许久,还是没有成功。
我觉得,应该提取出脊线。因为识别的时候模值都是局部极大值的。
但是你的程序里面好像不是这么反映的?

hyl2323 发表于 2007-12-25 13:44

diff求斜率肯定不行,误差太大,我写过好几种求微分的方法,有三点法,五点法等,至少用三点法。

hyl2323 发表于 2007-12-25 13:47

theta=angle(W);
nmd2=diff(theta);
你的相位没有用unwrap函数处理一下?
页: [1] 2
查看完整版本: Molet小波的模态识别