一 簡介
A guide for using the Wavelet Transform in Machine Learning
傅里葉變換是將一個信號從時域變換到頻域當中。頻譜中的峰值對應最佳頻率。該峰值越大越鋒銳,則說明該對應頻率在信號中的常見。頻域中,峰值發生的位置(頻率值)和高度(幅值),可以當做分類器(隨機森林、梯度推進)的輸入。
這種簡單的分析法,在很多分類問題中應用出奇的好。
傅里葉變換的一般適用原則是,頻率譜相當的穩定。即,該頻率的發生和時間軸沒有關系,如果一個信號包含一個頻率\(x \rm Hz\),則該頻率在該信號中的各個時段都有發生。
這個信號動態變化,或者不穩定時,該傅里葉變換法將會失效。一個更好的方法是使用小波變換替代傅里葉變換。
二 理論部分
2.1 從傅里葉變換到小波變換
傅里葉變換是將將信號與一系列不同頻率的正弦信號點乘。如果乘積值大,則說明,該頻率的信號包含在待測信號中。傅里葉變換在頻域有很高的分辨率但是在時域為零。這就意味着,傅里葉變換可以識別信號所含頻率,但是無法確定該頻率的在時域的位置。
點擊查看代碼
clear all
t_n = 1
N = 1000
T = t_n / N
f_s = 1/T
xa = linspace(0,t_n,N);
xb = linspace(0,t_n/4,N/4);
frequencies = [4 30 60 90]
ya = sin(2*pi*frequencies(1)*xa) + sin(2*pi*frequencies(2)*xa) ...
+ sin(2*pi*frequencies(3)*xa) + sin(2*pi*frequencies(4)*xa);
yb1 = sin(2*pi*frequencies(1)*xb);
yb2 = sin(2*pi*frequencies(2)*xb);
yb3 = sin(2*pi*frequencies(3)*xb);
yb4 = sin(2*pi*frequencies(4)*xb);
yb = [yb1,yb2,yb3,yb4];
fya = fft(ya);
fyb = fft(yb);
f_list = (0:length(fya)-1)*f_s/length(fya);
figure
subplot(2,2,1)
plot(xa,ya);
subplot(2,2,3)
plot(xa,yb)
subplot(2,2,2)
plot(f_list,abs(fya))
subplot(2,2,4)
plot(f_list,abs(fyb))

從上圖可以看出,傅里葉變換對動態頻域變換效果很差。為解決這個問題,科學家提出短時傅里葉變換。在短時傅里葉變換中,原始信號通過使用窗函數,被切割成等長度信號。通過不同時段的切割,得知不同信號頻率發生的時段。
根據不確定法則,窗函數越小,時域分辨率越高,頻域信號分辨率下降;反之亦然。
對於動態頻率變換信號,小波變換是一種更好的選擇。小波變換可以同時在時域和頻域獲得很好的分辨率。

