6.3 Algoritmul de intrare

Figura 6-5 prezintă o problemă de convoluție simplă: un semnal de intrare de 9 puncte, x[n], este trecut printr-un sistem cu un răspuns de impuls de 4 puncte, h[n], rezultând o ieșire de 9 + 4 - 1 = 12 puncte semnal, y[n]. În termeni matematici, x[n] este în convoluție cu h[n] pentru a produce y[n]. Acest prim punct de vedere al convoluției se bazează pe conceptul fundamental al DSP: descompunerea intrării, trecerea componentelor prin sistem și sintetizarea ieșirii. În acest exemplu, fiecare din cele nouă eșantioane ale semnalului de intrare va contribui la o versiune scalată și deplasată a răspunsului la impuls pentru semnalul de ieșire. Aceste nouă semnale sunt prezentate în figura 6-6. Adunarea acestor nouă semnale produce semnalul de ieșire, y[n].

Să analizăm în detaliu câteva dintre aceste nouă semnale. Vom începe cu eșantionul numărul patru în semnalul de intrare, adică x[4]. Acest eșantion se află la numărul de index patru și are o valoare de 1,4. Când semnalul este descompus, acesta se transformă într-un impuls reprezentat de: 1,4δ[n -4]. După trecerea prin sistem, componenta de ieșire rezultată va fi: 1,4h[n -4]. Acest semnal este afișat în cutia centrală a celor nouă semnale din figura 6-6. Observați că acesta este răspunsul la impuls, h[n], înmulțit cu 1,4, și deplasat patru eșantioane spre dreapta. Au fost adăugate zerouri la eșantioanele 0-3 și la eșantioanele 8-11 pentru a servi ca suporturi de poziție. Pentru a face acest lucru mai clar, imaginile 6-6 utilizează pătrate pentru a reprezenta punctele de date care provin din răspunsul la impuls deplasat și scalat, iar diamante pentru zerourile adăugate.

Acum examinați eșantionul x[8], ultimul punct al semnalului de intrare. Acest eșantion se află la numărul de index opt și are o valoare de -0,5. Așa cum se arată în graficul din dreapta-jos din fig. 6-6, x[8] are ca rezultat un răspuns de impuls care a fost deplasat spre dreapta cu opt puncte și înmulțit cu -0,5. În locul punctelor 0-7 au fost adăugate zerouri pentru menținerea locurilor. În cele din urmă, examinați efectul punctelor x[0] și x[7]. Ambele eșantioane au o valoare zero și, prin urmare, produc componente de ieșire constând toate din zerouri.

Figura 6-5 Exemplu de problemă cu convoluție.

Un semnal de intrare cu 9 puncte, în convoluție cu un răspuns la impuls de 4 puncte, determină un semnal de ieșire de 12 puncte. Fiecare punct din semnalul de intrare contribuie cu un răspuns în impuls scalat și deplasat în semnalul de ieșire. Aceste 9 răspunsuri la impuls scalate și deplasate sunt arătate în fig. 6.6.

Fig. 6-6 Componentele semnalului de ieșire pentru convoluția din fig. 6-5.

În aceste semnale, fiecare punct care rezultă dintr-un răspuns la impuls scalat și deplasat este reprezentat printr-un marcaj pătrat. Punctele de date rămase, reprezentate diferit, sunt zero-uri care au fost adăugate pentru a ocupa locul.

În acest exemplu, este un semnal de nouă puncte și este un semnal de patru puncte. În exemplul următor, prezentat în figura 6-7, vom inversa situația făcând un semnal de patru puncte și un semnal de nouă puncte. Se folosesc aceleași două forme de undă, ele sunt doar schimbate. După cum arată componentele semnalului de ieșire, cele patru eșantioane rezultă în patru versiuni deplasate și scalate ale răspunsului la impuls de nouă puncte. La fel ca înainte, zerouri la început și la sfârșit se adaugă ca deținători de locație.

Dar așteptați doar un moment! Semnalul de ieșire din figura 6-7 este identic cu semnalul de ieșire din figura 6-5. Aceasta nu este o greșeală, ci o proprietate importantă. Convoluția este comutativă: a[n]*b[n] = b[n]*a[n]. Matematica nu are grijă care este semnalul de intrare și care este răspunsul la impuls, numai că două semnale sunt în convoluție unul cu celălalt. Deși matematica o poate permite, schimbul celor două semnale nu are nici un înțeles fizic în teoria sistemelor. Semnalul de intrare și răspunsul la impuls sunt două lucruri complet diferite și schimbarea lor nu are sens. Ceea ce oferă proprietatea comutativă este un instrument matematic pentru manipularea ecuațiilor pentru a obține rezultate diferite.

