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

6
我正在寻找一段简单的(伪)代码,用于对采样音频信号进行频谱反演。最好使用C++编写。此代码应支持不同的采样率(16/32/48KHz)。

1
“spectrum-inverse”是什么?有趣的是,谷歌把你的问题作为第一个搜索结果呈现出来。您是想得到每个频率的相位和幅度的倒数吗?还是只需要一个IFFT?或者您需要完全不同的东西? - zerm
抱歉我的词汇不够专业:我想让低频变成高频,反之亦然(直流偏置将变成半采样频率的正弦波)。 - Lior Kogan
1
现在我非常好奇想听听这会是什么样子... - PeterAllenWebb
这听起来相当奇怪,我必须考虑一下这是否真的可行。仅仅“反转”每个采样块可能会导致边界不一致,然后可能会发生奇怪的事情?虽然我怀疑你的想法不会产生任何有意义/有用的结果,但为什么不只是取FT并反转数组呢?嗯...还要考虑相位和其他东西... - zerm
3个回答

8
混合信号通过 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。


2
这个技巧在数字信号处理中经常出现。例如,如果你想设计一个高通滤波器,通常更容易设计一个具有所需截止比例的低通滤波器,然后将它绕着单位圆旋转来使其变成高通滤波器。 - mtrw

1
为了获得与原始音频具有相同时间结构的内容,您需要:
  • 创建一个声谱图(使用某些窗口大小)
  • 选择一些上限和下限频率进行翻转
  • 在这些范围内翻转声谱图的强度
  • 重新合成与这些频率一致的声音信号
由于这是一个音频信号,相位混乱并不重要。通常你也听不到它们。除了翻转部分,ARSS 可以完成声谱图的创建和声音合成。
否则,您可以对FFT进行反演,反转组件的振幅,并进行逆FFT。但这基本上是没有意义的,因为它会完全破坏声音的时间结构和频率结构。

谢谢,ARSS使用频率滤波器组,所以我能做的就是反转频率箱。我想知道是否有一些数学操作可以“平滑地”反转频率(而不是将其分成箱)。 - Lior Kogan
你可以使用未明确分组的小波,但在你的情况下几乎没有关系。低频声音变化比高频声音慢得多,因此翻转会改变平滑度。 - Rex Kerr

0

使用余弦函数并没有太多意义。对于数字信号,这里不需要运行真正的环形调制器,在奈奎斯特频率下,余弦函数本质上就是一个方波。

所以你只需要将每个样本乘以*-1即可完成。

没有延迟,没有混叠,什么都没有。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接