Furjē transformācijas praktiskā pielietošana signālu apstrādei. Digitālā signāla apstrāde uz ARM7 mikrokontrolleriem Furjē transformācijas avr

Furjē teorēma nosaka, ka jebkuru signālu var izvērst virknē ortonormālā periodisko funkciju komplektā (piemēram, sinusus un kosinusus) ar frekvencēm, kas ir periodiskā signāla frekvences daudzkārtējas. Tādējādi signāla spektrālā analīze balstās uz svēršanas koeficientu (vispārējā gadījumā sarežģīto) meklēšanu, kuru modulis atbilst attiecīgās harmonikas svārstību jaudas daļai, kas ievadīta visu harmoniku vispārējā superpozīcijā. .

Ātrā Furjē transformācija

Ātrā Furjē transformācija ir aprēķinu algoritms, kas veiksmīgi izmanto trigonometrisko funkciju periodiskuma īpašības, lai izvairītos no nevajadzīgiem aprēķiniem diskrētajā Furjē transformācijā (DFT), tādējādi ļaujot ātrāk atrast Furjē paplašināšanas koeficientus. Galvenā atšķirība no diskrētās pārveidošanas ir tikai skaitlisko vērtību aprēķināšanas metodē (algoritmā), nevis pašā signāla apstrādē. Gan FFT, gan DFT gadījumā aprēķinu rezultāts ir vienāds. Vienīgā prasība FFT algoritmam ir izlases lielums, kas ir N = 2L daudzkārtnis, kur L ir jebkurš pozitīvs vesels skaitlis. Visizplatītākie 2. bāzes FFT algoritmi ir: laika decimēšana un frekvences decimēšana.

Šajā darbā ir realizēts radix-2 FFT algoritms ar laika retināšanu (Cooley-Tukey algoritms). To ir viegli iegūt, izpētot dažus DFT likumus. Ieviesīsim tā saukto rotācijas koeficientu:

Šajā gadījumā DFT Furjē koeficientus vairākām signāla vērtībām (f0, f1,…, fN-1) izsaka ar attiecību:

Apsveriet signālu sēriju ar 4 vērtībām: (f0, f1, f2, f3). Parādīsim Furjē transformāciju matricas formā (normalizācijas koeficients 1/N ir iekļauts kolonnas vektorā Cij izteiksmes labajā pusē):

Uzrakstot rotācijas koeficientus, izmantojot Eilera formulu, un nosakot to vērtības k = 0, 1, 2, .. 9, var izveidot diagrammu (2. att.), no kuras var redzēt atkārtojošo koeficientu modeli.

2. attēls. Jaudas rinda w N=4

Aizstājot skaitliskās vērtības ar (4), mēs iegūstam:

Tas ir, w vērtības, sākot no w4, ir vienādas ar atbilstošo vērtību no w0 līdz w3. Tālāk mēs pārrakstām matricas vienādojumu (4) nestandarta formā (turpmāko darbību skaidrības labad tiek ieviesti līdzīgi apzīmējumi):

Apmainīsim matricas kolonnas, sadalot to divās grupās: pēc pāra f0, f2 un nepāra f1, f3 indeksiem:

Ņemsim vērā, ka wk+1 = wkw1, tad izteiksme (6) tiks pārrakstīta šādi:

Izmantojot koeficientus:

Mēs iegūstam nepieciešamos izplešanās koeficientus kolonnas vektora veidā ar šūnu vērtībām:

Algoritma grafiskais attēlojums (3. att.) izskatās kā tauriņš ar atvērtiem spārniem, tāpēc šo aprēķina metodi sauc par “tauriņu”.

3. attēls. Tauriņu grafiks 4 terminu sērijai

Tātad algoritma pirmajā solī vairāku signālu vērtību dalībnieki tiek sadalīti pāra un nepāra indeksos. Pēc tam tiek izpildīts “tauriņa” grafiks, kas sastāv no diviem posmiem, kuru skaits ir vienāds ar divu no izlases lieluma pakāpēm (N = 4 = 22). Katrā posmā tiek izpildīti divi “tauriņi”, un to kopējais skaits paliek nemainīgs. Katra tauriņa darbība atbilst vienai reizināšanas darbībai. Salīdzinājumam: DFT ar paraugu ņemšanu (f0,f1,f2,f3) reizināšanas operācija būtu jāveic 4×4 = 16 reizes, bet FFT gadījumā tikai 4 reizes.

Šo sēriju var uzrakstīt arī šādi:

(2),
kur , k-tā kompleksā amplitūda.

Attiecību starp koeficientiem (1) un (3) izsaka ar šādām formulām:

Ņemiet vērā, ka visi šie trīs Furjē sērijas attēlojumi ir pilnīgi līdzvērtīgi. Dažreiz, strādājot ar Furjē sēriju, ir ērtāk izmantot iedomātā argumenta eksponentus, nevis sinusus un kosinusus, tas ir, Furjē transformāciju izmantot kompleksā formā. Bet mums ir ērti izmantot formulu (1), kur Furjē rinda tiek uzrādīta kā kosinusu summa ar atbilstošām amplitūdām un fāzēm. Jebkurā gadījumā ir nepareizi teikt, ka reāla signāla Furjē transformācija radīs sarežģītas harmonikas amplitūdas. Kā Wiki pareizi saka: "Furjē transformācija (?) ir darbība, kas saista vienu reāla mainīgā funkciju ar citu funkciju, arī reālu mainīgo."

