Matlab系列之小波分析基础
Matlab系列之小波分析基礎(chǔ)
- 前言
- 介紹
- 1、waveinfo函數(shù)
- 2、wfilters函數(shù)
- 應(yīng)用實例
- 運行結(jié)果
- 3、dwt函數(shù)
- 應(yīng)用實例
- 運行結(jié)果
- 4、wavedec
- 應(yīng)用實例
- 運行結(jié)果
- 5、wrcoef
- 應(yīng)用實例
- 運行結(jié)果
- 結(jié)語
- 更多精彩,等你發(fā)現(xiàn)~
前言
原本想把MATLAB里關(guān)于概率論的相關(guān)進行記錄,不過概率論學(xué)得不好,感覺在該部分的表達上還存在很大不足,就放棄了相關(guān)的篇章,直接開始了本篇,本篇主要是記錄小波分析的一些東西,小波分析的原理就不細說了,所以還是老樣子,主要介紹小波分析在MATLAB中的相關(guān)知識,不足之處請指出。
介紹
小波分析是數(shù)學(xué)分析方法里的一種,主要應(yīng)用于信號處理、圖像處理、語音分析以及其他的非線性科學(xué)領(lǐng)域,它被認為是繼Fourier分析之后的又一有效的時頻分析方法。小波變換與Fourier變換相比,是一個時間和頻域的局域變換因而能有效地從信號中提取信息,通過伸縮和平移等運算功能對函數(shù)或信號進行多尺度細化分析(Multiscale Analysis),解決了Fourier變換不能解決的許多困難問題。
MATLAB提供了小波分析工具箱,在主界面的命令窗口輸入:wavemenu,就可以打開工具箱,如下所示。
常用的就是小波基函數(shù)、連續(xù)小波變換及其應(yīng)用、離散小波變換及其應(yīng)用、小波包變換、信號和圖像的多尺度分解、基于小波變換的信號去噪、信號壓縮,在上圖也可以找到與這些對應(yīng)的選項。常用的小波基函數(shù)如下表:
| morl | Morlet小波 |
| mexh | 墨西哥草帽小波 |
| meyr | Meyer小波 |
| haar | Haar小波 |
| dbN | 緊支集正交小波 |
| symN | 近似對稱的緊支集正交小波 |
| coifN | Coifmant小波 |
| biorNr.Nd | 雙正交樣條小波 |
以下記錄的是一些常用指令和語法使用,工具箱的操作就不弄了,自行根據(jù)指令進行對應(yīng)和補充即可。
1、waveinfo函數(shù)
note:information on wavelets.
該語法的功能是提供工具箱中所有小波的信息查詢,使用格式:waveinfo(‘wname’)
wname指代的小波有
'haar' : Haar wavelet. 'db' : Daubechies wavelets. 'sym' : Symlets. 'coif' : Coiflets. 'bior' : Biorthogonal wavelets. 'rbio' : Reverse biorthogonal wavelets. 'meyr' : Meyer wavelet. 'dmey' : Discrete Meyer wavelet. 'gaus' : Gaussian wavelets. 'mexh' : Mexican hat wavelet. 'morl' : Morlet wavelet. 'cgau' : Complex Gaussian wavelets. 'cmor' : Complex Morlet wavelets. 'shan' : Complex Shannon wavelets. 'fbsp' : Complex Frequency B-spline wavelets. 'fk' : Fejer-Korovkin orthogonal wavelets使用舉例:waveinfo(‘haar’)
結(jié)果:
查詢小波包的信息,則使用:waveinfo(‘wsys’)
2、wfilters函數(shù)
note:Wavelet filters.
這個函數(shù)有兩種用法,結(jié)果也不太相同;
第一種:[LO_D,HI_D,LO_R,HI_R] = wfilters(‘wname’)
計算正交小波或雙正交小波(wname)有關(guān)聯(lián)的四個濾波器,分別為:
LO_D,分解低通濾波器 HI_D,分解高通濾波器 LO_R,重構(gòu)低通濾波器 HI_R,重構(gòu)高通濾波器第二種:[F1,F2] = wfilters(‘wname’,‘type’)
直接通過‘type’來返回對應(yīng)的濾波器,對應(yīng)如下:
如果'type'='d',則為LO_D和HI_D(分解濾波器) 如果'type'='r',則為LO_R和HI_R(重構(gòu)濾波器) 如果'type'='l',則為LO_D和LO_R(低通濾波器) 如果'type'='h' 則為HI_D和HI_R(高通濾波器)應(yīng)用實例
clc; clear all; [LO_D,HI_D,LO_R,HI_R]=wfilters('db45');%多貝西小波 %stem產(chǎn)生離散序列的圖形,xlim限制x軸的長度,另外三個就是對圖形做描述 subplot(221);stem(LO_D);xlim([0 95]);title('分解低通濾波器'); xlabel('x');ylabel('y'); subplot(222);stem(HI_D);xlim([0 95]);title('分解高通濾波器'); xlabel('x');ylabel('y'); subplot(223);stem(LO_R);xlim([0 95]);title('重構(gòu)低通濾波器'); xlabel('x');ylabel('y'); subplot(224);stem(HI_R);xlim([0 95]);title('重構(gòu)高通濾波器'); xlabel('x');ylabel('y');運行結(jié)果
3、dwt函數(shù)
note:Single-level discrete 1-D wavelet transform.
該函數(shù)是通過指定小波‘wname’或者指定小波的分解濾波器LO_D和HI_D執(zhí)行單層一維小波分解。
使用方法:
[CA,CD] = dwt(X,'wname')或[CA,CD] = dwt(X,LO_D,HI_D)還有一種是指定模式計算小波分解
[cA,cD] = dwt(…,‘mode’,MODE)
該用法的舉例:[cA,cD] = dwt(x,‘db1’,‘mode’,‘sym’);
mode對應(yīng)值及其英語表述如下:
| 'sym' or 'symh' | Symmetric-padding (half-point): boundary value symmetric replication — default mode |
| 'symw' | Symmetric-padding (whole-point): boundary value symmetric replication |
| 'asym' or 'asymh' | Antisymmetric-padding (half-point): boundary value antisymmetric replication |
| 'asymw' | Antisymmetric-padding (whole-point): boundary value antisymmetric replication |
| 'zpd' | Zero-padding |
| 'spd' or 'sp1' | Smooth-padding of order 1 (first derivative interpolation at the edges) |
| 'sp0' | Smooth-padding of order 0 (constant extension at the edges) |
| 'ppd' | Periodic-padding (periodic extension at the edges) |
二維的類似,函數(shù)為dwt2,使用語法為:
[CA,CH,CV,CD] = dwt2(X,'wname')[CA,CH,CV,CD] = dwt2(X,Lo_D,Hi_D) [CA,CH,CV,CD] = dwt2(...,'mode',MODE)小波分解的逆過程就是小波重構(gòu),類似FFT和IFFT,很多時候傅里葉變換也被人拿來和小波變換作一些比對。
iwdt和iwdt2的使用語法分別如下所示:
%iwdt使用語法 X = idwt(CA,CD,'wname',L) X = idwt(CA,CD,LO_R,HI_R,L) X = idwt(...,'mode',MODE) %iwdt2使用語法 X = idwt2(CA,CH,CV,CD,'wname') X = idwt2(CA,CH,CV,CD,Lo_R,Hi_R) X = = idwt2(...,'mode',MODE)除了以上的語法以外,在這些基礎(chǔ)上還有一些擴展的語法,這些就留給“help”了。
應(yīng)用實例
clc; clear all; close all; n=randn(1,256); z=1.5*sin(1:256); s=n+z; [ca1,cd1]=dwt(s,'haar');%%等同于db1 subplot(311);plot(s,'b-');title('原始信號'); xlabel('x');ylabel('y'); subplot(323);plot(ca1,'b-');title('haar低頻系數(shù)1'); xlabel('x');ylabel('y'); subplot(324);plot(cd1,'b-');title('haar高頻系數(shù)1'); xlabel('x');ylabel('y'); %計算濾波器的相關(guān)值,再直接指定分解濾波器進行系數(shù)的計算 [LO_D,HI_D]=wfilters('haar','d'); [ca2,cd2]=dwt(s,LO_D,HI_D); subplot(325);plot(ca2,'b-');title('haar低頻系數(shù)2'); xlabel('x');ylabel('y'); subplot(326);plot(cd2,'b-');title('haar高頻系數(shù)2'); xlabel('x');ylabel('y');運行結(jié)果
4、wavedec
note:Multi-level 1-D wavelet decomposition.
該函數(shù)的功能依然是小波分解,只是其層級變多了,所以可以猜到其語法和dwt會有點相似,如下:
[C,L] = wavedec(X,N,'wname') [C,L] = wavedec(X,N,LO_D,HI_D),N必須是正整數(shù),其用意就是,返回信號X在N層的小波分解,C代表的是分解向量,L代表一個記錄向量。
應(yīng)用實例
%對音頻進行小波分解 clc; clear all; close all; %產(chǎn)生聲音文件 load handel.mat filename = 'dzkr_SoundTest.wav'; audiowrite(filename,y,Fs); clear y Fs %將生成的音頻導(dǎo)入 s=audioread('dzkr_SoundTest.wav');%舊版本可能用的是wavread(),需要自行比對下版本差別 n=length(s); figure; subplot(211);plot(4000:n,s(4000:n)); xlim([4000 6200]);ylim([-1 1]); xlabel('信號序列');ylabel('信號值'); title('原始聲音圖像'); [C,L]=wavedec(s(4000:n),2,'db2'); subplot(212);plot(C);xlim([0 2200]);ylim([-2 2]); title('小波分解結(jié)構(gòu)'); xlabel('低頻系數(shù) and 第二層及第一層高頻的信號序列');ylabel('信號值');運行結(jié)果
wavedec也有二維的形式,即wavedec2,語法如下:
[C,S] = wavedec2(X,N,'wname') [C,S] = wavedec2(X,N,LO_D,HI_D)其中S則變成了記錄矩陣,C依然還是分解向量,其他的參數(shù)與以上的一致。
很理所當(dāng)然的就可以想到逆過程了,不過可不再是加個i了,其逆過程變成了waverec,二維則是waverec2,兩者的語法分別為:
%waverec X = waverec(C,L,'wname') X = waverec(C,L,LO_R,HI_R) %waverec2 X = waverec2(C,S,'wname') X = waverec2(C,S,LO_R,HI_R)5、wrcoef
這個函數(shù)也是重構(gòu)的功能,和waverec有點類似,用法如下:
X = wrcoef('type',C,L,'wname',N) X = wrcoef('type',C,L,LO_R,HI_R,N) X = wrcoef('type',C,L,'wname') X = wrcoef('type',C,L,LO_R,HI_R)參數(shù)上和waverec的也基本一致,不過多了一個‘type’,而且N
有N的就是相當(dāng)于進行N層重構(gòu),且N的值和‘type’有關(guān)系,type可取低頻‘a(chǎn)’或高頻’d’,取低頻‘a(chǎn)’的時候,N最小可以為0;兩種類型下N的值都得滿足于:N <= length(L)-2,若沒有指定N,則默認在N = length(L)-2進行重構(gòu)。
應(yīng)用實例
clc; clear all; close all; N=1000; t=1:N; %產(chǎn)生信號 sig1=sin(0.3*t);%正弦波 %三角波 sig2(1:500)=((1:N/2)-1)/500; sig2(501:N)=(N-((N/2+1):1000))/500; sig=sig1+sig2;%疊加信號 [C,L]=wavedec(sig,2,'db6');%進行小波分解 a1=wrcoef('a',C,L,'db6',1);%重構(gòu)第1層逼近系數(shù) a2=wrcoef('a',C,L,'db6',2);%重構(gòu)第2層逼近系數(shù) d1=wrcoef('d',C,L,'db6',1);%重構(gòu)第1層細節(jié)系數(shù) d2=wrcoef('d',C,L,'db6',2);%重構(gòu)第2層細節(jié)系數(shù) subplot(511);plot(sig);xlabel('信號序列');ylabel('原始信號'); subplot(512);plot(a1);xlabel('信號序列');ylabel('a1'); subplot(513);plot(a2);xlabel('信號序列');ylabel('a2'); subplot(514);plot(d1);xlabel('信號序列');ylabel('d1'); subplot(515);plot(d2);xlabel('信號序列');ylabel('d2');運行結(jié)果
結(jié)語
本篇暫告一段落,仔細看完的話,你會發(fā)現(xiàn)本篇介紹到的小波分析展示了其”選取濾波器“的功能,之后還會寫一篇用小波分析的知識做一些圖像處理,比如圖像去噪和圖像壓縮,音頻的話,本篇已經(jīng)略微涉及到了音頻信號簡單分解,深入了解就不折騰了,還是等該系列的下篇關(guān)于小波分析在圖像處理的部分應(yīng)用吧~
更多精彩,等你發(fā)現(xiàn)~
總結(jié)
以上是生活随笔為你收集整理的Matlab系列之小波分析基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vscode node 乱码 非中文乱码
- 下一篇: eclipse优化方案