在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
函數的參數還可以設置窗口大小、重疊比例、窗函數等,以便更好地適應不同的信號特征。