实验一:连续小波变换
实验目的:
通过编程更好地理解连续小波变换,从而对连续小波变换增加了理性和感性的认识,并能提高编程能力!通过连续小波变换了解信号中的频率分量。
实验原理:
一维连续小波变换公式:
12Wf(a,b)atbft*dta
当小波函数(t)为实函数时
12
Wf(a,b)Wf(a,b)atbftdta
在给定尺度下,对待分析信号ft和小波函数(t)按照tnTs,bnTs进行采样,其中
Ts为采样间隔,则小波变换可近似如下:
Wf(a,b)Tsa12(nk)TsfnTsan
nkfna
=
Ta12n
对给定的a值,依次求出不同a值下的一组小波系数,由于数据采样间隔t为0.03(常量),所以可以把这个系数忽略,并通过公式下面对小波变换矩阵进行归一化处理。
wfab(m,n)min*255maxmin
I(m,n)、
实验结果:
程序附录:
(1)墨西哥小波函数
function Y=mexh0(x)
if abs(x)<=5
Y=((pi^(-1/4))*(2/sqrt(3)))*(1-x*x)*exp(-(x*x)/2);
else
Y=0;
end;
(2)实验程序
load('data.mat');
n=length(dat);
amax=70; % 尺度a的长度
a=zeros(1,amax);
wfab=zeros(amax,n); %小波系数矩阵
mexhab=zeros(1,n); % ,某尺度下小波系数
for s=1:amax %s 表示尺度
for k=1:n
mexhab(k)=mexh0(k/s);
end
for t=1:n % t 表示位移
wfab(s,t)=(sum(mexhab.*dat))/sqrt(s); %将积分用求和代替
mexhab=[mexh0(-1*t/s),mexhab(1:n-1)]; %mexhab 修改第一项并右移
end
end
wfab_abs=abs(wfab);
for index=1:amax
max_coef=max(wfab_abs(index,:));
min_coef=min(wfab_abs(index,:));
ext=max_coef-min_coef;
wfab_abs(index,:)=255*(wfab_abs(index,:)-min_coef)/ext;
end
figure(1);
plot(dat);
title('原始数据图');
xlabel('时间')
ylabel('幅度')
figure(2);
image(wfab_abs);
colormap(pink(255));
title('连续小波变换系数图');
xlabel('时间')
ylabel('尺度')
因篇幅问题不能全部显示,请点此查看更多更全内容