Un program pentru calcularea convoluțiilor utilizând algoritmul de intrare este prezentat în Tabelul 6-1. Rețineți că programele din această lucrare sunt menite să transmită algoritmi în cea mai simplă formă, chiar și în detrimentul stilului bun de programare. De exemplu, toate intrările și ieșirile sunt manipulate în subrutinele miticale (liniile 160 și 280), ceea ce înseamnă că nu definim cum se desfășoară aceste operații. Nu treceți peste aceste programe; acestea reprezintă o parte esențială a materialului și trebuie să le înțelegeți în detaliu.

Programul pune în convoluție un semnal de intrare de 81 de puncte, păstrat în matricea X[ ], cu un răspuns la impuls de 31 de puncte, ținut în matricea H[ ], rezultând un semnal de ieșire de 111 puncte, ținut în matricea Y[ ]. Acestea sunt aceleași lungimi indicate în fig. 6-3 și 6-4. Observați că numele acestor matrice folosesc litere mari. Aceasta este o încălcare a convențiilor de denumire discutate anterior, deoarece literele mari sunt rezervate pentru semnalele din domeniul frecvență. Din nefericire, simplul BASIC folosit în această lucrare nu permite denumirile variabilelor cu litere mici. De asemenea, observați că linia 240 folosește o stea pentru înmulțire. Amintiți-vă, o stea într-un program înseamnă înmulțire, în timp ce o stea într-o ecuație înseamnă convoluție. O stea în text (cum ar fi documentație sau comentarii program) poate însemna orice.

Subrutina mitică din linia 160 plasează semnalul de intrare în X[ ] și răspunsul la impuls în H[ ]. Linile 180-200 setează toate valorile din Y[ ] la zero. Acest lucru este necesar deoarece Y[ ] este folosit ca un acumulator pentru suma componentelor de ieșire așa cum sunt calculate. Liniile 220-260 sunt inima programului. Instrucțiunea FOR din rândul 220 controlează o buclă care trece prin fiecare punct al semnalului de intrare, X[ ]. Pentru fiecare eșantion din semnalul de intrare, o bucla interioară (liniile 230-250) calculează o versiune scalată și deplasată a răspunsului la impuls și o adaugă la matricea care acumulează semnalul de ieșire Y[ ]. Această structură de buclă imbricată (o buclă într-o altă buclă) este o caracteristică cheie a programelor de convoluție; familiarizați-vă cu acesta.

Figura 6-7 Al doilea exemplu de convoluție.

Formele de undă pentru semnalul de intrare și răspunsul la impuls sunt modificate față de exemplul din fig. 6-5. Deoarece convoluția este comutativă, semnalele de ieșire pentru cele două exemple sunt identice.

Menținerea indexării drept în linia 240 vă poate face nebun! Să presupunem că suntem la jumătatea perioadei de execuție a acestui program, așa că tocmai am început să acționăm asupra eșantionului X[40], adică I% = 40. Bucla interioară trece prin fiecare punct din răspunsul impuls, făcând trei lucruri. Mai întâi, răspunsul la impuls este scalat prin înmulțirea cu valoarea eșantionului de intrare. Dacă aceasta ar fi singura acțiune luată de bucla interioară, linia 240 ar putea fi scrisă, Y [J%] = X [40] ✳H [J%]. În al doilea rând, impulsul scalat este deplasat cu 40 de eșantioane în dreapta prin adăugarea acestui număr la indicele utilizat în semnalul de ieșire. Această a doua acțiune va schimba linia 240 la: Y[40+J%] = X [40] * H [J%]. În al treilea rând, Y[ ] trebuie să se acumuleze (sintetizează) toate semnalele rezultate din fiecare eșantion din semnalul de intrare. Prin urmare, noile informații trebuie adăugate informațiilor care sunt deja în matrice. Aceasta are ca rezultat comanda finală: Y[40+J%] = Y[40+J%] + X[40]*H[J%]. Studiați cu atenție acest lucru; este foarte confuz, dar foarte important.

Secțiunea următoare: Algoritmul de ieșire