小波滤波器与其他滤波器的区别_小波变换(六):小波变换在机器学习中的应用(上)...
本文講解一篇關于小波變換在機器學習中的應用的博客:《A guide for using the Wavelet Transform in Machine Learning》,極力推薦!!目錄如下:
鏈接:http://ataspinar.com/2018/12/21/a-guide-for-using-the-wavelet-transform-in-machine-learning/1、引言信號處理技術(比如傅里葉變換、小波變換等)可以用在時間序列分類的任務中。傅里葉變換可以將一個信號從時域變換到頻域,頻譜中的峰值對應著信號中最常出現的頻率。在頻譜中,峰值的位置(頻率值)和高度(幅度值)可以作為分類器的輸入。
傅里葉變換在很多分類問題中都表現得很好。通常情況下,只有當頻譜是靜態的時候,使用傅里葉變換才可行。信號越是非靜態,傅里葉變換產生的結果就越差。然而,大多數實際問題中的信號都是非靜態的,用于分析非靜態信號的一種更好的方法是小波變換。
在這篇博客中,我們會稍微涉及一些小波變換的理論,以及如何將其應用在實際問題中,并且每一步都提供了相應的代碼以方便理解。
2.1?從傅里葉變換到小波變換傅里葉變換的工作原理是:將信號與一系列不同頻率的sin波函數相乘,再進行積分。傅里葉變換在頻域上有較高的分辨率,在時域上的分辨率為0。也就是說,傅里葉變換能夠清楚地告訴我們信號中存在什么樣的頻率,但是不知道這些頻率發生在什么時刻。
兩個信號的頻譜一致,但是在時域上卻不大不相同。傅里葉變換不能告訴我們關于頻率發生的時刻。
為了解決傅里葉變換在處理非靜態信號時的問題,短時傅里葉變換被提出來。短時傅里葉利用滑動窗口將信號等分成相同長度的區間(可以有重疊的區域),然后分別對這些區間進行傅里葉變換。但是,短時傅里葉變換存在分辨率的問題:若區間長度較小,則很容易知道頻率發生在什么時刻,但是頻率的信息則較少;如果區間長度較大,則很容易知道信號中存在什么樣的頻率,但是對于頻率發生的時刻則較為模糊。
一種更好的方法便是小波變換。小波變換在頻域和時域都具有較高的分辨率,不僅能告訴我們信號中存在什么樣的頻率,也能告訴我們這些頻率發生在哪些時刻。
上圖給出了四種方法的時域和頻域的分辨率。原始時間序列的時間分辨率較好,但是頻率分辨率為0;傅里葉變換的時間分辨率為0,但是頻率分辨率較好;短時傅里葉變換的時間分辨率和頻率分辨率都是固定不變的;小波變換在低頻區域有較好的頻率分辨率,但是時間分辨率較差,而在高頻區域有較好的時間分辨率,但是頻率分辨率較差。In other words, the Wavelet Transforms makes a trade-off; at?scales?in?which?time-dependent?features?are?interesting, it?has?a?high?resolution?in?the?time-domain?andat?scales?in?which?frequency-dependent?features?are?interesting,?it?has?a?high?resolution?in?the?frequency?domain.2.2?小波變換的工作原理傅里葉變換使用一系列不同頻率的sin波函數來分析信號。也就是說,信號可以表達成sin波函數的線性組合。小波變換用的是一系列的小波函數,每個小波函數都有不同的尺度因子。sin波函數與小波函數的主要區別在于:sin波函數不能在時間軸上定位(因為它是從負無窮一直到正無窮),但是小波變換卻可以在時間上定位,這就使得小波變換既可以提供時域上的信息,也可以提供頻域上的信息。由于小波函數可以在時間軸上定位,我們可以將信號與不同時間軸位置上的小波函數相乘。該過程從信號開始,并緩慢移動到信號結束【是一種卷積操作】。然后,我們可以改變小波函數的尺度因子,重復上述過程。1維信號的小波變換有兩個維度,也就是時間-尺度圖。傅里葉變換中常用頻率的概念,而小波變換中常用尺度的概念。兩者之間成反比關系。2.3?不同類型的小波傅里葉變換與小波變換的另一個區別在于小波變換有許多類型的小波函數。不同類型的小波函數的形狀不一樣,因此我們可以選擇與我們想在信號中尋找的特征最匹配的那個小波函數。
PyWavelets函數庫包含了14種母小波函數。
import pywtprint(pywt.families(short=False))['Haar', 'Daubechies', 'Symlets', 'Coiflets', 'Biorthogonal', 'Reverse biorthogonal', 'Discrete Meyer (FIR Approximation)', 'Gaussian', 'Mexican hat wavelet', 'Morlet wavelet', 'Complex Gaussian wavelets', 'Shannon wavelets', 'Frequency B-Spline wavelets', 'Complex Morlet wavelets'小波函數只需要滿足兩個數學條件,因此很容易找到符合條件的小波函數:1)有限能量;2)零均值。每一種類型的小波函數還可能含有子類,通過消失矩的個數以及降解的層次加以區分。
2.4?連續小波變換和離散小波變換小波變換有兩種形式:連續小波變換和離散小波變換。
從數學上說,連續小波變換有如下形式:
其中,是連續小波函數,由尺度因子a和平移量因子b刻畫。連續小波變換中的尺度因子和平移量因子是連續的,因此它們是無限取值的,可以是1.3、1.31、1.311、1.3111等。離散小波變換的最主要的區別在于:離散小波變換使用離散的尺度因子和平移量因子。尺度因子是以2為底的指數:2、4、8...,而平移量因子是整數增長的:1、2、3...。
注:離散小波變換只是在尺度因子和平移量因子上是離散的,而不是在時域上離散的。為了處理數字和離散信號,我們也需要將小波變換在時域上進行離散,也就是離散時間小波變換和離散時間連續小波變換。
2.5 離散小波變換:將離散小波變換作為一個濾波器組事實上,離散小波變化總是通過一個濾波器組實現,也就是說它是通過一連串的高通和低通濾波器實現的,因為濾波器組可以將一個信號分解為幾個頻率帶。
為了應用離散小波變換,我們首先從最小的尺度因子開始。最小的尺度因子也就對應著最高的頻率。也就是說,我們首先分析高頻成分。然后,將尺度因子增加兩倍(頻率減少一半),這時我們分析的就是一半最高頻的成分。這個過程一直持續,直至達到了最大的降解層次。
在每一層降解后,信號中的樣本點個數會減少一半(通過下采樣實現),因為既然信號中的頻率成分減半了,根據奈奎斯特采樣定律,也就不需要那么多的樣本點來表示原始信號。
下面給出一個例子,假設信號中的頻率最高為1000Hz。
In?the?first?stage?we?split?our?signal?into?a?low-frequency?part?and?a?high-frequency?part,?i.e.?0-500?Hz?and?500-1000?Hz.At?the?second?stage?we?take?the?low-frequency?part?and?again?split?it?into?two?parts:?0-250?Hz?and?250-500?Hz.At?the?third?stage?we?split?the?0-250?Hz?part?into?a?0-125?Hz?part?and?a?125-250?Hz?part.This goes on until we have reached the level of refinement we need or until we run out of samples.可以將上述過程可視化,以一個chirp信號為例(頻率隨時間變化,一開始頻率最低,結束時頻率最高)。
import pywt x = np.linspace(0, 1, num=2048)chirp_signal = np.sin(250 * np.pi * x**2) fig, ax = plt.subplots(figsize=(6,1))ax.set_title("Original Chirp Signal: ")ax.plot(chirp_signal)plt.show() data = chirp_signalwaveletname = 'sym5' fig, axarr = plt.subplots(nrows=5, ncols=2, figsize=(6,6))for ii in range(5):????//?返回兩組系數,其中data表示近似系數,coeff_d表示細節系數。 (data, coeff_d) = pywt.dwt(data, waveletname) axarr[ii, 0].plot(data, 'r') axarr[ii, 1].plot(coeff_d, 'g') axarr[ii, 0].set_ylabel("Level {}".format(ii + 1), fontsize=14, rotation=90) axarr[ii, 0].set_yticklabels([]) if ii == 0: axarr[ii, 0].set_title("Approximation coefficients", fontsize=14) axarr[ii, 1].set_title("Detail coefficients", fontsize=14) axarr[ii, 1].set_yticklabels([])plt.tight_layout()plt.show()近似系數代表了低通濾波器的輸出,細節系數代表了高通濾波器的輸出。每一層分解由濾波操作+下采樣操作組成(信號的長度在每一層都會減半),每一層的信號都處在不同的頻率帶中(多尺度分析/子帶編碼)。
未完待續。。。
總結
以上是生活随笔為你收集整理的小波滤波器与其他滤波器的区别_小波变换(六):小波变换在机器学习中的应用(上)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ma5626如何进入web配置_如何给D
- 下一篇: 线程可以kill吗_我是一个线程(转)