在Python中,可以使用SciPy库中的signal.spectrogram
函数来计算功率谱。这个函数会将输入的信号分成多个窗口,然后对每个窗口进行傅里叶变换,最后计算每个窗口的功率谱密度。
以下是一个示例代码:
import numpy as np from scipy import signal # 生成随机信号 fs = 1000 # 采样频率 t = np.arange(0, 1, 1/fs) # 时间序列 x = np.sin(2*np.pi*50*t) + np.sin(2*np.pi*120*t) # 计算功率谱 f, t, Sxx = signal.spectrogram(x, fs) # 绘制功率谱图 import matplotlib.pyplot as plt plt.pcolormesh(t, f, 10 * np.log10(Sxx)) plt.colorbar(label='Power Spectral Density (dB/Hz)') plt.xlabel('Time (s)') plt.ylabel('Frequency (Hz)') plt.show()
这个示例代码生成了一个包含两个正弦波信号的合成信号,然后使用signal.spectrogram
函数计算其功率谱。最后使用Matplotlib库绘制功率谱图。
注意,signal.spectrogram
函数的参数还可以设置窗口大小、重叠比例、窗函数等,以便更好地适应不同的信号特征。