2
用scipy.fftpack.fft()對某些樣本進行離散傅里葉變換並繪製這些樣本的大小後,我注意到它不等於原始信號的幅度。兩者之間有沒有關係?你能計算傅立葉變換的原始信號的幅度/功率嗎?
有沒有一種方法可以根據傅里葉係數計算原始信號的幅度而不需要反轉變換?
這裏的正弦波振幅7.0的例子,FFT幅度3.5
from numpy import sin, linspace, pi
from pylab import plot, show, title, xlabel, ylabel, subplot
from scipy import fft, arange
def plotSpectrum(y,Fs):
"""
Plots a Single-Sided Amplitude Spectrum of y(t)
"""
n = len(y) # length of the signal
k = arange(n)
T = n/Fs
frq = k/T # two sides frequency range
frq = frq[range(n/2)] # one side frequency range
Y = fft(y)/n # fft computing and normalization
Y = Y[range(n/2)]
plot(frq,abs(Y),'r') # plotting the spectrum
xlabel('Freq (Hz)')
ylabel('|Y(freq)|')
Fs = 150.0; # sampling rate
Ts = 1.0/Fs; # sampling interval
t = arange(0,1,Ts) # time vector
ff = 5; # frequency of the signal
y = 7.0 * sin(2*pi*ff*t)
subplot(2,1,1)
plot(t,y)
xlabel('Time')
ylabel('Amplitude')
subplot(2,1,2)
plotSpectrum(y,Fs)
show()
我想嘗試http://math.stackexchange.com/編程部分是真正切合你的問題。 – Jake
你能舉個例子嗎?有很多原因沒有得到正確的幅度:錯誤的滿量程,忘記考慮採樣數量(取決於方法),... – lucasg
它在你的代碼的評論中說,你只繪製一半的頻率範圍。這就是爲什麼你只能得到幅度的一半(對於任何嚴格實際的輸入信號)。 – hotpaw2