Praktická aplikácia Fourierovej transformácie na spracovanie signálu. Digitálne spracovanie signálu na mikrokontroléroch ARM7 Fourierova transformácia avr

Fourierova veta hovorí, že každý signál môže byť rozšírený do série v zmysle ortonormálneho súboru periodických funkcií (napríklad z hľadiska sínusov a kosínusov) s frekvenciami, ktoré sú násobkami frekvencie periodického signálu. Spektrálna analýza signálu je teda založená na hľadaní váhových koeficientov (vo všeobecnom prípade komplexných), ktorých modul zodpovedá zlomku oscilačného výkonu zodpovedajúcej harmonickej zavedenej do všeobecnej superpozície všetkých harmonických. .

Rýchla Fourierova transformácia

Rýchla Fourierova transformácia je výpočtový algoritmus, ktorý úspešne využíva vlastnosti periodicity goniometrických funkcií, aby sa vyhlo zbytočným výpočtom v diskrétnej Fourierovej transformácii (DFT), čím rýchlejšie nájde koeficienty vo Fourierovej expanzii. Hlavný rozdiel od diskrétnej transformácie je len v spôsobe výpočtu číselných hodnôt (algoritmus), a nie v samotnom spracovaní signálu. A v prípade FFT a v prípade DFT je výsledok výpočtu rovnaký. Jedinou požiadavkou pre algoritmus FFT je veľkosť vzorky, ktorá je násobkom N = 2L, kde L je akékoľvek kladné celé číslo. Najbežnejšie algoritmy FFT so základňou 2 sú časovo zdecimované a frekvenčne zdecimované.

V tomto článku je implementovaný FFT algoritmus na báze 2 s časovým stenčovaním (Cooley-Tukeyov algoritmus). Je ľahké ho získať preskúmaním niektorých vzorov DFT. Zavedieme takzvaný súčiniteľ otáčania:

V tomto prípade sú v DFT Fourierove koeficienty pre množstvo hodnôt signálu (f0,f1,…,fN-1) vyjadrené vzťahom:

Uvažujme sériu signálov 4 hodnôt: (f0,f1,f2,f3). Predstavme si Fourierovu transformáciu v maticovom tvare (normalizačný koeficient 1/N sa zadáva do stĺpcového vektora Cij na pravej strane výrazu):

Po zapísaní rotačných koeficientov podľa Eulerovho vzorca a určení ich hodnôt pre k = 0, 1, 2,.. 9 je možné zostaviť diagram (obr. 2), z ktorého je vzor opakujúcich sa koeficientov je viditeľný.

Obrázok 2. Mocninný rad w pre N=4

Nahradením číselných hodnôt v (4) dostaneme:

To znamená, že hodnoty w začínajúce od w4 sa rovnajú zodpovedajúcej hodnote od w0 do w3. Ďalej prepíšeme maticovú rovnicu (4) do neštandardnej formy (podobné označenia sú zavedené kvôli prehľadnosti ďalších operácií):

Vymeňme stĺpce matice a rozdeľme ju do dvoch skupín: podľa párnych indexov f0, f2 a nepárnych f1, f3:

Berieme do úvahy, že wk+1 = wkw1, potom výraz (6) bude prepísaný ako:

Použitie pomerov:

Dostaneme požadované koeficienty expanzie vo forme stĺpcového vektora s hodnotami buniek:

Grafické znázornenie algoritmu (obr. 3) vyzerá ako motýľ s otvorenými krídlami, preto sa tento spôsob výpočtu nazýva "motýľ".

Obrázok 3. Počítajte "Butterfly" pre sériu 4 členov

Takže v prvom kroku algoritmu sa členovia série hodnôt signálu rozdelia na párne a nepárne indexy. Potom sa vykoná motýľový graf, pozostáva z dvoch krokov, ich počet sa rovná mocnine dvoch veľkosti vzorky (N = 4 = 22). V každej fáze sa vykonávajú dva "motýle" a ich celkový počet sa nemení. Každá operácia motýľa zodpovedá jednej operácii násobenia. Pre porovnanie: v DFT so vzorkou (f0,f1,f2,f3) by bolo potrebné vykonať operáciu násobenia 4x4 = 16-krát a v prípade FFT iba 4-krát.

Táto séria môže byť tiež napísaná ako:

(2),
kde , k-tá komplexná amplitúda.

Vzťah medzi koeficientmi (1) a (3) je vyjadrený nasledujúcimi vzorcami:

Všimnite si, že všetky tieto tri reprezentácie Fourierovho radu sú úplne ekvivalentné. Niekedy je pri práci s Fourierovými radmi vhodnejšie použiť exponenty imaginárneho argumentu namiesto sínusov a kosínusov, teda použiť Fourierovu transformáciu v komplexnej forme. Pre nás je však vhodné použiť vzorec (1), kde Fourierov rad je reprezentovaný ako súčet kosínusových vĺn s príslušnými amplitúdami a fázami. V každom prípade je nesprávne tvrdiť, že výsledkom Fourierovej transformácie reálneho signálu budú komplexné amplitúdy harmonických. Ako správne hovorí wiki, "Fourierova transformácia (?) je operácia, ktorá mapuje jednu funkciu reálnej premennej na inú funkciu, tiež reálnej premennej."

