分享最近自己用matlab编写的连续小波变换程序
本帖最后由 xinglong-liu 于 2010-8-19 19:56 编辑分享最近自己编写的一个连续小波变换程序,希望对大家有用。
close all
clear all;
clc;
dt=1e-2;
t=0:dt:4-dt;
s=sin(12*pi*t);
s(1:end/2) =s(1:end/2)+sin(8*pi*t(1:end/2));
s(end/2+1:end) =s(end/2+1:end)+sin(24*pi*t(end/2+1:end));
N0=length(t) %should be a even number
figure(2)
subplot(211)
plot(t,s)
fc=2;
fb=2;
T=8;
M0=T/dt;
wc=fc*2*pi;
fmax=20 %input the highest frequency
fmin=2 %input the lowest frequency
nscale=64*4; %input the scale number
amax=fc/fmin;
amin=fc/fmax;
amax=log2(amax);
amin=log2(amin);
scale=linspace(amin,amax,nscale)';
a=2.^scale;
freq=fc./a;
Mmax=floor(M0*max(a))
Mmax=(2^ceil(log2(2*Mmax+N0))-N0)/2
s=;
N=N0+2*Mmax
S=fft(s);
for m=1:length(a)
aa=a(m);
M=floor(M0*aa);
if ~mod(M,2)
M=M+1;
end
if M<64
disp('the scale is too small')
end
t1=[-(M-1)/2:1:(M-1)/2]*dt;
t1=t1/aa;
morlet=(pi*fb)^(-1/2)*exp(i*2*pi*fc*t1).*exp(-t1.^2/fb);
morlet_R=morlet(1:(M-1)/2);
morlet_L=morlet((M+1)/2:M);
morlet=;
MORLET=fft(morlet);
Coff=MORLET.*S;
cwt_morlet(m,:)=ifft(Coff);
end
cwt_coff=cwt_morlet(:,Mmax+1:Mmax+N0);
figure(2)
subplot(212)
set(gcf,'Color','w');
pcolor(t,freq,abs(cwt_coff).^2);
colormap jet;shading interp;
太感谢了,最近正研究这个 回复 xinglong-liu 的帖子
不错
非常不错,很有价值, 楼主,你的贡献很大啊,谢谢 刚踏进信号这方面的专业,哎,看着前辈们的成果,很是羡慕 受益了,谢谢楼主分享
受益了,谢谢楼主分享
有些关键步骤的物理意义还是不太懂,楼主可以在加些注释吗,{:{13}:} 非常不错 已复制保留,呵呵,慢慢学习。
页:
[1]