小波變換:
- 低頻時,在頻域有高分辨率,時域低分辨率。
- 高頻時,在頻域有低分辨率,時域高分辨率。
換句話說,小波變換平衡時域頻域關系。
2.2 小波變換原理
傅里葉變換使用一系列不同頻率正弦波來分析一個信號。即,一個信號可以通過正弦信號的線性疊加來復現。小波變換使用一系列不同比例(scale)的小波。正弦波和小波的不同在於:正弦波在時間軸上無落點,小波是可以定位在時間軸上。這個特性讓小波變換可以同時獲得時域和頻域信息。
小波和原始信號從頭至尾的點乘過程,也稱之為卷積。通過對母波scale范圍改變,獲得不同的卷積結果。
小波變換將一維信號變成二維信號。這個二維信號是一個 time-scale 代表性量圖。scale是為了和傅里葉變換的的frequency做區分。如果覺得frequency比scale更加直觀,可以用下面的等效公式:
\(f_{a}=\frac{f_{c}}{a}\)
這里\(f_{a}\)是等效頻率,\(f_{c}\)是母波核心頻率,\(a\)是scale因子。\(a\)增大導致頻率降低,我們可以更加清楚的分辨小頻率的信息,即,頻域分辨率增加。
2.3 不同類型小波族
小波族之間的區分在於,它們要在緊致和平滑性之間做一個平衡。這意味着,我們可以選一個特定的小波簇,更好的適應我們的信號。
只要滿足兩個條件,就可以是小波:首先是標准化,其次是正交化。
一個小波必須1.有限能量。2.平均值為0.有限能量意味着小波和信號之間的積分是存在。均值為零,意味着時域和頻域都為零,這樣,小波變換和反變換都可以被計算。
另外:
小波可以正交,也可以不正交.orthogonal
小波可以雙正交,也可以不。bi-orthogonal
小波可以對稱,也可以不。symmetric
小波可以試試復數也可以是實數。如果小波是復數,則,實數部分表示幅值部分,虛數部分表示相位。
小波必須標准化,可以是的能量單元化。
dbN小波中,N表示消失矩的個數。因此db3有三個消失矩。消失矩的個數和逼近次數以及小波平滑性相關。如果一個小波有p個消失矩,這個小波可以線性逼近p-1次。
2.4 連續變換和離散變換
連續小波變換可以寫成:
\(X_{w}(a,b)=\frac{1}{|a|^{\frac{1}{2}}}\int_{-\infty}^{\infty}x(t)\psi (\frac{t-b}{a})dt\)
這里\(\psi(t)\)是連續變換的母波,母波可以通過\(a\)實現連續scale變換,通過\(b\)實現時移。這里兩個參數值都是連續變換\(a=1.3,1.31\)等。當變為離散變換\(a=1,2,4...\),\(b=1,2,3...\)只能為整數變化。
2.5離散變換:濾波池
實踐上,DWT通常作為一個濾波池。這意味着,DWT是一些低通和高通濾波器。這是因為,濾波池可以將一個信號高效的分為一些子頻率帶。
應用DWT時,從最小的scale出發,對應最高頻率。第二階段,scale下降兩倍\(2^{1}\).第三階段,下降四倍\(2^{2}\),一直分析到最大分解率為止。
什么是最大分解率。理解這個,我們必須知道,所有緊鄰的階段,都是采樣率都是下降至原來的二分之一。當為低分辨率時,你只需要一個小采樣來滿足奈奎斯特定律。因此,這里沒有必要一直保持原來的采樣率。
比如,我們要分別一個信號,最高頻率達到1000Hz,第一階段是,信號分為兩個部分:高頻部分,和低頻部分。0-500Hz,500-1000Hz。
第二階段,將上一階段低分辨率帶繼續分解:0-250,250-500
第三階段,0-125,125-250hz
... 一直進行到最低分辨要求或者沒有sample為止。
三 可視化
3.1 連續小波變換的可視化
3.2 使用連續小波變換和一個卷積神經網絡對信號分類
隨着小波變換將1D 信號轉換為2D 尺度函數圖,該圖包含時域和頻域信息。該信息可以用於區分不同信號。
對於一個信號中含有不同維度n,卷積后會有n個尺度圖。接下來問題是,如何將尺度圖輸入到CNN中。
- 將n個尺度圖,單獨輸入,最后將結果結合做一個分析。這個方式,將各個尺度之間的聯系忽略。
- 將n個維度原信號首位相連,形成一個新的尺度函數圖。這樣會導致在連接處,信號不連續,在尺度函數圖中,引入噪聲。該噪聲在連接處發生。
- 分別將n個維度原信號進行CWT,形成的n個尺度函數圖首位相連,形成一個整尺度函數圖,輸入到CNN中。這種問題依然會在連接處不連續,使得CNN輸入信號有噪聲。當然,如果CNN層數足夠,依然可以忽略因為引入噪聲導致的問題。
- 將形成的尺度函數圖首位相連,形成一個整尺度函數圖,通過n個CNN的channel來訓練。這意味着,與RGB圖類似,將會有n通道的kernel function與同一個尺度函數圖(CNN輸入)進行卷積。
3.5 使用離散小波變換來分類信號
3.5.1 離散小波分類原理
DWT將信號切割成不同頻率帶,根據需求盡可能的多分。如果不同類型的信號呈現不同的頻率特性,這些不同特點將會在一個頻率子頻帶中得以呈現。如果我們從這些子頻帶中提取特征,並且使用這些特征作為分類器(Random Forest, Gradient Boosting, Logistic Regression, etc) 的輸入,並應用這些特征對分類器進行訓練。

3.5.2 從子頻帶中提取特征
從子頻帶中提取的信號特征,總結如下
- Auto-regressive model coefficient values
- (Shannon) Entropy values; entropy values can be taken as a measure of complexity of the signal.
- Statistical features like:
- variance
- standard deviation
- mean
- median
- 25th percentile value
- 75th percentile value
- Root Mean Square value; square of the average of the squared amplitude values
- The mean of the derivative
- Zero crossing rate, i.e. the number of times a signal crosses y = 0
- Mean crossing rate, i.e. the number of times a signal crosses y = mean(y)
上面列舉出一些特征。如果一個信號被分解成\(m\)個不同的子頻帶,我們從每一個子頻帶中提取\(n\)個特征,這樣,每一個信號就會有\(m* n\)個特征。
3.5.3 使用上面特征和分類器,對信號進行分類。
使用CWT和分類器結合,整體步驟如下。
- 首先使用CWT將training set 分解為相應的子頻帶。
- 從子頻帶中提取相應的特征。
- 使用這些特征來訓練一個分類器。
- 使用訓練好的分類器,對testing set 做預測。
使用DWT對信號進行處理,返回一系列系數(coefficients)。對於每一個這樣的coefficients,即,每一個子頻帶,我們使用相應的方程,提取相應的特征。從這些不同子頻帶提取出來的特征,首位相連,因為它們屬於同一個信號。
如果信號有不同的維度,對每一個維度重復步驟1和2,然后,將所有這些維度得到的特征值首位相連,因為它們輸入同一個信號。