Celkom:
Matematickým základom spektrálnej analýzy signálov je Fourierova transformácia.

Fourierova transformácia nám umožňuje reprezentovať spojitú funkciu f(x) (signál) definovanú na segmente (0, T) ako súčet nekonečného počtu (nekonečného radu) goniometrických funkcií (sínus a/alebo kosínus) s určitými amplitúdami. a fázy, uvažované aj na segmente (0, T). Takáto séria sa nazýva Fourierova séria.

Zaznamenali sme niekoľko ďalších bodov, ktorých pochopenie je potrebné pre správnu aplikáciu Fourierovej transformácie na analýzu signálu. Ak vezmeme do úvahy Fourierov rad (súčet sínusoidov) na celej osi X, potom môžeme vidieť, že mimo segmentu (0, T) bude funkcia reprezentovaná Fourierovým radom periodicky opakovať našu funkciu.

Napríklad v grafe na obr. 7 je pôvodná funkcia definovaná na segmente (-T\2, +T\2) a Fourierov rad predstavuje periodickú funkciu definovanú na celej osi x.

Je to preto, že samotné sínusoidy sú periodické funkcie a ich súčet bude periodickou funkciou.


obr.7 Znázornenie neperiodickej pôvodnej funkcie Fourierovým radom

Takto:

Naša pôvodná funkcia je spojitá, neperiodická, definovaná na nejakom intervale dĺžky T.
Spektrum tejto funkcie je diskrétne, to znamená, že je prezentované ako nekonečný rad harmonických zložiek - Fourierov rad.
V skutočnosti je určitá periodická funkcia definovaná Fourierovým radom, ktorý sa zhoduje s našou na segmente (0, T), ale táto periodicita nie je pre nás podstatná.

Periódy harmonických zložiek sú násobky segmentu (0, T), na ktorom je definovaná pôvodná funkcia f(x). Inými slovami, harmonické periódy sú násobky trvania merania signálu. Napríklad perióda prvej harmonickej Fourierovho radu sa rovná intervalu T, na ktorom je definovaná funkcia f(x). Perióda druhej harmonickej Fourierovho radu sa rovná intervalu T/2. A tak ďalej (pozri obr. 8).


obr.8 Periódy (frekvencie) harmonických zložiek Fourierovho radu (tu T = 2?)

V súlade s tým sú frekvencie harmonických zložiek násobky 1/T. To znamená, že frekvencie harmonických zložiek Fk sa rovnajú Fk= k\T, kde k je v rozsahu od 0 do?, napríklad k=0 F0=0; k = 1 F1 = 1\T; k = 2 F2 = 2\T; k=3 F3=3\T;… Fk= k\T (pri nulovej frekvencii - konštantná zložka).

Nech je našou pôvodnou funkciou signál zaznamenaný pre T=1 sek. Potom sa perióda prvej harmonickej bude rovnať trvaniu nášho signálu T1=T=1 sec a frekvencia harmonickej je 1 Hz. Perióda druhej harmonickej sa bude rovnať trvaniu signálu vydelenému 2 (T2=T/2=0,5 s) a frekvencia je 2 Hz. Pre tretiu harmonickú T3=T/3s a frekvencia je 3Hz. A tak ďalej.

Krok medzi harmonickými je v tomto prípade 1 Hz.

Signál s trvaním 1 sek je teda možné rozložiť na harmonické zložky (získať spektrum) s frekvenčným rozlíšením 1 Hz.
Na zvýšenie rozlíšenia 2-krát na 0,5 Hz je potrebné predĺžiť trvanie merania 2-krát - až 2 sekundy. Signál s trvaním 10 sekúnd je možné rozložiť na harmonické zložky (na získanie spektra) s frekvenčným rozlíšením 0,1 Hz. Neexistujú žiadne iné spôsoby, ako zvýšiť frekvenčné rozlíšenie.

Existuje spôsob, ako umelo zvýšiť trvanie signálu pridaním núl do poľa vzoriek. Ale nezvyšuje skutočné frekvenčné rozlíšenie.

3. Diskrétne signály a diskrétna Fourierova transformácia

S rozvojom digitálnej techniky sa zmenili aj spôsoby ukladania nameraných dát (signálov). Ak predtým bolo možné signál zaznamenať na magnetofón a uložiť na pásku v analógovej forme, teraz sú signály digitalizované a uložené v súboroch v pamäti počítača ako množina čísel (počet).

Obvyklá schéma merania a digitalizácie signálu je nasledovná.


obr.9 Schéma meracieho kanála

signál z merací prevodník prichádza do ADC počas časového úseku T. Vzorky signálu (vzorky) prijaté počas času T sú prenesené do počítača a uložené v pamäti.


