Kasutaja:Konnula/liivakast

66a3aDTMFpad
Autovoni klahvistikud kasutasid DTFM-signaali, mille tuvastamiseks saab kasutada Goertzeli algoritmi.

Goertzeli algoritmi (ka Goertzeli filter, inglise keeles Goertzel algorithm) kasutatakse digitaalses signaalitöötluses (DSP) diskreetse Fourier' pöörde (DFT) üksikute komponentide tõhusaks määramiseks. Algoritmi leiutas Gerald Goertzel aastal 1958 ning seda algoritmi kasutatakse näiteks multisageduslikul kakstoonvalimisel. [1]

Goertzeli algoritm analüüsib üksikut sageduskomponenti digitaalsignaalist, kuid erinevalt tavalisest DFT arvutusest, rakendab Goertzeli algoritm igal iteratsioonil üht realarvulist koefitsienti, kasutades realarvulistel sisenditel realarvulist aritmeetikat. [2][3][4] Täieliku spektri katmisel (diskreetse sisendandmete hulga korral) on Goertzeli algoritmi keerukus suurem, kui Fourier' kiirteisendusel (FFT), kuid väikese arvu sageduskomponentide arvutamisel on see efektiivsem, kui FFT - seetõttu ei vaja algoritmi kasutamine suurt arvutusvõimsust. Goertzeli algoritmi saab kasutada ka tagurpidi (sinusoidi sünteesimiseks), kusjuures iga sämpli arvutamiseks tuleb teha üks korrutus- ning üks lahutamistehe. On olemas ka Goertzeli algoritmi optimiseeritud versioon, mis on veelgi efektiivsem, kuid ei anna nii täpseid tulemusi.[5]

Algoritm[6] muuda

Enne Goertzeli algoritmi kasutamist tuleb teha järgnevad sammud:

  1. Valida diskreetimissagedus (inglise keeles Sample rate);
  2. Valida ploki suurus N.

Diskreetimissagedus määratakse enamasti rakenduse järgi (näiteks helisignaali puhul kasutatakse tavaliselt 44.1 kHz sagedust ehk diskreeditakse signaali 44100 korda sekundis[7]), kuid seda saab leida ka näiteks Nyquisti teoreemi abil, mille alusel peab diskreetimissagedus olema vähemalt kaks korda suurem sisendsignaali suurimast sagedusest.[8] Ploki suuruse valimisel tuleb arvestada, et mida suurem on N, seda suurem on sageduse resolutsioon, kuid seda pikem on algoritmi tööks kuluv aeg.

Lisaks tuleb arvutada välja järgnevad konstandid:

 , kus   on otsitav sagedus (inglise keeles target frequency)

 

 

 

 

Seejärel saab rakendada Goertzeli algoritmi, kasutades kolme muutujat:  ,  ja  , millest   on hetkeväärtus,   eelmine ja   üle-eelmine väärtus. Muutujad   ja   tuleb algväärtustada nulliga iga andmeploki alguses.

Iga sämpli peal tuleb teostada järgnevad tehted:

 , kus   on vaadeldav sämpel

 

 

Pärast tehete teostamist igal N sämplil, saame muutujate lõppväärtusi kasutades leida sagedusploki magnituudi kompleksarvuna:

 , kus   on eelnevalt arvutatud koosinuse väärtus ning   on arvutatava kompleksarvu reaalosa.

 , kus   on eelnevalt arvutatud siinuse väärtus ning   on arvutatava kompleksarvu imaginaarosa.

Seejärel saame leida magnituudi reaalarvulise väärtuse, kasutades järgnevat valemit:

 

Oluline on enne järgmise sagedusploki juurde suundumist muuta muutujate   ja   väärtused uuesti nulliks.

Optimiseeritud Goertzeli algoritm muuda

Optimiseeritud Goertzeli algoritm erineb tavalisest Goertzeli algoritmist vaid selle poolest, et algoritmi viimases faasis ei arvutata välja magnituudi reaal- ja imaginaarosa, vaid leitakse magnituud järgneva valemi abil:

 

Konstantide arvutamine ning sämplite töötlemine toimub samamoodi, nagu tavalises Goertzeli algoritmis. Algoritmi optimiseeritud versioon on rohkem levinud, kuna see on efektiivsem.

Viited muuda

  1. Goertzel, G. (jaanuar 1958), "An Algorithm for the Evaluation of Finite Trigonometric Series", American Mathematical Monthly, 65 (1): 34–35, DOI:10.2307/2310304, JSTOR 2310304
  2. Mock, P. (21. märts 1985), "Add DTMF Generation and Decoding to DSP-μP Designs" (PDF), EDN, ISSN 0012-7515; also found in DSP Applications with the TMS320 Family, Vol. 1, Texas Instruments, 1989.
  3. Chen, Chiouguey J. (juuni 1996), Modified Goertzel Algorithm in DTMF Detection Using the TMS320C80 DSP (PDF), Application Report, Texas Instruments, SPRA066
  4. Schmer, Gunter (mai 2000), DTMF Tone Generation and Detection: An Implementation Using the TMS320C54x (PDF), Application Report, Texas Instruments, SPRA096a
  5. Cheng, Eric; Hudak, Paul (jaanuar 2009), Audio Processing and Sound Synthesis in Haskell (PDF), originaali (PDF) arhiivikoopia seisuga 28. märts 2017
  6. Staff, Embedded (28. august 2002). "The Goertzel Algorithm". Embedded.com (Ameerika inglise). Vaadatud 26. märtsil 2023.
  7. "Sample Rates - Audacity Manual". manual.audacityteam.org. Vaadatud 26. märtsil 2023.
  8. "What is the Nyquist theorem?". WhatIs.com (inglise). Vaadatud 26. märtsil 2023.