【问题标题】:How to Spectrum-inverse a sampled audio signal如何对采样的音频信号进行频谱反演
【发布时间】:2011-04-01 00:54:09
【问题描述】:

我正在寻找一个简单的(伪)代码,它可以对采样的音频信号进行频谱反演。 理想情况下是 C++

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

【问题讨论】:

  • 什么是“逆谱”?有趣的是,谷歌在这里首次披露了你的问题。您想要每个频率的相位和幅度的倒数吗?或者你只是想要一个IFFT?还是完全不同的东西?
  • 对不起,我的词汇不够专业:我希望低频变成高频,反之亦然(DC 偏移将变为采样频率一半的正弦)。
  • 现在我很想知道这听起来像什么......
  • 这听起来很奇怪,我必须考虑一下这是否可行。 “反转”每个采样块可能会导致边界不一致,那么奇怪的事情可能会发生吗?虽然我怀疑您的想法是否会产生任何有意义/有用的结果,但您为什么不直接使用 FT 并反转数组呢? Mhh..必须考虑阶段和东西......

标签: algorithm audio signal-processing


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    通过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。

    【讨论】:

    • 这个技巧在 DSP 中经常出现。例如,如果你想设计一个高通滤波器,通常更容易设计一个具有所需截止比例的低通滤波器,然后围绕单位圆旋转它以使其成为高通。
    【解决方案3】:

    为了得到与原始时间结构类型相同的东西,你需要

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

    由于它是音频信号,因此相位会全部混乱并不重要。无论如何,您通常听不到它们。除了翻转部分,ARSS 负责谱图的创建和声音的再合成。

    否则,您可以只进行 FFT,反转分量的幅度,然后进行逆 FFT。但这基本上是荒谬的,因为它会完全打乱声音的时间结构以及频率结构。

    【讨论】:

    • 谢谢,ARSS 使用频率滤波器组,所以我能做的就是反转频率箱。我想知道是否有一些数学运算可以“平滑”地反转频率(不将其分成垃圾箱)。
    • 您可以使用未明确分箱的小波,但在您​​的情况下几乎不重要。低频声音的变化比高频声音慢得多,因此无论如何翻转都会改变平滑度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    相关资源
    最近更新 更多