2012-11-21 5 views
1

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; 
} 
+0

나는 마지막 두 결과를 이해하는 데 문제가'rR' 및 'rI'. [Wikipedia article] (http://en.wikipedia.org/wiki/Goertzel_algorithm)을 보면 수량 y (N)의 실수 부와 허수 부는 eq에 포함되어 있습니까? 11? –

+0

"위상"은 무언가에 위상 * 상대 *를 지정하지 않으면 의미가 없습니다. 어떤 다른 신호 또는 어떤 절대 시간 지점으로. 여기에서 성취하고자하는 것을 실제로 설명했다면 도움이 될 것입니다. –

+0

가능한 [narrow band-pass 필터를 사용하여 실시간으로 오디오 분석] (http://stackoverflow.com/questions/13477448/analyze-audio-in-real-time-with-narrow-band-pass-filter) –

답변

2

I 알고리즘이 상수 시퀀스를 승산 구성 생각하지 않지만 복소 신호 exp(n*i*2pi*freq/samplerate); 0 < = N < = 길이, 평균 크기를 얻고 (또는 신호의 전력하여).

복소수 출력은 R * exp (iθ)이므로 R은 주어진 주파수에서 전력을 제공하고 쎄타는 위상을 제공합니다. (theta == atan2 (imag, real))

+0

위상은 * what *과 관련이 있습니까? 이 맥락에서 이것은 완전히 자의적이고 무의미합니다. –

+2

@ PaulR 단계는 무언가와 관련 될 필요는 없습니다. bpsk를 수행하면 단계는 이전 단계와 관련됩니다. 네가 그걸 이해할 수 있기를 바란다. – Curnelious

+2

첫 번째 측정은 참조 단계를 제공합니다 ... –

1

Goertzel 필터를 공급하는 데 필요한 샘플 수는 원하는 또는 필요한 필터 대역폭에 반비례합니다. Goertzel은 주 로브 폭이 2 * Fs/N에 비례하는 Sinc 모양의 대역 통과 필터를 제공합니다.

복잡한 Goertzel을 사용하는 경우 결과 단계는 필터 데이터 창의 일부 지점을 기준으로합니다. 따라서 다른 일부 참조 시점에 상대적인 위상을 얻기 위해 오프셋을 계산해야 할 수도 있습니다.

+0

감사합니다. 50 샘플을 제공하면 1700hz의 좋은 bw를 얻습니다. 문제는 50이 많고 많이 놓칠 수 있습니다. Goerzel이 FFT보다 덜 좋게 만드는 것보다 50 샘플마다가 아니라 내 모든 샘플에서 실행됩니다. – Curnelious

3

극좌표 변환을 수행합니다. 그것은 당신에게 위상과 규모를 줄 것입니다.

크기 = SQRT ((Vreal * Vreal) + (Vimag * Vimag))

상 = ATAN2 (Vimag, Vreal)

관련 문제