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