C# 基于Goertzel算法的DTMF检测

C# 基于Goertzel算法的DTMF检测,c#,.net,signal-processing,dtmf,goertzel-algorithm,C#,.net,Signal Processing,Dtmf,Goertzel Algorithm,如果波形格式如下,如何使用Goertzel算法: -2频道 -32位 -48千赫 我已经搜索了Goertzel算法,但我在互联网上所能看到的是检测到的DTMF,其波形为2通道、16位和8 kHz。我不知道我应该修改代码的哪一部分来满足我的需求 Private Function Goertzel(ByVal sample As Byte(), ByVal N As Long, _ ByVal freq As Double, ByVal sampr

如果波形格式如下,如何使用Goertzel算法: -2频道 -32位 -48千赫

我已经搜索了Goertzel算法,但我在互联网上所能看到的是检测到的DTMF,其波形为2通道、16位和8 kHz。我不知道我应该修改代码的哪一部分来满足我的需求

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

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

您可以简单地转换wav吗?我尝试转换给定wav的波形格式。不幸的是,当我播放它时,它听起来很可怕,而且没有检测到DTMF。顺便说一下,我使用TAPIEx.NETlib只是为了测试目的。我知道我将使用的采样率,如上所述。我想我会使用100ms作为持续时间,但是如果你知道一些公式来获得上述波形格式的适当持续时间,请让我知道。我不知道滤波器的频率,如果你能给我举个例子,我将不胜感激。你找到的任何现有代码都应该包括所有DTMF音频。@hotpw2。你好。我发布了我在上面使用的代码。我知道从哪里获取每个参数的值,除了
freq
(频率)。你知道我在哪里能买到吗?或者,在给定示例字节()的情况下,是否有一个公式来获取频率?Wikipedia有一个关于DTMF的页面,其中包括音调频率(成对使用,如D。)