Python?scipy利用快速傅里葉變換實現(xiàn)濾波
fft模塊簡介
scipy官網(wǎng)宣稱,fftpack模塊將不再更新,或許不久之后將被廢棄,也就是說fft將是唯一的傅里葉變換模塊。
Fourier變換極其逆變換在數(shù)學上的定義如下

下表整理出一部分與Fourier變換相關的函數(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變換之后的結果。但由于fft默認是在復數(shù)域上的,故而可以查看其實部、虛部、模和輻角的值。
下面對采樣點以及Fourier變換的結果進行繪制
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()
結果為

即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()
效果如下

到此這篇關于Python scipy利用快速傅里葉變換實現(xiàn)濾波的文章就介紹到這了,更多相關Python scipy實現(xiàn)濾波內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python推導表達式進行高效數(shù)據(jù)處理的詳細方法
在 Python編程中,推導表達式是一種簡潔且高效的語法結構,能夠快速生成列表,字典,集合等數(shù)據(jù)結構,下面我們來看看Python如何利用推導表達式進行高效數(shù)據(jù)處理吧2025-06-06
對Python 窗體(tkinter)文本編輯器(Text)詳解
今天小編就為大家分享一篇對Python 窗體(tkinter)文本編輯器(Text)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
python實現(xiàn)emoji對齊特殊字符對齊高級文本對齊
這篇文章主要為大家介紹了python實現(xiàn)emoji對齊特殊字符對齊高級文本對齊方法實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
Python中MemoryError導致內(nèi)存溢出問題
本文主要介紹了Python中MemoryError導致內(nèi)存溢出問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-12-12

