【转载】
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]上的积分']);
|