【转载】

Matlab 小波分析工具箱使用教程系列(二)

小波函数调用说明。

1.        biorfilt函数

%计算与bior3.5相关的分解滤波器和重构滤波器
[Rf,Df] = biorwavf('bior3.5');
% 计算需要的4个滤波器
[Lo_D,Hi_D,Lo_R,Hi_R] = biorfilt(Df,Rf); 
subplot(221); stem(Lo_D); 
title('bior3.5分解低通滤波器'); 
subplot(222); stem(Hi_D); 
title('bior3.5分解高通滤波器'); 
subplot(223); stem(Lo_R); 
title('bior3.5重构低通滤波器'); 
subplot(224); stem(Hi_R); 
title('bior3.5重构高通滤波器');

2.        biorwavf函数

%设置双正交样条小波
wname = 'bior2.2'; 
% 计算两个相关的尺度滤波器rf和df
[rf,rd] = biorwavf(wname);

3.        centfrq函数

%实小波 
wname = 'db2';
% 计算中心频率并且显示小波函数和近似的关联中心频率
iter = 4;
[cfreq,XVAL,RECFREQ] = centfrq(wname,4,'plot');

4.        centfrq函数

%复小波
wname = 'cgau6';
% 计算中心频率并且显示小波函数和近似的关联中心频率
[cfreq,XVAL,RECFREQ] = centfrq(wname,8,'plot');

5.        gauswavf函数

%设置有效支撑和网格参数
lb = -5; ub = 5; n = 1000;
% 计算8阶高斯小波
[psi,x] = gauswavf(lb,ub,n,8);
% 画出8阶高斯小波
plot(x,psi);
title('8阶高斯小波'), grid;

6.        fbspwavf函数

%设置阶次,带宽,中心频率等参数
m = 2; fb = 1; fc = 0.5;
% 设置有效支撑和网格参数
lb = -20; ub = 20; n = 1000;
% 计算复频率B样条小波fbsp2-0.5-1
[psi,x] = fbspwavf(lb,ub,n,m,fb,fc);
% 画出复频率B样条小波
subplot(211);
plot(x,real(psi));
title('复频率B样条小波fbsp2-0.5-1');
xlabel('实部'), grid;
subplot(212);
plot(x,imag(psi));
xlabel('虚部'), grid;

7.        dbwavf函数

%设置Daubechies 小波名
wname = 'db4'; 
% 计算相关的尺度滤波器
f = dbwavf(wname);

8.        coifwavf函数

%设置coiflet小波名
wname = 'coif2'; 
% 计算相关的尺度滤波器
f = coifwavf(wname);

9.        cmorwavf函数

%定义带宽和中心频率
fb = 1.5; fc = 1;
% 设置有效支撑和网格
lb = -8; ub = 8; n = 1000;
% 计算复Morlet小波cmor1.5-1
[psi,x] = cmorwavf(lb,ub,n,fb,fc);
% 画出复Morlet小波
subplot(211);
plot(x,real(psi));
title('复Morlet小波cmor1.5-1');
xlabel('实部'), grid;
subplot(212);
plot(x,imag(psi));
xlabel('虚部'), grid;

10.    cgauwavf函数

%设置有效支撑和网格参数
lb = -5; ub = 5; n = 1000;
% 计算4阶复Gaussian小波
[psi,x] = cgauwavf(lb,ub,n,4);
% 画出4阶复Gaussian小波
subplot(211);
plot(x,real(psi)),;
title('4阶复Gaussian小波');
xlabel('实部'), grid;
subplot(212);
plot(x,imag(psi));
xlabel('虚部'), grid;

11.   scal2frq函数

%设置小波函数、时间间隔和采样点数
wname = 'db10';
A = -64; B = 64; P = 224;
% 计算采样周期和采样函数及真实频率
delta = (B-A)/(P-1);
t = linspace(A,B,P);
omega = 5; x = cos(omega*t);
freq  = omega/(2*pi);
% 设置尺度并且使用scal2frq函数来计算准周期数列
scales = [0.25:0.25:3.75];
TAB_PF = scal2frq(scales,wname,delta);
% 计算最近似的准周期和相应的尺度
[dummy,ind] = min(abs(TAB_PF-freq));
freq_APP  = TAB_PF(ind);
scale_APP = scales(ind);
% 进行连续分解并绘图
str1 = ['224 samples of x = cos(5t) on [-64,64] - 真实频率= 5/(2*pi) =~ ' num2str(freq,3)];
str2 = ['准周期数组和尺度: '];
str3 = [num2str([TAB_PF',scales'],3)];
str4 = ['准频率= ' num2str(freq_APP,3)];
str5 = ['对应尺度= ' num2str(scale_APP,3)];
figure; cwt(x,scales,wname,'plot'); 
ax = gca; colorbar;
axTITL = get(ax,'title');
axXLAB = get(ax,'xlabel');
set(axTITL,'String',str1)
set(axXLAB,'String',[str4,'  -  ' str5]);
clc ; 
disp(strvcat(' ',str1,' ',str2,str3,' ',str4,str5));

12.    shanwavf函数

