基於Matlab的離散小波變換

簡介
在數字圖像處理中,需要將連續的小波及其小波變換離散化。一般計算機實現中使用二進制離散處理,將經過這種離散化的小波及其相應的小波變換成爲離散小波變換(簡稱DWT)。實際上,離散小波變換是對連續小波變換的尺度、位移按照2的冪次進行離散化得到的,所以也稱之爲二進制小波變換。

雖然經典的傅里葉變換可以反映出信號的整體內涵,但表現形式往往不夠直觀,並且噪聲會使得信號頻譜複雜化。在信號處理領域一直都是使用一族帶通濾波器將信號分解爲不同頻率分量,即將信號f(x)送到帶通濾波器族Hi(x)中。

小波分解的意義就在於能夠在不同尺度上對信號進行分解,而且對不同尺度的選擇可以根據不同的目標來確定。

對於許多信號,低頻成分相當重要,它常常蘊含着信號的特徵,而高頻成分則給出信號的細節或差別。人的話音如果去掉高頻成分,聽起來與以前可能不同,但仍能知道所說的內容;如果去掉足夠的低頻成分,則聽到的是一些沒有意義的聲音。在小波分析中經常用到近似與細節。近似表示信號的高尺度,即低頻信息;細節表示信號的低尺度,即高頻信息。因此,原始信號通過兩個相互濾波器產生兩個信號。

通過不斷的分解過程,將近似信號連續分解,就可以將信號分解成許多低分辨率成分。理論上分解可以無限制的進行下去,但事實上,分解可以進行到細節(高頻)只包含單個樣本爲止。因此,在實際應用中,一般依據信號的特徵或者合適的標準來選擇適當的分解層數。

實例

% By lyqmath
% DLUT School of Mathematical Sciences 2008
% BLOG:http://blog.sina.com.cn/lyqmath
clc; clear all; close all;
load leleccum; % 載入信號數據
s = leleccum;
Len = length(s);
[ca1, cd1] = dwt(s, 'db1'); % 採用db1小波基分解
a1 = upcoef('a', ca1, 'db1', 1, Len); % 從係數得到近似信號
d1 = upcoef('d', cd1, 'db1', 1, Len); % 從係數得到細節信號
s1 = a1+d1; % 重構信號
figure;
subplot(2, 2, 1); plot(s); title('初始電源信號');
subplot(2, 2, 2); plot(ca1); title('一層小波分解的低頻信息');
subplot(2, 2, 3); plot(cd1); title('一層小波分解的高頻信息');
subplot(2, 2, 4); plot(s1, 'r-'); title('一層小波分解的重構信號');

結果

基於Matlab的離散小波變換

總結

小波分解可以使人們在任意尺度觀察信號,只需所採用的小波函數的尺度合適。小波分解將信號分解爲近似分量和細節分量,它們在應用中分別有不同的特點。比如,對含有噪聲的信號,噪聲分量的主要能量集中在小波分解的細節分量中,對細節分量做進一步處理,比如閾值處理,可以過濾噪聲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章