obr.10 Digitalizovaný signál - N odčítaní prijatých v čase T

Aké sú požiadavky na parametre digitalizácie signálu? Zariadenie, ktoré konvertuje vstupný analógový signál na diskrétny kód ( digitálny signál) sa nazýva analógovo-digitálny prevodník (ADC) (Wiki).

Jedným z hlavných parametrov ADC je maximálna vzorkovacia frekvencia (alebo vzorkovacia frekvencia, anglicky sample rate) – frekvencia odoberania vzoriek signálu nepretržite v čase pri jeho vzorkovaní. Merané v hertzoch. ((Wiki))

Podľa Kotelnikovovej vety, ak má spojitý signál spektrum obmedzené frekvenciou Fmax, potom ho možno úplne a jednoznačne obnoviť z jeho diskrétnych vzoriek odoberaných v časových intervaloch. , t.j. s frekvenciou Fd ? 2*Fmax, kde Fd - vzorkovacia frekvencia; Fmax - maximálna frekvencia spektra signálu. Inými slovami, vzorkovacia frekvencia signálu (vzorkovacia frekvencia ADC) musí byť aspoň 2-násobkom maximálnej frekvencie signálu, ktorý chceme merať.

A čo sa stane, ak budeme čítať s nižšou frekvenciou, ako vyžaduje Kotelnikovova veta?

V tomto prípade nastáva efekt „aliasingu“ (alias stroboskopický efekt, moaré efekt), pri ktorom sa vysokofrekvenčný signál po digitalizácii zmení na nízkofrekvenčný signál, ktorý v skutočnosti neexistuje. Na obr. 5 vysokofrekvenčná červená sínusová vlna je skutočný signál. Modrá sínusová vlna s nižšou frekvenciou je fiktívny signál vyplývajúci zo skutočnosti, že počas vzorkovacieho času uplynie viac ako polovica periódy vysokofrekvenčného signálu.


Ryža. 11. Výskyt falošného nízkofrekvenčného signálu, keď vzorkovacia frekvencia nie je dostatočne vysoká

Aby sa predišlo efektu aliasingu, je pred ADC - LPF (dolnopriepustný filter) umiestnený špeciálny antialiasing filter, ktorý prepúšťa frekvencie pod polovicou vzorkovacej frekvencie ADC a odrezáva vyššie frekvencie.

Na výpočet spektra signálu z jeho diskrétnych vzoriek sa používa diskrétna Fourierova transformácia (DFT). Ešte raz poznamenávame, že spektrum diskrétneho signálu je "podľa definície" obmedzené frekvenciou Fmax, ktorá je menšia ako polovica vzorkovacej frekvencie Fd. Preto môže byť spektrum diskrétneho signálu reprezentované súčtom konečného počtu harmonických, na rozdiel od nekonečného súčtu pre Fourierov rad spojitého signálu, ktorého spektrum môže byť neobmedzené. Podľa Kotelnikovovej vety musí byť maximálna harmonická frekvencia taká, aby predstavovala aspoň dve vzorky, takže počet harmonických sa rovná polovici počtu vzoriek diskrétneho signálu. To znamená, že ak je vo vzorke N vzoriek, potom sa počet harmonických v spektre bude rovnať N/2.

Uvažujme teraz o diskrétnej Fourierovej transformácii (DFT).

Porovnanie s Fourierovým radom

Vidíme, že sa zhodujú, až na to, že čas v DFT je diskrétny a počet harmonických je obmedzený na N/2 – polovicu počtu vzoriek.

Vzorce DFT sú zapísané v bezrozmerných celočíselných premenných k, s, kde k sú počty vzoriek signálu, s sú počty spektrálnych zložiek.
Hodnota s udáva počet úplných kmitov harmonickej v perióde T (doba trvania merania signálu). Diskrétna Fourierova transformácia sa používa na zistenie amplitúd a fáz harmonických číselne, t.j. "na počítači"

Vráťme sa k výsledkom získaným na začiatku. Ako bolo uvedené vyššie, pri rozširovaní neperiodickej funkcie (náš signál) do Fourierovho radu, výsledný Fourierov rad vlastne zodpovedá periodickej funkcii s periódou T. (obr. 12).


obr.12 Periodická funkcia f(x) s periódou Т0, s periódou merania Т>T0

Ako vidno na obr. 12, funkcia f(x) je periodická s periódou Т0. Avšak vzhľadom na skutočnosť, že trvanie meranej vzorky T sa nezhoduje s periódou funkcie T0, funkcia získaná ako Fourierov rad má v bode T diskontinuitu. V dôsledku toho bude spektrum tejto funkcie obsahujú veľké množstvo vysokofrekvenčných harmonických. Ak by sa trvanie meranej vzorky T zhodovalo s periódou funkcie T0, potom by v spektre získanom po Fourierovej transformácii bola prítomná iba prvá harmonická (sínusoida s periódou rovnou trvaniu vzorky), pretože funkcia f (x) je sínusoida.

