【问题标题】:Programmatically detect and extract an audio envelope以编程方式检测和提取音频包络
【发布时间】:2011-06-27 00:44:10
【问题描述】:

所有建议和相关信息的链接都欢迎在这里。这是场景:

假设我有一个说话人的 .wav 文件(以及与之相关的所有样本)。

我想对一系列样本运行算法以检测事件何时发生,即信封的开始和结束。然后,我将使用这个起点和终点来提取要在其他地方使用的数据。

解决这个问题的最佳方法是什么?有伪代码吗?示例代码?源代码?

我最终会用 C 来写这篇文章。

谢谢!


编辑 1

解析wav文件不是问题。但是一些用于包络检测的伪代码会很好! :)

【问题讨论】:

  • 您的问题是关于解析 .wav 文件的内容吗?或者关于后来的信号处理?或者两者兼而有之?
  • @Ole Thomsen Buus。请参阅编辑 1

标签: c audio signal-processing


【解决方案1】:

一阶低通滤波器C#代码:

    double old_y = 0;

    double R1Filter(double x, double rct)
    {
        if (rct == 0.0)
            return 0;
        if (x > old_y)
            old_y = old_y-(old_y - x)*rct/256;
        else
            old_y = old_y + (x - old_y) * rct/256;
        return old_y;
    }

当rct=2时,它的作用是这样的:

信号 = (ucm + ucm * ma * Cos(big_omega * x)) * (Cos(small_omega1 * x) + Cos(small_omega2 * x) ) 其中 ucm=3,big_omega=200,small_omega1=4,small_omega2=12 和 ma=0.8

注意滤波器可能会改变基带信号的相位。

【讨论】:

    【解决方案2】:

    我用 Java 编写了一个活动检测器类。这是我的开源 Java DSP collection 的一部分。

    【讨论】:

      【解决方案3】:

      简单包络检测器的源代码可以在Music-DSP Source Code Archive找到。

      【讨论】:

        【解决方案4】:

        您可以使用与老式模拟仪表相同的方法。校正样本向量,将绝对值结果通过低通滤波器(FIR、IIR、移动平均等),然后与某个阈值进行比较。要获得更准确的事件时间,您必须减去低通滤波器的群延迟时间。

        添加:您可能还需要事先移除 DC(例如使用高通滤波器或其他等效于电容耦合的 DC 阻断器)。

        【讨论】:

          【解决方案5】:

          通常的方法是:

          1. 取波形绝对值,abs(x[t])
          2. 低通滤波器(比如 10 Hz 截止)
          3. 应用阈值

          【讨论】:

          • 您有该技术的来源吗? abs() 对我来说没有意义;例如,想象在 440hz 时交替 -1.0 和 1.0。 abs() 将返回沉默。
          • @tenfour :您的示例不起作用,因为您的采样率不是奈奎斯特要求的最高频率的高于两倍。而且 1.0 不是静默,它是比零高出 1.0 的幅度。
          • @hotpaw2 你为什么这么认为?我说它是交替的@ 440hz。所以在 44.1khz 时,波形大约是 100 个 -1.0 样本,然后是 100 个 1.0 样本。那是一个 440hz 方波,在这个算法中会被转换成静音(对吧?)
          • 源源不断的 1.0 是带有 DC 偏移的静默。
          • @tenfour:我们正在尝试检测 envelope - 该技术称为 rectification,然后是低通滤波。它类似于模拟世界中的二极管和 RC 低通滤波器,就像在简单的无线电接收器中解调 AM 的方式一样。
          猜你喜欢
          • 2011-03-03
          • 2011-03-03
          • 2011-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-28
          相关资源
          最近更新 更多