那我改成这样对吗“pitch_freqs_smoothed = np.convolve(pitch_freqs, np.ones(221) / 221, mode='same')”
时间: 2024-02-12 14:03:19 浏览: 106
是的,你的修改是正确的。将卷积核的长度设置为221,同时使用长度为221的全1数组进行卷积运算,可以实现正确的平滑处理。具体来说,这段代码会使用221个相邻的采样点来计算每个点的平均值,从而得到一个平滑后的pitch_freqs_smoothed数组。这个数组可以在之后的计算中用来作为输入,以获得更准确的结果。
相关问题
如果改成这样呢“pitch_freqs_smoothed = np.convolve(pitch_freqs, np.ones(221) , mode='same')”
如果你将卷积核的长度设置为221,但是卷积核中的每个元素都是1,那么实际上就是对pitch_freqs进行了一个加权平均。这种修改方式可能会模糊音频信号中的细节,而不是仅仅进行平滑处理。因此,这种修改方式可能不是很适合这个应用场景。一般来说,我们会使用长度为奇数的卷积核来进行平滑处理,以保证卷积后的结果中心点位置不变。同时,我们还会使用一个相对较小的卷积核,以避免过度平滑。因此,将卷积核设置为长度为221,且每个元素都是1,可能不是一个好的选择。
所以我只需要将adjusted_fft_frames = mag_frames * np.exp(1j * 2 * np.pi * pitch_freqs_smoothed[:, np.newaxis] * freqs[np.newaxis, :])这段代码替换成pitch_freqs_smoothed = pitch_freqs_smoothed[:, np.newaxis]pitch_freqs_smoothed = np.tile(pitch_freqs_smoothed, (1, mag_frames.shape[1]))adjusted_fft_frames = mag_frames * np.exp(1j * 2 * np.pi * pitch_freqs_smoothed * freqs[np.newaxis, :])就行了吗
是的,你可以将原来的代码替换为新的代码,但是需要注意一下 `freqs` 数组的长度是否正确,以确保可以正确进行广播操作。同时,也需要确保 `pitch_freqs_smoothed` 被正确地转换为 `(198, 882)` 的形状。
完整的代码修改如下:
```
freqs = np.fft.rfftfreq(n_fft, d=1.0/sr)
pitch_freqs_smoothed = pitch_freqs_smoothed[:, np.newaxis]
pitch_freqs_smoothed = np.tile(pitch_freqs_smoothed, (1, mag_frames.shape[1]))
adjusted_fft_frames = mag_frames * np.exp(1j * 2 * np.pi * pitch_freqs_smoothed * freqs[np.newaxis, :])
```
这个修改后的代码会将 `pitch_freqs_smoothed` 转换为一个形状为 `(198, 882)` 的数组,然后使用广播机制将其与 `freqs` 相乘,得到一个形状为 `(198, 882)` 的新的振幅谱矩阵 `adjusted_fft_frames`。
阅读全文