Inými slovami, program DFT "nevie", že náš signál je "kúsok sínusoidy", ale snaží sa reprezentovať periodickú funkciu ako sériu, ktorá má medzeru v dôsledku nekonzistentnosti jednotlivých častí sínusoida.

V dôsledku toho sa v spektre objavujú harmonické, ktoré by celkovo mali predstavovať formu funkcie vrátane tejto diskontinuity.

Aby sa teda získalo „správne“ spektrum signálu, ktoré je súčtom niekoľkých sínusoidov s rôznymi periódami, je potrebné, aby sa na periódu merania signálu zmestilo celé číslo periód každej sínusoidy. V praxi je možné túto podmienku splniť na dostatočne dlhú dobu trvania merania signálu.


Obr.13 Príklad funkcie a spektra signálu kinematickej chyby prevodovky

Pri kratšom trvaní bude obrázok vyzerať „horšie“:


Obr.14 Príklad funkcie a spektra vibračného signálu rotora

V praxi môže byť ťažké pochopiť, kde sú „skutočné komponenty“ a kde sú „artefakty“ spôsobené nenásobnosťou periód komponentov a trvaním vzorky signálu alebo „skokmi a prerušeniami“ priebeh. Samozrejme, slová „skutočné komponenty“ a „artefakty“ nie sú nadarmo citované. Prítomnosť mnohých harmonických na grafe spektra neznamená, že náš signál z nich skutočne „pozostáva“. Je to ako myslieť si, že číslo 7 "pozostáva" z čísel 3 a 4. Číslo 7 možno znázorniť ako súčet čísel 3 a 4 - to je správne.

Taký je aj náš signál... alebo skôr ani nie „náš signál“, ale periodická funkcia zostavená opakovaním nášho signálu (vzorkovanie) môže byť reprezentovaná ako súčet harmonických (sínusoidy) s určitými amplitúdami a fázami. Ale v mnohých prípadoch dôležitých pre prax (pozri obrázky vyššie) je skutočne možné dať do súvislosti získané harmonické v spektre so skutočnými procesmi, ktoré sú svojou povahou cyklické a významne prispievajú k tvaru signálu.

Niektoré výsledky

1. Skutočný meraný signál, trvanie T sec, digitalizovaný ADC, tj reprezentovaný súborom diskrétnych vzoriek (N kusov), má diskrétne neperiodické spektrum, reprezentované súborom harmonických (N/2 kusov ).

2. Signál je reprezentovaný množinou reálnych hodnôt a jeho spektrum je reprezentované množinou reálnych hodnôt. Harmonické frekvencie sú kladné. To, že pre matematikov je pohodlnejšie reprezentovať spektrum v komplexnej forme pomocou záporných frekvencií, neznamená, že „je to správne“ a „takto by sa to malo robiť vždy“.

3. Signál meraný v časovom intervale T je určený iba v časovom intervale T. Čo sa stalo predtým, ako sme začali merať signál, a čo sa stane potom - to veda nie je známa. A v našom prípade - to nie je zaujímavé. DFT časovo obmedzeného signálu dáva svoje "skutočné" spektrum v tom zmysle, že za určitých podmienok umožňuje vypočítať amplitúdu a frekvenciu jeho zložiek.

Použité materiály a iné užitočné materiály.

Ako zobrazovacie zariadenie sa používa dvojriadkový znakový LCD indikátor. Hlavným bodom pri realizácii tohto projektu nie je hardvér, ale softvér, respektíve implementácia diskrétnej Fourierovej transformácie (DFT) na 8-bitovom mikrokontroléri. Hneď je potrebné poznamenať, že autor nie je odborníkom v tejto oblasti a preto začal od základov – jednoduchou diskrétnou Fourierovou transformáciou. Algoritmus rýchlej Fourierovej transformácie je nielen rýchly, ale aj pomerne zložitý.

Diskrétna Fourierova transformácia (v anglickej literatúre DFT, Discrete Fourier Transform) je jednou z Fourierových transformácií široko používaných v algoritmoch digitálneho spracovania signálu (jej modifikácie sa používajú pri kompresii zvuku v MP3, kompresii obrazu v JPEG atď.), v iných oblastiach súvisiacich s analýzou frekvencií v diskrétnom (napríklad digitalizovanom analógovom) signáli. Diskrétna Fourierova transformácia vyžaduje ako vstup diskrétnu funkciu. Takéto funkcie sa často vytvárajú vzorkovaním (vzorkovanie hodnôt zo spojitých funkcií).

Schematický diagram spektrálneho analyzátora zvukový signál Je veľmi jednoduchý a podmienečne ho možno rozdeliť na digitálnu a analógovú časť.

