基于python的FFT频率和振幅处理
生活随笔
收集整理的這篇文章主要介紹了
基于python的FFT频率和振幅处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:FFT變換
fft變換其實就是快速離散傅里葉變換,傅立葉變換是數字信號處理領域一種很重要的算法。要知道傅立葉變換算法的意義,首先要了解傅立葉原理的意義。傅立葉原理表明:任何連續測量的時序或信號,都可以表示為不同頻率的正弦波信號的無限疊加。而根據該原理創立的傅立葉變換算法利用直接測量到的原始信號,以累加方式來計算該信號中不同正弦波信號的頻率、振幅和相位。
和傅立葉變換算法對應的是反傅立葉變換算法。該反變換從本質上說也是一種累加處理,這樣就可以將單獨改變的正弦波信號轉換成一個信號。因此,可以說,傅立葉變換將原來難以處理的時域信號轉換成了易于分析的頻域信號(信號的頻譜),可以利用一些工具對這些頻域信號進行處理、加工。最后還可以利用傅立葉反變換將這些頻域信號轉換成時域信號。
二、頻率和振幅的處理
(1)、頻率處理方法
1.提供采樣率 Fs
- 采樣率就是單位時間內采集的樣本數
- 根據采樣區間Ts來算,Fs=1/Ts
- Ts在非定常計算里就是時間步,也就是采樣區間
- Ts=1.0/Fs
2. 周期 T
- 用采樣率算出我這段數據中一共有多少個周期 T = n/Fs
- 這個n是我給的這段數據的采樣點數,比如我的例子中n = len(y)
3.頻率 frq
- 把采樣點數的等差數列k除以周期T,就是頻率 frq = k/T
- k = np.arange(n)(就是 [0, 1, 2, … , n])
- 所以這樣看來,frq = Fs * (k/n)
(2)、幅值處理方法
幅值也是要處理的,幅值的處理就比較簡單,進行歸一化處理,處理出來的結果除以采樣點數n就好了。
這是因為,采樣點數越多,振幅是成比例增大的
二、python代碼(TestFFT02.py)
該代碼的GitHub地址為:https://github.com/taw19960426/jiSuan01
import matplotlib.pyplot as plt import numpy as npFs = 150.0; # 采樣率 Ts = 1.0/Fs; # 采樣區間 t = np.arange(0,1,Ts) # 時間矢量,這里Ts也是步長 #range返回從0到1構成的list,而arange返回一個array對象fs = 25; # frequency of the signal信號頻率 y = np.sin(2*np.pi*fs*t)n = len(y) # 信號長度 k = np.arange(n) #采樣點數的等差數列k T = n/Fs #共有多少個周期T frq = k/T # two sides frequency range兩側頻率范圍 frq1 = frq[range(int(n/2))] # #由于對稱性,取一半區間YY = np.fft.fft(y) # 未歸一化 Y = np.fft.fft(y)/n # 歸一化 Y1 = Y[range(int(n/2))]fig, ax = plt.subplots(4, 1)ax[0].plot(t,y) ax[0].set_xlabel('Time') ax[0].set_ylabel('Amplitude振幅')ax[1].plot(frq,abs(YY),'r') #繪制頻譜 ax[1].set_xlabel('Freq (Hz)') ax[1].set_ylabel('|Y(freq)|')ax[2].plot(frq,abs(Y),'g') # plotting the spectrum ax[2].set_xlabel('Freq (Hz)') ax[2].set_ylabel('|Y(freq)|')ax[3].plot(frq1,abs(Y1),'b') # plotting the spectrum ax[3].set_xlabel('Freq (Hz)') ax[3].set_ylabel('|Y(freq)|')plt.show()結果顯示:
四、結果分析
總結
以上是生活随笔為你收集整理的基于python的FFT频率和振幅处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pycharm与github相配置连接(
- 下一篇: 腾讯云Centos升级python2到p