Обнаружение DTMF с использованием алгоритма Гёртцела

Как я могу использовать алгоритм Гертцеля, если формат волны следующий: - 2 канала - 32 бита - 48 кГц

Я уже искал алгоритм Гёртцела, но все, что я вижу по всему интернету, - это обнаружение DTMF с волновым форматом 2 канала, 16 бит и 8 кГц. Я не знаю, какую часть кода я должен изменить, чтобы соответствовать моим требованиям.

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

1 ответ

Решение

Хорошее описание алгоритма Гертцеля (их много в сети) должно включать параметризацию частоты дискретизации, частоты фильтра и продолжительности. Просто оставьте частоту и длительность фильтра одинаковыми и измените параметр частоты дискретизации фильтра.

Другие вопросы по тегам