Kopā:
Signālu spektrālās analīzes matemātiskais pamats ir Furjē transformācija.

Furjē transformācija ļauj attēlot nepārtrauktu funkciju f(x) (signāls), kas segmentā (0, T) definēta kā trigonometrisko funkciju (sinuss un/vai kosinuss) bezgalīga skaita (bezgalīgas sērijas) summa ar noteiktiem amplitūdas un fāzes, kas ņemtas vērā arī segmentā (0, T). Šādu sēriju sauc par Furjē sēriju.

Atzīmēsim vēl dažus punktus, kuru izpratne ir nepieciešama, lai pareizi piemērotu Furjē transformāciju signālu analīzei. Ja ņemam vērā Furjē sēriju (sinusoīdu summu) uz visas X ass, mēs varam redzēt, ka ārpus segmenta (0, T) funkcija, ko attēlo Furjē rinda, periodiski atkārtos mūsu funkciju.

Piemēram, 7. att. grafikā sākotnējā funkcija ir definēta segmentā (-T\2, +T\2), un Furjē rinda attēlo periodisku funkciju, kas definēta uz visas x ass.

Tas notiek tāpēc, ka paši sinusoīdi ir periodiskas funkcijas, un attiecīgi to summa būs periodiska funkcija.


7. att. Neperiodiskas oriģinālās funkcijas attēlojums ar Furjē sēriju

Tādējādi:

Mūsu sākotnējā funkcija ir nepārtraukta, neperiodiska, definēta noteiktā T garuma segmentā.
Šīs funkcijas spektrs ir diskrēts, tas ir, tas tiek parādīts bezgalīgas harmonisko komponentu sērijas - Furjē sērijas formā.
Faktiski Furjē rinda definē noteiktu periodisku funkciju, kas segmentā (0, T) sakrīt ar mūsējo, taču mums šī periodiskums nav nozīmīgs.

Harmonisko komponentu periodi ir tā segmenta vērtības (0, T) daudzkārtņi, uz kuriem ir definēta sākotnējā funkcija f(x). Citiem vārdiem sakot, harmoniskie periodi ir signāla mērīšanas ilguma daudzkārtņi. Piemēram, Furjē rindas pirmās harmonikas periods ir vienāds ar intervālu T, uz kura ir definēta funkcija f(x). Furjē rindas otrās harmonikas periods ir vienāds ar intervālu T/2. Un tā tālāk (sk. 8. att.).


8. att. Furjē sērijas harmonisko komponentu periodi (frekvences) (šeit T = 2?)

Attiecīgi harmonisko komponentu frekvences ir daudzkārtējas 1/T. Tas ir, harmonisko komponentu Fk frekvences ir vienādas ar Fk = k\T, kur k ir robežās no 0 līdz?, piemēram, k = 0 F0 = 0; k=1 F1=1\T; k=2 F2=2\T; k=3 F3=3\T;… Fk= k\T (pie nulles frekvences - konstanta komponente).

Lai mūsu sākotnējā funkcija būtu signāls, kas ierakstīts laikā T = 1 sek. Tad pirmās harmonikas periods būs vienāds ar mūsu signāla ilgumu T1=T=1 sek un harmonikas frekvence būs 1 Hz. Otrās harmonikas periods būs vienāds ar signāla ilgumu dalītu ar 2 (T2=T/2=0,5 sek), un frekvence būs 2 Hz. Trešajai harmonikai T3=T/3 sek un frekvence ir 3 Hz. Un tā tālāk.

Solis starp harmonikām šajā gadījumā ir 1 Hz.

Tādējādi signālu, kura ilgums ir 1 sekunde, var sadalīt harmoniskos komponentos (iegūstot spektru) ar frekvences izšķirtspēju 1 Hz.
Lai palielinātu izšķirtspēju 2 reizes līdz 0,5 Hz, mērījumu ilgums jāpalielina 2 reizes - līdz 2 sekundēm. Signālu, kas ilgst 10 sekundes, var sadalīt harmoniskos komponentos (lai iegūtu spektru) ar frekvences izšķirtspēju 0,1 Hz. Nav citu veidu, kā palielināt frekvences izšķirtspēju.

Ir veids, kā mākslīgi palielināt signāla ilgumu, pievienojot nulles paraugu masīvam. Bet tas nepalielina faktisko frekvences izšķirtspēju.

3. Diskrētie signāli un diskrētā Furjē transformācija

Attīstoties digitālajām tehnoloģijām, ir mainījušās arī mērījumu datu (signālu) uzglabāšanas metodes. Ja iepriekš signālu varēja ierakstīt magnetofonā un glabāt lentē analogā formā, tad tagad signāli tiek digitalizēti un saglabāti failos datora atmiņā kā skaitļu (paraugu) kopa.

Parastā signāla mērīšanas un digitalizācijas shēma ir šāda.


9. att. Mērīšanas kanāla diagramma

Signāls no mērīšanas devējs ierodas ADC laika periodā T. Signāla paraugi (iztveršana), kas iegūti laikā T, tiek pārsūtīti uz datoru un saglabāti atmiņā.


10. att. Digitalizēts signāls - laikā T saņemti N paraugi