Digitálnu časť tvorí mikrokontrolér a k nemu pripojený LCD indikátor. Mikrokontrolér je taktovaný kremenný rezonátor 16 MHz, napájacie napätie +5 V sa používa ako referenčné napätie pre ADC mikrokontroléra.
Dátová zbernica LCD indikátora je pripojená na C port mikrokontroléra (I/O linky PC0-PC3), riadiaca zbernica je pripojená na D(PD5, PD6) port mikrokontroléra. Indikátor pracuje v 4-bitovom režime. Na nastavenie kontrastu sa používa premenlivý odpor 4,7 kΩ. Pre prácu s indikátorom boli vytvorené vlastné znaky na zobrazenie 8 horizontálnych pruhov analyzátora, tieto vlastné znaky zaberajú všetkých 64 bajtov RAM indikátora LCD.

Mikrokontrolér je napájaný externým 16 MHz kremenným rezonátorom.

Analógová časť zariadenia je najdôležitejšou časťou a je predzosilňovačom signálu elektretového mikrofónu, ktorého výstup je pripojený na kanál ADC0 ADC zabudovaného v mikrokontroléri. Nulovú úroveň na vstupe ADC potrebujeme nastaviť presne na polovicu referenčného napätia, t.j. 2,5 V. V tomto prípade môžeme použiť kladnú aj zápornú polvlnu signálu, ale jej amplitúda by nemala prekročiť stanovenú hranicu, t.j. zisk musí byť jemne vyladený, aby sa zabránilo preťaženiu. Všetky vyššie uvedené podmienky spĺňa bežný čip operačného zosilňovača s nízkym výkonom.

Algoritmus DFT je o niečo pomalší v porovnaní s rýchlou Fourierovou transformáciou. Náš spektrálny analyzátor však nevyžaduje vysokú rýchlosť a ak dokáže poskytnúť rýchlosť aktualizácie približne 30 snímok za sekundu, bude to viac než dosť na vizualizáciu spektra zvukového signálu. V každom prípade je v našej verzii možné dosiahnuť rýchlosť 100 snímok za sekundu, ale to je už príliš vysoká hodnota parametra pre dvojriadkový znakový LCD indikátor a neodporúča sa. Vzorkovacia frekvencia je 20 kHz pre 32 bodovú diskrétnu Fourierovu transformáciu a keďže výsledok transformácie je symetrický, stačí nám použiť len prvú polovicu, t.j. prvých 16 výsledkov. Preto môžeme zobraziť frekvenčné spektrum až do 10 kHz a rozlíšenie analyzátora je 10 kHz/16 = 625 Hz.

Autor návrhu sa pokúsil zvýšiť rýchlosť výpočtu DFT. Ak má táto transformácia N bodov, potom musíme nájsť hodnoty N2/2 sínus a kosínus. Pre našu 32 bodovú transformáciu musíme nájsť 512 sínusových a kosínusových hodnôt. Pred ich nájdením však musíme vypočítať uhol (stupne), čo bude vyžadovať určitý čas procesora, takže bolo rozhodnuté použiť na tieto výpočty tabuľky hodnôt. Výpočty v programe mikrokontroléra nepoužívajú výpočty s pohyblivou rádovou čiarkou a čísla s dvojnásobnou presnosťou (dvojitá), pretože spracovanie na 8-bitovom mikrokontroléri zaberie viac času. Namiesto toho sú hodnoty vo vyhľadávacích tabuľkách 16-bitové celočíselné údaje vynásobené 10 000. Potom sa po vykonaní konverzie výsledky vydelia číslom 10 000. S týmto prístupom je možné vykonať 120 32-bodových konverzií za druhý, čo je pre naše zariadenia viac než dosť.

Ukážka činnosti spektrálneho analyzátora na mikrokontroléri ATmega32

K stiahnutiu

Zdrojový kód (program mikrokontroléra, tabuľky sínusových, kosínusových a uhlových údajov) -

  • Je jasné, že na AVR-ke je ťažké ísť ďalej ako k ľahkej hudbe, nie k rovnakým parametrom. Ale 120 32-bodových konverzií za sekundu môže stačiť na väčšinu úloh. Vzorka 625 Hz, samozrejme, môžete si vziať ďalšiu, alebo skôr stratiť obnovovaciu frekvenciu. Stojí za zmienku, že MK sa bude cítiť zle, z hľadiska výkonu je málo, čo na ňom môžete zavesiť. Ale tu môžete tiež zorganizovať vydanie výsledku hardvérovými metódami prenosu údajov. Potom to bude pomocný MK a ten hlavný bude z neho iba prijímať dáta a spracovávať ich spôsobom kompatibilným s inými procesmi. Vo všeobecnosti to stále závisí od frekvencie procesora. Kedysi bolo možné pretaktovať mega nad 20 MHz, no na tieto úlohy dostaneme zrejme len záseky na vysokých frekvenciách. Nápad dobrý, len keby sa natrelo viac tej časti karimatky ... je to jeho realizácia na MK
  • Vyrobil som aj zaujímavejšie analyzátory: You Tube alebo variant na farebnom LCD: You Tube vychádza zo slávnej Chen knižnice :)
  • "Musíme vypočítať uhol (stupne)" Môže niekto upresniť, ako sa vypočítavajú hodnoty pre tieto tabuľky?
  • S tabuľkou sínusov a kosínusov je všetko jasné. Nie je jasné, ako sa vypočítavajú hodnoty v tabuľke degree_lookup?

