我想對每個片段的具體樣本長度對我的數據執行短時傅里葉變換。我想使用來自信號子模塊的SciPy功能stft
。但是,當我創建長度10e5
以下方式的音頻陣列:使用SciPy stft函數指定片段中的樣本數量以進行短時傅立葉變換
fs = 10e3 # Sampling frequency
N = 1e5 # Number of samples
time = np.arange(N)/fs
x = 500*np.cos(time) # Some random audio wave
# x.shape gives (100000,)
而且隨着nperseg=1000
應用SciPy的stft
功能,我並不如預期獲得100段。取而代之的是,輸出的形狀是:
f, t, Zxx = signal.stft(x, fs, nperseg=1000)
print(Zxx.shape) # -> (501, 201)
其中如果我理解文檔正確地501是「頻率籃子」和20001的數目是不同的時間段的數量,這是我原先打算是N/nperseg或10e5/1000 = 100.我確實看到該函數有一些參數來指定填充和重疊,但在N
可被nperseg
整除時,它究竟幹什麼?