Kādas prasības ir signāla digitalizācijas parametriem? Ierīce, kas pārveido ieejas analogo signālu diskrētā kodā ( digitālais signāls) sauc par analogo-digitālo pārveidotāju (ADC, angļu Analog-to-digital converter, ADC) (Wiki).

Viens no galvenajiem ADC parametriem ir maksimālā iztveršanas frekvence (jeb iztveršanas frekvence, angliski sample rate) - nepārtraukta signāla diskretizācijas ātrums, to iztverot. To mēra hercos. ((Wiki))

Saskaņā ar Koteļņikova teorēmu, ja nepārtrauktam signālam ir spektrs, ko ierobežo frekvence Fmax, tad to var pilnībā un nepārprotami rekonstruēt no tā diskrētajiem paraugiem, kas ņemti laika intervālos. , t.i. ar frekvenci Fd? 2*Fmax, kur Fd ir paraugu ņemšanas frekvence; Fmax - signāla spektra maksimālā frekvence. Citiem vārdiem sakot, signāla digitalizācijas frekvencei (ADC iztveršanas frekvencei) jābūt vismaz 2 reizes lielākai par signāla maksimālo frekvenci, kuru mēs vēlamies izmērīt.

Kas notiks, ja ņemsim paraugus ar zemāku frekvenci, nekā to prasa Koteļņikova teorēma?

Šajā gadījumā rodas “aliasing” efekts (pazīstams arī kā stroboskopiskais efekts, muarē efekts), kurā augstfrekvences signāls pēc digitalizācijas pārvēršas zemfrekvences signālā, kura patiesībā nemaz nav. Attēlā 5 sarkans augstas frekvences sinusoidālais vilnis ir reāls signāls. Zemākas frekvences zils sinusoīds ir fiktīvs signāls, kas rodas tāpēc, ka iztveršanas laikā paspēj iziet vairāk nekā puse augstfrekvences signāla perioda.


Rīsi. 11. Nepatiesa zemfrekvences signāla parādīšanās ar nepietiekami augstu iztveršanas ātrumu

Lai izvairītos no aliasing efekta, ADC priekšā ir novietots īpašs anti-aliasing filtrs - zemas caurlaidības filtrs (LPF), kas laiž garām frekvences, kas ir zemākas par pusi no ADC diskretizācijas frekvences, un nogriež augstākas frekvences.

Lai aprēķinātu signāla spektru no tā diskrētajiem paraugiem, tiek izmantota diskrētā Furjē transformācija (DFT). Vēlreiz atzīmēsim, ka diskrēta signāla spektru “pēc definīcijas” ierobežo frekvence Fmax, kas ir mazāka par pusi no diskrēta signāla frekvences Fd. Tāpēc diskrēta signāla spektru var attēlot ar ierobežotu harmoniku skaitu, atšķirībā no bezgalīgas summas nepārtraukta signāla Furjē sērijai, kuras spektrs var būt neierobežots. Saskaņā ar Koteļņikova teorēmu harmonikas maksimālajai frekvencei jābūt tādai, lai tā atbilstu vismaz diviem paraugiem, tāpēc harmoniku skaits ir vienāds ar pusi no diskrēta signāla paraugu skaita. Tas ir, ja izlasē ir N paraugi, tad harmoniku skaits spektrā būs vienāds ar N/2.

Tagad apskatīsim diskrēto Furjē transformāciju (DFT).

Salīdzinot ar Furjē sēriju

Mēs redzam, ka tie sakrīt, izņemot to, ka laiks DFT pēc būtības ir diskrēts un harmoniku skaitu ierobežo N/2 - puse no paraugu skaita.

DFT formulas ir ierakstītas bezdimensiju veselos skaitļos k, s, kur k ir signālu paraugu skaits, s ir spektrālo komponentu skaitļi.
Vērtība s parāda pilnīgu harmonisko svārstību skaitu periodā T (signāla mērīšanas ilgums). Diskrētā Furjē transformācija tiek izmantota, lai atrastu harmoniku amplitūdas un fāzes, izmantojot skaitlisko metodi, t.i. "datorā"

Atgriežoties pie sākumā iegūtajiem rezultātiem. Kā minēts iepriekš, paplašinot neperiodisku funkciju (mūsu signālu) Furjē sērijā, iegūtā Furjē rinda faktiski atbilst periodiskai funkcijai ar periodu T (12. att.).


12. att. Periodiskā funkcija f(x) ar periodu T0, ar mērījumu periodu T>T0

Kā redzams 12. attēlā, funkcija f(x) ir periodiska ar periodu T0. Tomēr, ņemot vērā to, ka mērījuma parauga T ilgums nesakrīt ar funkcijas T0 periodu, funkcijai, kas iegūta kā Furjē rinda, punktā T ir pārtraukums. Rezultātā šīs funkcijas spektrs saturēs liels skaits augstfrekvences harmoniku. Ja mērījuma parauga T ilgums sakristu ar funkcijas T0 periodu, tad pēc Furjē transformācijas iegūtajā spektrā būtu tikai pirmā harmonika (sinusoīds ar periodu, kas vienāds ar izlases ilgumu), jo funkcija f(x) ir sinusoīds.

