楼主的程序我试了下,有问题,得到的系数虚部为0了!
下面是我用的测试程序:
clc;clear all;close all;format long;
Fs=100*10^3; %采样率
dt=1/Fs; %采样时间周期
f0=4*10^3; %信号载频
t=0:dt:dt*1000; %时间
g=1.333-cos(0.2*2*pi*f0*t+(pi/2));
y1=g.*sin(2*pi*f0*t); %仿真信号
%方法一:利用mymorletcwt函数文件,尺度scale=1
fb=0.00001^2;
fc=f0;
temp1=mymorletcwt(y1,1,fc,fb);
figure(1);subplot(2,2,1);plot(t,temp1,'b');
%方法二:利用cmorwavf构建Morlet复值小波,尺度scale=1
scale=1;
fb=0.00001^2;
fc=f0;
lb=-8;ub=8;
t2=-8:1:8; %采样率取1
n=length(t2);
[psi,x]=cmorwavf(lb,ub,n,fb,fc); %生成一个Morlet复值小波,n+1个点
figure(2);subplot(211);plot(x,real(psi));title('Complex Morlet wavelet cmor');xlabel('Real part');grid on;
subplot(212);plot(x,imag(psi));xlabel('Imaginary part');grid on;
wcoef=conv(y1,fliplr(psi))/sqrt(scale); %计算信号与尺度1下小波函数的卷积
d=(length(wcoef)-length(y1))/2; %卷积计算所得结果的长度大于原信号,根据原信号的长度只提取中间部分的系数
first=1+floor(d); %区间的起点
temp2=wcoef(1,first:first+length(y1)-1);
figure(1);subplot(2,2,2);plot(t,temp2);
%方法三:利用matlab小波工具箱中的cwt命令,小波基函数取cmor1-1,fb=1,fc=1
fb=1;
fc=1;
sca=fc/f0/dt; %尺度
temp3=abs(cwt(y1,sca,'cmor1-1'))*2/sqrt(sca);
subplot(2,2,4);plot(t,g,'g',t,temp3,'b');
|