我正在尝试通过C代码获取 stft 的wav文件。所以我也遵循python的librosa库。但是我在这里对hop_length和frame_length的概念感到困惑。
y, sr = librosa.load("sample.wav")
print(sr)
y.shape
OUTPUT -> 22050
(739329,)
z = y[0:2048] #take first 2048 samples only
z.shape
OUTPUT -> (2048,0)
D = librosa.stft(z,n_fft=2048,hop_length=512) #stft of z
D.shape
OUTPUT -> (1025,5)
在这里,我采用了由前2048个样本组成的 z 窗口,只是为了简化操作。在 z 上 stft(n_fft = 2048,hop_length = 512)之后,我得到的形状矩阵为(1025,5)。
我的理解是什么->
第一个stft将从样本编号0到2048计算。(由于它是对称的,因此只会保存1025个值)
下一步,它将计算从样本数512到2560的stft。(它将在2048之后将值视为零)
第三步,从1024到3072
从1536年到4584年的第四步
从2048到4096的第五步<<-这超出了示例窗口 z 的范围。这不应该被计算
那为什么输出矩阵的形状为(1025,5)?应该为(1025,4)。
也许我的理解在这里是完全错误的。