Citiem vārdiem sakot, programma DFT “nezina”, ka mūsu signāls ir “sinusoīda gabals”, bet mēģina attēlot periodisku funkciju sērijas formā, kurai ir pārtraukums atsevišķu skaņu elementu nekonsekvences dēļ. sinusoīds.

Rezultātā spektrā parādās harmonikas, kurām vajadzētu apkopot funkcijas formu, ieskaitot šo pārtraukumu.

Tātad, lai iegūtu “pareizo” signāla spektru, kas ir vairāku sinusoīdu ar dažādiem periodiem summa, nepieciešams, lai signāla mērīšanas periodā ietilptu vesels katra sinusoīda periodu skaits. Praksē šo nosacījumu var izpildīt pietiekami ilgu signāla mērīšanas laiku.


13. att. Pārnesumkārbas kinemātiskās kļūdas signāla funkcijas un spektra piemērs

Ar īsāku ilgumu attēls izskatīsies “sliktāks”:


14. att. Rotora vibrācijas signāla funkcijas un spektra piemērs

Praksē var būt grūti saprast, kur ir “īstās sastāvdaļas” un kur ir “artefakti”, ko izraisa komponentu nedaudzkārtējie periodi un signāla paraugu ņemšanas ilgums jeb “lēcieni un pārtraukumi” signāla formā. . Protams, vārdi “īstas sastāvdaļas” un “artefakti” tiek likti pēdiņās iemesla dēļ. Daudzu harmoniku klātbūtne spektra grafikā nenozīmē, ka mūsu signāls faktiski “sastāv” no tiem. Tas ir tas pats, kas domāt, ka skaitlis 7 “sastāv” no skaitļiem 3 un 4. Skaitli 7 var attēlot kā skaitļu 3 un 4 summu – tas ir pareizi.

Tātad mūsu signālu... vai drīzāk pat ne “mūsu signālu”, bet periodisku funkciju, kas sastāv, atkārtojot mūsu signālu (izlases ņemšanu), var attēlot kā harmoniku (sinusa viļņu) summu ar noteiktām amplitūdām un fāzēm. Bet daudzos gadījumos, kas ir svarīgi praksē (sk. attēlus iepriekš), spektrā iegūtās harmonikas patiešām ir iespējams saistīt ar reāliem procesiem, kuriem ir ciklisks raksturs un kas dod būtisku ieguldījumu signāla formā.

Daži rezultāti

1. Reāli izmērītam signālam ar ilgumu T sekundes, kas digitalizēts ar ADC, tas ir, attēlots ar diskrētu paraugu kopu (N gabali), ir diskrēts neperiodisks spektrs, ko attēlo harmoniku kopa (N/ 2 gabali).

2. Signālu attēlo reālo vērtību kopa, un tā spektru attēlo reālo vērtību kopa. Harmoniskās frekvences ir pozitīvas. Fakts, ka matemātiķiem ir ērtāk attēlot spektru sarežģītā formā, izmantojot negatīvas frekvences, nenozīmē, ka “tas ir pareizi” un “tas ir jādara vienmēr”.

3. Signāls, kas mērīts laika intervālā T, tiek noteikts tikai laika intervālā T. Kas notika pirms signāla mērīšanas sākšanas un kas notiks pēc tam, zinātnei nav zināms. Un mūsu gadījumā tas nav interesanti. Ierobežota laika signāla DFT dod savu “patieso” spektru tādā nozīmē, ka noteiktos apstākļos tas ļauj aprēķināt tā komponentu amplitūdu un frekvenci.

Izmantotie materiāli un citi noderīgi materiāli.

Divrindu rakstzīmju LCD indikators tiek izmantots kā displeja ierīce. Galvenais šī projekta īstenošanā ir nevis aparatūra, bet gan programmatūra, precīzāk, diskrētās Furjē transformācijas (DFT) ieviešana uz 8 bitu mikrokontrollera. Uzreiz jāatzīmē, ka autors nav eksperts šajā jomā un tāpēc sāka ar pamatiem – ar vienkāršu diskrētu Furjē transformāciju. Ātrais Furjē transformācijas algoritms ir ne tikai ātrs, bet arī diezgan sarežģīts.

Diskrētā Furjē transformācija (angļu literatūrā DFT, Discrete Furier Transform) ir viena no Furjē transformācijām, ko plaši izmanto digitālo signālu apstrādes algoritmos (tā modifikācijas tiek izmantotas audio kompresijā MP3 formātā, attēlu saspiešanā JPEG formātā u.c.), kā arī citas jomas, kas saistītas ar frekvenču analīzi diskrētā (piemēram, digitalizētā analogā) signālā. Diskrētajai Furjē transformācijai kā ievade ir nepieciešama diskrēta funkcija. Šādas funkcijas bieži tiek izveidotas ar iztveršanu (izlases vērtības no nepārtrauktām funkcijām).

Spektra analizatora shematiska diagramma skaņas signāls ir ļoti vienkārša, un to var aptuveni sadalīt digitālajā un analogajā daļā.

