簡體   English   中英

了解python中的FFT輸出

[英]Understanding FFT output in python

我試圖了解scipy.fftpack.fft的輸出。 我創建了一個信號,並做了一個信號。 這是fft的代碼:

import numpy as np
from scipy.fftpack import fft
import matplotlib.pyplot as plt

# Number of samplepoints
N = 600
# sample spacing
T = 1.0 / 800.0
x = np.linspace(0.0, N*T, N)
y = 5.0 * np.sin(50.0 * 2.0*np.pi*x) + 1.0*np.sin(80.0 * 2.0*np.pi*x) #unit is V
yf = fft(y)
xf = np.linspace(0.0, 1.0/(2.0*T), N/2)

plt.close()
plt.plot(xf, 2.0/N * np.abs(yf[0:N/2]))
plt.grid()
plt.show()

這創建了這個:

快出

我知道信號強度大小的單位與從(V)創建的波形上的信號單位相同。 我不了解fft頻率的幅度與原始信號幅度之間的關系。 例如,50 Hz正弦部分的幅度為5.0 V,那么為什么fft上50 Hz的幅度大約為3.6 V?

如果音調的頻率是FFT頻率間隔1.0/(N*T)的整數倍,則頻域中的峰值大小通常只會匹配時域中的音調幅度。 當音調頻率不是頻率間隔的整數倍時,音調的能量會以所謂的“ 頻譜泄漏”的形式散布在多個頻段上。

對於您的特定方案,頻率間隔為800/600 = 1.333Hz 相應地,80Hz音調恰好是頻率間隔的60倍,並且FFT顯示的峰值與相關的時域分量1.0*np.sin(80.0 * 2.0*np.pi*x)的幅度相同。

另一方面,50Hz音調對應於頻率間隔的37.5倍。 在這種情況下,能量分布在多個倉中,並且相應地減小了峰值,從而在3.6處顯示了一個最大峰值,而不是5.0 * np.sin(50.0 * 2.0*np.pi*x)時域分量的整個5.0幅度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM