Python?scipy利用快速傅里葉變換實現(xiàn)濾波
fft模塊簡介
scipy官網(wǎng)宣稱,fftpack模塊將不再更新,或許不久之后將被廢棄,也就是說fft將是唯一的傅里葉變換模塊。
Fourier變換極其逆變換在數(shù)學上的定義如下
下表整理出一部分與Fourier變換相關(guān)的函數(shù),其中FFT為快速Fourier變換(Fast Fourier Transform);DCT為離散余弦變換(Discrete Cosine Transform);DST為離散正弦變換(discrete sine transform),另外,函數(shù)的前綴和后綴有如下含義
- i表示逆變換;
- 2, n分別表示2維和n維
正變換 | 逆變換 | |
---|---|---|
通用 | fft, fft2, fftn | ifft, ifft2, ifftn |
實數(shù)域 | rfft, rfft2, rfftn | irfft, irfft2, irfftn |
厄米對稱 | hfft, hfft2, hfftn | ihfft, ihfft2, ihfftn |
離散余弦變換 | dct, dctn | idct, idctn |
離散正弦變換 | dst, dstn | idst, idstn |
漢克爾變換 | fht | ifht |
移動零頻 | fftshift | ifftshift |
DFT采樣頻率 | fftfreq | ifftfreq |
fft函數(shù)示例
在數(shù)值計算中,一切輸入輸出均為離散值,所以實際上用到的是離散Fourier變換,即DFT,其功能是將離散的采樣變換為一個離散的頻譜分布。
下面將手動創(chuàng)建一組采樣點,并添加一點噪聲,然后通過FFT獲取其頻域信息。
import numpy as np from scipy import fft PI = np.pi*2 fs = 60 #采樣頻率 T = 100 #采樣周期數(shù) N = fs*T #采樣點 t = np.linspace(0, T, N) noise = 2 * np.random.randn(*t.shape) s = 2 * np.sin(PI * t) + 3 * np.sin(22 * PI * t) + noise F = fft.fft(s) f = fft.fftfreq(N, 1.0/fs)
其中,t
為時間序列,s
為模擬的采樣點,F
是Fourier變換之后的結(jié)果。但由于fft
默認是在復數(shù)域上的,故而可以查看其實部、虛部、模和輻角的值。
下面對采樣點以及Fourier變換的結(jié)果進行繪制
import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(2,2,1) ax.plot(t, s) ax.set_title("t vs s") f_abs = np.abs(F) ax = fig.add_subplot(2,2,2) ax.plot(f, f_abs) ax.set_title("fs vs |F|") xlims = [[0,2], [21,23]] for i, xlim in enumerate(xlims): ax = fig.add_subplot(2,2,3+i) ax.stem(f, f_abs) ax.set_title("fs vs |F|") ax.set_xlim(xlim) plt.show()
結(jié)果為
即f=1和f=22處被篩選了出來。
濾波
有了這個,就可以在頻域上對數(shù)據(jù)進行濾波,其思路是,對f_abs
中的值進行閾值分割,例如,只篩選出低頻部分,然后看一下濾波效果
fig = plt.figure(1) f_filt = F * (np.abs(f) < 2) s_filt = fft.ifft(f_filt) ax = fig.add_subplot() ax.plot(t, s, lw=0.2) ax.plot(t, s_filt.real, lw=2) ax.set_title("threshold=2") ax.set_xlim([0,10]) plt.show()
效果如下
到此這篇關(guān)于Python scipy利用快速傅里葉變換實現(xiàn)濾波的文章就介紹到這了,更多相關(guān)Python scipy實現(xiàn)濾波內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實現(xiàn)指定數(shù)組下標值正序與倒序排序算法功能舉例
在程序中,經(jīng)常需要按數(shù)組倒序或反序重新排列數(shù)組,下面這篇文章主要給大家介紹了關(guān)于Python實現(xiàn)指定數(shù)組下標值正序與倒序排序算法功能的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-02-02flask框架配置mysql數(shù)據(jù)庫操作詳解
這篇文章主要介紹了flask框架配置mysql數(shù)據(jù)庫操作,結(jié)合實例形式詳細分析了flask框架配置mysql數(shù)據(jù)庫及連接訪問等相關(guān)操作技巧,需要的朋友可以參考下2019-11-11Python 關(guān)于模塊和加載模塊的實現(xiàn)
這篇文章主要介紹了Python 關(guān)于模塊和加載模塊的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03Windows系統(tǒng)下使用flup搭建Nginx和Python環(huán)境的方法
這篇文章主要介紹了Windows系統(tǒng)下使用flup搭建Nginx和Python環(huán)境的方法,文中使用到了flup這個Python的FastCGI工具,需要的朋友可以參考下2015-12-12Python實現(xiàn)字典按key或者value進行排序操作示例【sorted】
這篇文章主要介紹了Python實現(xiàn)字典按key或者value進行排序操作,結(jié)合實例形式分析了Python針對字典按照key或者value進行排序的相關(guān)操作技巧,需要的朋友可以參考下2019-05-05