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 为中心。
这是我能找到的最好的解释。欢迎任何其他解释作为答案。
添加回答
举报