Goertzel 알고리즘을 사용하여 특정 주파수의 진폭을 얻습니다. 지금 단계를 얻으려고하고 있는데 어떻게해야할지 모르겠다.Goertzel 알고리즘을 사용하여 위상을 얻으시겠습니까?
몇 사람이 설명하고이 코드에서 특정 -f 단계를 얻는 방법을 보여줄 수 있습니까?
또한 샘플 속도가 44.1 인 16khz로 사용하고 있습니다. 내가 실행할 수있는 샘플의 길이는 얼마인가?
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;
}
나는 마지막 두 결과를 이해하는 데 문제가'rR' 및 'rI'. [Wikipedia article] (http://en.wikipedia.org/wiki/Goertzel_algorithm)을 보면 수량 y (N)의 실수 부와 허수 부는 eq에 포함되어 있습니까? 11? –
"위상"은 무언가에 위상 * 상대 *를 지정하지 않으면 의미가 없습니다. 어떤 다른 신호 또는 어떤 절대 시간 지점으로. 여기에서 성취하고자하는 것을 실제로 설명했다면 도움이 될 것입니다. –
가능한 [narrow band-pass 필터를 사용하여 실시간으로 오디오 분석] (http://stackoverflow.com/questions/13477448/analyze-audio-in-real-time-with-narrow-band-pass-filter) –