我想使用 python 将音频文件从可听频段转换为高于 20kHz 的音频文件。我一直在网上搜索如何做到这一点,我得到的最接近的是使用 fft.fftshift。
代码如下:
samplerate, data = wavfile.read('./aud/vader.wav')
fft_out = fft(data)
shifted = np.fft.fftshift(fft_out)
我希望“移位”成为 fft_out 的移位版本。它应该移动 20kHz 的幅度
我想使用 python 将音频文件从可听频段转换为高于 20kHz 的音频文件。我一直在网上搜索如何做到这一点,我得到的最接近的是使用 fft.fftshift。
代码如下:
samplerate, data = wavfile.read('./aud/vader.wav')
fft_out = fft(data)
shifted = np.fft.fftshift(fft_out)
我希望“移位”成为 fft_out 的移位版本。它应该移动 20kHz 的幅度
fftshift 不会将原始的 20kHz 频段移动到更高的频段。
正如您在手册中所读到的:
numpy.fft.fftshift¶ ... 将零频率分量移动到频谱的中心。此函数为列出的所有轴交换半空格
例如,如果您想将频带 0Hz-20kHz 移动到频带 100kHz - 120kHz,您可以将音频信号与频率为 100kHz 的余弦函数相乘。这会产生两个频段 80kHz-100kHz 和 100kHz-120 kHz。从产生的频谱中,您必须删除较低的频段 80kHz-100kHz。您必须对正频率和负频率执行此操作,它们在零轴上镜像。
为什么这行得通?
cos(x) * cos(y) = 0.5 * ( cos(x+y) + cos(x-y) )
如果 x 是您的音频频带的频率,而 y 是 100kHz 的移动频率,您会得到:
cos(2pi*audiofrequency) * cos(2pi*100kHz) = 0.5 * (cos(2pi*(100kHz + audiofrequency)) + (cos(2pi*(100kHz - audiofrequency)) )