Aplicatii pentru achizitia si prelucrarea semnalului audio
In general orice sistem de calcul modern este prevazut cu o placa de sunet mai mult sau mai putin performanta. Se poate profita de facilitatea existentei generale a unei asemenea placi de achizitie si se pot implementa diferite experimente de timp real.
Semnalul de intrare analogic provine de la intrarea de microfon iar semnalul analogic de iesire este preluat de catre iesirea spre boxe. Avand in vedere acest lucru, se pot efectiv implementa experimente de timp real de achizitie, prelucrare si redare de semnal audio.
Pentru a implementa experimente cu semnal audio, este necesar sa dezvoltam o serie de module de program care, prin combinare, pot genera experimente diferite. Astfel de module de program pot fi:
generator de semnal audio armonic de diferite frecvente
analizor spectral al semnalului achizitionat
filtrarea semnalului emis sau receptionat
1. Instrumente pentru controlul intrarilor/iesirilor placilor de sunet
In MATLAB/Simulink, mai precis in SimulinkDSP BlocksetPlatform Specific I/OWindows (WIN32), exista doua obiecte de control in timp real al intrarilor/iesirilor placii de sunet.
1.1 From Wave Device citeste in timp real date audio de la dispozitivul standard audio (microfon). Acest instrument virtual este disponibil numai pe platforme cu sistem de operare Windows pe 32 de biti. Acest instrument este compatibil cu cele mai populare dipozitive hardware sub Windows, inclusiv placi Sound Blaster.
Modelele care contin ambele blocuri de mai sus necesita o placa de sunet cu capabilitati duplex.
Folosirea parametrului Use default audio device permite blocului sa detecteze si sa foloseasca hardware-ul audio implicit al sistemului de calcul. Aceasta optiune trebuie selectata pe sisteme care au o singura placa de sunet sau daca exista mai multe placi de achizitie si se doreste folosirea placii de sunet. In cazul in care placa de sunet implicita nu este dispozitivul de intare dorit, se demarcheaza aceasta optiune si se selecteaza dispozitivul dorit din meniul Audio device. Daca sursa de semnal de intrare contine doua canale (stereo), atunci se selecteaza Stereo check box. Daca sursa audio contine un singur canal (mono), atunci se deselecteaza optiunea Stereo.
Pentru intrari stereo, iesirea blocului o reprezinta o matrice M x 2 ce contine un cadru (frame, M esantioane consecutive) de date audio pentru fiecare dintre cele doua canale de intrare. Pentru intrari mono iesirea din bloc este o matrice M x 1 ce contine un singur cadru (cu M esantioane consecutive) de date audio de la unicul canal mono de intrare. Marimea cadrului (frame size), M, este specificata de parametrul Samples per frame. Pentru M=1, iesirea este orientata pe esantion (sample-based). In celelalte cazuri, iesirea este orientata pe cadru (frame-based). Datele audio sunt procesate in format PCM (pulse code modulation) necompresat si trebuie esantionate la frecvente tipizate pentru standardele audio Windows, anume: 8000, 11025, 22050, sau 44100 Hz. Se poate selecta oricare dintre aceste frecvente cu ajutorul parametrului Sample rate. Pentru a specifica o alta frecventa de esantionare, se selecteaza optiunea User-defined si se introduce frecventa dorita. Numarul de biti al fiecarui esantion este specificat prin parametrul Sample Width (biti) care specifica numarul de biti folositi pentru reprezentarea esantioanelor din semnalul audio. Sunt disponibile urmatoarele setari:
8 - aloca 8 biti pentru fiecare esantion, permitand o rezolutie de 256 nivele de sunet
16 - aloca 16 biti pentru fiecare esantion, permitand o rezolutie de 65536 nivele de sunet
24 -- aloca 24 biti pentru fiecare esantion, permitand o rezolutie de 16777216 nivele de sunet. Aceasta optiune fiind posibila numai pentru placi audio de 24 de biti. Reprezentari pe un numar mai mare de biti necesita mai multa memorie dar conduc la o reprezentare mai fidela a sunetului.
Iesirea din bloc este independenta de setarea gamei de reprezentare Sample width (bits). Tipul datelor de iesire este determinat de setarea parametrului Data type.
Input Data TypeValid Input Amplitude Rangedouble±1single±1-32768 to 32767 (-215 to 215 - 1)uint8
Tipul datei de intrare |
Gama de reprezentare |
double |
±1 |
single |
±1 |
int16 |
-32768 pana la 32767 |
uint8 |
0 pana la 255 |
Folosirea bufferelor
Dim moment ce dispozitivul audio de intrare accepta intrari (semnal analogic de la microfon) in timp real, Simulink trebuie sa citeasca un flux continuu de date de la dispozitiv in timpul simularii. Intarzieri in timpul citirea datelor de la hardware-ul de intrare conduce la erori si distorsiuni ale semnalului. Aceasta inseamna ca blocul From Wave Device trebuie sa citeasca in principiu datele in ritmul in care dispozitivul achizitioneaza semnal audio.
Totusi, blocul nu reuseste intotdeauna sa compatibilizeze viteza de generare a semnalului audio numeric cu viteza de citire a datelor numerice generate.
Acest lucru se intampla in special cand blocurile de intrare/iesire audio de timp real se folosesc intr-un model Simulink care ruleaza in mod simulare, nu din cod generat. Operatiile Simulink sunt in general mai lente decat operatiile hardware iar viteza de executie a simularii variaza dupa cum sistemul de operare trebuie sa deserveasca si alte procese.
Din aceasta cauza blocul trebuie sa se bazeze in functionare pe o strategie de bufferare (buffering strategy) pentru a asigura ca datele provenite din semnalul de intrare analogic sa fie citite ritmic fara nici o pierdere de esantioane. La inceputul esantionarii dispozitivul audio incepe sa scrie datele de intrare intr-un buffer hardware cu o capacitate de Tb secunde. Blocul From Wave Device incepe imediat extragerea primelor esantioane din acest buffer, care este de tip FIFO (first in, first out) si le colecteaza (grupeaza) in cadre de lungime M pentru iesire. Pe masura ce dispozitivul audio adauga noi esantioane la baza bufferului, blocul From Wave Device continua sa extraga datele de la varful bufferului cu cea mai mare viteza posibila.
Figura de mai jos arata un semnal audio care se achizitioneaza si care ofera la iesire cadre cu o dimensiune de 8 esantioane. Bufferul hard al placii de sunet atinge capacitatea maxima de 5 cadre la momentul prezentat, ceea ce inseamna ca hardware-ul adauga esantioane in buffer (il umple) mai rapid decat il goleste blocul From Wave Device. Daca, spre exemplu, perioada de esantionare este de 8 kHz, acest mic buffer poate contine date pentru aproximativ 0.005 secunde de sunet achizitionat:
8000 esantioane/secunda reprezinta rata de esantionare. Bufferul contine:
5 cadre = 5 (cadre) x 8 (esantioane/cadru) = 40 esantioane.
Daca fluxul de date al simularii este mai mare decat fluxul de date al placii, bufferul se goleste si ramane gol pe parcursul simularii. Daca este necesar, blocul From Wave Device asteapta cateva esantioane sa devina disponibile in bufferul hard, deoarace blocul nu interpoleaza intre esantioane.
In cele mai multe cazuri fluxul de date al simularii este mai mic decat cel al placii si bufferul tinde sa se umple pe perioada simularii.
Probleme care pot apare
Daca dimensiunea bufferului este prea mica in comparatie cu fluxul de date al simularii, atunci bufferul se poate umple inainte ca semnalul sa fie procesat pe toata durata sa. Aceasta conduce in general la erori ale dispozitivului sau la iesiri nedorite furnizate de dispozitiv. Cand apar aceste probleme, avem de ales intre a mari dimensiunea bufferului sau a vitezei de simulare. Marirea dimensiunii bufferului: Parametrul Queue duration specifica durata semnalului, Tb (in secunde timp-real), ce poate fi stocata in bufferul hardware pe timpul simularii. Echivalent, acest parametru specifica durata maxima de timp cu care poate fi intarziata achizitia de date hardware. Numarul de cadre stocate in buffer este
unde Fs reprezinta frecventa de esantionare si, echivalent, Ts reprezinta perioada de esantionare iar Tb este capacitatea bufferului (in secunde) iar M este numarul de esantioane al fiecarui cadru. Dimensiunea corespunzatoare a unui buffer depinde de lungimea semnalului achizitionat, de marimea cadrului dar si de viteza de simulare. De remarcat ca o crestere a dimensiunii bufferului poate duce la o latenta mai mare a modelului.
Cresterea fluxului de date al simularii: Se folosesc doua metode pentru marirea fluxului de date al simularii, anume marirea dimensiunii cadrului de semnal si compilarea modelului simulat. Cresterea dimensiunii cadrului, adica a numarului de esantioane care se transfera, converteste implicit un semnal bazat pe esantioane intr-un semnal bazat pe cadre, reducand cantitatea suplimentara de informatie care se schimba intre blocuri la transferul de date (communication overhead). Aceasta poate mari considerabil fluxul de date al simularii. Totusi, daca se creste prea mult dimensiunea bufferului se mareste latenta (intarzierea initiala) a simularii deoarece dureaza mai mult operatiile care se efectueaza la initializarea bufferului.
Generarea de cod executabil cu Real Time Workshop. Codul executabil ruleaza mult mai rapid decat Simulink si poate furniza viteze adecvate cu procesarea in timp real a semnalului audio.
Alte modalitati de imbunatatire a vitezei de simulare o reprezinta simplificarea modelului sau rularea programului de simulare pe un procesor mai rapid.
1.2 To Wave Device
Acest instrument gestioneaza comunicatia in timp real cu iesirea placii de sunet (in general aceasta iesire este catre boxele, incintele acustice, ale sistemului). Cele precizate anterior raman valabile, cu deosebiri pe care le vom preciza.
Capacitatea bufferului hard, al iesirii placii de sunet, este de Tb secunde si este setata de parametrul Queue duration (seconds). Un al doilea parametru, Initial output delay (seconds) precizeaza dupa cat timp de la achizitie incepe procesarea semnalului audio (redarea sa).
Tipul datelor preluate spre redare depinde de tipul de date pe care il ofera dispozitivul de intrare al placii de sunet.
Ceea ce trebuie mentionat la final este notiunea de simulare in timp real. Desi, dupa cum se stie, simularea unui model Simulink nu are nici o legatura cu timpul real, folosirea obiectelor de tip To Wave Device sau From Wave Device pun in legatura doua dispozitive de timp real, anume canalele de intrare/iesire ale placii de sunet, cu un model Simulink. Daca prelucrarea datelor simulate (fluxul datelor simulate) se face in acelasi ritm sau cu aceeasi viteza cu a fluxului de date al placii, atunci vom prelua respectiv vom reda sunet in timp real.
Daca, de exemplu, intrarea de microfon se leaga prin obiecte Simulink de iesirea de boxe, atunci intrarea de microfon are fixata o frecventa de esantionare tipica: 8000, 11025, 22050 sau 44100 Hz.
Sa presupunem ca intrarea de sunet functioneaza la Fs = 22050 Hz. Daca dorim sa achizitionam sunet pe un interval de 3 secunde de la microfon, modelul Simulink trebuie sa fie capabil sa preia 3 x 22050 = 66150 esantioane in 3 secunde. In mod analog, pentru a furniza un sunet pe o durata de 3 secunde, modelul simulat trebuie sa furnizeze 66150 de esantioane in 3 secunde. Daca operatiile prin care datele audio sunt prelucrate sunt prea laborioase, modelul nu poate furniza in 3 secunde fluxul de date de 66150 de esantioane si sunetul furnizat va fi distorsionat si cu intreruperi.
In acest caz, se mareste bufferul iesirii de sunet si totodata se mareste si Initial output delay astfel incat modelul Simulink genereaza si umple bufferul iesirii de sunet cu un numar corespunzator de esantioane. Redarea sunetului incepe numai dupa ce s-au furnizat Td secunde de sunet.
Daca alegem Queue duration (seconds) = Initial output delay (seconds) = 3 sec, atunci putem alege un timp de simulare de 3 secunde. In aceste 3 secunde simulate (care pot dura in realitate mai mult de 3 secunde) modelul genereaza, la frecventa de esantionare de 22050 Hz, exact 66150 esantioane care sunt stocate in bufferul de iesire cu o capacitate Tb = Td = 3 sec.
Dupa aceste prime 3 secunde, se va declansa iesirea audio si vom auzi un sunet pe o perioada de exact 3 secunde, chiar daca modelul Simulink a incetat functionarea.
Prin acest procedeu ne asiguram de faptul ca se va genera sunet cu o durata de 3 secunde indiferent de viteza de lucru a procesorului. Daca dispunem de un procesor mai performant, evident, se pot micsora atat bufferele cat si intarzierea initiala.
Trebuie avut in vedere faptul ca orice diferenta intre fluxul de date al simularii si cel hardware, al placii de sunet, are un efect cumulativ. Daca, spre exemplu, achizitionam corect sunet sau redam corect sunet pe un interval de 3 secunde, aceasta nu inseamna ca pentru un interval de timp mai mare sistemul va functiona la fel de bine.
Anticipand, vom considera urmatorul model Simulink (sindsp.mdl), executat pe un calculator cu procesor AMD Duron 800 MHz si 256 MB RAM.
Modelul de mai sus genereaza un sunet cu o anumita frecventa cu ajutorul unui generator sinusoidal si preia sunetul emis de boxe cu ajutorul microfonului, face o analiza spectrala a acestui semnal si determina frecventa fundamentala si amplitudinea ei.
Modelul se simuleaza pe un interval de 8 secunde.
Pentru blocul To Wave Device care controleaza iesirea de boxe a placii de sunet fixam un buffer de 2 secunde fara intarziere, generatorul de semnal furnizand cadre cu 8192 de esantioane/cadru.
Sistemul lucreaza la 44100 esantioane/sec.
Lansand in executie simularea, vom obtine un sunet cu intreruperi (glitch-uri) chiar de la inceput.
Pentru a imbunatati functionarea modelului, vom mari Initial outpt delay (seconds) la valoarea de 2 secunde. Modelul va functiona mai bine, redand corect doar 4 secunde de sunet, dupa care vor apare glitch-uri.
Daca vom compila modelul folosind RTW/GRT (Generic Real-Time Target) vom obtine un executabil cu acelasi nume cu al modelului si cu extensia .exe (sindsp.exe).
Lansand comanda externa:
>> !sindsp
vom vedea cum se genereaza 8 secunde de sunet pur, fara intreruperi, ceea ce probeaza o viteza de executie net superioara a programului compilat fata de cel simulat. Cu alte cuvinte fluxul de date al modelului este comparabil cu cel al placii de sunet (se poate proba acest lucru setand Initial outpt delay (seconds) la valoarea 0 si recompiland; sunetul generat este aproape perfect).
Putem spune ca am obtinut un program care functioneaza in pseudo-timp real, deoarece numai modulele fizice de intrare/iesire ale placii de sunet functioneaza in timp real.
2 Generatoare de semnal audio predefinite
Pentru implementarea unor aplicatii executabile pentru prelucrarea semnalului audio, este necesar in primul rand sa putem genera semnal audio de diferite frecvente.
Pentru aceasta disponem de doua obiecte de tip generator de semnal sinusoidal: unul in biblioteca Simulink si unul din biblioteca DSP.
Sin Wave
Blocul Sine Wave furnizeaza o sinusoida. Blocul poate opera in mod bazat pe timp (time-based) sau in mod bazat pe esantion (sample-based mode). In modul bazat pe timp, iesirea blocului este facuta dependenta de timp (inclusiv de timpul de simulare) prin relatia:
Modul bazat pe timp are doua submoduri: modul continuu si modul discret. Valoarea parametrului Sample time determina daca blocul opereaza in timp continuu (are valoarea 0, implicita) sau in timp discret (are o valoare strict pozitiva).
Daca blocul opereaza in timp continuu, iesirea blocului poate deveni imprecisa pentru valori mari ale timpului.
Pentru o valoare strict pozitiva a parametrului Sample time blocul opereaza in timp discret si se comporta ca si cum ar avea la iesire un grup esantionator-extrapolator de ordinul zero la care perioada de esantionare este Sample time. Se recomanda folosirea acestui mod ca o sursa sinusoidala pentru sisteme pur discrete, nu pentru sisteme hibride, care sunt mult mai complexe si vor lua mai mult timp pentru simulare.
Blocul Sine Wave in mod discret foloseste un algoritm incremental si nu unul bazat pe timp absolut. Ca urmare, blocul poate fi folosit in modele care ruleaza pe un interval de timp nedefinit, cum ar fi generarea de semnal audio sau vibratii si teste la oboseala. Algoritmul incremental calculeaza sinusul pe baza valorii calculate la pasul anterior. Aceasta metoda se bazeaza pe identitatea:
Cum este o constanta, atunci si matricea este constanta. Din Aceasta cauza problema generarii unei sinusoide discrete se reduce la multiplicarea valorii sin(t) cu o matrice constanta pentru a calcula valoarea . Modul discret reduce dar nu eleimina acumularea erorilor de rotunjire, din cauza ca valoarea iesirii blocului la orice moment de timp depinde de iesirile de la momentele anterioare.
Modul bazat pe esantioane foloseste formula urmatoare pentru a calcula iesirea blocului Sine Wave:
unde A este amplitudinea sinusoidei, p este numarul de esantioane pe o perioada a sinusoidei iar k este o valoare intreaga ce ia valori repetate intre 0 si p-1. Offset-ul (defazajul) este reprezentat de parametrul 'o' iar bias-ul de parametrul b.
In acest mod, Simulink seteaza la primul pas k = 0 si calculeaza iesirea apeland la formula de mai sus. La urmatorul pas Simulink incrementeaza k si recalculeaza iesirea blocului. Cand k ajunge la valoarea p, se reseteaza valoarea sa la k = 0 si se reia algoritmul anterior. Procesul continua pana la sfarsitul simularii.
Metoda bazata pe esantioane nu depinde de valorile calculate la pasii anteriori si deci nu este afectata de acumularea erorilor de rotunjire. Totusi, aceasta metoda are un neajuns care se manifesta la utilizarea sa in cadrul blocurilor executate conditional. Daca acestea se opresc conditional si apoi se reiau, se poate pierde sincronismul cu evolutia generala a sistemului, deci cu restul simularii. Daca se folosesc generatoare sinusoidale in blocuri executate conditional, atunci se recomanda modul bazat pe timp.
2.2 DSP Sin Wave
Blocul DSP Sin Wave se aseamana in multe aspecte cu blocul Sin Wave prezentat anterior, fiind insa considerat mai complex din anumite puncte de vedere. Exista cateva deosebiri pe care le vom prezenta in continuare.
Blocul DSP Sine Wave genereaza un semnal sinusoidal real sau complex multicanal, cu amplitudini, frecvente si faze independente pe oricare canal.
Un semnal sinusoidal real este generat daca parametrul Output complexity este setat pe Real si este definit de o expresie de tipul:
in care A, f, au semnificatiile cunoscute.
O exponentiala complexa este generata cand acest parametru este setat pe Complex, si este definit de formula:
Generarea unor iesiri multicanal se refera la posibilitatea generarii simultane a mai multor semnale sinusoidale de amplitudini, frecvente si defazaje diferite. Atat pentru cazul semnalelor reale cat si al celor complexe, valorile parametrilor Amplitude, Frequency, si Phase (A, f si ) pot fi scalari sau vectori cu N componente, unde N este numarul dorit de canale (sau de semnale sinosoidale independente) care se genereaza. Daca cel putin unul dintre acesti parametri este un vector de dimensiune N, atunci valorile scalare specificate pentru ceilalti parametri se aplica fiecarui canal in parte.
Spre exemplu, pentru a genera o iesire pe 3 canale care sa reprezinte semnalele alaturate, se seteaza parametrul Output complexity pe Real iar ceilalti parametri se seteaza astfel:
Amplitude = [1 2 3]
Frequency = [1000 500 250]
Phase = [0 0 pi/2]
In toate modurile discrete exista posibilitatea stocarii (bufferarii) esantioanelor sinusoidei in cadre (frame) de dimensiune M, unde M este specificat prin parametrul Samples per frame. Iesirea va fi o matrice de dimensiune M x N, in care N este numarul de canale, iar functionarea este denumita bazata pe cadre (frame-based). Perioada de furnizare a cadrelor este de M*Ts, unde Ts reprezinta perioada de esantionare setata prin parametrul Sample time. Pentru M = 1, iesirea devine bazata pe esantion (sample-based). Folosind acest mod de lucru, bazat pe cadre, se mareste viteza de simulare a modelului si se pot procesa date la o viteza apropiata de procesarea in timp real.
Parametrul Sample Mode specifica proprietatile de esantionare ale blocului, care pot fi contunuu sau discret (Continuous sau Discrete):
In mod continuu, sinusoida din canalul i , yi, este calculata ca o functie continua
In acest mod, operatiile blocului sunt identice cu blocul Simulink Sin Wave in care parametrul Sample time este setat la 0. Acest mod ofera o inalta precizie dar necesita evaluarea functiei trigonometrice la fiecare moment de timp, ceea ce conduce la un efort de calcul foarte mare si la o incetinire a vitezei de simulare. In plus, deoarece aceasta metoda foloseste timpul de simulare absolut, va apare o discontinuitate daca se atinge limita maxima a timpului. Mai facem observatia ca majoritatea obiectelor din biblioteca DSP nu accepta intrari in timp continuu.
In mod discret iesirea discreta in timp a blocului poate fi generata prin:
evaluarea directa a functiei trigonometrice
prin folosirea unei tabele de valori (table look-up)
prin folosirea unei metode diferentiale
In modul discret, modul de generare a functiei se face setand parametrul Sample mode pe una dintre urmatoarele valori optionale:
Trigonometric Fcn
Table Lookup
Differential
Trigonometric Fcn. Aceasta metoda calculeaza o sinusoida din canalul i , yi, folosind esantioane din functia continua in domeniul timp cu o perioada de esantionare Ts specificata de parametrul Sample time. Acest mod de operare are aceleasi avantaje cu modul de timp continuu prezentat anterior. Daca perioada unei sinusoide este un multiplu al perioadei de esantionare, adica daca 1/(fiTs) = ki este un intreg pentru fiecare iesire yi, atunci iesirea sinusoidala a canalului i este o secventa repetitiva cu o perioada de ki esantioane. La fiecare moment de timp blocul evalueaza functia sinus la momentul de timp corespunzator modulo , adica in primul ciclu al sinusoidei. Prin constrangerea evaluarilor trigonometrice la primul ciclu al fiecarei sinusoide se evita imprecizia de calcul a sinusului la valori mari ale timpului si se elimina posibilitatea discontinuitatilor la depasirea de catre timp a valorilor maxime de reprezentare. Aceasta metoda evita deci un consum mare de memorie, cum este cazul tabelelor de valori, dar aceasta economie de memorie este platita cu pretul unor calcule complexe si laborioase in virgula mobila.
Table Lookup. Metoda tabelelor de valori precalculeaza valorile unice ale esantioanelor pentru fiecare canal in parte la inceputul simularii, dupa care apeleaza aceste valori din memorie de fiecare data cand este nevoie. Deoarece o tabela de lungime finita poate fi calculata numai daca secventele de iesire se repeta, metoda necesita ca perioada fiecarei sinusoide sa fie un multiplu intreg al perioadei de esantionare, adica 1/(fiTs) = ki trebuie sa fie o valoare intreaga pentru fiecare canal i = 1, 2, , N.
Daca parametrul Optimize table for este setat pe Speed, atunci tabela construita pentru fiecare canal contine ki elemente. Daca parametrul Optimize table for este setat pe Memory, tabela contine pentru fiecare canal numai ki/4 elemente. Pentru secvente lungi de iesire, metoda tabelelor de valori necesita de departe mai putine operatii in virgula mobila decat alte metode, dar necesita considerabil mai multa memorie, mai ales la frecvente de esantionare mari.
Aceasta metoda este recomandata pentru modele care emuleaza sau genereaza cod pentru hardware DSP si din aceasta cauza sunt optimizate pentru viteza de executie.
Differential. Metoda diferentiala foloseste un algoritm incremental (diferential) care nu este bazat pe timp abolut de simulare. Algoritmul calculeaza secventele de esantioane de iesire pe baza valorilor de iesire calculate la momentul anterior si a unor termeni precalculati la inceputul simularii folosind urmatoarele identitati:
Aceasta metoda nu cere un effort de calcul prea mare dar este supusa la erori de calcul cumulative. Deoarece nu foloseste timpul absolut, nu exista pericol de discontinuitati datorate depasirii gamei de reprezentare a timpului absolut.
Exemple de generatoare de semnal audio
Fiecare dintre iesirile de sunet are in general optiunea stereo, adica poate emite semnal audio pe doua canale independente. Exeprimentele care urmeaza vor implementa generatoare stereo de semnal audio. Vom folosi spre vizualizare un analizor spectral care sa puna in evidenta armonicele pe care noi le introducem.
Generator de semnal stereofonic
Modelul generatorului de semnal stereofonic este:
Vom incerca sa prezentam influenta diferitilor parametri ai modelului asupra functionarii generatorului de sunet stereo.
Putem imparti multimea parametrilor modelului in mai multe grupe, anume parametrii generatorului sinusoidal DSP Sin Wave, parametrii obiectelor Simulink To Wave Device si From Wave Device si parametrii analizorului spectral Spectrum Scope. Evident, exista si parametrii globali de simulare Simulation Parameters din Simulink.
O buna functionare a generatorului de semnal este reprezentata de un semnal de frecventele dorite pe fiecare canal in parte care sa nu aiba glitch-uri la nici un moment de timp, indiferent de durata pe care se genereaza sunetul.
Dupa cum se observa din figurile anterioare, se alege un model Simulink discret, fara stari continue, care functioneaza cu frecventa maxima a placii de sunet sub Windows, anume 44100 Hz. Modelul este Single Tasking, deci nu vor exista intreruperi intre task-uri pe durata simularii.
Generatorul de semnal sinusoidal genereaza cadre cu 2048 de esantioane pe cadru, deci intr-o secunda de sunet generat (44100 de esantioane) se genereaza aproximativ 22 de cadre de semnal sinusoidal.
Frecventa pe un canal este de iar pe celalalt canal este de . Analizoarele spectrale au un buffer de lungimea unui cadru (2048 esantioane) iar algoritmul FFT se aplica de asemenea unui cadru de semnal. Aceasta alegere a dimensiunilor permite ca simularea modelului sa nu piarda foarte mult timp cu transferul individual al datelor, ele fiind orientate pe cadre. Pe un calculator cu procesor AMD Duron la 800 MHz, se genereaza un semnal audio de buna calitate, care reproduce intocmai frecventele dorite.
In figurile de mai sus s-a prezentat spectrul sunetului captat de microfon de la fiecare canal in parte (boxa din dreapta si cea din stanga).
In functionarea modelului sunt implicate calcule matematice laborioase:
se genereaza secventa numerica sinusoidala (2048 esantioane) care se transmite pe de o parte catre iesirea de boxe pentru generare de semnal audio iar pe de alta parte catre analizorul spectral al iesirii generate
analizorul spectral al semnalului generat aplica un algoritm FFT si afiseaza spectrul extras dintr-un cadru de esantioane.
Intrarea de microfon capteaza semnalul generat de boxe si il transmite catre analizorul spectral al semnalului receptionat
analizorul spectral al semnalului receptionat aplica un algoritm FFT si afiseaza spectrul extras dintr-un cadru de esantioane.
Toate aceste operatii laborioase modelul le va executa la lansarea in executie a simularii. Daca viteza de simulare nu este indeajuns de mare pentru a face fata fluxului de date catre dispozitivele de timp real, atunci calitatea sunetului se va deteriora, aparand intreruperi de semnal sau alte zgomote nedorite.
Spre exemplu, daca la analizoarele spectrale micsoram la 1024 esantioane lungimea bufferului si apoi micsoram numarul de esantioane la care se aplica FFT la 1024, atunci efortul de manipulare a datelor facut de catre simulare va fi mult mai mare (asa-numitul overhead):
la fiecare generare a unui cadru de date (2048 de esantione) bufferul analizorului spectral a semnalului generat va trebui citit de doua ori iar algoritmul FFT se va apela de doua ori (inclusiv numarul de initializari va fi de doua ori mai mare).
la fiecare receptie a unui cadru de date (2048 de esantione) bufferul analizorului spectral a semnalului receptionat va trebui citit de doua ori iar algoritmul FFT se va apela de doua ori (inclusiv numarul de initializari va fi de doua ori mai mare).
Din cauzele mentionate mai sus, modelul simulat nu va mai putea furniza date catre dispozitivele de timp real in ritmul in care acestea le proceseaza, rezultand un semnal deteriorat.
Daca se intampla acest lucru, avem mai multe posibilitati.
1. O prima posibilitate ar fi aceea de a compila codul Simulink al modelului. Executabilul obtinut nu este unul de timp real deoarece Windows nu este un sistem de timp real, dar codul compilat va fi executat mai rapid decat modelul interpretat.
2. O a doua posibilitate consta in marirea parametrului Initial output delay de la boxe la 1 secunda, adica boxa va astepta 44100 de esantioane pana la redarea semnalului din buffer. In acest fel acest dispozitiv de timp real "asteapta" ca modelul simulat sa genereze 44100 de esantioane inaite de a incepe procesarea in timp real a acestor date.
3. O a treia posibilitate ar fi simplificarea modelului. Un timp semnificativ al simularii se consuma pentru analiza spectrala a semanlului generat cat si a celui receptionat, lucru neesential pentru un generator de semnal. Daca vom aduce modelul la forma:
vom observa cum nu vor fi probleme in ceea ce priveste calitatea sunetului. Se poate scade dimensiunea cadrului pana la 32 de esantioane/cadru.
De altfel, trebuie sa precizam ca modul in care ar trebui folosite aceste modele respectiv executabile este modul independent, adica generatorul de mai sus ruleaza pe un calculator emitand un semnal cu frecventele dorite, iar captarea semnalului si analiza sa spectrala se executa independent pe un alt calculator. Sporeste astfel semnificativ viteza de simulare a modelelor iar fluxul de date simulat devine compatibil ca viteza cu fluxul de date de timp real.
Modelul signal_gen Modelul signal_analysis
Generator de semnal stereofonic cu mai multe frecvente pe fiecare canal
Ne propunem sa construim un generator de semnal stereofonic dar la care semnalul pentru fiecare canal sa fie o combinatie de sinusoide de mai multe frecvente, amplitudini si defazaje. Acest generator poate avea structura urmatoare:
Cum obiectul Simulink To Wave Device poate accepta semnal stereofonic, semnalul de la intrare trebuie sa aiba doua coloane, fiecare coloana continand esantioanele canalului respectiv.
Din acest motiv am folosit obiectul Matrix Concatenation/Horizontal Cat care preia doua semnale vectoriale si le concateneaza intr-o matrice cu doua coloane.
In exemplu prezentat DSP Sin Wave genereaza semnal sinusoidal pe 4 canale, fiecare avand o amplitudine 0.5 si cu frecvente 1200, 2800, 5000, 7000 Hz si defazaje 0.
DSP Sin Wave genereaza o matrice 4096 x 4, adica genereaza pentru fiecare dintre cele 4 canale un cadru cu 4096 esantioane.
Obiectul Submatrix selecteaza din aceasta matrice coloanele 1 si 2 iar celalalt obiect Submatrix1 selecteaza coloanele 3 si respectiv 4.
Obiectele Matrix Sum/Row Sum preiau cele doua submatrici generate mai sus si realizeaza o suma pe randuri, ceea ce echivaleaza cu generarea semnalului vectorial
pentru canalul 1 si a semnalului
pentru canalul 2.
In mod evident, se pot genera semnale oricat de complexe cu modificari minore in parametrii modelului implementat.
Folosirea unor parametri formali pentru generatorul de semnal
Dorim ca modelul anterior sa posede o flexibilitate sporita prin folosirea unor parametri formali pentru generatorul de semnal audio stereo.
Putem defini f_ch1 respectiv f_ch2 vectorii frecventelor sinusoidelor ce compun semnalele audio pe cele doua canale si respectiv a_ch1 si a_ch2 amplitudinile acestor sinusoide (se pot defini analog si defazajele). In mod analog putem defini si parametri formali globali ai simularii sau ai celorlalte obiecte folosite in model.
Pentru aceasta construim un fisier script (cu extensia .m) de forma:
disp('Generator de semnal audio stereo');
f_ch1=input('vectorul frecventelor canalului 1: ');
f_ch2=input('vectorul frecventelor canalului 2: ');
d_ch1=size(f_ch1,2);d_ch2=size(f_ch2,2);
a_ch1=ones(1,d_ch1);a_ch2=ones(1,d_ch2);
aa_ch1=input('vectorul amplitudinilor canalului 1 [implicit 1]: ');
if size(aa_ch1)~=[0,0],a_ch1=aa_ch1;end;
aa_ch2=input('vectorul amplitudinilor canalului 2 [implicit 1]: ');
if size(aa_ch2)~=[0,0],a_ch2=aa_ch2;end;
index_ch1=d_ch1;
signal_gen; %apelul modelului generatorului de semnal
Programul anterior se poate dezvolta foarte usor pentru a verifica compatibilitatile dimensionale intre vectorii frecventa, amplitudine si defazaj.
Construirea unui executabil si a unei interfete cu programul executabil
Compilarea unui program cu ajutorul terget-ului GRT (Generic Real-Time) conduce la obtinerea unui executabil pornind de la modelul Simulink. In acest caz simularea se poate executa cu ajutorul codului compilat, ceea ce mareste viteza de simulare. Daca executabilul include si module de timp real, atunci ele vor functiona in timp real, dar intregul program nu este legat cu vreun executiv de timp real.
Acest lucru semnifica faptul ca executabilul ruleaza sub gestiunea Windows care nu garanteaza servirea intreruperilor la momentul cererii efective de intrerupere. Sub Windows nu se poate executa un adevarat program de timp real.
Programul executabil obtinut contine in codul compilat valorile efective ale parametrilor simularii la momentul compilarii astfel incat orice modificare a parametrilor simularii necesita o noua recompilare. GRT nu prevede un asa-numit API (Application Program Interface) prin care sa putem gestiona anumiti parametri fara a mai fi nevoie de recompilare.
Acest neajuns este inlaturat de target-ul RSIM (Rapid Simulation) care este conceput tocmai pentru a prevede o interfata a utilizatorului cu programul compilat.
API se implementeaza sub RSIM cu ajutorul unor fisiere de date MATLAB care vor avea extensia .MAT. Folosind RSIM se pot executa mai multe simulari la rand, una dupa alta fara intrerupere, fiecare simulare putand avea noi valori ale semnalelor de intrare, ale parametrilor simularii sau putand capta semnale de iesire in fisiere de date diferite care apoi se pot analiza separat. Acesta este asa-numita simulare pe loturi (bunch-simulation) prin care putem observa rapid efectele diferitelor modificari pe care le facem in model
Daca se compileaza modelul folosind target-ul RSIM, la sfarsitul simularii se pot modifica o parte din parametri, se pot salva intr-un fisier de date .MAT si executabilul se poate lansa din nou in executie cu parametrii sai efectivi legati la noile valori dorite. Putem modifica astfel parametrii simularii oridecate ori este necesar, dar simularea se face lansand in executie un execuatbil, cu o comada externa MATLAB sau direct din DOS.
Atat GRT cat RSIM genereaza un executabil cu numele model.exe, unde model este numele modelului Simulink care a fost compilat. Diferenta intre cele doua executabile este vizibila numai la momentul executiei.
Daca executabilul s-a obtinut cu GRT, atunci nu avem nici o posibilitate de comunicare la nivel de semnale sau parametri cu executabilul.
Daca executabilul s-a obtinut cu RSIM, la momentul lansarii sale in executie, printr-o sintaxa adecvata, se pot furniza noi semnale de intrare sau noi valori pentru parametrii modelului deoarece RSIM a implementat o interfata cu programul prin care se permite acest lucru. Putem face orice modificari fara a mai fi nevoie sa recompilam modelul.
Ceea ce trebuie mentionat este faptul ca lansarea in executie a executabilelor se face sub directa gestiune a DOS sau Windows, deci aceste executabile nu ruleaza in timp real. Codul compilat al modelului se ruleaza mai rapid, fluxul de date al simularii putand face fata, in anumite conditii, fluxului de date al obiectelor de timp real.
Daca vom compila cu target-ul RSIM modelul anterior, vom observa ca nu se va genera sunet si nu se va mai reprezenta grafic analiza spectrala a semnalului captat de la microfon. Acest lucru se intampla deoarece executabilul poate include module numai din biblioteca matematica a MATLAB (MathLib) sau din cea grafica (GraphLib) care nu contine functii specifice pentru obiectul Spectrum Scope folosit in program.
Cum RSIM a fost conceput pentru a manipula sub forma de variabile de memorie atat semnale de intrare cat si de iesire, vom modifica modelul anterior dupa cum urmeaza:
Pentru a obtine o flexibilitate deosebita in simulare si pentru a profita din plin de facilitatile RSIM, vom introduce parametri formali in dialog-box-urile obiectelor folosite.
Spre exemplu, frame_dim reprezinta un parametru pentru dimensiunea cadrului flosit in obeicte care cer o astfel de dimensiune, dupa cum fs reprzinta frecventa de esantionare folosita de placa audio.
Dupa compilarea modelului, care se face cu actionarea butonului Build, vom construi un script MATLAB prin care sa apelam corespunzator executabilul construit.
Acest lucru se poate face cu programul MATLAB urmator:
disp('Generator de semnal audio stereo');
frame_dim=input('dimensiunea cadrului: ');
fs=input('frecventa de esantionare: ');
f_ch1=input('vectorul frecventelor canalului 1: ');
f_ch2=input('vectorul frecventelor canalului 2: ');
d_ch1=size(f_ch1,2);d_ch2=size(f_ch2,2);
a_ch1=ones(1,d_ch1);a_ch2=ones(1,d_ch2);
aa_ch1=input('vectorul amplitudinilor canalului 1 [implicit 1]: ');
if size(aa_ch1)~=[0,0],a_ch1=aa_ch1;end;
aa_ch2=input('vectorul amplitudinilor canalului 2 [implicit 1]: ');
if size(aa_ch2)~=[0,0],a_ch2=aa_ch2;end;
amplitude=[a_ch1,a_ch2];
frequency=[f_ch1,f_ch2];
index_ch1=d_ch1;
rtP = rsimgetrtp('signal_gen');save new_paramfile rtP;
!signal_gen -tf 1 -p new_paramfile.mat
%signal_gen; %apel la modelul signal_gen.mdl
%continuare=input('hit'); %se asteapta sfarsitul simularii
%se prelucreaza datele din memorie
load signal_gen;
fr_pas=fs/frame_dim;
fr=0:fr_pas:(frame_dim-1)*fr_pas;
indx=frame_dim/2;
fft_db=20*log10(rt_yout(1:indx));
plot(fr(1:indx),fft_db(1:indx));
axis([fr(1),fr(indx),0,max(fft_db)]);grid;
Se observa cu programul ofera o prima parte de dialog cu utilizatorul prin care se culeg informatiile despre parametrii pe care putem sa-i modificam. Semnificatia acestor parametri se determina simplu din progam.
Daca lansam in executie acest program, putem furniza urmatorii parametri:
>> signal_generator
Generator de semnal audio stereo
dimensiunea cadrului: 4096
frecventa de esantionare: 44100
vectorul frecventelor canalului 1: [2300,3100]
vectorul frecventelor canalului 2: [500,1200]
vectorul amplitudinilor canalului 1 [implicit 1]:
vectorul amplitudinilor canalului 2 [implicit 1]:
** starting model 'signal_gen' **
** created signal_gen.mat **
Mesajele finale semnaleaza lansarea in executie a executabilului si salvarea ultimelor 4096 de esantioane (1 cadru) in fisierul de date signal_gen.mat. Acestea se incarca in memorie si sunt prelucrate (analizate spectral). Rezultatele sunt plotate si scalate corespunzator:
Se observa cum, pe unul din canale, s-au regasit frecventele generate.
La final trebuie sa facem o observatie importanta. Dupa cum se observa, obiectele DSP pot lucra la nivel de esantion (sample-based) sau la nivel de cadru (grup de esantioane, frame-based).
Daca se foloseste To Workspace, in dialog-box-ul corespunzator trebuie mentionat Limit data points to last.
Acesta semnifica numarul ultimelor puncte care se pastreaza in variabila pe care noi am numit-o yout. La finalul simularii aceasta se salveaza in fisierul signal_gen.mat sub numele de rt_yout. Prefixul rt provine de la real-time si semnifica faptul ca variabila a fost salvata in urma unui proces executabil generat sub RSIM.
Datele de la microfon (From Wave Device) precum si de la algoritmul Fourier (Short-Time FFT) sunt bazate pe cadru, care in cazul nostru concret stocheaza 4096 de puncte.
Cand am setat la valoarea 1 Limit data points to last, am limitat la un singur cadru numarul de cadre care se stocheaza in yout, acest cadru fiind in format Array (Save Format).
Deci prin Limit data points to last se intelege fie numarul de esantioane stocate (in cazul sample-based) fie numarul de cadre stocate (in cazul frame-based), in functie de modul in care functioneaza obiectul conectat la intrare.
Instrument specializat pentru generarea de semnale
In MATLAB/Simulink exista instrumente special concepute ca generatoare de semnale. Acestea emuleaza software instrumente si dispozitive hardware binecunoscute. Unul dintre aceste instrumente este reprezentat de catre daqfcngen (Data Acquisition Function Generator).
Semnificatiile de pe panoul frontal al acestui instrument virtual sunt evidente.
Exista 7 tipuri de semnale diferite: sine, sinc, square, triangle, sawtooth, random, chirp. La fiecare tip de semnal se pot modifica o serie de parametri.
3.6 Instrumente specializate pentru analiza si vizualizarea semnalelor
Exista doua tipuri de osciloscoape cu ajutorul carora putem sa facem o analiza a semnalelor captate de la diferite placi de achizitie.
Daqscope reprezinta un exemplu de osciloscop virtual.
Softscope este un instrument putin mai complex, in sensul ca dispune de un GUI complex cu ajutorul caruia putem face setari ale instrumentului virtual. Aceste setari se refera atat la configuratia hardware cat si la configurarea panoului frontal.
Utilizarea acestor instrumente virtuale este identica cu cea a celor reale.
Punerea in evidenta a fenomenului de reverberatie
Reverberatia sau ecoul reprezinta fenomenul de repetare in a unei secvente sonore cu un grad anumit de atenuare. Experimentul de timp real pe care il propunem consta din doua parti:
Achizitionarea intr-o variabila din memorie a unui semnal sonor (cu o anumita durata) de la microfon
Reverberatia secventei sonore achizitionate
Pentru experimentele mentionate vom folosi obiectele din biblioteca DSP Blockset a Simulink-ului.
Pentru achizitionarea si stocarea in memorie a unui semnal sonor provenit de la microfon putem folosi urmatoarele modele:
Cele doua modele de mai sus implementeaza operatiile de achizitie si redare a unui semnal (mono) provenit de la microfon.
Microfonul functioneaza in mod frame-based, deci furnizeaza un numar de esantioane grupate in cadre. Dupa cum se mentioneaza in dialog-box-ul obiectului Signal To Workspace prin parametrul Frames, cadrele care sosesc se concateneaza intr-o matrice bidimensionala. In exemplul anterior se lucreaza cu fs = 8000 Hz, frame_dim = 512 si timpul de simulare de 1 secunda, From Wave Device (microfonul) furnizeaza 8000 de esantioane intr-o secunda de functionare, care sunt impartite in cadre. Daca vizualizam variabilele din spatiul de lucru cu comanda whos, vom observa ca avem in memorie variabila
input 8192x1 65536 double array
Daca vom folosi optiunea Stereo pentru microfon, vom obtine
input 8192x2 131072 double array
Avem o coloana de date pentru fiecare canal in parte.
Acest semnal stocat in memorie se poate reda apoi prin conectarea unui obiect de tip Signal From Workspace la intrarea de boxe si executia modelului.
Retinem ca cele doua obiecte folosite pentru stocarea de semnal audio in memorie, anume Signal To Workspace si respectiv Signal From Workspace difera de echivalentele mai generale din Simulink/(Sources/Sinks) prin faptul ca accepta formate specifice lucrului cu obiecte specifice platformelor Windows. Ele sunt prevazute cu modalitati de manipulare a cadrelor, sporind viteza de executie a modelelor.
O alta modalitate de implementare, in care se modifica modul de stocare al esantioanelor audio si care necesita o modificare pe partea de redare a sunetului, este:
Signal To Workspace ofera o modalitate speciala de stocare a cadrelor, anume prin asa-numita paginare (paging). Daca un cadru are o dimensiune M x N, atunci un numar de P cadre se vor stoca sub forma unei matrici cu 3 dimensiuni: M x N x P.
input 512x1x16 65536 double array
Se observa cum structura variabilei de memorie input este 512 x 1 x 16, adica avem 16 cadre cu dimenisunea 512 x 1. Daca se seteaza microfonul pe optiunea Stereo, atunci:
input 512x2x16 131072 double array
deci cadrul va contine 512 esantioane pe fiecare canal in parte.
In cazul in care se preiau datele stocate in aceasta forma pentru redare, este necesar ca in dialog-box-ul obiectului Signal From Workspace sa setam corespunzator parametrii. Astfel:
Samples per frame se seteaza la valoarea 1, in sensul ca nu se prelucreaza esantioane ci cadre de esantioane. Esantioanele cadrului se transmit la iesire ca un vector de valori, format 1D, care nu este acceptat de obiectul To Wave Device.
Sample time se va modifica in mod corespunzator in sensul ca perioada de esantionare nu se refera la esantioane individuale care sunt prelucrate la momentele ci la cadre de esantioane care se transmit la intervale de timp
Se insereaza un obiect de tipul Convert 1-D to 2-D care sa transforme esantioanele intr-o matrice acceptata de To Wave Device.
Variabila din memorie input este de tip matrice tridimensionala. Obiectul Convert 1-D to 2-D preia valorile acestei matrici tridimensionale sub forma unui sir de date unidemensional (1-D) si le transforma in matrici bidimensionale (2-D) de dimensiuni frame_dim x 1 pentru semnal mono sau frame_dim x 2 pentru semnal stereo.
Pentru a implementa un model care sa creeze fenomenul de reverberatia, vom construi modelul de mai jos. Semnalul generat de la microfon este mono pe 8 biti, la o frecventa de esantionare de 8000 Hz, deci 8000 esantioane pe secunda.
Bocul de intarziere Integer Delay intarzie propagarea cu o jumatate de secunda, dupa care semnalul se propaga la boxa si se returneaza la intrare pentru a crea efectul de ecou. Astfel, daca in variabila input am preluat o secventa audio pe o durata de 1 secunda, redarea sunetului va fi intarziata cu o jumatate de secunda. Prima jumatate de secunda se reda fidel, dupa care ultima jumatate de secunda se va reverbera pana aproape de atenuarea sa totala.
Factorii de atenuare atat pe calea directa cat si pe reactie conduc la o atenuare in timp a puterii semnalului trimis la boxe.
Experimentul de mai sus se poate efectua si prelucrand semnal direct de la microfon, dar in acest caz microfonul capteaza in afara de sursa de semnal dorita si pe cea reprezentata de boxe, creandu-se un efect sonor nedorit care sepoate amplifica in timp datorita fenomenului de microfonie.
Pentru a realiza fenomenul de reverberatie fara a mai fi nevoie sa stocam in memorie sursa de semnal, putem implementa modelul urmator:
Sursa de semnal sonor, microfonul, este cuplata la partea de modelare a reverberatiei cu ajutorul unui intrerupator manual (Manual Switch), care comuta de pe o pozitie pe alta oridecate ori este accesat cu mouse-ul (dublu click).
Cat timp intrerupatorul se afla pozitionat pe From Wave Device, tot ce este preluat de la microfon este directionat catre boxe pe trei cai:
o cale directa
o cale directa, cu intarziere si atenuare
o cale de reactie cu atenuare (si intarziere mostenita)
Daca intrerupatorul este comutat pe pozitia DSP Constant, atunci nu vom avea semnal pe calea directa, semnalul de la microfon fiind intrerupt, singura sursa de semnal fiind recircularea ultimelor 0.5 secunde de semnal furnizat de la microfon.
Crearea unui efect pseudo-stereo dintr-un semnal audio mono
Acest experiment se refera la tratarea unui semnal audio mono pentru a-l transforma intr-unul stereofonic.
Aici putem sa implementam doua solutii:
Prima solutie se refera la preluarea semnalului mono si redarea sa pe un canal, iar pe celalalt canal se reda acelasi semnal dar intarziat cu o durata de timp pe care putem sa ne-o alegem
A doua solutie consta in transmiterea semnalului audio mono catrea ambele canale, dar cu intensitati diferite, modulate eventual de doua sinusoide defazate in timp. Se creaza astfel un efect de "spatialitate" a sunetului.
Intr-o prima instanta este nevoie sa generam un semnal audio mono. Se prefera varianta stocarii acestui semnal intr-un fisier de tip WAVE (cu extensia .wav). Acest lucru se realizeaza cu modelul simplu:
Prima solutie se poate implementa cu modelul:
In functie de pozitia intrerupatorului manual se poate selecta semnalul mono sau cel stereo simulat.
Semnalul mono se obtine prin duplicarea unui canal cu ajutorul concatenarii semnalului mono de tip vector coloana intr-o matrice cu doua coloane identice.
Semnalul stereo se obtine identic, cu exceptia faptului ca cel de-al doilea canal este identic cu primul dar intarziat in timp cu o zecime de secunda. Timpul de intarziere este la alegerea noastra. Tocmai aceasta intarziere in redarea semnalului pe cel de-al doilea canal ne creaza senzatia de sunet stereo.
A doua solutie pe care o propunem reprezinta un model mai complex.
Modelul preia un sunet mono (1 Ch) esantionat cu frecventa de 8000 Hz, stocat intr-un fisier Wave.
Acest semnal original se insumeaza cu el insusi, dar dupa ce a fost prelucrat de un obiect de tipul Variable Fractional Delay. Acest obiect este capabil sa intarzie secventa numerica aplicata la intrarea In cu o valoare impusa de Delay. In cazul nostru, avem o secventa de intarziere de forma:
Se observa ca intarzierea este variabila si are o valoare minima de 5 perioade de esantionare si una maxima de 35 de perioade de esantionare. Semnalul audio obtinut este in continuare mono.
Se obtine un semnal mono care este compus din semnalul original peste care se suprapune semnalul original intarziat variabil. Intarzierile sunt periodice, cu o perioada de 4 secunde.
Acest semnal este preluat de un alt bloc, intitulat Modulator Stereo, care preia semnalul mono de la intrarea sa si il prelucreaza astfel incat la iesire vom avea un semnal stereo generat pe baza semnalului mono de la intrare.
Modelul Simulink al acestui modulator este prezentat mai jos.
Semnalul monofonic este preluat la intrarea In1 si reprezinta un semnal modulator pentru cele doua sinusoide generate de blocul DSP Sinus si Cosinus. Fiecare element al matricei semnalului mono bazat pe cadru, de dimensiune 512 x 1, va multiplica elementele corespunzatoare ale semnalului stereo de forma:
Se observa cum partea variabila a primului semnal este defazata cu radiani fata de a semnalului de pe canalul al doilea, deci sunt in opozitie. Rezulta ca suma celor doua semnale este constanta: .
Semnalul stereo obtinut din cele doua sinusoide defazate este modulat in intensitate de semnalul monovariabil de la intrare. Semnalul monovariabil de la intrare se va regasi in cele doua canale ale semnalului stereo generat, dar cand intensitatea muzicala creste intr-o boxa, ea scade in aceeasi masura in cealalta boxa. Semnalul muzical de la intrare se "plimba" dintr-o boxa in alta, marind senzatia de stereofonie.
Se observa cum semnalul mono initial a fost intarziat (deci modulat in frecventa si faza) si apoi a fost modulat in amplitudine. Este o prelucrare complexa care implica o modificare a amplitudinii si a fazei semnalului initial.
Politica de confidentialitate |
.com | Copyright ©
2024 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |