将信号移到更高的频率范围

2024-06-02 08:52:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用python将音频文件从音频频带转换为高于20kHz的频带。 我一直在网上搜索如何做到这一点,最近我得到的是使用fft.fftshift

代码如下:

samplerate, data = wavfile.read('./aud/vader.wav')
fft_out = fft(data)
shifted = np.fft.fftshift(fft_out)

我希望“移位”是fft_out的移位版本。它的偏移量应为20kHz


Tags: 代码fftreaddataout音频音频文件wav
1条回答
网友
1楼 · 发布于 2024-06-02 08:52:03

fftshift不会将原来的20kHz频带移到更高的频带

正如您在手册中看到的:

numpy.fft.fftshift¶ ... Shift the zero-frequency component to the center of the spectrum. This function swaps half-spaces for all axes listed

例如,如果要将频带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)) )

相关问题 更多 >