%设置带宽和中心频率
fb = 1; fc = 1.5;
% 设置有效支撑和网格参数
lb = -20; ub = 20; n = 1000;         
% 计算复Shannon小波shan1.5-1.
[psi,x] = shanwavf(lb,ub,n,fb,fc);
% 画出复Shannon小波
subplot(211);
plot(x,real(psi));
title('复Shannon小波shan1.5-1');
xlabel('实部'), grid;
subplot(212);
plot(x,imag(psi));
xlabel('虚部'), grid;

13.    wavefun函数

%设置小波名称和计算次数
iter = 10;
wav = 'sym4';
% 用迭代算法计算小波函数的近似值
for i = 1:iter 
    [phi,psi,xval] = wavefun(wav,i); 
    plot(xval,psi); 
    hold on 
end
title('小波函数sym4的近似值(iter从1到10)'); 
hold off;

14.    wfilters函数

%设置小波名称
wname = 'db5';
% 计算该小波的4个滤波器
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters(wname); 
subplot(221); stem(Lo_D); 
title('分解低通滤波器'); 
subplot(222); stem(Hi_D); 
title('分解高通滤波器'); 
subplot(223); stem(Lo_R); 
title('重构低通滤波器'); 
subplot(224); stem(Hi_R); 
title('重构高通滤波器'); 
xlabel('db5的四个滤波器')

15.    wavefun2函数

%设置小波函数和迭代次数
iter = 4;
wav = 'sym4';
% 采用迭代算法计算小波函数和尺度函数的近似值并画图
[s,w1,w2,w3,xyval] = wavefun2(wav,iter,0);

16.    rbiowavf函数

%设置反双正交样条滤波器
wname = 'rbio2.2';    
% 计算两个相关滤波器:rf是重构尺度滤波器,df是分解尺度滤波器
[rf,df] = rbiowavf(wname);

17.    qmf函数

%装载正交小波相关的尺度滤波器
load db10; 
subplot(321); stem(db10); title('db10 低通滤波器');
% 计算二次镜像滤波器
qmfdb10 = qmf(db10); 
subplot(322); stem(qmfdb10); title('QMF db10 滤波器');
% 检查频率条件(对于正交很有必要),对于每个频率点:
% abs(fft(filter))^2 + abs(fft(qmf(filter))^2 = 1
m = fft(db10); 
mt = fft(qmfdb10); 
freq = [1:length(db10)]/length(db10); 
subplot(323); plot(freq,abs(m)); 
title('db10转换模量');
subplot(324); plot(freq,abs(mt)); 
title('QMF db10的转换模量');
subplot(325); plot(freq,abs(m).^2 + abs(mt).^2); 
title('检查db10 and QMF db10的QMF条件') ;
xlabel(' abs(fft(db10))^2 + abs(fft(qmf(db10))^2 = 1');

18.    orthfilt函数

%装载尺度滤波器
load db8; w = db8; 
subplot(421); stem(w); 
title('原始尺度滤波器');
% 计算4个滤波器
[Lo_D,Hi_D,Lo_R,Hi_R] = orthfilt(w); 
subplot(423); stem(Lo_D); 
title('分解低通滤波器'); 
subplot(424); stem(Hi_D); 
title('分解高通滤波器'); 
subplot(425); stem(Lo_R); 
title('重构低通滤波器'); 
subplot(426); stem(Hi_R); 
title('重构高通滤波器');
% 检验正交性
df = [Lo_D;Hi_D];
rf = [Lo_R;Hi_R];
id = df*df';
id = rf*rf';
% 检验二元转换后的正交性
df = [Lo_D 0 0;Hi_D 0 0]; 
dft = [0 0 Lo_D; 0 0 Hi_D]; 
zer = df*dft';
% 高频和低频解释
fftld = fft(Lo_D); ffthd = fft(Hi_D); 
freq = [1:length(Lo_D)]/length(Lo_D); 
subplot(427); plot(freq,abs(fftld)); 
title('转换模量:低通');
subplot(428); plot(freq,abs(ffthd)); 
title('转换模量:高通');

19.    morlet函数

%设置有效支撑和网格参数
lb = -4; ub = 4; n = 1000; 
% 计算并画出Morlet 小波
[psi,x] = morlet(lb,ub,n); 
plot(x,psi), title('Morlet小波');

20.    meyer函数

%设置有效支撑和网格参数
lb = -8; ub = 8; n = 1024; 
% 计算并画出Meyer小波和尺度函数
[phi,psi,x] = meyer(lb,ub,n); 
subplot(211), plot(x,psi) ;
title('Meyer 小波') ;
subplot(212), plot(x,phi) ;
title('Meyer 尺度函数');

21.    mexihat函数

%设置有效支撑和网格参数
lb = -5; ub = 5; n = 1000; 
% 计算并画出 Mexican hat小波
[psi,x] = mexihat(lb,ub,n); 
plot(x,psi);
title('Mexican hat 小波');

22.    intwave函数

%指定小波类型
wname = 'db4';
% 画出小波函数
[phi,psi,xval] = wavefun(wname,7);
subplot(211); plot(xval,psi); title('db4小波'); 
% 计算并画出小波积分的近似值
[integ,xval] = intwave(wname,7); 
subplot(212); plot(xval,integ); 
title(['小波在区间[-Inf xval]上的积分']);
posted @ 2018-03-26 21:15  天黑,请关灯  阅读(577)  评论(0编辑  收藏  举报