Witam.
Jestem poczatkujacym programista w dziedzinie DSP wiec moje pytanie moze wydac sie dla niektorych banalne ale prosze o wyrozumialosc i pomoc.
Korzystam z algorytmu Goertzela do detekcji kodow DTMF. Niestety algorytm zwraca mi bardzo dziwne wyniki.
Wykonalem prosty test: Wygenerowalem prosty sygnal sinusoidalny o okreslonej czestotliwosci. Przepuscilem ten sygnal przez algorytm Goertzela wykrywajac kolejne czestotliwosci. Wykonalem ten test dla roznych czestotliwosci sygnalu wejsciowego.
Algorytm prawidlowo pokazuje najwieksza wartosc dla czestotliwosci najblizszej czestotliwosci sygnalu wejsciowego ale wartosc ta jest dla mnie calkowicie niezrozumiala. Wynik ten zmienia sie w zaleznosci od ilosci badanych probek i co gorsza od czestotliwosci sygnalu wejsciowego. Nie mam zielonego pojecia jak przeliczyc wynik algorytmu Goertzela na rzeczywista amplitude.
Dla lepszego zrozumienia problemu podam wam kilka przyklaodwych danych liczbowych: Przy probkowaniu z czestotliwoscia 8kHz i amplitudzie rownej 1000 testowalem czestotliwosci sygnalu wejsciowego od 40Hz do 4kHz ze skokiem 1. Nastepnie sprawdzalem wynik algorytmu dla kazdej z tych czestotliwosci.
Przy ilosci probek rownej 1000 uzyskalem nastepujacy taki wynik (fragment):
f -> wynik
---------------
40 -> 500028
41 -> 482863
42 -> 449923
43 -> 401914
44 -> 333461
45 -> 245575
46 -> 150786
47 -> 65923
48 -> 500000
49 -> 483563
50 -> 449935
51 -> 400252
52 -> 331041
53 -> 243961
54 -> 150679
55 -> 66502
56 -> 500005
57 -> 484070
58 -> 449868
59 -> 399067
60 -> 329283
61 -> 242799
62 -> 150629
63 -> 66934
Po zwiekszeniu ilosci probek do 2000 uzyskalem juz:
f -> wynik
---------------
40 -> 1000057
41 -> 900017
42 -> 652131
43 -> 300661
44 -> 1000000
45 -> 900025
46 -> 650753
47 -> 300631
48 -> 1000000
49 -> 899995
50 -> 649669
51 -> 300608
52 -> 1000000
53 -> 899992
54 -> 648622
55 -> 300590
Juz na pierwszy rzut oka widac ze wyniki powtarzaja sie ale okres jest zalezny od ilosci probek. Obawiam sie ze moze byc wiecej czynnikow wplywajacych na wynik algorytmu Goertzela. Nie wiem juz jak stwierdzic jak ten wynik odzwierciedla oryginalna amplitude. Pomozcie prosze.
...:: ElwiZ ::...
Jestem poczatkujacym programista w dziedzinie DSP wiec moje pytanie moze wydac sie dla niektorych banalne ale prosze o wyrozumialosc i pomoc.
Korzystam z algorytmu Goertzela do detekcji kodow DTMF. Niestety algorytm zwraca mi bardzo dziwne wyniki.
Wykonalem prosty test: Wygenerowalem prosty sygnal sinusoidalny o okreslonej czestotliwosci. Przepuscilem ten sygnal przez algorytm Goertzela wykrywajac kolejne czestotliwosci. Wykonalem ten test dla roznych czestotliwosci sygnalu wejsciowego.
Algorytm prawidlowo pokazuje najwieksza wartosc dla czestotliwosci najblizszej czestotliwosci sygnalu wejsciowego ale wartosc ta jest dla mnie calkowicie niezrozumiala. Wynik ten zmienia sie w zaleznosci od ilosci badanych probek i co gorsza od czestotliwosci sygnalu wejsciowego. Nie mam zielonego pojecia jak przeliczyc wynik algorytmu Goertzela na rzeczywista amplitude.
Dla lepszego zrozumienia problemu podam wam kilka przyklaodwych danych liczbowych: Przy probkowaniu z czestotliwoscia 8kHz i amplitudzie rownej 1000 testowalem czestotliwosci sygnalu wejsciowego od 40Hz do 4kHz ze skokiem 1. Nastepnie sprawdzalem wynik algorytmu dla kazdej z tych czestotliwosci.
Przy ilosci probek rownej 1000 uzyskalem nastepujacy taki wynik (fragment):
f -> wynik
---------------
40 -> 500028
41 -> 482863
42 -> 449923
43 -> 401914
44 -> 333461
45 -> 245575
46 -> 150786
47 -> 65923
48 -> 500000
49 -> 483563
50 -> 449935
51 -> 400252
52 -> 331041
53 -> 243961
54 -> 150679
55 -> 66502
56 -> 500005
57 -> 484070
58 -> 449868
59 -> 399067
60 -> 329283
61 -> 242799
62 -> 150629
63 -> 66934
Po zwiekszeniu ilosci probek do 2000 uzyskalem juz:
f -> wynik
---------------
40 -> 1000057
41 -> 900017
42 -> 652131
43 -> 300661
44 -> 1000000
45 -> 900025
46 -> 650753
47 -> 300631
48 -> 1000000
49 -> 899995
50 -> 649669
51 -> 300608
52 -> 1000000
53 -> 899992
54 -> 648622
55 -> 300590
Juz na pierwszy rzut oka widac ze wyniki powtarzaja sie ale okres jest zalezny od ilosci probek. Obawiam sie ze moze byc wiecej czynnikow wplywajacych na wynik algorytmu Goertzela. Nie wiem juz jak stwierdzic jak ten wynik odzwierciedla oryginalna amplitude. Pomozcie prosze.
...:: ElwiZ ::...
