在wav文件的整数样本上移位频率(使用FFT)

时间:2016-05-05 18:46:33

标签: c audio signal-processing fft wav

我想在.wav文件上进行频移。

我遇到的问题是FFT使用复数,而.wav文件有整数值。所以我想做一个频移,这意味着我必须进行直接变换和逆变换,问题是逆变换不给我整数值(它给出了复数值),但我需要整数.wav文件样本的值。

如何解释逆变换的值?

1 个答案:

答案 0 :(得分:1)

  

我想在.wav文件上进行频移。

所以你有一个音频,这意味着一个真值信号。

实值信号的频谱与f = 0具有对称性,即它的傅里叶变换具有埃尔米特对称性。

如果您现在移动输入光谱(蓝色),结果(红色)会失去对称性,即结果信号不再是真实的: spectra

注意事物是如何通过混叠,循环,所以你“移出”奈奎斯特范围将出现在另一端。在我的例子中,这意味着你会得到意想不到的高频成分!

  

我遇到的问题是FFT使用复数,而.wav文件有整数值。所以我想做一个频移,这意味着我必须进行直接变换和逆变换,问题是逆变换不给我整数值(它给出了复数值),但我需要整数.wav文件样本的值。

事实上!那是因为轮班的结果真的不再是一个真实的信号了。

但是,您可以做的是:

  1. 移位(无论是在时域还是在频域 - 老实说,在时域中进行操作会更容易!只需将 n 样本乘以 exp(2jπf_shift/ f_sample n)< / em>的。)
  2. 应用复合带通滤波器,去除频率 [0; f_sample / 2 - shift] 。这为你提供了所谓的分析信号(即只有正频率),它仍然不是实值的,因为它不是对称的。
  3. 现在丢弃想象中的部分并不会改变信号的信息 - 它只是将能量减半并给你一个对称谱,你可以写一些.wav文件。
  4. 现在,整个“通过FFT在频域中完成”是软件定义无线电世界中人们习惯的方法 - 它们始终处理复杂的基带信号。

      

    如何解释逆变换的值?

    作为它们的复杂信号。忽略评论中建议的虚部将导致负频率中包含的能量被反映到正频率上(反之亦然),并且很可能不是你想要的 - 除非:

    • 你已经确定在这种“对称化”之前,f = 0两侧的能量都是0,所以不会发生任何不好的事,pr
    • 你已经确保选择性地移动了负频率和正频率,从而保留了对称性。请注意,这不是整个频域的“简单”移位,而是两个选择性移位;这些移动区域的选择具有一种形状,其归结为使用窗户。如果您只是“选择”或“不选择”每个箱子进行换档,那么您就可以有效地应用一个矩形窗口 - 您可以使用所有Gibb的Phenomenom。