我用了这个代码:

public double goertzel(List<double> sngData, long N, float frequency, int samplerate)
{
    double skn, skn1, skn2;
    skn = skn1 = skn2 = 0;
    samplerate = this.sampleRate;
    frequency = this.freq;

    double c = 2 * pi * frequency / samplerate;
    double cosan = Math.Cos(c);

    for (int i = 0; i < N; i++)
    {
        skn2 = skn1;
        skn1 = skn;
        skn = 2 * cosan * skn1 - skn2 + sngData[i];
    }

    return skn - Math.Exp(-c) * skn1;
}

在处理音频数据时使用该功能后,我接下来应该如何使用该算法获得频域?

最佳答案

Goertzel算法旨在找到某一特定频率的强度(幅度)频率是输入参数。
要获得音频信号的频谱(如果是频域,则为强度),必须对大量频率执行Goertzel算法,但明智的做法是进行一次Fourier变换以获得类似的结果。
可以说Goertzel算法找到了离散FT的一个样本。

关于c# - 使用Goertzel算法获取频域,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28366502/

10-11 06:56