Všetky signály, či už ste ich vymysleli alebo ste ich pozorovali vo vesmíre, sú v skutočnosti len súčtom jednoduchých sínusoidov rôznych frekvencií.

Vyrobil som malý audio spektrálny analyzátor (0 - 10 kHz) z 16x2 LCD a mikrokontroléra ATmega32. Začal som s jednoduchými DFT (Discrete Fourier Transform). FFT (Fast Fourier Transform) sa od DFT líši len vyššou rýchlosťou a trochu zložitejším algoritmom, nepoužil som ho, možno ho doplním neskôr.

DFT je v porovnaní s FFT pomalý. Môj LCD spektrálny analyzátor nevyžaduje vysokú rýchlosť, ktorú môže poskytnúť FFT, a ak sa obrazovka mení rýchlosťou približne 30 snímok za sekundu, potom je to viac než dosť na vizualizáciu zvukového spektra. Ale okolo 100 fps sa dostanem aj tak, ale príliš vysoká obnovovacia frekvencia sa pre LCD neodporúča. Zvuk vzorkovaný pri 20 kHz má za následok 32 DFT bodov. Keďže výsledok transformácie je symetrický, potrebujem použiť iba prvých 16 výsledkov. V súlade s tým je maximálna frekvencia 10 kHz. Takže 10 kHz/16 = 625 Hz.

Snažil som sa urýchliť výpočet DFT. Ak existuje N bod DFT, potom musíme nájsť sínus a kosínus (N^2) / 2. Pre 32-bodový DFT musíme nájsť sínus a kosínus 512. Pred hľadaním sínusu a kosínus, musíme nájsť uhol (stupne), ktorý zaberá určitý čas procesora. K tomu som vyrobil tabuľky pre sínus a kosínus. Vyrobil som sínusové a kosínusové 16-bitové premenné vynásobením sínusových a kosínusových hodnôt číslom 10 000. Po prevode musím vydeliť každý výsledok číslom 10 000. Teraz môžem vypočítať 120 32-bodových DFT za sekundu, čo je viac ako dosť pre spektrálny analyzátor.

Displej

Použil som vlastné znaky pre LCD načítané do 64 bajtovej internej pamäte LCD. Na internete som videl video, kde sa 16x2 LCD používa ako displej spektrálneho analyzátora a použil som túto myšlienku.

Audio vstup

Jednou z najdôležitejších častí spektrálneho analyzátora je získavanie signálu z elektretového mikrofónu. Osobitná pozornosť by sa mala venovať vývoju predzosilňovač pre mikrofón. Potrebujeme nastaviť nulovú úroveň na vstupe ADC a maximálnu úroveň rovnú polovici napájacieho napätia, t.j. 2,5 V. Dá sa naň aplikovať napätie od -2,5V do +2,5V. Predzosilňovač musí byť naladený tak, aby tieto limity neprekročil. Ako predzosilňovač mikrofónu som použil operačný zosilňovač LM324.

Zoznam rádiových prvkov

Označenie Typ Denominácia Množstvo PoznámkaObchodMôj poznámkový blok
Displej
MK AVR 8-bit

ATmega32

1 Do poznámkového bloku
Kondenzátor22 pF2 Do poznámkového bloku
Kondenzátor0,1 uF1 Do poznámkového bloku
elektrolytický kondenzátor100uF1 Do poznámkového bloku
Rezistor

100 ohmov

1 Do poznámkového bloku
Trimmerový odpor4,7 kOhm1 Do poznámkového bloku
Kremenný rezonátor16 MHz1 Do poznámkového bloku
displej LCD16x21 Do poznámkového bloku
pohonná jednotka5 V1 Do poznámkového bloku
Audio vstup
U1 Operačný zosilňovač

LM324

1 Do poznámkového bloku
C1 Kondenzátor1 uF1 Do poznámkového bloku
C8 Kondenzátor0,01 uF1 Do poznámkového bloku
R1 Rezistor

220 kOhm

1 Do poznámkového bloku
R2, R3 Rezistor

10 kOhm

2 Do poznámkového bloku
R4, R9 Rezistor

1 kOhm

2 Do poznámkového bloku
R5 Rezistor

Pre digitálne spracovanie signálu (DSP) existuje mnoho špecializovaných procesorov, toto je DSP zo série Texas Instruments TMS320, ktorý obsahuje jednoduché celočíselné jadrá a príšery ako podrodina C6000, ktoré spracovávajú dáta s pohyblivou rádovou čiarkou. Existuje celý rad ADSP od Analog Devices (ktorý zahŕňa viac-menej univerzálny BlackFin), existuje viac jednoduché riešenia od MicroChip - dsPIC.

