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