Digitālo daļu veido mikrokontrolleris un tam pievienots LCD indikators. Mikrokontrolleris ir pulkstenis no kvarca rezonators 16 MHz, barošanas spriegums +5 V tiek izmantots kā atsauces spriegums mikrokontrollera ADC.
LCD indikatora datu kopne ir savienota ar mikrokontrollera portu C (ieejas/izejas līnijas PC0-PC3), vadības kopne ir savienota ar mikrokontrollera portu D (PD5, PD6). Indikators darbojas 4 bitu režīmā. Kontrasta regulēšanai tiek izmantots mainīgs rezistors ar nominālo vērtību 4,7 kOhm. Lai strādātu ar indikatoru, tika izveidoti pielāgoti simboli, lai parādītu 8 analizatora horizontālās kolonnas; šie pielāgotie simboli aizņem visus 64 LCD indikatora RAM.

Mikrokontrolleris darbojas no ārēja 16 MHz kvarca rezonatora.

Ierīces analogā daļa ir vissvarīgākā daļa un ir elektretmikrofona signāla priekšpastiprinātājs, kura izeja ir savienota ar mikrokontrollerī iebūvētā ADC ADC0 kanālu. Mums ir jāiestata nulles līmenis ADC ieejā tieši uz pusi no atsauces sprieguma, t.i. 2,5 V. Šajā gadījumā varam izmantot signāla pozitīvo un negatīvo pusviļņu, taču tā amplitūda nedrīkst pārsniegt noteikto robežu, t.i. Pastiprinājums ir precīzi jānoregulē, lai novērstu pārslodzi. Visi iepriekš minētie nosacījumi atbilst kopējai mazjaudas darbības pastiprinātāja mikroshēmai.

DFT algoritms ir nedaudz lēnāks, salīdzinot ar ātro Furjē transformāciju. Bet mūsu spektra analizatoram nav nepieciešams liels ātrums, un, ja tas var nodrošināt atjaunināšanas ātrumu aptuveni 30 kadri sekundē, tas būs vairāk nekā pietiekami, lai vizualizētu audio signāla spektru. Jebkurā gadījumā mūsu versijā ir iespējams sasniegt ātrumu 100 kadri sekundē, taču tā jau ir pārāk augsta parametra vērtība divu rindu rakstzīmju LCD indikatoram un nav ieteicama. Iztveršanas frekvence ir 20 kHz 32 punktu diskrētajai Furjē transformācijai un tā kā transformācijas rezultāts ir simetrisks, jāizmanto tikai pirmā puse, t.i. pirmie 16 rezultāti. Tāpēc mēs varam attēlot frekvenču spektru līdz 10 kHz, un analizatora izšķirtspēja ir 10 kHz/16 = 625 Hz.

Dizaina autors mēģināja palielināt DFT aprēķinu ātrumu. Ja šai transformācijai ir N punkti, tad mums jāatrod sinusa un kosinusa N2/2 vērtības. Mūsu 32 punktu transformācijai mums jāatrod 512 sinusa un kosinusa vērtības. Bet pirms to atrašanas mums ir jāaprēķina leņķis (grādi), kas prasīs kādu CPU laiku, tāpēc tika nolemts šiem aprēķiniem izmantot vērtību tabulas. Aprēķinot mikrokontrollera programmā, peldošā komata un dubultās precizitātes skaitļi netiek izmantoti, jo 8 bitu mikrokontrollerī to apstrāde prasīs ilgāku laiku. Tā vietā uzmeklēšanas tabulu vērtībām tiek izmantoti 16 bitu veselu skaitļu dati, kas reizināti ar 10 000. Pēc tam pēc konvertēšanas rezultāti tiek dalīti ar 10 000. Izmantojot šo pieeju, ir iespējams veikt 120 32 punktu konversijas katrā. otrkārt, kas ir vairāk nekā pietiekami mūsu ierīcēm.

Spektra analizatora darbības demonstrēšana uz ATmega32 mikrokontrollera

Lejupielādes

Avota kods (mikrokontrollera programma, sinusa, kosinusa un leņķa datu tabulas) -

  • Skaidrs, ka tālāk par gaismu un mūziku uz AVR ir grūti tikt, parametri nav pareizi. Taču lielākajai daļai uzdevumu var pietikt ar 120 32 punktu reklāmguvumiem sekundē. Un jūs, protams, varat ņemt vēl vienu 625 Hz paraugu vai drīzāk zaudēt atsvaidzes intensitāti. Ir vērts atzīmēt, ka MK jutīsies slikti; veiktspējas ziņā nav daudz ko citu, ko varat piespraust. Bet šeit jūs varat organizēt rezultāta izvadi, izmantojot aparatūras datu pārsūtīšanas metodes. Tad tas būs palīgmikrokontrolleris, un galvenais tikai saņems no tā datus un apstrādās tos saderīgi ar citiem procesiem. Kopumā tas joprojām ir atkarīgs no procesora frekvences. Kādreiz bija iespēja overtaktēt mega virs 20 MHz, bet šiem uzdevumiem, visticamāk, dabūsim tikai kļūmes augstās frekvencēs. Ideja laba, ja tikai vairāk matemātikas daļas tiktu uzrakstītas... tā ir tās realizācija uz MK
  • Esmu izveidojis arī interesantākus analizatorus: You Tube vai versiju uz krāsu LCD: You Tube ir balstīta uz slaveno Chen bibliotēku :)
  • “Mums jāaprēķina leņķis (grādi)” Vai kāds var pastāstīt sīkāk, kā tiek aprēķinātas šo tabulu vērtības?
  • Ar sinusu un kosinusu tabulu viss ir skaidrs. Vai nav skaidrs, kā tiek aprēķinātas vērtības pakāpes_meklēšanas tabulā?