Špecializovaný DSP je však dobrý, ale je vždy taký potrebný? Áno, pri obrovskom toku informácií je to jednoducho nepostrádateľné, existujú však aj jednoduchšie úlohy spracovania. Konkrétne ma zaujala úloha dvojitej konverzie - audio signál je konvolvovaný, čím sa získa spektrum, potom je možné na spektre vykonávať ľubovoľné operácie a vykonávať inverznú konverziu, čím sa získa spracovaný signál. To všetko je potrebné urobiť v reálnom čase a získať kvalitu, ktorá nie je nižšia ako kvalita telefónu.

Teraz sa nepíše rok 2000, existujú jednočipové riešenia založené na produktívnych jadrách ARM7 / Cortex-M3, ktoré výrazne zlacneli, sú 32-bitové, majú hardvérovú implementáciu 32-bitovej operácie násobenia (navyše takmer operácia násobenia DSP s akumuláciou a 64 bitovým výsledkom) a Cortex-M3 zahŕňa aj hardvérové ​​delenie.

Chcem vás hneď upozorniť, že spracovanie signálov nie je môj profil, takmer všetky poznatky (či skôr pochopenie princípov) sa zachovali ešte od inštitútu, teraz som ich chcel len skontrolovať a implementovať. Chcem tým povedať, že môžu existovať nepresnosti v popise, zámene pojmov atď. Popravde, akademická presnosť mi veľmi neprekážala.

Pre takmer každý DSP je vyššie uvedená úloha jednoduchá a ľahká. Ako sa však na ňom bude správať univerzálne jadro RISC? Ak vezmeme do úvahy AVR alebo PIC, je nepravdepodobné, že budú stačiť. Ovplyvňuje 8-bitovú a nízku taktovaciu frekvenciu. Hoci Elm-Chan má návrhy, v ktorých vykonáva FFT na AVR a kreslí spektrum signálu. V tomto prípade sa však robí len vykresľovanie v reálnom čase (s minimálnou presnosťou spracovania) a nie úplné spracovanie signálu s prijateľnou kvalitou zvuku.

Ako experimentálny čip bol zvolený LPC2146 založený na jadre ARM7TDMI-S s maximálnou taktovacou frekvenciou 60 MHz (v praxi nefunguje na 72 a dokonca ani na 84 MHz). prečo? Jednak mám na to ladiacu dosku a jednak je na doske ADC a DAC, t.j. minimálna potrebná vonkajšia úprava.

Trochu teórie

V prvom rade bolo zaujímavé zhodnotiť výkon FFT (Fast Fourier Transform) na mikrokontroléroch ARM. Na základe tohto hodnotenia môžeme dospieť k záveru: bude mať dostatočnú rýchlosť na spracovanie toku zvukových dát a signálu s akou vzorkovacou frekvenciou a koľko kanálov je možné spracovať na takomto mikrokontroléri.

Na základe Fourierovej transformácie môžete zostaviť zložité filtre (a s veľmi lákavými vlastnosťami). Primárne ma zaujímali úlohy zmeny tónu signálu (zvyšovanie a znižovanie spektra) a „odraz“ spektra. Ten je potrebný v rádiách SDR, aby bolo možné počúvať rádiový prenos v dolnom postrannom pásme LSB.

Nebudem preberať teóriu a vysvetľovať, čo je to Fourierova transformácia, materiálov na túto tému je pomerne veľa, z toho, čo som použil: wiki a kapitola z veľmi dobrej a poučnej knihy.

Softvérová implementácia

Existuje veľa softvérových implementácií FFT, ja som však napísal svoju vlastnú. Hlavným cieľom, ktorý som sledoval, bola optimalizácia kódu pre konkrétnu architektúru. Po prvé som sa hneď zameral na 32-bit a po druhé boli potrebné len celočíselné výpočty a bolo žiaduce vyhnúť sa operácii delenia. Pri týchto požiadavkách je už problematické vyzdvihnúť niečo hotové.

Všetky konštanty, ktoré bolo možné vypočítať vopred, boli vypočítané a umiestnené do tabuliek (väčšinou hodnoty goniometrických funkcií). Toto je hlavná optimalizácia algoritmu, inak takmer úplne opakuje opísaný algoritmus.

Najdôležitejšia je požiadavka na celočíselné výpočty. Pri implementácii dokonca došlo k chybe, kvôli ktorej došlo k pretečeniu v jednej z 32-bitových premenných slučky. Navyše sa to nevyskytovalo na všetkých testovacích údajoch, takže to spôsobovalo slušnú bolesť hlavy, kým sa nenašlo.

Všetky pramenné texty som zhromaždil v jednom archíve. Implementácia nie je konečná, existujú duplicitné výpočty (symetria spektra a fáz sa neberie do úvahy) a je potrebná optimalizácia použitia vyrovnávacích pamätí, pretože v súčasnosti sa na výpočty používa príliš veľa Náhodný vstup do pamäťe(takmer 12k na prevod z 1024 bodov).

