matlab 平移不变小波变换,小波变换中小波基函数的伸缩因子跟平移因子怎么设置...

我把我编的程序贴一下,您看一下,哪里出错了?

%小波变换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

你可能感兴趣的:(matlab,平移不变小波变换)