Visi signāli, neatkarīgi no tā, vai jūs tos izdomājāt vai novērojāt Visumā, patiesībā ir tikai dažādu frekvenču sinusoidālo viļņu summa.

Es izveidoju nelielu audio spektra analizatoru (0 - 10 kHz) no 16x2 LCD un ATmega32 mikrokontrollera. Es sāku ar vienkāršiem DFT (Discrete Furier Transform). FFT (Fast Furier Transform) no DFT atšķiras tikai ar lielāku ātrumu un nedaudz sarežģītāku algoritmu, neizmantoju, varbūt vēlāk pievienošu.

DFT ir lēns, salīdzinot ar FFT. Manam LCD spektra analizatoram nav nepieciešams liels ātrums, ko var nodrošināt FFT, un, ja attēls ekrānā mainās ar ātrumu aptuveni 30 kadri/s, tad tas ir vairāk nekā pietiekami, lai vizualizētu audio spektru. Bet es jau varu sasniegt ap 100 kadriem sekundē, tomēr pārāk liels atsvaidzes intensitāte nav ieteicama LCD. Audio iztveršana ar frekvenci 20 kHz rada 32 DFT punktus. Tā kā transformācijas rezultāts ir simetrisks, man ir jāizmanto tikai pirmie 16 rezultāti. Attiecīgi maksimālā frekvence ir 10 kHz. Tādējādi 10kHz/16 = 625Hz.

Es mēģināju palielināt DFT aprēķina ātrumu. Ja ir punkts N DFT, tad mums ir jāatrod sinuss un kosinuss (N^2)/2. 32 punktu DFT ir jāatrod 512 sinusus un kosinuss. Pirms tiek atrasts sinuss un kosinuss, mums jāatrod leņķis (grādi), kas aizņem kādu CPU laiku. Lai to izdarītu, es izveidoju tabulas sinususam un kosinusam. Es izveidoju sinusa un kosinusa 16 bitu mainīgos, reizinot sinusa un kosinusa vērtības ar 10 000. Pēc konvertēšanas man katrs rezultāts jādala ar 10 000. Tagad varu aprēķināt 120 32 punktu DFT sekundē, kas ir vairāk nekā pietiek spektra analizatoram.

Displejs

Es izmantoju pielāgotas LCD rakstzīmes, kas tika ielādētas 64 baitu iebūvētajā LCD atmiņā. Es redzēju tiešsaistē video, kurā 16x2 LCD tiek izmantots kā spektra analizatora displejs, un izmantoju šo ideju.

Audio ieeja

Viena no svarīgākajām spektra analizatora daļām ir signāla iegūšana no elektreta mikrofona. Īpaša uzmanība jāpievērš attīstībai priekšpastiprinātājs mikrofonam. Mums ir jāiestata nulles līmenis ADC ieejā un maksimālais līmenis, kas vienāds ar pusi no barošanas sprieguma, t.i. 2,5 V. To var barot ar spriegumu no -2,5V līdz +2,5V. Priekšpastiprinātājs ir jākonfigurē tā, lai tas nepārsniegtu šos ierobežojumus. Es izmantoju LM324 operācijas pastiprinātāju kā mikrofona priekšpastiprinātāju.

Radioelementu saraksts

Apzīmējums Tips Denominācija Daudzums PiezīmeVeikalsMans piezīmju bloks
Displejs
MK AVR 8 bitu

ATmega32

1 Uz piezīmju grāmatiņu
Kondensators22 pF2 Uz piezīmju grāmatiņu
Kondensators0,1 µF1 Uz piezīmju grāmatiņu
Elektrolītiskais kondensators100 µF1 Uz piezīmju grāmatiņu
Rezistors

100 omi

1 Uz piezīmju grāmatiņu
Trimmera rezistors4,7 kOhm1 Uz piezīmju grāmatiņu
Kvarca rezonators16 MHz1 Uz piezīmju grāmatiņu
LCD displejs16x21 Uz piezīmju grāmatiņu
spēka agregāts5 V1 Uz piezīmju grāmatiņu
Audio ieeja
U1 Operacionālais pastiprinātājs

LM324

1 Uz piezīmju grāmatiņu
C1 Kondensators1 µF1 Uz piezīmju grāmatiņu
C8 Kondensators0,01 µF1 Uz piezīmju grāmatiņu
R1 Rezistors

220 kOhm

1 Uz piezīmju grāmatiņu
R2, R3 Rezistors

10 kOhm

2 Uz piezīmju grāmatiņu
R4, R9 Rezistors

1 kOhm

2 Uz piezīmju grāmatiņu
R5 Rezistors

Digitālajai signālu apstrādei (DSP) ir daudz specializētu procesoru, piemēram, Texas Instruments TMS320 sērijas DSP, kas ietver gan vienkāršus veselu skaitļu kodolus, gan tādus monstrus kā C6000 saimes apakšgrupa, kas apstrādā peldošā komata datus. Ir vesela ADSP sērija no Analog Devices (kas ietver vairāk vai mazāk universālo BlackFin), ir arī vairāk vienkāršus risinājumus no MicroChip - dsPIC.

