我想通过其频谱计算时域信号的平均功率。我猜 Parseval 是正确的工具。
所以我在一秒钟内采样了一个 100 Hz 10000x 的正弦波。
不幸的是,平方样本的总和不是 FFT 幅度的总和(由 FFT 箱的数量加权)。错误在哪里?
# Some python code
import numpy
import matplotlib.pyplot as plt
# Create Time Domain Signal for 1 sec
fs = n = 10000 # Samplingfrequency
ti = numpy.linspace(0,1,num=fs)
sx = 1*numpy.sin(2*numpy.pi*100*ti)
# Calculate spectrum via FFT and account for scaling n/2
# taking the real fft (rfft) only the positive frequencies are calculated
fx = numpy.fft.rfft(sx)/(n/2)
no_of_points = fx.shape[0]
# Calculate RMS for time domains signal + spectrum
parseval_sx = numpy.sum(sx**2)
parseval_fx = numpy.sum(numpy.abs(fx)**2)/no_of_points
print parseval_sx, " equals not ", parseval_fx
输出:
4999.5 equals not 0.000199940012002