Prvé testy

Drum roll: testovanie rýchlosti prevodu na vzorke 1024 bodov, frekvencia jadra procesora je 60 MHz. Testovanie prebiehalo v emulátore, takže netvrdí, že je 100% presný, ale tento výsledok sa dá použiť ako indikátor (podľa mojich doterajších skúseností emulátor klamal, ale nie veľmi). Test prvej verzie kódu, kompilátor RealView MDK, možnosť optimalizácie O3, režim generovania kódu ARM.

Čo teda vidíme:

6 ms pre každú konverziu, celkovo niečo cez 12 ms pre spiatočnú konverziu. Ukazuje sa, že pri vzorkovacej frekvencii 44100 Hz (štandard pre zvuk) a vzorkách s rozlíšením až 16 bitov budú čisté výpočty trvať ~ 44 * 12 ms = 528 ms. A to na strednej verzii firmvéru, keď niektoré optimalizácie kódu ešte nie sú dokončené (podľa odhadov je možné algoritmus zrýchliť takmer 2-krát viac)! Len si myslím, že je to skvelé skóre.

Celkovo sa očakáva zaťaženie jadra okolo 50 %, ďalších 50 % zostáva na konverzie cez spektrum a režijné náklady pri práci s ADC, DAC a inými dátovými prenosmi. Ak znížime vzorkovaciu frekvenciu na „telefónnu“ úroveň (asi 4800-9600Hz), zaťaženie jadra bude ešte nižšie (asi 15-30%).

Takže matematická časť je viac-menej jasná. Môžete prejsť na konkrétnu implementáciu.

Železo

Pre testovaciu platformu bola odobratá ladiaca doska Keil MCB2140 s reproduktorom. Na pripojenie k lineárnemu výstupu zariadenia bol prispájkovaný kábel Mini-Jack a zostavil sa jednoduchý vstupný reťazec. Ako už bolo spomenuté, doska už má reproduktor pripojený k analógovému výstupu mikrokontroléra a nechýbajú ovládacie prvky (tlačidlo a potenciometer).

Tu je náčrt vstupného obvodu:


Ladenie softvéru prebiehalo v etapách:

  1. Odladenie všetkých potrebných periférií: ADC, DAC, časovače, LED indikácia.
  2. Test s digitalizáciou signálu: Dáta zdigitalizujem požadovanou rýchlosťou a vložím do vyrovnávacej pamäte, následne vytiahnem údaje z vyrovnávacej pamäte a prehrám signál. Tie. jednoduchý posun signálu v čase, bez akýchkoľvek transformácií. V tejto fáze sa testuje mechanizmus práce s 2 nárazníkmi, ktorý je potrebný pre ďalšiu prácu.
  3. TO predošlá verzia sú pridané dopredné a inverzné Fourierove transformácie. Tento test nakoniec skontroluje správnosť kódu FFT, ako aj kontrolu, či kód zapadá do dostupného výkonu.
  4. Potom je hlavná chrbtica aplikácie hotová, môžete prejsť k praktickým aplikáciám.

Problém nastal po pridaní FFT do kódu: v signáli sa objavil cudzí šum a píšťalky. Vo všeobecnosti sa mi toto správanie zdalo dosť zvláštne, pretože. bez konverzie zostal signál prechádzajúci digitálnou cestou dosť čistý. Prvý dôvod: po analógovom obvode nebola amplitúda signálu do ADC plná (0-3,3V), ale iba v rozmedzí 0,5-2V pri maximálnej hlasitosti prehrávača, druhý: pomerne silný šum spôsobený na celočíselné výpočty (+ -1 jednotka, čo sa ukázalo ako dostatočné na objavenie sa počuteľného rušenia).

Na boj proti prvému problému bolo rozhodnuté začať ladiť analógovú časť. A na vyriešenie problému so šumom skúste použiť dolnopriepustný filter.

Aplikácia 1: Zmena tónu signálu

Doska má potenciometer ( premenlivý odpor), možno ho použiť na ovládanie. V tomto prípade nastavuje posun spektra signálu nahor a nadol, čo je dosť na „premenu“ vašich obľúbených skladieb.

Čo sa deje vo frekvenčnej doméne:


Výsledok konverzie je obsiahnutý v 2 bufferoch. Jeden nárazník je reálna časť a druhá je imaginárna časť. Fyzický význam čísel získaných v nich: skutočná časť obsahuje hodnoty harmonických, imaginárna časť obsahuje fázový posun pre tieto harmonické. Navyše, ako vidíte, pôvodný signál je opísaný N-hodnotami a po transformácii sa získajú 2N-hodnoty. Množstvo informácií sa nemení a dvojnásobné zvýšenie množstva informácií je spôsobené tým, že údaje vo vyrovnávacej pamäti majú redundanciu vo forme duplikácie hodnôt.




Hore