Tomēr specializēts DSP ir labs, bet vai tas vienmēr ir tik nepieciešams? Jā, ar milzīgu informācijas plūsmu tas ir vienkārši neaizvietojams, taču ir arī vienkāršāki apstrādes uzdevumi. Konkrēti mani interesēja dubultkonvertēšanas uzdevums - audio signāls tiek savērpts, tādējādi iegūstot spektru, pēc tam spektrā var veikt jebkādas darbības un veikt apgriezto konvertēšanu, tādējādi iegūstot apstrādātu signālu. Tas viss ir jādara reāllaikā un jāsaņem kvalitāte, kas nav zemāka par tālruņa kvalitāti.

Šis nav 2000. gads, ir vienas mikroshēmas risinājumi, kuru pamatā ir augstas veiktspējas ARM7/Cortex-M3 kodoli, kuru cena ir ievērojami samazinājusies; tie ir 32 bitu, tiem ir 32 bitu reizināšanas operācijas aparatūras ieviešana (turklāt , gandrīz DSP reizināšanas-akumulācijas operācija un 64 bitu rezultāts), un Cortex-M3 ietver arī aparatūras dalījumu.

Uzreiz gribu brīdināt, ka signālu apstrāde nav mana specialitāte, gandrīz visas zināšanas (pareizāk sakot, principu izpratne) bija saglabājušās no institūta, bet tagad gribēju tikai pārbaudīt un ieviest. Es domāju, ka var būt neprecizitātes aprakstā, jēdzienu aizstāšana utt. Patiesībā akadēmiskā precizitāte mani īpaši nesatrauca.

Gandrīz jebkuram DSP iepriekš aprakstītais uzdevums ir vienkāršs un saprotams. Bet kā uz to darbosies vispārējas nozīmes RISC kodols? Ja ņemam vērā AVR vai PIC, tad ar tiem diez vai pietiks. 8 bitu un zemas pulksteņa frekvences ir ietekme. Lai gan Elmam-Čanam ir dizainparaugi, kuros viņš AVR veic FFT un zīmē signāla spektru. Taču šajā gadījumā reāllaikā tiek veikta vienkārši vizualizācija (ar minimālu apstrādes precizitāti), nevis pilnīga signāla apstrāde ar pieņemamu audio kvalitāti.

LPC2146 tika izvēlēts kā eksperimentāla mikroshēma, kuras pamatā ir ARM7TDMI-S kodols un kuras maksimālā takts frekvence ir 60 MHz (praksē tas nedarbojas ar 72 vai pat 84 MHz). Kāpēc? Pirmkārt, man tam ir atkļūdošanas plate, otrkārt, uz borta ir ADC un DAC, t.i. nepieciešama minimāla ārējā apdare.

Nedaudz teorijas

Pirmkārt, bija interesanti novērtēt FFT (Fast Furier Transform) veiktspēju uz ARM mikrokontrolleriem. Pamatojoties uz šo novērtējumu, varam secināt, vai tam ir pietiekams ātrums, lai apstrādātu audio datu straumi, un signāls ar kādu diskretizācijas frekvenci un cik kanālus var apstrādāt uz šāda mikrokontrollera.

Pamatojoties uz Furjē transformāciju, jūs varat izveidot gudrus filtrus (ar ļoti pievilcīgām īpašībām). Mani galvenokārt interesēja signāla toņa maiņas (spektra paaugstināšana un pazemināšana) un spektra “atspīdēšanas” problēmas. Pēdējais ir nepieciešams SDR radio, lai klausītos LSB apakšējās sānjoslas radio pārraides.

Es neapslogošu jūs ar teoriju un nepaskaidrošu, kas ir Furjē transformācija, par šo tēmu ir diezgan daudz materiālu no tā, ko izmantoju: wiki un nodaļa no ļoti labas un informatīvas grāmatas.

Programmatūras ieviešana

Ir daudz FFT programmatūras ieviešanas, tomēr es uzrakstīju savu. Galvenais mērķis, uz kuru es tiecos, bija koda optimizēšana noteiktai arhitektūrai. Pirmkārt, uzreiz koncentrējos uz 32 bitu, otrkārt, bija nepieciešami tikai veselu skaitļu aprēķini un bija vēlams izvairīties no dalīšanas operācijas. Atrast kaut ko gatavu, kas atbilstu šīm prasībām, jau ir problemātiski.

Visas konstantes, kuras varēja aprēķināt iepriekš, tika aprēķinātas un ievietotas tabulās (galvenokārt trigonometrisko funkciju vērtības). Šī ir galvenā algoritma optimizācija, pretējā gadījumā tas gandrīz pilnībā atkārto aprakstīto algoritmu.

Vissvarīgākā ir prasība veikt veselu skaitļu aprēķinus. Īstenošanas procesa laikā pat radās kļūda, kas izraisīja pārplūdi vienā no 32 bitu cilpas mainīgajiem. Turklāt tas neparādās visos testa datos, tāpēc radīja diezgan lielas galvassāpes, līdz tika atrasts.

Visus avota tekstus savācu vienā arhīvā. Īstenošana nav galīga, ir dublēti aprēķini (spektra un fāzes simetrija netiek ņemta vērā), un ir nepieciešama buferu izmantošanas optimizācija, jo pašlaik aprēķiniem tiek izmantots pārāk daudz. brīvpiekļuves atmiņa(gandrīz 12 000 par 1024 punktu konversiju).

