我使用了这段代码:
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;
}
在处理音频数据后使用该功能后,我该怎么办才能使用该算法获得频域?
答案 0 :(得分:1)
Goertzel算法旨在找到某个特定频率的强度(幅度)。频率是输入参数。
要获得音频信号的频谱(频率,如果是频域),您必须执行Goertzel算法以获得大量频率,但最好进行一次傅里叶变换以获得类似的结果。
有人可能会说Goertzel算法找到一个离散FT样本。