【问题标题】:DTMF detection using Goertzel Algorithm使用 Goertzel 算法进行 DTMF 检测
【发布时间】:2014-03-05 05:49:31
【问题描述】:

如果波形格式如下,我该如何使用 Goertzel 算法: - 2 个频道 - 32 位 - 48 kHz

我已经搜索过 Goertzel 算法,但我在互联网上看到的只是检测具有 2 通道、16 位和 8 kHz 波形的 DTMF。我不知道我应该修改代码的哪一部分以满足我的要求。

Private Function Goertzel(ByVal sample As Byte(), ByVal N As Long, _
                          ByVal freq As Double, ByVal sampr As Long) As Double
    Dim Skn As Double = 0
    Dim Skn1 As Double = 0
    Dim Skn2 As Double
    Dim c As Double
    Dim c2 As Double
    Dim i As Integer

    c = 2 * Math.PI * freq / sampr
    c2 = Math.Cos(c)

    For i = 0 To (N - 1)
        Skn2 = Skn1
        Skn1 = Skn
        Skn = 2 * c2 * Skn1 - Skn2 + sample(i)
    Next

    Return Skn - Math.Exp(-c) * Skn1
End Function

Private Function power(ByVal val As Double) As Double
    Return 20 * Math.Log(Math.Abs(val)) / Math.Log(10)
End Function

【问题讨论】:

  • 你能简单地转换一下wav吗?
  • 我尝试转换给定 wav 的波形格式。不幸的是,当我播放它时,它听起来很糟糕,并且没有检测到 DTMF。顺便说一句,我使用 TAPIEx.Net 库仅用于测试目的。

标签: c# .net signal-processing dtmf goertzel-algorithm


【解决方案1】:

对 Goertzel 算法的良好描述(网上有 many)应该包括采样率、滤波器频率和持续时间的参数化。只需保持滤波器频率和持续时间不变,更改滤波器的采样率参数即可。

【讨论】:

  • 我知道上面提到的我将使用的采样率。我想我会使用 100 毫秒的持续时间,但如果你知道一些公式来获得上述波形格式的适当持续时间,请告诉我。我不知道滤波器频率,如果你能给我一个例子,我将不胜感激。
  • 您找到的任何现有代码都应包括所有 DTMF 音频频率。
  • @hotpw2。你好呀。我发布了我在上面使用的代码。我知道在哪里可以获取除freq(频率)之外的每个参数的值。知道我在哪里可以得到那个吗?或者在给定样本字节()的情况下,是否有一个公式来获取频率?
  • 维基百科有一个关于 DTMF 的页面,包括音调频率(成对使用,如 D.)
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
相关资源
最近更新 更多