1 回答

TA貢獻1891條經驗 獲得超3個贊
很長一段時間后,并沒有得到滿意的賞金,我自己找到了答案。
MATLAB 函數spectrogram()
輸出一個時間向量,該向量對應于每個窗口的中間,同時省略最后一個窗口。例如,具有 3 個樣本窗口和 1 個樣本重疊的 10 個樣本長度的信號將產生以下 4 個窗口:
1:3
, 3:5
, 5:7
, 7:9
, 其中m:n
表示一個窗口,包括從m
到n
包括第n
th 個樣本的樣本。
因此,窗戶的中心將是:2,4,6,8
。請注意,不包括第 10 個樣本。
似乎 MATLAB 需要number_of_windows
對(number_of_windows-1)*hop_length+window_size<=number_of_samples
.
另一方面,在 python 版本liberosa.core.stft()
上,t 是每個幀的第一個樣本的時間,幀覆蓋的比輸入信號多。例如,具有 3 個樣本窗口和 2 個樣本跳(跳和不重疊)的 10 個樣本長度的信號將產生以下 4 個窗口:
1:3
, , 3:5
, 5:7
, 7:9
, 9:11
, 其中m:n
表示一個窗口,包括從m
到n
包括第n
th 個樣本的樣本。
因此,窗口的開頭將是:1,3,5,7,9
。請注意,包括第 11 個不存在的樣本。
似乎 liberosa 需要最小number_of_windows
化到number_of_windows*hop_length>number_of_samples
.
就我而言:
(2999-1)*960+1920=2880000<=2880000 對于 MATLAB。3001*960=2880960>2880000 而 30000*960=2880000 !> 2880000 在 python 中。
請注意,時間可以通過設置center=True
標志以 python 為中心。
這是我能找到的最好的解釋。歡迎任何其他解釋作為答案。
添加回答
舉報