为了使我的问题尽可能清楚,我将举一个例子。我想绘制信号的一侧功率谱。例如,我的信号是“50Hz 正弦波,幅度为 1V”和“DC 偏移电压为 1V”之和。我创建了这个信号并绘制了它的 FFT,我将功率定义为幅度平方除以 2。
这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
import scipy.fftpack
f = 50 #signal freq
D = 1 #duration
fs = 800 #sampling freq
T = 1/f #signal period
N = int((D/(1/fs))+1) #number of smaples
t = np.linspace(0, D, num=N, endpoint=True) #time vector
dc = 1
y = np.sin(2*np.pi*f*t) + dc
plt.plot(t, y,'-b')
plt.plot(t, y,'.r')
plt.title('~ Sinusoid ~')
plt.xlabel('time [s]')
plt.ylabel('Voltage [V]')
plt.grid()
plt.show()
#FFT
plt.figure()
y = y
T = t[2]-t[1]
sampling_rate = 1/T
N = len(y)
yf = scipy.fftpack.fft(y)
xf = np.linspace(0.0, 1.0/(2.0*T), N//2)
amplitude = 2.0/N * np.abs(yf[:N//2])
pow = amplitude*amplitude/2
plt.plot(xf, pow,'b')
plt.grid()
plt.xlabel('Frequency [Hz]')
plt.ylabel('Power [W]')
现在正弦分量的 rms 功率可以计算为(幅度平方)/2,即 0.5W,这就是我们在上图中看到的。
对于 1V DC 分量,我会说 rms 功率是(幅度平方),即 1W。但是情节显示了两次,即2W。
我的问题是:我应该在代码中的 FFT 图中以 0Hz 的频率将功率除以二,还是我解释错了?