如何对采样的音频信号进行频谱反转

时间:2010-08-19 09:49:45

标签: algorithm audio signal-processing

我正在寻找一种简单的(伪)代码,用于对采样的音频信号进行频谱反转。 理想情况下是C ++

代码应支持不同的采样率(16/32 / 48KHz)。

3 个答案:

答案 0 :(得分:7)

通过Fs/2混合信号将交换高频和低频 - 想想将单位圆周围的光谱旋转半圈。您可以通过将每个其他样本乘以-1来实现此旋转。

Fs/2混音相当于按exp(j*pi*n)混音。如果x是输入,y是输出,

y[n] = x[n] * exp(j*pi*n) = x[n] * [cos(pi*n) + j*sin(pi*n)]

这很容易简化,因为sin(pi*n)为0,cos(pi*n)交替为1,-1。

答案 1 :(得分:1)

为了获得与原始内容具有相同类型的时间结构的内容,您需要

  • 创建频谱图(具有一些窗口大小)
  • 选择您要翻转的一些上下频率范围
  • 翻转那些界限内的光谱强度
  • 重新合成与这些频率一致的声音信号

由于它是一个音频信号,因此相位将全部搞砸并不重要。无论如何你通常听不到它们。除了翻转部分,ARSS执行频谱图创建和声音再合成。

否则,您可以采用FFT,反转分量的幅度,并采用逆FFT。但这基本上是荒谬的,因为它将完全扰乱声音的时间结构以及频率结构。

答案 2 :(得分:0)

使用余弦没有多大意义。对于数字信号来说,在这里运行一个真正的ringmod并不是必需的,无论如何,在nyquist中,一个consine就是一个正方形。

所以你只需将每个其他样本乘以* -1就可以了。

没有延迟,没有别名,没有任何东西。