Python是一種廣泛使用的編程語言,具有豐富的庫和工具。短時傅里葉(Short-time Fourier transform,簡稱STFT)是一種在頻域分析信號的技術,它可以分析非平穩信號的頻譜結構。Python提供了多種實現STFT的方法,其中最常見的是使用SciPy庫。
# 導入必要的庫 import numpy as np from scipy.signal import stft import matplotlib.pyplot as plt # 創建一個輸入信號 time = np.linspace(0, 10, 1000) signal = np.sin(2*np.pi*5*time) + np.sin(2*np.pi*10*time) # 計算STFT f, t, Zxx = stft(signal, fs=1000, nperseg=100) Zxx = np.abs(Zxx) # 繪制結果 fig, ax = plt.subplots() ax.pcolormesh(t, f, Zxx) ax.set_ylabel('Frequency [Hz]') ax.set_xlabel('Time [sec]') plt.show()
在代碼中,我們首先創建一個包含兩個正弦波的輸入信號,然后使用SciPy庫中的stft函數計算STFT。該函數可以通過fs參數指定采樣率,nperseg參數指定每個窗口的長度(默認為256),并返回STFT帶有可選的復數值,表示幅度和相位信息。我們只保留幅度信息,并使用pcolormesh函數繪制STFT的結果。該函數為時域和頻域之間的二維顏色圖譜。
總體而言,使用Python實現STFT是一種強大的方法,可以幫助分析非平穩信號的頻譜結構,并從中獲取有關信號的有用信息。