我尝试使用scipy.signal.spectogram
创建幅度的频谱图。
不幸的是我没有使它工作。
我的测试信号应该是频率为400 Hz,振幅为1的正弦。频谱图的结果似乎是0.5而不是1.0。我不知道可能是什么问题。
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# 2s time range with 44kHz
t = np.arange(0, 2, 1/44000)
# test signal: sine with 400Hz amplitude 1
x = np.sin(t*2*np.pi*440)
# spectogram for spectrum of magnitudes
f, t, Sxx = signal.spectrogram(x,
44000,
"hanning",
nperseg=1000,
noverlap=0,
scaling="spectrum",
return_onesided=True,
mode="magnitude"
)
# plot last frequency plot
plt.plot(f, Sxx[:,-1])
print("highest magnitude is: %f" %np.max(Sxx))
最佳答案
严格实时域信号在频域中是共轭对称的。例如将同时出现在复杂结果FFT的正半部和负半部(或上半部)中。
因此,您需要将FFT结果的两个“一半”相加在一起,以获得总能量(Parseval定理)。或仅是双面,因为复共轭的大小相等。
关于python - 如何使用scipy.signal.spectrogram找到正确的幅度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58349909/