我使用Goertzel算法来获得一定频率的幅度。 现在我想从它那里得到的阶段,我不知道怎么办。
一些人能够解释,并告诉我如何从这个代码一定-f的阶段?
另外,我用它来16kHz的,与采样率44.1。 那是什么我可以运行它的样品的最小长度是多少?
double AlgorithmGoertzel( int16_t *sample,int sampleRate, double Freq, int len )
{
double realW = 2.0 * cos(2.0 * M_PI * Freq / sampleRate);
double imagW = 2.0 * sin(2.0 * M_PI * Freq / sampleRate);
double d1 = 0;
double d2 = 0;
double y;
for (int i = 0; i < len; i++) {
y=(double)(signed short)sample[i] +realW * d1 - d2;
d2 = d1;
d1 = y;
}
double rR = 0.5 * realW *d1-d2;
double rI = 0.5 * imagW *d1-d2;
return (sqrt(pow(rR, 2)+pow(rI,2)))/len;
}