頻譜分析 基於python畫出時域頻域波形

2021-09-27 10:28:41 字數 2626 閱讀 7596

fft(fast fourier transformation)是離散傅氏變換(dft)的快速演算法。即為快速傅氏變換。它是根據離散傅氏變換的奇、偶、虛、實等特性,對離散傅利葉變換的演算法進行改進獲得的。

1.python**

依據快速傅利葉演算法得到訊號的頻域,將其各個頻率分量的幅值繪製成圖。為便於計算,我們將取樣頻率8000次近似設為8192次

正弦波表示式為: s(t) = 0.6 sin( 2π 50t ) 和s(t) = 0.6 sin( 2π 500t )

import numpy as np#匯入乙個資料處理模組

import matplotlib.pyplot as plt#匯入乙個繪圖模組

# 依據快速傅利葉演算法得到訊號的頻域

deftest_fft()

: sampling_rate =

8192

# 取樣率

fft_size =

8192

# fft取樣長度

t = np.arange(0,

8.192

,1.0

/ sampling_rate)

#np.arange(起點,終點,間隔)產生8.192s長的取樣時間

x=0.6*np.sin(

2*np.pi*

500*t)

+0.6

*np.sin(

2*np.pi*

50*t)

# 兩個正弦波疊加,500hz和50hz

# n點fft進行精確頻譜分析的要求是n個取樣點包含整數個取樣物件的波形。

# 因此n點fft能夠完美計算頻譜對取樣物件的要求是n*fs/n(n*取樣頻率/fft長度),

# 因此對8khz和512點而言,完美取樣物件的週期最小要求是8000/512=15.625hz,

# 所以156.25的n為10,234.375的n為15。

xs = x[

:fft_size]

# 從波形資料中取樣fft_size個點進行運算

xf = np.fft.rfft(xs)

/ fft_size # 返回fft_size/2+1 個頻率

#利用np.fft.rfft()進行fft計算,rfft()是為了更方便對實數訊號進行變換,

# 由公式可知 / fft_size為了正確顯示波形能量

# rfft函式的返回值是n/2+1個複數,分別表示從0(hz)到sampling_rate/2(hz)的分。

# 於是可以通過下面的np.linspace計算出返回值中每個下標對應的真正的頻率:

freqs = np.linspace(

0, sampling_rate*

10, fft_size/2+

1)# 表示頻率

#freqs = np.linspace(0, sampling_rate/2 , fft_size/2 + 1) # 表示頻率

xfp =

20* np.log10(np.clip(np.

abs(xf),1e

-20,1e100))

#xfp = np.abs(xf) * 2 # 代表訊號的幅值,即振幅

# 最後我們計算每個頻率分量的幅值,並通過 20*np.log10()將其轉換為以db單位的值。

# 為了防止0幅值的成分造成log10無法計算,我們呼叫np.clip對xf的幅值進行上下限處理

plt.figure(figsize=(8

,4))

plt.subplot(

211)

plt.plot(t[

:fft_size]

, xs)

plt.xlabel(u"時間(秒)"

, fontproperties=

'fangsong'

) plt.title(u"500hz和50hz的波形和頻譜"

, fontproperties=

'fangsong'

) plt.subplot(

212)

plt.plot(freqs, xfp)

plt.xlabel(u"頻率(hz)"

, fontproperties=

'fangsong'

)#字型fangsong

plt.ylabel(u'幅值'

, fontproperties=

'fangsong'

) plt.subplots_adjust(hspace=

0.4)

'''subplots_adjust(left=none, bottom=none, right=none, top=none, wspace=none, hspace=none)

有六個可選引數來控制子圖布局。值均為0~1之間。其中left、bottom、right、top圍成的區域就是子圖的區域。

wspace、hspace分別表示子圖之間左右、上下的間距。實際的預設值由matplotlibrc檔案控制的。

'''plt.show(

)test_fft(

)

2.結果顯示

python頻譜分析

import numpy as np import matplotlib.pyplot as pl sampling rate 8000 fft size 512 首先定義了兩個常數 sampling rate,fft size,分別表示數碼訊號的取樣頻率和fft的長度.由於快速離散傅利葉演算法的影...

頻譜分析 頻譜分析儀概述及選購要點

在無線通訊裝置 元器件或系統測試應用中,頻譜分析儀是應用最廣泛的測量裝置。它能測量和顯示射頻訊號的頻譜分布,也能測量和讀取頻率和幅值資訊。儘管當前無線通訊以數字通訊技術為主,但是頻譜分析儀測量頻譜仍然是一種不可缺少的重要手段。如需選擇頻譜分析儀,請先考慮如下關鍵點 1 頻率範圍 選擇合適的頻譜分析儀...

FFT頻譜分析原理

fft頻譜分析原理 取樣定理 取樣頻率要大於訊號頻率的兩倍。n個取樣點經過fft變換後得到n個點的以複數形式記錄的fft結果。假設取樣頻率為fs,取樣點數為n。那麼fft運算的結果就是n個複數 或n個點 每乙個複數就對應著乙個頻率值以及該頻率訊號的幅值和相位。第乙個點對應的頻率為0hz 即直流分量 ...