我把我编的程序贴一下,您看一下,哪里出错了?
%小波变换wavelet
%% 得到自由振动曲线
%理论频率(2.3112,4.9414,7.3370)
%理论阻尼比(0.05,0.07,,00956)
%yrds_3degree为三自由度自由衰减曲线
clear
clc
load yrds_3degree
fs=input('请输入采样频率:');
choose=input('选择所需要的前处理方法(1、RDT;2、NExT):');
switch choose
case 1
sig_wav=yrds;
case 2
sig_wav=CCF;
end
[wc,wl]=size(sig_wav);
if wc>wl
sig_wav=sig_wav';
[wc,wl]=size(sig_wav);
end
wc=wc.^0.5;
sig_wav=sig_wav(1,:);
t=0:1/fs:(wl-1)/fs;
%% 得到小波分解系数
fmax=input('请输入最高分析频率(最大频率/fs):'); % 最高分析频率(归一化频率)
fmin=input('请输入最高分析频率(最小频率/fs):'); % 最低分析频率(归一化频率)
fb=4 ; % 取cmor4-2小波进行实验,带宽参数为4
fc=2; % 中心频率2Hz
totalscal=512 ; % 所取尺度的数目
FreqBins=linspace(fmin,fmax,totalscal); % 将频率轴在分析范围内等间隔划分
Scales=fc./FreqBins; % 计算相应的尺度参数
RealFreqBins=FreqBins*fs; % 尺度所对应的实际频率
swd=cwt(sig_wav,Scales,'cmor4-2');
abs_swd=abs(swd);
%小波分解图像
mesh(t,RealFreqBins,abs_swd);
colormap jet;
shading interp;
colorbar;
axis([min(t) max(t) min(RealFreqBins) max(RealFreqBins)]);
ylabel('Frequency/Hz');
xlabel('Time/sec');
%% 利用模极大值方法提取小波脊线
[a1,rind1]=max(abs_swd(69:82,:));
[a2,rind2]=max(abs_swd(211:238,:));
[a3,rind3]=max(abs_swd(340:381,:));
B=[rind1;rind2;rind3];
startRidge=[68,210,339];
for i=1:3
ind(i,:)=B(i,:)+startRidge(i);
end
for i=1:3
for j=1:length(ind)
% wave(i,j)=abs_swd(ind(i,j),j);
fLn(i,j)=swd(ind(i,j),j);
end
end
deltRealFreq=RealFreqBins(2)-RealFreqBins(1);
figure(2)
for i=1:3
c=deltRealFreq*ind(i,:)+fmin*fs;
plot(t,c);
ylim([0,10]);
hold on
end
title('小波脊线')
sig_omega=[];
sig_k=[];
for i=1:3
omega=angle(fLn(i,:));
sig_omega=[sig_omega;omega];
ki=-log(abs(fLn(i,:)));
sig_k=[sig_k;ki];
end
K=[];
OMEGA=[];
try
inpn=0;
while(inpn~=1)
ch=input('请输入所想查看的模态阶数:');
figure;
subplot(2,1,1)
p=polyfit(t,sig_omega(ch,:),1);
Y=polyval(p,t);
plot(t,sig_omega(ch,:),':',t,Y);
xlabel('t/s');
ylabel('小波变换的幅角');
ylim([-20 20])
legend('原始','拟合')
[x1,y1]=ginput(2);
z=(y1(2)-y1(1))/(x1(2)-x1(1));
OMEGA=[OMEGA,z];
subplot(2,1,2)
q=polyfit(t,sig_k(ch,:),1);
Z=polyval(q,t);
plot(t,sig_k(ch,:),':',t,Z)
xlabel('t/s');
ylabel('小波变换模的对数');
legend('原始','拟合')
[x2,y2]=ginput(2);
p=(y2(2)-y2(1))/(x2(2)-x2(1));
K=[K,p];
choice = questdlg('需要继续查看其余模态吗?','', 'Yes','No,Exit','No,Exit');
switch choice
case 'Yes'
inpn=0;
case 'No,Exit'
inpn=1;
end
end
end
PL=[];
ZNB=[];
for i=1:length(K)
PL(i)=(K(i).^2+OMEGA(i).^2).^0.5/2/pi;
ZNB(i)=K(i)/(K(i).^2+OMEGA(i).^2).^0.5;
end