2024-06-02 08:52:03 发布
网友
我想使用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¶ ... 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)) )
fftshift不会将原来的20kHz频带移到更高的频带
正如您在手册中看到的:
例如,如果要将频带0Hz-20kHz转换为频带100kHz-120kHz,可以将音频信号与频率为100kHz的余弦函数相乘。 这将产生两个频带80kHz-100kHz和100kHz-120 kHz。 从产生的频谱中,您必须删除较低的80kHz-100kHz频带。你必须对正频率和负频率都这样做,它们在零轴上镜像
为什么这样做有效
如果x是音频频带的频率,y是100kHz的移动频率,则得到:
相关问题 更多 >
编程相关推荐