在使用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()
1条答案
按热度按时间5jdjgkvh1#
是的,Parseval's Theorem告诉我们,频域中的总功率等于时域中的总功率。
您可能看到的是前向FFT中的缩放因子的结果。缩放因子的大小是一个约定,但最常见的是N的因子,其中N是数据点的数量。不过,它也可以等于1或sqrt(N)。请查看FFT文档了解这一点。
另请注意,如果仅从一半频域仓中获取功率(通常在时域信号为纯真实的且频域中具有复共轭对称性时进行),则需要考虑因子2。