【问题标题】:Shifting a signal to a higher frequency range将信号移至更高的频率范围
【发布时间】:2021-08-28 19:50:05
【问题描述】:
我想使用 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
audio
signal-processing
steganography
【解决方案1】:
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)) )