Pirmie testi

Drum roll: Es pārbaudu konvertēšanas ātrumu 1024 punktu paraugam, procesora kodola frekvence ir 60 MHz. Testēšana tika veikta emulatorā, tāpēc tas nepretendē uz 100% precizitāti, taču šo rezultātu var izmantot kā indikatoru (manā iepriekšējā pieredzē, lai gan emulators meloja, tas nebija daudz). Koda pirmās versijas tests, RealView MDK kompilators, O3 optimizācijas iespēja, ARM koda ģenerēšanas režīms.

Tātad, ko mēs redzam:

6 ms par katru reklāmguvumu, kopā nedaudz vairāk par 12 ms konvertēšanai turp un atpakaļ. Izrādās, ka ar iztveršanas frekvenci 44100Hz (standarts audio) un paraudziņiem ar izšķirtspēju līdz 16 bitiem, tīri aprēķini prasīs ~44*12ms = 528ms. Un tas ir programmaparatūras starpposma versijā, kad dažas koda optimizācijas vēl nav pabeigtas (saskaņā ar aplēsēm algoritmu var paātrināt gandrīz 2 reizes)! Manuprāt, tas ir vienkārši lielisks rādītājs.

Kopumā paredzams, ka kodola slodze būs aptuveni 50%, vēl 50% paliek pārveidošanai visā spektrā un pieskaitāmajām izmaksām, strādājot ar ADC, DAC un citiem datu pārsūtīšanas gadījumiem. Ja jūs pazemināsiet paraugu ņemšanas frekvenci līdz “telefona” līmenim (apmēram 4800–9600 Hz), tad kodola slodze būs vēl mazāka (apmēram 15–30%).

Tātad matemātiskā daļa ir vairāk vai mazāk skaidra. Jūs varat pāriet uz konkrētu ieviešanu.

Dzelzs

Testa platformai mēs izmantojām Keil MCB2140 izstrādes plati ar skaļruni. Mini-Jack vads ir pielodēts, lai izveidotu savienojumu ar ierīces lineāro izvadi, un tiek samontēta vienkārša ievades ķēde. Kā jau minēts, platei jau ir pieslēgts skaļrunis pie mikrokontrollera analogās izejas un ir vadības ierīces (poga un potenciometrs).

Šeit ir ievades shēmas skice:


Programmatūras atkļūdošana notika posmos:

  1. Visu nepieciešamo perifērijas ierīču atkļūdošana: ADC, DAC, taimeri, LED indikācija.
  2. Tests ar signāla digitalizāciju: vajadzīgo ātrumu digitalizēju datus un ievietoju buferī, tad izvelku datus no bufera un atskaņoju signālu. Tie. vienkārša signāla nobīde laikā, bez jebkādām transformācijām. Šajā posmā tiek pārbaudīts mehānisms darbam ar 2 buferiem, kas nepieciešami turpmākam darbam.
  3. UZ iepriekšējā versija tiek pievienotas tiešās un apgrieztās Furjē transformācijas. Šis tests beidzot pārbauda pareizu FFT koda darbību, kā arī pārbauda, ​​vai kods atbilst pieejamajai veiktspējai.
  4. Pēc tam ir izveidots lietojumprogrammas galvenais skelets, jūs varat pāriet uz praktiskiem lietojumiem.

Problēma radās pēc FFT pievienošanas kodam: signālā parādījās svešs troksnis un svilpes. Vispār man šī uzvedība likās diezgan dīvaina, jo... Bez konvertēšanas signāls, kas iet cauri digitālajam ceļam, palika diezgan tīrs. Pirmais iemesls tam: pēc analogās shēmas signāla amplitūda ADC nebija pilna (0-3,3 V), bet tikai 0,5-2 V robežās pie maksimālā atskaņotāja skaļuma, otrs: diezgan spēcīgs troksnis vesela skaitļa dēļ. aprēķini (+-1 vienība, kas izrādījās pietiekami, lai radītu skaņas traucējumus).

Lai cīnītos pret pirmo problēmu, tika nolemts sākt pielāgot analogo daļu. Un, lai atrisinātu problēmu ar troksni, mēģiniet izmantot zemfrekvences filtru.

1. pielietojums: signāla toņa maiņa

Plāksnei ir potenciometrs ( mainīgais rezistors), to var izmantot kontrolei. Šajā gadījumā tas iestata signāla spektra pārslēgšanu uz augšu un uz leju, kas ir pietiekami, lai “pārveidotu” jūsu iecienītākās kompozīcijas.

Lūk, kas notiek frekvenču domēnā:


Šajā gadījumā konversijas rezultāts ir ietverts 2 buferos. Viens buferis ir reālā daļa, bet otrs ir iedomātā daļa. Tajos iegūto skaitļu fiziskā nozīme: reālajā daļā ir harmoniku vērtības, iedomātajā daļā ir šo harmoniku fāzes nobīde. Turklāt, kā redzat, sākotnējo signālu apraksta ar N vērtībām, un pēc konvertēšanas tiek iegūtas 2N vērtības. Informācijas apjoms nemainās, un informācijas apjoma pieaugums 2 reizes rodas tādēļ, ka buferdatiem ir dublēšanās vērtību dublēšanās veidā.




Tops