你能用傅立叶变换计算原始信号的幅度/功率吗?

时间:2012-11-14 13:15:20

标签: python numpy scipy signal-processing fft

使用scipy.fftpack.fft()对某些样本进行离散傅里叶变换并绘制这些样本的幅度后,我注意到它不等于原始信号的幅度。这两者之间有关系吗?

有没有办法在不反转变换的情况下从傅里叶系数计算原始信号的幅度?

这是一个振幅为7.0且fft振幅为3.5

的sin波的例子
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 个答案:

答案 0 :(得分:7)

是的,Parseval's Theorem告诉我们,频域中的总功率等于时域中的总功率。

您可能看到的是前向FFT中缩放因子的结果。此缩放因子的大小是常规问题,但最常见的是它是N的因子,其中N是数据点的数量。但是它也可以等于1或sqrt(N)。请查看您的FFT文档。

另请注意,如果您仅从一半频域区域获取功率(通常在时域信号纯粹为真,并且在频域中具有复共轭对称时完成),那么将会有2到保重。