国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Python > 正文

FFT快速傅里葉變換的python實現過程解析

2024-09-09 19:02:15
字體:
來源:轉載
供稿:網友

FFT是DFT的高效算法,能夠將時域信號轉化到頻域上,下面記錄下一段用python實現的FFT代碼。

# encoding=utf-8import numpy as npimport pylab as pl # 導入和matplotlib同時安裝的作圖庫pylabsampling_rate = 8000 # 采樣頻率8000Hzfft_size = 512  # 采樣點512,就是說以8000Hz的速度采512個點,我們獲得的數據只有這512個點的對應時刻和此時的信號值。t = np.linspace(0, 1, sampling_rate)  # 截取一段時間,截取是任意的,這里取了0~1秒的一段時間。x = np.sin(2*np.pi*156.25*t) + 2*np.sin(2*np.pi*234.375*t) # 輸入信號序列,人工生成了一段信號序列,范圍在0~1秒xs = x[:fft_size]  # 由上所述,我們只采樣了512個點,所以我們只獲得了前512個點的數據xf = np.fft.rfft(xs)/fft_size # 調用np.fft的函數rfft(用于實值信號fft),產生長度為fft_size/2+1的一個復數向量,分別表示從0Hz~4000Hz的部分,這里之所以是4000Hz是因為Nyquist定理,采樣頻率8000Hz,則能恢復帶寬為4000Hz的信號。最后/fft_size是為了正確顯示波形能量freqs = np.linspace(0, sampling_rate//2, fft_size//2 + 1) # 由上可知,我們得到了數據,現在產生0~4000Hz的頻率向量,方便作圖xfp = 20*np.log10(np.clip(np.abs(xf), 1e-20, 1e1000)) # 防止幅值為0,先利用clip剪裁幅度,再化成分貝pl.figure(figsize=(8, 4)) # 生成畫布pl.subplot(211) # 生成子圖,211的意思是將畫布分成兩行一列,自己居上面。pl.plot(t[:fft_size], xs) # 對真實波形繪圖pl.xlabel(u"time(s)")pl.title(u"The Wave and Spectrum of 156.25Hz and 234.375Hz")pl.subplot(212) # 同理pl.plot(freqs, xfp) # 對頻率和幅值作圖,xlabel是頻率Hz,ylabel是dBpl.xlabel(u"Hz")pl.subplots_adjust(hspace=0.4) # 調節繪圖參數pl.show()

代碼進行了詳細標注。有一個小細節是FFT對于取樣時間有要求。N點FFT進行精確頻譜分析的要求是N個取樣點包含整數個取樣對象的波形。因此N點FFT能夠完美計算頻譜,對取樣對象的要求是n*Fs/N(n*采樣頻率/FFT長度)在本例中Fs = 8000Hz,N=512 base_freq=15.625Hz 所以本例中給出了頻率為156.25Hz(n=10)和234.375Hz(n=15)做例子。

效果如下:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網之家。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 商水县| 库车县| 光山县| 微山县| 郸城县| 新巴尔虎左旗| 宕昌县| 广德县| 邢台县| 文山县| 博白县| 酉阳| 和林格尔县| 图木舒克市| 伊吾县| 禄劝| 长阳| 长兴县| 甘南县| 蒙山县| 平度市| 松江区| 阿克陶县| 崇明县| 上林县| 宜丰县| 温宿县| 桃园市| 兴化市| 比如县| 虎林市| 怀来县| 延安市| 托克逊县| 甘南县| 桂平市| 和田县| 河西区| 法库县| 方正县| 左权县|