我补充一下前一个提问,我的音频信号采样率为44.1kHz,在实际运行的过程中,报了“operands could not be broadcast together with shapes (198,882)(221,442)”我该怎么修改以上代码
时间: 2024-02-12 12:08:02 浏览: 20
由于你的音频信号采样率为44.1kHz,因此每帧的 FFT 频谱中包含的频率分量个数应该是 882,即采样率的一半。所以,需要将 `freqs` 数组的长度修改为 882,即修改为 `freqs = np.fft.rfftfreq(n_fft, d=1.0/sr)`。
同时,根据你的错误提示,`mag_frames` 的形状为 `(198, 882)`,`pitch_freqs_smoothed` 的形状为 `(221,)`,这两个数组的维度无法进行广播操作,所以需要将 `pitch_freqs_smoothed` 转换为 `(198, 882)` 的形状。具体来说,可以使用 `np.tile` 函数将 `pitch_freqs_smoothed` 沿着第二个维度复制 882 次,然后将其形状重塑为 `(198, 882)`。修改后的代码如下:
```
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` 就可以与 `mag_frames` 的第一维对应,与 `freqs` 的第二维进行广播操作,得到一个形状为 `(198, 882)` 的新的振幅谱矩阵 `adjusted_fft_frames`。