Generator de funcţii cu căutare în tabel şi interpolare liniară

47
Generator de funcţii cu căutare în tabel şi interpolare liniară Generarea diferitelor semnale periodice este folositoare în comunicaţii şi aplicaţii de control. Se poate genera digital un semnal stabil şi cu distorsiuni mici la orice frecvenţă folosind un tabel de căutare cu interpolare pentru reducerea distorsiunilor. Valorile unei perioade a semnalului sunt înmagazinate într-un tabel în memorie. Pentru a obţine valoarea unui eşantion () sn , tabelul poate fi parcurs cu un pas Δ (din Δ în Δ valori). Dacă 1 Δ= (sunt citite valorile consecutive) şi perioada de eşantionare este T S (tabelul de lungime N este accesat la fiecare T S secunde), perioada semnalului sintetizat va fi: 0 [s] S T NT = Deci frecvenţa nenormată fundamentală (pentru 1 Δ = ) este: 0 [Hz] S F F N = Pe de altă parte, dacă 1 Δ≠ , de exemplu 2 Δ= , fiecare a doua valoare este citită, şi tabelul este accesat la fiecare T S secunde, atunci frecvenţa semnalului sintetizat va fi: 0 [Hz] S F F F N Δ = =Δ⋅ Dacă Δ este întreg, doar multiplii ai 0 F pot fi generaţi. Dacă Δ este raţional atunci orice frecvenţă mai mică decât jumătate din frecvenţa de eşantionare poate fi generată. Această implementare este o metodă directă de căutare în tabel cu delta număr raţional pozitiv, adică, un număr compus dintr-o parte întreagă şi o parte fracţionară. Când partea fracţionară este nenulă, eşantioanele din punctele aflate între două elemente din tabel trebuie estimate folosind valorile din tabel. Pentru a sintetiza orice frecvenţă cu distorsiuni mici, o metodă de interpolare trebuie folosită împreună cu căutarea în tabel. Folosind interpolarea, valorile semnalului aflate între elementele din tabel pot fi reprezentate mai precis. Cea mai uşoară tehnică de interpolare este interpolarea liniară. Pentru interpolarea liniară presupunem că valoarea semnalului într-un punct dintre două intrări succesive ale tabelei se află pe o dreaptă între cele două valori. Acest lucru este ilustrat în figura următoare pentru 8 N = şi 2,5 Δ= . 1 2 3 4 5 6 7 8 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 5 , 2 = Δ Valorile din tabel Valorile generate Eroarea f ără interpolare liniară Eroarea cu interpolare liniară Generarea eşantioanelor sinusului prin interpolare liniară

Transcript of Generator de funcţii cu căutare în tabel şi interpolare liniară

Page 1: Generator de funcţii cu căutare în tabel şi interpolare liniară

Generator de funcţii cu căutare în tabel şi interpolare liniară

Generarea diferitelor semnale periodice este folositoare în comunicaţii şi aplicaţii de control. Se poate genera digital un semnal stabil şi cu distorsiuni mici la orice frecvenţă folosind un tabel de căutare cu interpolare pentru reducerea distorsiunilor. Valorile unei perioade a semnalului sunt înmagazinate într-un tabel în memorie. Pentru a obţine valoarea unui eşantion ( )s n , tabelul poate fi parcurs cu un pas Δ (din Δ în Δ valori).

Dacă 1Δ = (sunt citite valorile consecutive) şi perioada de eşantionare este TS (tabelul de lungime N este accesat la fiecare TS secunde), perioada semnalului sintetizat va fi:

0 [s]ST N T= ⋅ Deci frecvenţa nenormată fundamentală (pentru 1Δ = ) este:

0 [Hz]SFFN

=

Pe de altă parte, dacă 1Δ ≠ , de exemplu 2Δ = , fiecare a doua valoare este citită, şi tabelul este accesat la fiecare TS secunde, atunci frecvenţa semnalului sintetizat va fi:

0 [Hz]SF F FNΔ

= ⋅ = Δ ⋅

Dacă Δ este întreg, doar multiplii ai 0F pot fi generaţi. Dacă Δ este raţional atunci orice frecvenţă mai mică decât jumătate din frecvenţa de eşantionare poate fi generată.

Această implementare este o metodă directă de căutare în tabel cu delta număr raţional pozitiv, adică, un număr compus dintr-o parte întreagă şi o parte fracţionară. Când partea fracţionară este nenulă, eşantioanele din punctele aflate între două elemente din tabel trebuie estimate folosind valorile din tabel. Pentru a sintetiza orice frecvenţă cu distorsiuni mici, o metodă de interpolare trebuie folosită împreună cu căutarea în tabel. Folosind interpolarea, valorile semnalului aflate între elementele din tabel pot fi reprezentate mai precis. Cea mai uşoară tehnică de interpolare este interpolarea liniară. Pentru interpolarea liniară presupunem că valoarea semnalului într-un punct dintre două intrări succesive ale tabelei se află pe o dreaptă între cele două valori. Acest lucru este ilustrat în figura următoare pentru

8N = şi 2,5Δ = .

1 2 3 4 5 6 7 8

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

5,2=Δ

Valorile din tabel

Valorile generate

Eroarea fără interpolare liniară

Eroarea cu interpolare liniară

Generarea eşantioanelor sinusului prin interpolare liniară

Page 2: Generator de funcţii cu căutare în tabel şi interpolare liniară

Algoritmul folosit pentru interpolarea liniară se bazează pe ecuaţia dreptei în două puncte: 1 1( )y y m x x− = − Pentru interpolarea liniară avem:

• [ 1] [ ]m S i S i= + − este panta segmentului de dreaptă între două elemente, i si 1i + succesive ale tabelului;

• 1 [ ]y S i= este valoarea din tabel de la adresa de bază + deplasamentul i; • [ ]y S i f= + este eşantionul aproximat; • 1f x x= − este partea fracţionară a lui delta, 0 1f< < .

De aceea avem: ( )[ ] [ ] [ 1] [ ]S i f S i f S i S i+ = + ⋅ + − Generarea semnalelor sinusoidale folosind dezvoltarea în serie Taylor a funcţiei sinus Pentru calculul funcţiei sin( )x se poate folosi dezvoltarea în serie Taylor dată de ecuaţia:

3 5 7

sin( ) ...1! 3! 5! 7!x x x xx = − + − + (1)

Formula erorii pentru dezvoltarea funcţiei sinus în serie Taylor este:

( ) ( ) ( ) ( )1 1

1sin1 ! 1 !

n nn

nx xe x

n n

+ ++= ≤

+ +

Se poate determina n pentru o eroare maximă dorită. De exemplu pentru a calcula ( )sin , π / 2x x ≤ cu o eroare mai mică de 10-4 rezultă:

( )

1

4

π2 10

1 !

n

n

+

⎛ ⎞⎜ ⎟⎝ ⎠ ≤+

unde n trebuie să fie impar. Se obţine n=7. Teoretic, funcţia sinus poate fi calculată cu seria Taylor pentru orice valoare a lui x de la minus la plus infinit. Practic, se alege intervalul [ ]π / 2,π / 2− şi pentru valori în afara acestui interval se foloseşte periodicitatea şi simetria funcţiei sinus. Fie

π,x t n n= + ∈ (2) Rezultă:

( ) ( )( )

sin , parsin

sin , impart n

xt n

⎧⎪= ⎨−⎪⎩ (3)

Pentru ca numărul n să fie cel mai apropiat întreg, multiplu de π, faţă de x, acesta se calculează prin rotunjire:

roundπxn ⎛ ⎞= ⎜ ⎟

⎝ ⎠

Eroarea de rotunjire va fi mai mică de ½ adică: 1, unde| |2

xn δ δπ

= + ≤

Rezultă: 1π π π π

π 2xt x n x δ δ⎛ ⎞= − = − + = ≤⎜ ⎟

⎝ ⎠

Deci funcţia ( )sin x calculată cu formula (3) şi cu substituţia (2) va avea ca argument π/2 π/2t− ≤ ≤ . Pentru 0t < se poate folosi relaţia:

Page 3: Generator de funcţii cu căutare în tabel şi interpolare liniară

sin( ) sin( )t t− = − Pentru procesoarele de semnal în virgulă fixă reprezentarea în format fracţionar implică scalarea

lui x în intervalul [ 1,1)− , considerând / 2 / 2xπ π− ≤ < , adică: 2

sxxπ

= .

Se poate aduce formula (1) la calculul unui polinom în 2x , adică: 3 5 7 2 4 6

sin( ) ... 1 ...1! 3! 5! 7! 3! 5! 7!x x x x x x xx x

⎛ ⎞≈ − + − + = − + − +⎜ ⎟

⎝ ⎠

Dacă avem în vedere şi scalarea lui x obţinem:

( )2 4 6 81 2 3 4sin( ) 1 ...

2 s s s s sx x a x a x a x a xπ= + + + + +

Unde constantele includ semnul şi factorii de scalare:

2

11 0.41123353! 2

a π⎛ ⎞= − = −⎜ ⎟⎝ ⎠

, 4

21 0.05073395! 2

a π⎛ ⎞= =⎜ ⎟⎝ ⎠

,

6

31 0.00298047! 2

a π⎛ ⎞= − = −⎜ ⎟⎝ ⎠

. 8

41 0.00010219! 2

a π⎛ ⎞= =⎜ ⎟⎝ ⎠

Generator de semnal prin metoda oscilatorului digital

O metodă utilă de generare a unei sinusoide de o anumită frecvenţă este folosirea unui rezonator aflat la limita stabilităţii care are o pereche de poli complex conjugaţi pe cercul de rază unitate.

Fie sistemul digital care are răspunsul la impuls de forma: 0( ) sin( ) ( )h n A n u nω= (1)

unde ( )u n este treapta unitate, A este amplitudinea sinusoidei generate, iar 0ω este frecvenţa unghiulară.

Funcţia de transfer a sistemului (considerând 1A = ) se obţine aplicând transformata Z ecuaţiei (1):

( )( )

0 0

0 0 0 0

1

1 1 1 2

1 1 1( )2 1 1 2 1

j j

j j j j

e e zH z

j e z e z j e e z z

ω ω

ω ω ω ω

− −

−− − − − −

−⎛ ⎞= − =⎜ ⎟− − ⎡ ⎤⎝ ⎠ − + +⎣ ⎦

Evident acest sistem are polii 0je ω şi 0je ω− aflaţi pe cercul de rază unitate. Efectuând calculele rezultă:

1

01 2

0

sin( )( )( ) 1 2cos

zY zH zX z z z

ωω

− −= =− +

Ecuaţia cu diferenţe finite este: 0 0( ) 2cos ( 1) ( 2) sin ( 1)y n y n y n x nω ω= − − − + −

Dacă la intrarea sistemului se aplică impulsul unitate pentru 2n ≥ , ieşirea ( )y n poate fi calculată recursiv astfel: 0( ) 2cos ( 1) ( 2), 2y n y n y n nω= − − − ≥

cu condiţiile iniţiale 0(1) siny ω= şi (0) 0y = . Deoarece termenul 02cosω poate avea valori supraunitare algoritmul va calcula ieşirea ( )y n

astfel: 1. 0( 1)cosa y n ω= − 2. ( ) 2 ( 2)y n a y n= − −

Page 4: Generator de funcţii cu căutare în tabel şi interpolare liniară

0cos2 ω

1−1−z

1−z

)(ny

)1(1 −= nys

)2(2 −= nys Figura 1. Structura oscilatorului digital

Erorile care apar în acest sistem sunt date de reprezentarea valorii 0cosω pe un număr finit de biţi

şi la trunchierea rezultatelor. Dacă valoarea 0cosω este cuantizată pe 16 de biţi eroarea (deviaţia) de frecvenţă unghiulară este:

( )150 0 0arccos cos 2ω ω ω −Δ = − −

ceea ce, pentru o frecvenţă de eşantionare de 48 kHz conduce la o diferenţă de frecvenţă faţă de valoarea nominală de maxim 0.01 Hz pentru frecvenţe situate în intervalul 500 Hz – 23 kHz şi de maxim 0.1 Hz în afara acestui interval.

În urma cuantizării coeficientului 0cosω este afectată numai frecvenţa sinusoidei generate nu şi amplitudinea acesteia deoarece se modifică numai argumentul polilor, modulul rămânând 1.

Totuşi, trunchierea rezultatului înmulţirii şi adunării la precizie simpla de 16 biţi conduce la erori care se propagă recursiv, ceea ce poate afecta variaţia amplitudinii în timp. Generator de semnale sinusoidale în cuadratură

O altă soluţie simplă, rapidă, de tip recursiv de generare a sinusului este propusă în rândurile

următoare. Avantajul este că se pot genera simultan o sinusoidă şi o cosinusoidă de aceeaşi frecvenţă (necesare în aplicaţii unde se cer semnale modulatoare în cuadratură) iar rezultatele sunt de mare precizie.

Operaţiile efectuate de sistem sunt de fapt două formule binecunoscute din trigonometrie şi anume cosinusul şi sinusul unei sume de arce. Recursivitatea se scrie: cos ( 1) cos cos sin sinn n nα α α α α+ = − sin ( 1) cos sin sin cosn n nα α α α α+ = +

unde 02 / SF Fα π= . Pentru generarea frecvenţei dorite trebuie iniţializate valorile cos 0 1= şi sin 0 0= . Calculul celor

două forme de undă se realizează apoi doar prin patru multiplicări, o adunare şi o scădere. Parametrii de intrare sunt locaţiile de memorie folosite pentru cos nα şi sin nα şi cele două constante cosα şi sinα ce dau frecvenţa de oscilaţie.

cosα

sinα1−z 1−z

nαcos nαsin

-sinα

cosα

Figura 5.4. Structura generatorului de semnale sinusoidale în cuadratură

Frecvenţa va fi dată deci de incrementul de fază 02 / SF Fα π= . Recursivitatea necesită controlul ciclurilor limită pe termen lung. Din cauza faptului că sinusul şi

cosinusul sunt generate recursiv, erorile se pot propaga foarte rapid. Pentru a preveni ca amplitudinea să

Page 5: Generator de funcţii cu căutare în tabel şi interpolare liniară

scadă sau să crească în decursul timpului, se adaugă un sistem de compensare a amplificării. Acesta se realizează prin calcularea unui semnal de eroare, semnal ce este dat de diferenţa între amplitudinea dorită (1 de exemplu) şi amplitudinea actuală (cea generată), care se calculează cu formula: 2 2cos ( ) sin ( )n nα α+

cosα

sinα

1−z 1−z

nαcos

nαsin

-sinα

cosα

)(sin)(cos 22 nn αα + )(sin)(cos 22 nn αα +

1

-

1

err

nαcos

nαsin

Figura 5.5. Compensarea amplificării în generatorul de semnale sinusoidale în cuadratură

Semnalul de eroare este apoi utilizat ca o reacţie negativă, pentru controlul amplitudinii, ceea ce

conferă acestui algoritm o mare precizie la generarea sinusoidelor. Semnalul eroare va fi calculat după formula: 2 21 cos ( ) sin ( )err n nα α= − +

Pot apare trei cazuri de-a lungul desfăşurării programului : 1. Dacă 0err = , deci suma de sub radical va fi 1, semnalul nu va avea nici o eroare, iar

semnalele sin( )nα şi cos( )nα vor fi amplificate cu 1, păstrându-şi astfel valoarea. 2. Dacă sinusoida are tendinţa să scadă în amplitudine, de exemplu dacă radicalul ia valoarea 0,9

, va rezulta un semnal de eroare 0,1err = . Acesta se va aduna cu 1 şi se va înmulţi cu valorile anterioare ale sin( )nα şi cos( )nα , pentru a se mări amplitudinea.

3. Dacă sinusoida are tendinţa să crească în amplitudine, de exemplu dacă radicalul ia valoarea 1,1, va rezulta un semnal de eroare 0,1err = − . Acesta se va aduna cu 1 şi se va înmulţii cu valorile anterioare alesin( )nα şi cos( )nα , pentru a scădea amplitudinea.

2. Generator / receptor de semnale DTMF

Aparatul telefonic poate transmite operaţia de numerotare (numărul apelat) spre centrală telefonică în următoarele moduri: a) Serii de impulsuri lipsă de curent egale ca număr cu cifra care trebuie transmisă; b) Semnalizare multifrecvenţă (DTMF = Dual Tone Multifrequency), care se realizează prin transmiterea simultană în linie a două semnale de frecvenţe standardizate pentru fiecare cifră transmisă;

Codecul DTMF conţine un codor care transformă apăsările de taste în semnale dual-tone, şi un decodor care detectează prezenţa şi conţinutul informaţiei semnaluluide ton DTMF care va fi recepţionat. Fiecare tastă de pe claviatură cu numerotare în cod DTMF este unic identificată de frecvenţa de pe linie şi frecvenţa de pe coloană (ca în figura 1). Schema de generare şi decodare nu este aşa de complicată şi poate fi uşor rulată pe un DSP.

Page 6: Generator de funcţii cu căutare în tabel şi interpolare liniară

Sunt folosite două frecvenţe pentru a genera un digit DTMF. O frecvenţă este aleasă din cele patru de pe rând, iar cealaltă este aleasă din cele patru de pe coloană. Două din cele opt frecvenţe pot fi combinate pentru a genera 16 digiţi DTMF, diferiţi între ei. Din cele 16 butoane care apar în figura de mai jos, 12 sunt butoane care se gasesc pe orice tastatură telefonică , iar patru dintre ele sunt rezervate pentru aplicaţii viitoare. Tastele A, B, C, D nu sunt folosite în prezent , dar sunt parte integrantă a standardului DTMF. Apăsând orice tastă , se generează un ton care este suma a două sinusoide pe frecvenţe diferite, corespunzătoare liniei şi coloanei din dreptul acelei taste. Frecvenţele utilizate în DTMF sunt alese cu grijă, astfel încât circuitele de decodare să nu le confunde cu alte semnale care pot apărea pe linie. Deoarece transmiterea semnalelor DTMF nu implică o întrerupere a circuitului telefonic, tonurile DTMF pot fi transmise şi în timpul unei convorbiri telefonice, prin simpla apăsare a unei taste. Pentru a nu fi confundate cu alte tonuri, tonurile DTMF trebuie să fie prezente continuu timp de 65 ms, urmate de o pauză de lungime similară. Cu o durată minimă de 130 ms pentru un digit, timpul de transmisie al unui număr de telefon mai lung scade considerabil. 2.1. Generatorul de tonuri DTMF Generatorul de tonuri DTMF se bazează pe două oscilatoare sinusoidale digitale de ordinul 2 programabile, unul pentru tonul de pe linie şi unul pentru cel de pe coloană. Două oscilatoare, în loc de opt, reduc mărimea codului. Bineînţeles, pentru fiecare digit care trebuie codat, fiecare din cele două oscilatoare trebuiesc încărcate cu coeficientul cel mai apropiat şi condiţia iniţială dinaintea oscilaţiei poate fi iniţiată. Frecvenţele tipice DTMF sunt cuprinse între 700 Hz şi 1700 Hz. Tabelul 1 prezintă coeficienţii şi condiţiile necesare pentru generarea tonurilor DTMF. Figura 2 arată schema bloc a perechii de oscilatoare digitale. Tabel 1. Coeficienţii şi condiţiile iniţiale pentru oscilatoarele sinusoidale

Figura 2. Oscilatoare Sinusoidale Digitale

Page 7: Generator de funcţii cu căutare în tabel şi interpolare liniară

Specificaţiile date de AT&T despre durata tonului arată următoarele:10digiţi/sec este rata de date maximă pentru semnalele Touch-Tone. Pentru un interval de timp de 100 milisecunde, durata tonului este de cel putin 45 de milisecunde şi nu mai lungă de 65 milisecunde. Generatorul de tonuri trebuie să fie silenţios în restul intervalului de 100 milisecunde. Esenţial este faptul că seria digiţilor generaţi de la claviatură sunt transformate în serii de “dual-tones” cu durate bine specificate care sunt întrerupte de pauze, care sunt de asemenea de anumite durate. Pauzele sunt de asemenea necesare pentru a face deosebirea între doi sau mai mulţi digiţi intraţi succesiv.

2.2. Detectorul de tonuri DTMF

Problema detectării tonurilor DTMF într-un semnal şi convertirea lor în digiţi este cu siguranţă mult mai complicată decât procesul de codare. Procesul de decodare este prin natura lui un proces continuu, aceasta însemnând o căutare continuă în fluxul de date, a prezenţei tonurilor DTMF.

Algoritmul Goertzel este baza decodorului DTMF. Se bazează pe o structură recursivă în comparaţie cu FFT-ul căruia îi trebuie un bloc de date înainte de a fi în stare să pornească procesarea. Algoritmul Goertzel poate fi implementat pentru fiecare componentă spectrală TFD printr-un filtru IIR de ordin 2. Funcţia de transfer pentru filtrul IIR este:

( )1

1 2

121 2cos

kN

kw zH z

z zNπ

− −

−=

⎛ ⎞− +⎜ ⎟⎝ ⎠

unde 2 /k kj nNw e π−=

N = lungimea secvenţei de intrare, care depinde de rezoluţia a două frecvenţe consecutive care sunt detectate;

Pentru detecţia tonului, puterea componentei spectrale X(k) este suficientă. După un anumit număr

de eşantioane N, ieşirea filtrului Goertzel poate fi folosită pentru a determina |X(k)|2.

Page 8: Generator de funcţii cu căutare în tabel şi interpolare liniară

Algoritmul Goertzel pe scurt: 1.Calculăm recursiv pentru n = 0…N

( ) ( ) ( ) ( )22cos 1 2k k kV n k V n V n x nNπ⎛ ⎞= − − − +⎜ ⎟

⎝ ⎠,

unde ( )1 0kV − = ( )2 0kV − = , ( )x n input= 2.Calculăm pentru fiecare N

( ) ( ) ( )2

k kX k y N y N∗= ( ) ( ) ( ) ( )2 2 2 22 21 2cos 1k k k kV N V N k V N V NN Nπ π⎛ ⎞⎛ ⎞= + − − −⎜ ⎟⎜ ⎟

⎝ ⎠⎝ ⎠

Implementarea filtrelor FIR cu fază liniară pe diferite structuri

Funcţia de transfer a unui filtru cu răspuns finit la impuls de lungime N este de forma:

1 10 1 1

( )( ) ..( )

NN

Y zH z h h z h zX z

− −−= = + + +

Ecuaţia cu diferenţe finite este:

1

0( ) ( )

N

kk

y n x n k h−

=

= −∑

unde ( )x n este intrarea filtrului la momentul n, ( )y n este ieşirea, kh sunt coeficienţii funcţiei pondere şi N este lungimea filtrului. Ecuaţia Error! Reference source not found. poate fi implementată într-o structură transversală ca în figura următoare.

0h

( )x n 1z− 1z−

( 1)x n − ( 1)x n − 1z−

1h 2h 1Nh −

( 1)x n N− +

( )y n

Figura 5.1. Forma transversală pentru FIR Pentru calculul ieşirii ( )y n trebuie memorate stările filtrului şi coeficienţii funcţiei pondere. De exemplu, pentru implementarea filtrelor FIR pe procesoarele din familia DSP56300, memoria este organizată după cum urmează:

• stările filtrului (ultimele N eşantioane de intrare) în memoria de date X, într-un buffer circular de lungime N.

• coeficienţii filtrului în memoria de date Y începând de la adresa $0, de asemenea într-un buffer circular de lungime N.

Page 9: Generator de funcţii cu căutare în tabel şi interpolare liniară

Memoria X

r0

Memoria Y

1Nh −

1h

0h

( 1)x n −

( )x n

( 1)x n N− +

Adresa de bază: $0 $0 r4

Se vor studia structurile de filtre FIR: transversala, transpusa, latice. Pentru fiecare structură vor fi

realizate rutine (macrouri) in limbaj de asamblare. Se va implementa un program principal parametrizat in funcţie de lungimea filtrului, coeficienţi si structură. Se va analiza complexitatea aritmetică pentru fiecare structură.

Implementarea filtrelor cu răspuns infinit la impuls (IIR)

Pentru un filtru IIR avem funcţia de transfer de forma:

0

1

( )( )( ) 1

Mk

kk

Nk

kk

b zY zH zX z a z

=

=

= =+

Coeficienţii numărătorului kb şi ai numitorului ka se determină printr-una din metodele de proiectare a filtrelor digitale cu răspuns infinit la impuls (folosind eventual mediul MATLAB) în funcţie, bineînţeles, de condiţiile de proiectare cerute.

Notând cu ( )x n secvenţa de la intrarea filtrului şi cu ( )y n secvenţa de la ieşirea filtrului, rezultă ecuaţia cu diferenţe finite:

0 1

( ) ( ) ( )M N

k kk k

y n b x n k a y n k= =

= − − −∑ ∑

Pentru calculul ieşirii ( )y n există mai multe posibilităţi de implementare în funcţie de structura aleasă. Performanţele implementării (complexitate aritmetică memorie ocupată, transferuri paralele) diferă în funcţie de structura aleasă.

De asemenea, în proiectare şi implementare trebuie evaluate efectele reprezentării semnalelor utilizând un număr finit de biţi. În cazul reprezentării numerelor în formate cu virgulă fixă apare o depăşire dacă rezultatul unei operaţii aritmetice este de modul supraunitar. Acest lucru este posibil după operaţiile de însumare şi de înmulţire cu o constantă de modul supraunitar. Analiza posibilităţii depăşirilor comportă două aspecte:

• analiza funcţiei de transfer, ( )H z şi eventual scalarea acesteia astfel încât să se elimine sau să se reducă suficient de mult probabilitatea ca semnalul de ieşire să fie de modul supraunitar;

• analiza posibilităţii depăşirilor în toate nodurile reţelei, conducând (dacă este necesar) la o scalare a semnalului compensată în final, astfel încât să nu afecteze realizarea funcţiei de transfer impuse.

Page 10: Generator de funcţii cu căutare în tabel şi interpolare liniară

Se vor studia structurile de filtre IIR: directă, cascada şi paralel. Pentru fiecare structură vor fi realizate rutine (macrouri) in limbaj de asamblare. Se va implementa un program principal parametrizat in funcţie de lungimea filtrului, coeficienţi si structură. Se va analiza complexitatea aritmetică pentru fiecare structură.

Filtre notch Filtrul notch atenuează/elimină cu o calitate bună o componentă particulară de frecvenţă din

spectrul semnalului de intrare lăsând amplitudinea pe celelalte frecvenţe relativ neschimbată. Pentru identificarea şi eliminarea unei sinusoide dintr-un semnal este necesar un filtru de tip opreşte-bandă care să rejecteze puternic o anumită frecvenţă şi care să aibă o caracteristică foarte ascuţită în banda de oprire. Un filtru notch este, astfel, in esenţă un filtru opreşte bandă cu o bandă de oprire foarte îngustă si două benzi de trecere. Răspunsul în amplitudine ( )1H ω la un filtru notch obişnuit este arătat în figura 1 şi este caracterizat de frecvenţa notch 0ω (în radiani), şi rejecţia de bandă BW de 3 dB. Pentru un filtru notch ideal, BW trebuie să fie 0, amplitudinea benzii de trecere trebuie să fie 1 (0 dB) şi atenuarea la frecvenţa notch trebuie să fie infinită. Caracteristica unui astfel de filtru este prezentată în figura de mai jos.

Fig. 1: Răspunsul în amplitudine ( )H ω al filtrului notch

Filtrele notch digitale pot fi proiectate ca structuri cu răspuns finit la impuls sau răspuns infinit la

impuls folosind tehnici standard de proiectare. Un filtru FIR (a cărui functie de transfer are numai zerouri) ar necesita un ordin mare pentru realizarea unor astfel de performanţe. În acest sens apare necesitatea întrebuinţării unui filtru IIR, ai cărui poli asigură o caracteristică amplitudine-frecvenţă extrem de îngustă.

Filtrele notch digitale IIR pot fi proiectate prin folosirea metodelor de aproximare a filtrului analog clasic. Totuşi, se poate întâmpla să ne confruntăm cu 2 tipuri de probleme în asemenea proiectări. Programul de proiectare cere frecvenţele de margine pentru banda de trecere şi banda de oprire şi riplurile ca parametrii de intrare şi alegerea unor specificaţii improprii pot duce la ordine mari ale filtrelor. De asemenea, pentru proiectarea filtrelor notch digitale cu banda limitată (îngustă) polii din domeniul Z tind să fie foarte aproape de cercul unitate. Aceasta generează un înalt răspuns neliniar al fazei, zgomot ridicat, instabilitatea potenţială ridicată.

O strategie simplă de proiectare propusă de Laakso este aceea de a proiecta filtrele notch prototip IIR de ordinul 1 si 2 cu zerouri strict pe cercul unitate şi poli aproape de zero.

Filtrul notch IIR de ordinul 2 este mult mai elastic când poate fi proiectat pentru o frecvenţa notch arbitrară, 0ω . Un asemenea filtru tipic are funcţia de transfer:

1 2

01 2 2

0

1 2 cos( )1 2 cos

z zH z kr z r z

ϖϖ

− −

− −

− ⋅ +=

− ⋅ + (1)

În relaţia (1), r este raza perechilor de poli complex conjugaţi localizaţi pe frecvenţa 0ω şi k e un factor de scală. Efectul notch în (1) e obţinut prin plasarea unei perechi de zerouri complex conjugate cu

0exp( )jω± în timp ce răspunsul în frecvenţă în banda de trecere e adus mai aproape de unitate prin plasarea unei perechi de poli conjugaţi cu 0exp( )r jω⋅ ± , unde r e mai mic decât unitatea, dar foarte aproape de ea. Rejecţia de banda BW la 3dB a acestor filtre e o funcţie de r şi poate fi redusă prin

Page 11: Generator de funcţii cu căutare în tabel şi interpolare liniară

creşterea razei polilor r. Oricum, daca r este ales prea aproape de unitate, zgomotul care este proporţional cu 2

( 1 )rΔ = − , devine foarte mare.

În această proiectare, BW poate fi controlată prin r, fiind mai îngustă pe măsura ce r se apropie de cercul unitate. Pentru r=0.98 banda este suficient de îngustă, aşa cum se poate observa din figura următoare.

Fig. 2: Răspunsul in amplitudine ( )H ω al filtrului notch (r=0.98)

În cele ce urmează ne propunem să vedem cum se modifică banda de 3 dB în funcţie de r. Simularea în matlab pentru valori diferite ale lui r ne oferă următoarele rezultate. S-au ales doar valori ale lui r cât de cât apropiate de 1 pentru că la valori depărtate de 1 banda la 3 dB este foarte mare şi nu mai prezintă interes. Se observă că pe măsură ce r se apropie de 1 caracteristica filtrului se apropie de cea ideală, filtrul rejectând foarte bine frecvenţa 0ω , iar frecvenţele apropiate fiind foarte puţin atenuate. Evaluarea calitativă este prezentată în figura de mai jos.

Fig. 3: Comparaţie răspunsuri în amplitudine al filtrului notch pentru diferite valori ale lui r şi

0 1.2radω =

Cantitativ, în funcţie de valoarea lui r avem următoarele valori ale benzii de 3 dB. • Pentru r=0.80 se obţine o bandă BW=0.3140 radiani • Pentru r=0.85 se obţine o bandă BW=0.2470 radiani • Pentru r=0.90 se obţine o bandă BW=0.1850 radiani • Pentru r=0.98 se obţine o bandă BW=0.0314 radiani

Rezultate interesante se obţin şi dacă mărim ordinul filtrului şi menţinem constantă valoarea lui r. Fie următoarea funcţie de transfer de ordinul 4 ( obţinută prin ridicarea la pătrat a funcţiei de ordinul 2):

1 2 2 3 40 0 0

1 2 2 2 2 3 3 4 40 0 0

1 4 cos (4 cos 2) 4 cos( )1 4 cos (4 cos 2 ) 4 cos

z z z zH z kr z r r z r z r z

ω ω ωω ω ω

− − − −

− − − −

− ⋅ ⋅ + ⋅ + ⋅ − ⋅ ⋅ += ⋅

− ⋅ ⋅ ⋅ + ⋅ ⋅ + ⋅ ⋅ − ⋅ ⋅ ⋅ + ⋅

Obţinem următoarele reprezentări:

Page 12: Generator de funcţii cu căutare în tabel şi interpolare liniară

Fig. 4: Comparaţie răspunsuri în amplitudine al filtrului notch pentru ordinele 2 şi 4, dar cu acelaşi r şi

0ω Se observă că pentru funcţia de ordinul 4 atenuarea la frecvenţa 0ω este mult mai mare decât

pentru funcţia de ordinul 2, în timp ce banda la 3 dB este puţin mai mare. Cantitativ, atenuarea s-a dublat, iar banda a crescut de la 0.238 radiani la 0.248 radiani. Spre deosebire de filtrele FIR, la filtrele IIR nu este nevoie de un ordin foarte mare pentru a obţine o atenuare acceptabilă. Aşadar la proiectarea filtrelor notch IIR, vom dimensiona pe r şi vom alege ordinul filtrului în funcţie de caracteristica pe care dorim să o obţinem. Orga de lumini

Semnalul de intrare este filtrat pe trei domenii de frecvenţă: joase, medii şi înalte. Se calculează

energia semnalului pentru fiecare bandă de frecvenţe şi dacă energia depăşeşte un prag stabilit pentru fiecare domeniu în parte, atunci se va aprinde ledul corespunzător.

Filtrele pot fi de tip RFI sau de tip RII. Frecvenţele de tăiere ale filtrelor pot fi alese: 100HzFTJ

tF = , [500Hz, 4kHz]FTBtF = 5kHzFTS

tF = , Frecvenţa de eşantionare 48kHzSF = Energia semnalului de la ieşirea fiecărui filtru se calculează continuu prin formula recursivă:

2 2( ) ( 1) ( ) ( )E n E n y n y n N= − + − −

FIR interp Egalizor grafic

FTJ

FTB

FTS

x(n)

Energie

Energie

Energie

> Tj

> Tm

> Ts

ROSU

GALBEN

VERDE

yj(n)

ym(n)

ys(n)

Page 13: Generator de funcţii cu căutare în tabel şi interpolare liniară

Memorie externa Viteza accesului la memorie prin Portul A depinde in mare parte de viteza memoriei folosite in

sistem. Portul A furnizează un număr programabil de stări de aşteptare care corespund specificaţiilor memoriei folosite. Cel puţin o stare de aşteptare este ceruta pentru acces extern. Orice alte probleme de sincronizare sunt determinate de constrângerile si întârzierile sistemului.

Dispozitivele familiei DSP56300 conţin intre 8K si 34K de memorie on-chip. In multe aplicaţii si sisteme, procesorul central trebuie sa acceseze si memorie suplimentara. Portul A permite expandarea spaţiului memoriei chip-ului la 12M x 24 biţi din memoria externa. Memoria este uşor accesabilă de către nucleu pentru procesarea de blocuri mari de date. Cu acest port, putem accesa o parte din date folosind instrucţiunea MOVE sau transferând un bloc mare in spaţiul memoriei chip-ului pentru execuţie rapida folosind transferul DMA. Folosind transferul DMA, putem transfera date din memoria externa in memoria interna si către alte periferice, ca de exemplu SCI si ESSI.

Pe plăcile EVM si ADM, conexiunile memoriei sunt deja făcute, daca jumperii potriviţi sunt conectaţi. Pentru a accesa SRAM-ul de pe EVM-ul DSP56303, trebuie conectaţi pinii 2-3 din J9. Pentru ADM-ul DSP56301, trebuie pus un jumper pe JP1. Figura 1-1 descrie conectarea DSP la memoria SRAM.

SRAM-ul este accesibil de pe plăcile EVM si ADM folosind Address Attriute Register 0 (AAR0).

Totuşi, putem folosi Address Attribute Register 1, 2 sau 3 când configuram sistemul.

Ambele placi, DSP56303EVM si DSP56301ADM, au Flash PEROM pe care îl putem accesa folosind Address Attribute Register 1 (AAR1). Figura 1-3 descrie conectarea DSP la Flash PEROM.

Fig 10. Conectarea DSP la memoria Flash

Page 14: Generator de funcţii cu căutare în tabel şi interpolare liniară

Pe DSP56303EVM, codul este lansat la resetare. Deşi următoarele secţiuni nu dau exemple de folosire a Flash PEROM, programul flash.asm cu toate variantele DSP563xx EVM. Acest program permite încărcarea oricărui program in memoria flash, astfel încât sa poată fi rulat la resetarea procesorului.

Harta memoriei

Pentru a preveni suprapunerea în mapare a dispozitivelor externe sau interfaţa cu operaţiile interne ale procesorului, consultaţi harta memoriei înainte de iniţializarea accesului la memorie.

Figura descrie harta memoriei a procesorului central. Dispozitivele pot fi plasate oriunde in spaţiul memoriei externe pentru memoria X, Y, P (Program).

Fig 11. Harta memoriei pentru nucleul DSP56300

Atributele de adresă

Această parte descrie cum să plasăm un dispozitiv extern in spaţiul memoriei DSP-ului. Address

Attribute Register din figura 1-5 setează adresa accesului la memorie şi stabileşte dimensiunea memoriei ocupata de dispozitivul extern. Daca Address Attributes nu este iniţializata, DSP-ul nu este anunţat ca este un dispozitiv in spaţiul memoriei externe. Atributul de adresă se comporta ca un cip setat pentru dispozitive externe. Orice combinaţie de X, Y si P poate fi posibilă.

Page 15: Generator de funcţii cu căutare în tabel şi interpolare liniară

Fig 12. Registrul de atribute de adresa(AAR0-AAR3)

Controlul magistralei

Registrul de control al magistralei (BCR) din figura defineşte numărul de stări de aşteptare cerute

pentru a accesa un dispozitiv extern in scopul de a realiza operaţia corecta. De asemenea controlează arbitration pins.

Fig 13. Registrul de control al magistralei(BCR)

Biti/Campuri - definiţii : BCR[ 20:16], Default Area Wait States (BDFW) BCR[ 15:13], Area 3 Wait States (BA3W) BCR[ 12:10], Area 2 Wait States (BA2W) BCR[ 9:5], Area 1 Wait States (BA1W) BCR[ 4:0], Area 0 Wait States (BA0W)

Page 16: Generator de funcţii cu căutare în tabel şi interpolare liniară

Fiecare din aceşti biţi operează in acelaşi fel. Fiecare defineşte numărul de stări de aşteptare inserate intr-un acces extern pentru setarea timpului memoriei. Fiecare set de biţi defineşte stări de aşteptare pentru cate un dispozitiv extern diferit. Aria stării de aşteptare defineşte stările cerute pentru accesarea dispozitivelor mapate de către registre Address Attribute. Biţii BDFW sunt inseraţi in fiecare acces extern ce nu este definit de un registru de atribuire. Aceşti biţi ar trebui sa aibă o valoare minima a unei stări de aşteptare, din moment ce tipul accesului este SRAM, si accesul SRAM cere cel puţin o stare de aşteptare.

Boot – FLASH Modurile de operare ale operatiei de bootare Dupa ce a fost resetat DSP-u incepe operatiile intr-unul din cele 8 moduri de bootare sau

restartare.Dupa ce CHIP-ul iese din starea de RESET,valoarile pinilor externi MODA/IRQA, MODA/IRQB, MODA/IRQC si MODA/IRQD sunt incarcate in Chip Operating Mode(COM[3:0]) bitii 0 la 3(MA,MB,MC, si MD) al Operating Mode Register(OMR). Acesti biti determina optiunile programului de butare pentru startare asa cum sunt indicate in tabelul Modurilor de Operare(Operating Modes). Coloana vectorilor de RESET indica locatia de la care se incep instructiunile pentru executie.Modurile Extins e 0si 8 exclud butarea interna a ROM-ului si executa cod din memoria externa.Modurile 9 catre F fac ca nucleul sa execute bootarea din ROM.

Mod

COM[3:0] Vector de resetare

Descriere

0 0000 $C00000 Modul 1 extins 8 1000 $008000 Mod extins 9 1001 $FF0000 Butare din octetul extins de memorie A 1010 $FF0000 Butare din SCI C 1100 $FF0000 Butare H108 in modul ISA/DSP5630x D 1101 $FF0000 Butare H108 in modul non-multiplex HC11 E 1101 $FF0000 Butare H108 in modul magistralei

multiplexate 8051 F 1111 $FF0000 ButareH108 in modul magistrala MC68302

Fig 5. Exemplu de PEROM de 32K x 8 biţi de bootare

Page 17: Generator de funcţii cu căutare în tabel şi interpolare liniară

Interfaţa serială Motorola a implementat mai multe interfete seriale pe procesorul său DSP56311. Pe de o parte

sunt două interfeţe denumite in mod generic ESSI0 si ESSI1 si o interfaţă denumita SCI. Cele două interfeţe ESSI (Enhanced Synchronous Serial Interface) sunt intefeţe de viteze mari şi

sunt concepute pentru a realiza interfaţarea cu codec-uri, alte DSP-uri, microprocesoare sau periferice folosind o interfaţa serială full-duplex de mare viteză. Aceste două porturi în schimb nu sunt concepute dupa standardul RS-232 ci respectă standardul serial SPI (Serial Peripheral Interface). Acesta este un alt standard serial, conceput de Motorola, si adoptat astăzi de foarte mulţi fabricanţi. Acesta nu îşi propune să înlocuiască standardul RS-232 ci un alt standard serial conceput de Philips, I2C. SPI şi I2C sunt standarde seriale pentru comunicaţia intre circuite integrate pe o aceeaşi placă PCB sau la distanţe mici. Ele sunt complementare standardului RS-232 şi nu concurente.

Ca o dovadă a acestui lucru a treia interfaţă serială prezentă pe DSP, SCI (Serial Communication Interface) este o interfaţă compatibilă RS-232. Motorola a implementat doar o parte a standardului, nu specificaţiile complete. Acest lucru îi permite totuşi sa comunice cu un calculator, un alt DSP, microprocesoare, modem-uri şi alte periferice dacă sunt configurate în mod corespunzător. De exemplu, din economie de pini, Motorola a ales să nu implementeze "hardware flow control" si liniile corespunzătoare. Acest lucru limitează procesorul la lucrul cu "software flow control" şi dezavantajele acestuia. În mod evident acest mod de lucru va trebui să fie suportat şi la capătul celălalt al conexiunii. În cadrul acestui proiect interfaţa care va fi implicit desemnată prin termenul de interfaţă seriala va fi interfaţa SCI.

SCI pentru DSP56311 oferă un port full-duplex pentru comunicare serială cu alte procesoare sau

periferice. Portul SCI se interfaţează direct cu periferice care folosesc semnale cu nivel TTL. Folosind convertoare de nivel, SCI poate fi interfaţat cu periferice cu semnale non-TTL (RS232 în cazul nostru).

Portul SCI este configurat peste pinii porului E al DSP-ului. În mod implicit la RESET DSP-ul

setează aceşti pini ca fiind intrări GPIO ignorate. Este responsabilitatea programatorului să schimbe destinaţia acestor pini prin configurarea corespunzătoare a registrului portului E.

Portul SCI foloseşte trei pini şi poate lucra atât în modul sincron cât si în mod asincron. Asignarea functiilor pe pini: - RXD - Recepţie date Pinul este multiplexat cu pinul PE0. Are rolul de a primi date seriale

orientate în forma unui cuvânt pe 8 biţi şi de a le trimite mai departe către registrul de transfer al portului SCI

- TXD - Transmisie date Pinul este multiplexat cu pinul PE1. Are rolul de a transmite date seriale din registrul de transfer al portului SCI

- SCLK - Semnal ceas Pinul este multiplexat cu pinul PE2. Are rolul de a transmite sau respectiv recepţiona semnalul de ceas necesar pentru comunicaţiile seriale sincrone.

În cazul în care ar fi totuţi necesară implementarea functiei de "hardware flow control" s-ar putea folosi pentru aceasta doi pini GPIO si programa în mod corespunzător.

Portul SCI pentru DSP56311 poate lucra în 4 moduri: 8-bit sincron 10-bit asincron (1 start, 8 data, 1 stop) 11-bit asincron (1 start, 8 data, 1 paritate, 1stop) 11-bit multidrop asincron (1 start, 8 data, 1 tip date, 1 stop)

Aceste moduri sunt selectate de biţii SCR WD[0-2].

SCI se iniţializează după cum urmează: 1. SCI trebuie să fie în starea de reset individual (PCRE=$0). Se poate folosi un semnal hardware de

RESET sau o instrucţiune software de reset 2. Programarea registrelor de control SCI (SCR, SCCR) 3. Configurarea cel puţin a unui semnal SCI

Page 18: Generator de funcţii cu căutare în tabel şi interpolare liniară

- 33 -

Efecte audio digitale bazate pe linii de întârziere

3.3 Efecte audio folosind linii de întârziere cu structură nerecursivă (FIR) 3.3.1 Ecoul simplu (Simple delay) Cea mai simplă aplicaţie a liniilor de întârziere este ecoul. În natură, ecoul

apare atunci când o reflexie puternică a unui sunet generat este percepută după un interval de timp de la producerea acestuia. Deci ecoul este o repetare a unui sunet. Pentru ca această repetare să fie percepută separat, trebuie ca acest timp să depăşească valoarea de 70ms. Dacă se doreşte imitarea unui fenomen natural, reflexia trebuie să aibă o amplitudine mai mică decât semnalul direct care a fost reflectat (aceasta datorită absorbţiei la propagarea prin aer şi la ciocnirea de perete (figura 3.8). Configuraţia care poate realiza acest lucru este prezentată în figura 3.9 .

Timpul de întârziere înglobează timpul de

propagare de la sursă până la perete şi de la pereteînapoi.

Figura 3.8 Ecoul simplu - apariţie

Z-d

X(n)

Y(n)

dry

wet

Figura 3.9 Ecoul simplu – implementare digitală

După cum se observă, este necesară o linie de întârziere d constantă

(presupunem că sursa nu îşi schimbă poziţia şi că recepţia se face tot la sursă), două multiplicări şi o adunare. Coeficienţii multiplicativi ponderează : dry – semnalul

Page 19: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 34 -

direct, wet – semnalul reflectat, valorile lor fiind incluse în intervalul (0;1). Ecuaţia sistemului din figură este:

)()()( dnxwetnxdryny −⋅+⋅= (3.1)

Răspunsul la impuls şi răspunsul în frecvenţe normate pentru d=100, dry=1, wet=0.5 sunt prezentate în figura 3.10:

Figura 3.10 Răspunsuri timp, frecvenţă normată pentru parametrii d=100, dry=1, wet=0.5

După cum se observă, însumarea semnalului direct cu semnalul întârziat

determină apariţia unor minime şi maxime spectrale, deci introduce o colorare spectrală dependentă de timpul de întârziere. Dacă evaluăm caracteristica de transfer a circuitului obţinem: dZwetdry

zXzYzH −⋅+==

)()()(

(3.2)

Forma analitică a spectrului relativ la frecvenţa normată are modulul:

)cos(2)( 22 dwdrywetdryweteH jw ⋅⋅⋅++= (3.3)

Maximele vizibile în figura 3.10 se vor obţine când cos(w*d) = 1 iar minimele

când cos(w*d) = -1 . Apar deci rezonanţe ale modulului condiţionate de timpul de întârziere şi de frecvenţa de eşantionare. În virgulă fixă, aceste rezonanţe pot duce la depăşiri ale formatelor de reprezentare, deci schema de mai sus va trebui completată cu o scalare cu inversul valorii maxime a modulului:

)/(1)(/1max

dryweteHs jw +== (3.4)

Page 20: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 35 -

Noua configuraţie este prezentată în figura 3.11.

Z-d

X(n)

Y(n)

dry

wet

s

Figura 3.11 Configuraţie cu scalare pentru a preveni depăşirile Să luăm acum în consideraţie cazul în care se va scădea semnalul întârziat din

cel direct: )()()( dnxwetnxdryny −⋅−⋅= (3.5)

Acesta va avea comportarea în frecvenţă:

)cos(2)( 22 dwdrywetdryweteH jw ⋅⋅⋅−+= (3.6)

Maximele se obţin pentru cos(w⋅d) = -1 iar minimele pentru cos(w⋅d) = 1

exact invers ca la configuraţia anterioară. Efectele în frecvenţă ale celor două configuraţii sunt puse în evidenţă de figura 3.12 ( curba continuă corespunde sumării celor două semnale iar cea punctată cazului scăderii celor două semnale).

Pi/d 2Pi/d 3Pi/d 4Pi/dw normat

dry+wet

dry-wet

Figura 3.12 Caracteristici de frecvenţă pentru cele două configuraţii

Page 21: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 36 -

Se observă că, dacă d este mare, percepţia minimelor şi maximelor este minimă (spectrul se strânge) deci schimbarea de semn nu este relevantă. Dacă însă timpul de întârziere devine mic, maximele şi minimele înlocuiesc un banc de filtre cu efecte deosebite asupra sunetului perceput.

Variaţia celor trei parametrii duce la alte tipuri de efecte care folosesc aceeaşi configuraţie:

- Slapback – semnalul întârziat este mai mare în amplitudine ca semnalul

direct; aceasta dă impresia unui timp de creştere (atack) lent în amplitudine echivalent cu redarea inversă a frazei muzicale (vorbind în termeni de variaţie a amplitudinii). Efectul a fost implementat în programul slapbck.dsp care conţine cod identic cu simdel.dsp cu diferenţa dry=0.5, wet=1, d=62ms la o frecvenţă de eşantionare de 44100Hz.

- Comb filter – filtrul pieptene cu adunare sau cu scădere la ieşire a semnalului întârziat; se foloseşte pentru timpi de întârziere mici (max. 50ms) pentru ca efectul să fie pregnant. Efectul a fost implementat în variantă pozitivă în comb1.dsp iar parametrii sunt: dry=0.5, wet=0.5, d=20ms. Varianta negativă este implementată în comb2.dsp cu parametrii: dry=0.5, wet=0.5, d=40ms.

- Pseudostereo – avem un semnal mono recepţionat pe canalul stânga; pentru al transforma în stereo, cea mai bună cale este de a întârzia semnalul cu un timp ti mai mic de 50ms şi de a-l trimite pe canalul dreapta în timp ce semnalul direct va ieşi tot pe stânga (figura 3.13).

Z-d

X(n)

YL(n)

dry

wet

YR(n)

Figura 3.13

3.3.2 Efectul de dublare a vocii procesate ( Chorus ) Să presupunem că am dori să procesăm o voce umană sau o voce de

instrument astfel încât să dăm impresia a două voci diferite, cântând la unison. O simplă întârziere a instrumentului şi o sumare cu vocea directă nu este suficientă. În realitate, când doi instrumentişti cântă la unison, întârzierea în redarea partiturii variază, fiecare are propria interpretare, iar cele două instrumente nu au timbre diferite deşi sunt identice.

Ideea de a construi un dispozitiv electronic care să simuleze acest fenomen a apărut încă din ani 80 şi s-a materializat prin implementare cu BBD-uri, multe firme de la ora actuală păstrând acest tip de implementare (deoarece este o implementare ieftină, nu se cer timpi de întârziere mari şi performanţele sunt satisfăcătoare).

Simularea întârzierii relative dintre cele două voci se realizează cu ajutorul unei linii de întârziere cu timp variabil. Timpul de întârziere poate varia după o anumită lege (sinusoidal, dreptunghiular, triunghiular, rampă, aleator uniform) iar frecvenţa de modulaţie trebuie să fie infrasonoră (practic se folosesc frecvenţe până în

Page 22: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 37 -

20Hz). O configuraţie de acest gen, preluată din echivalentul analogic, poate fi implementată digital cu un oscilator de foarte joasă frecvenţă (LFO – Low Frequency Oscillator este termenul consacrat în electronica muzicală) şi o linie de întârziere (figura 3.14).

Structura este în linii mari identică cu cea folosită la ecoul simplu (secţiunea 3.3.1) cu deosebirea că timpul de întârziere este variabil după o lege: )()( nfamountdelaynd ⋅+= (3.7)

unde f(n) este o funcţie cu variaţie pe intervalul (-1,+1), delay este timpul

mediu de întârziere iar amount dă gradul de modulaţie; Condiţiile de alegere ale constantelor delay şi amount au fost discutate în

secţiunea 3.2. Preluând rezultatele:

Damountdelaynd <+=))(max( (3.8)

0))(min( >−= amountdelaynd (3.9)

unde D este lungimea maximă a liniei de întârziere.

Z-d(n)

X(n)

Y(n)

dry

wet

s

LFO

delay

amountd(n)

Figura 3.14 Configuraţia necesară pentru realizarea efectului Chorus Dacă avem în vedere implementarea pe un procesor în virgulă fixă,

considerând cele discutate privitor la scalare în secţiunea 3.3.1 introducem constanta s de scalare la intrarea circuitului pentru a nu se produce depăşiri la ieşire: )/(1)(/1

maxdryweteHs jw +== (3.10)

Să analizăm acum implicaţiile spectrale pe care le are variaţia timpului de

întârziere. Caracteristica de frecvenţă este aceeaşi ca în cazul ecoului simplu însă timpul de întârziere este o funcţie de timp d(n) (formula 3.16) . Cum distribuţia de minime şi maxime era o funcţie de timpul de întârziere d, acum distribuţia va fi o

Page 23: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 38 -

funcţie variabilă în timp. La creşterea lui d caracteristica cu minime şi maxime se “strânge” iar când d scade caracteristica se “lărgeşte”.

În figura 3.15 s-a reprezentat modulul caracteristicii de transfer a circuitului în funcţie de frecvenţa normată w (fereastra de reprezentare a fost redusă pentru inteligibilitate).Reprezentarea s-a făcut cu parametrii dry=1, wet=0.5, pentru d=10,20,30 ms.

Figura 3.15 Caracteristici de transfer în cazurile d=10,20,30 ms Implementarea pentru procesorul în virgulă fixă nu are nimic deosebit faţă de

cele discutate până acum. Programul declară variabilele necesare, singurele adăugiri fiind constantele sum respectiv advance folosite pentru generarea unei forme de undă sinusoidale. Sinusul este iniţiat din sum=0. Din parametrul advance se poate regla rata modulaţiei de fază: valorii hexa 0x000001 îi corespunde o frecvenţă de 0.67Hz, valorii 0x000002 îi corespunde 2*0.67Hz, etc. Constantele amount şi delay se dau în eşantioane iar ponderile dry respectiv wet în formatul 1.23 . Parametrii au următoarele valori: d(n)=600+100sin(sum) eşantioane, dry=0.5, wet=0.5 .

Variaţii ale parametrilor duc la obţinerea unor efecte consacrate în domeniu: - Chorus efect ce dă senzaţia a două voci care cântă la unison. Programul

prezentat mai sus implementează un chorus. Pentru obţinerea acestui efect, d(n) trebuie să varieze periodic între limitele 10-30ms. În cazul de mai sus timpul de întârziere variază între 11ms – 15ms cu o frecvenţă de 1,34Hz.

- Double voicing efect folosit pentru procesarea vocii umane; timpul de întârziere trebuie să varieze între 20 – 60ms cu o rată de aproximativ o secundă. Acest efect conferă senzaţia de voce amplă, bogată, cu intensitate sporită. Parametrii au fost modificaţi astfel: delay=40ms, amount=2.2ms.

- Vibrato efect folosit pentru procesarea instrumentele cu corzi (chitară, viori etc.). Simulează variaţia periodică de frecvenţă care apare când degetele instrumentistului tensionează respectiv detensionează corzile în mod periodic. Singura modificare în configuraţia Chorus este dry=0 şi variaţia de frecvenţă să nu depăşească mai mult de ±1 semiton. Frecvenţa LFO trebuie să fie în intervalul 4-8Hz. Am ales pentru demonstraţie valorile delay=4ms, amount=0.5ms, advance=8*0.67Hz=5.36Hz, dry=0, wet=1.

Page 24: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 39 -

3.3.3 Ecoul multiplu (Early Echoes) Simularea acusticii unei încăperi rectangulare porneşte de la simularea

reflexiilor iniţiale (early echoes). Acestea sunt primele unde reflectate de către pereţii unei încăperi. Intensitatea acestor reflexii este o funcţie de distanţa de la sursa de

Cameră

l

li

Figura 3.16 Reflexiile iniţiale

sunet - la pereţi, de coeficientul de absorbţie al materialului din care este fabricată suprafaţa de reflexie, de volumul încăperii etc (figura 3.16).

În principiu trebuie să simulăm cele patru reflexii şi să le ponderăm după întârziere diferit. Aceasta se poate realiza cu configuraţia prezentată în secţiunea 3.3.1, multiplicată cu numărul de reflexii dorite (figura 3.17). Ponderile semnalelor întârziate sunt rezultate din studii asupra acusticii încăperilor, ele fiind de forma:

)exp( DirTlil

iwet −= (3.11)

ştiind:

l - distanţa până la sursă li- distanţa până la sursa imagine a reflexiei i wet - amplitudinea relativă a semnalului direct in raport cu reflexia i TDi – timpul de întârziere relativ al reflexiei i în raport cu semnalul direct. c – viteza sunetului în aer T60 – timpul de reverberaţie al camerei r – coeficientul de absorbţie al pereţilor Fs – frecvenţa de eşantionare

iar:

60/)1000(ln Tr = (3.12)

Fsc

lliFsDiTdi ⋅−

=⋅= (3.13)

Page 25: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 40 -

Z-d1

X(n)

Y(n)

dry1

wet1

s

Z-d2

Z-d3

wet2

wet3

Z-d4wet4

Figura 3.17 Configuraţia pentru simularea reflexiilor iniţiale ale unei încăperi

Impunând timpul de reverberaţie, distanţele de la sursă la pereţi şi frecvenţa de eşantionare putem calcula coeficienţii de ponderare ai semnalelor întârziate cu formula 3.16.

Configuraţia din figura 3.17 este corectă, însă nu este o configuraţie optimizată pentru o implementare deoarece necesarul de memorie este mare: d1+d2+d3+d4. Observaţia că se procesează acelaşi semnal s*x(n) duce la configuraţia din figura 3.18, unde necesarul de memorie este, presupunând d1<d2<d3<d4, egal cu d4.

Z-d1X(n)

Y(n)dry

Z-d2+d1 Z-d3+d1+d2 Z-d4+d1+d2+d3

wet1 wet2 wet3 wet4

s

Figura 3.18 Configuraţie optimă din punct de vedere al memoriei ocupate Ecuaţia care descrie acest sistem în timp este un filtru FIR:

∑=−⋅⋅+⋅⋅=

4

1)()()(

i ii dnxwetsnxdrysny (3.14)

Coeficientul de scalare se poate calcula cu una din regulile de scalare

prezentate în [PNS2]. Deoarece acest efect se foloseşte ca bloc de intrare într-o configuraţie ce realizează reverberaţie, se recomandă o regulă de scalare dură, deoarece orice depăşire va duce la multiplicarea distorsiunii datorită răspunsului la impuls complex caracteristic structurilor de reverberaţie. Astfel am ales regula de scalare L1. În cazul acestei scalări se obţine o valoare mică pentru s dar se exclude posibilitatea depăşirii. Ieşirea y(n) trebuie să fie de modul subunitar deci:

Page 26: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 41 -

kwetdryny

ii =+≤ ∑

=

4

1)( (3.15)

iar

∑=+

== 4

1

11

i iwetdryks (3.16)

Ecuaţia cu diferenţe finite devine:

[ ]∑∑ =

=

−⋅+⋅⋅+

=4

14

1

)()(1)(i ii

i i

dnxwetnxdrywetdry

ny (3.17)

Caracteristica de transfer a configuraţiei în transformată Z:

[ ]∑∑ =

=

⋅+⋅+

=4

14

1

1)(i

dii

i i

Zwetdrywetdry

ZH (3.18)

Modulul caracteristicii de frecvenţă are de această dată o aliură mai

complicată, păstrând însă caracteristicile de periodicitate şi structura cu minime şi maxime. Poate fi de altfel privit ca o sumă de caracteristici de transfer identice celei de la simpla întârziere.

Programul care implementează configuraţia prezentată mai sus este prezentat mai jos, numele fişierului fiind early.dsp. După o declarare a constantelor, cu aceeaşi semnificaţie ca mai sus, este recepţionat eşantionul audio curent şi este introdus pe rând în cele patru linii de întârziere. Sunt extrase apoi semnalele întârziate şi sunt ponderate şi însumate cu semnalul original. Valorile ponderilor, respectiv a numerelor de eşantioane de întârziere nu sunt calculate riguros ci sunt date orientativ. Pentru un calcul riguros se pot aplica formulele 3.16, 3.17, 3.18. O eventuală îmbunătăţire a algoritmului ar putea introduce poziţionarea stereo a celor patru reflexii. Aceasta configuraţie este folosită şi de reverberatorul Moorer pentru simularea primelor ciocniri ale undei sonore cu pereţii unei camere.

Page 27: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 42 -

3.4 Efecte audio folosind linii de întârziere cu structură recursivă (IIR) 3.4.1 Filtrul pieptene ( Comb filter ) Studiile efectuate de Schroeder în anul 1961 referitor la simularea acusticii

încăperilor cu ajutorul programelor digitale au consacrat două structuri audio folosite intens la ora actuală în efectele sonore audio: filtrul pieptene (comb filter) respectiv filtrul trece-tot (allpass filter). Filtrul piptene (figura 3.19) este o structură IIR care generează un răspuns la impuls de tip exponenţial amortizat, specific fenomenelor naturale (asemănător răspunsului la impuls al unei camere).

Figura 3.19 Structura filtrului pieptene

Răspunsul la impuls al unei astfel de structuri este prezentat în figura 3.20:

h(n)

nM 2M 3M 4M 5M

1

gg2

g3

h(n)

nM 2M 3M 4M 5M

1

g

g2

g3

Figura 3.20 Răspunsul la impuls pentru g pozitiv (sus) şi g negativ (jos).

z-Mx(n) y(n)

g

Page 28: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 43 -

Funcţia de transfer dacă inspectăm structura din figura 3.19 este:

Mgz

MzzH −−

−=

1)(

(3.19)

Sau

gM

kzkA

M

k kzzkA

zH⋅

=∑−

= −= cu

1

0)(

(3.20)

Cu

Mkjerkz /2π⋅= (3.21)

/Mgr 1= (3.22)

Dacă combinăm polii perechi şi facem corespondenţa a/(z-a)⇔e(n+1)an

obţinem formula 3.28 pentru M par şi 3.29 pentru M impar:

=Ω⋅⋅

−=

12

1)cos()1()(

M

knk

nrMgnenh

(3.23)

⎥⎥⎥⎥

⎢⎢⎢⎢

−+

=Ω+⋅⋅

−=

12

1

1)cos(1)1()(

M

knk

nrMgnenh

(3.24)

Din aceste două relaţii se poate observa utilitatea acestei structuri în simularea

acusticii încăperilor. Răspunsul la impuls este exprimat ca o sumă de oscilaţii cosinusoidale de frecvenţe Ωk. Aceste frecvenţe corespund frecvenţelor proprii specifice unei încăperi. Ele sunt amortizate cu o anvelopă exponenţială rn, unde r este constanta de amortizare. Răspunsul în frecvenţă al unui filtru pieptene are modulul:

2)cos(211)(

gMgjeH

+Ω−=Ω

(3.25)

Iată rezultatele simulării în Matlab a structurii filtru pieptene la o frecvenţă de

eşantionare de 44100Hz, cu o întârziere M=10 eşantioane, g= -0.6.

Page 29: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 44 -

Figura 3.21 Rezultatele simulării unui filtru pieptene: răspunsul la impuls şi modulul caracteristicii de frecvenţă

Se observă o distribuţie cu maxime şi minime asemănătoare filtrului pieptene

FIR. Maximele se obţin la frecvenţele Ω=2πk/M (k=0,1,…M-1) de modul:

g

eH jw

−=

11)(

max (3.26)

Minimele se obţin la Ω=(2k+1)π/M (k=0,1,…M-1):

geH jw

+=

11)(

min (3.27)

Am realizat un macro ce implementează această configuraţie deoarece ea va fi

folosită în componenţa mai multor efecte sonore. Faţă de cele expuse anterior apare un parametru nou, coeficientul de ponderare al eşantionului de intrare care realizează o scalare a semnalului procesat pentru ca nu cumva să apară depăşiri. Valoarea maximă a semnalului procesat este dată de formula 3.31. Deci introducem un coeficient de scalare s egal cu 1-g. Macroul extrage eşantionul întârziat din linia de intirziere, calculează reacţia şi apoi o însumează cu eşantionul curent. Finalul copiază suma calculată în linia de întârziere.

Page 30: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 45 -

Ceea mai simplă aplicaţie a filtrului pieptene în domeniul efectelor sonore o constituie realizarea unui reverberaţii simple obţinute prin repetarea sunetului procesat la intervale constante de timp simulând drumul parcurs repetat de o undă sonoră între doi pereţi.

3.4.2 Reverberaţia simplă (Reverberating Delay) Cea mai simplă cale de a imita reverberaţia unei încăperi se realizează cu o

structură filtru pieptene ca în figura 3.22. Ecuaţia cu diferenţe finite ce descrie sistemul este dată de :

)()()()( nhnxwetnxdryny ∗⋅+⋅= (3.28)

unde h(n) reprezintă răspunsul la impuls al filtrului pieptene din formulele

3.28, 3.29. Considerând că dry,wet variază în intervalul (-1,1) şi h(n) este nescalată ne propunem să scalăm funcţia de transfer astfel încât y(n) să fie cuprins în intervalul (-1,1). Din cele discutate în secţiunea anterioară 3.4.1, scalăm modulul caracteristicii de frecvenţă prin înmulţirea cu s1=1-g. Dacă aplicăm această scalare ieşirea va fi:

)()(1)()( nhnxswetnxdryny ∗⋅⋅+⋅= (3.29)

z-Mx(n) y(n)

g

wet

dry

Figura 3.22 Dacă avem în vedere funcţia de transfer totală, aplicând regula de scalare L1, o

regulă suficient de dură de scalare, (necesară datorită faptului că avem de-a face cu o structură recursivă repetitivă deci apariţia unei distorsiuni e însoţită de repetarea ei), obţinem:

)1(111

1 gwetdryswetdryks

−⋅+=

⋅+== (3.30)

Conform acestei scalări semnalul de ieşire devine:

Page 31: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 46 -

)1(

)()()1()1(

)()(gwetdry

nhnxgwetgwetdry

nxdryny−⋅+∗⋅−⋅+

−⋅+⋅=

(3.31)

Deci:

)()(2)(1)( nhnxAnxAny ∗⋅+⋅= (3.32)

Cu

)1(

1gwetdry

dryA−⋅+

= (3.33)

)1()1(2

gwetdrygwetA−⋅+

−⋅= (3.34)

Aceşti coeficienţi scalaţi pot fi precalculaţi de către programator sau când se

doreşte modificarea parametrilor în timp real se realizează un control adaptiv al ponderilor astfel încât semnalul de ieşire să nu depăşească plaja dinamică (-1,1).

În programul realizat (comb.dsp) am introdus A1 şi A2 constante precalculate.

Structura de calcul este următoarea: se preia de la codec esantionul curent care este ponderat cu A2 şi este introdus în linia de întârziere. Concomitent se extrage eşantionul de la ieşirea filtrului pieptene. Acesta este însumat cu eşantionul curent ponderat cu A1.

Deşi este un efect simplu constructiv, impactul său este deosebit în momentul când este folosit pentru o singură voce de instrument. În schimb este depărtat de simularea acusticii unei încăperi (de fapt numele efectului din limba engleză, Reverberating Delay, îl descrie practic perfect).

3.4.3 Efectul Flanger Studierea configuraţiei de mai sus duce la o observaţie interesantă: pentru

timpi mici de întârziere, distribuţia de minime şi maxime este practic largă, deci modificarea în timp real a timpului de întârziere va duce la deplasarea acestei distribuţii, echivalent cu un banc de filtre trece bandă ce se deplasează pe spectrul audio. Acesta este efectul Flanger. El a fost descoperit pe la începutul erei analogice în sudiourile de înregistrări. Era realizat iniţial cu două magnetofoane profesionale ce redau acelaşi program muzical, viteza de redare a unuia dintre ele fiind modificată de un operator printr-un dispozitiv în timp real. Următoarea etapă a fost simularea cu constante RC (pe post de linii de întârziere cu întârziere mică) şi varierea constantei de timp cu un oscilator în mod periodic. A urmat apoi implementarea cu circuite integrate BBD şi în fine, implementarea digitală.

Structura efectului sonor este o combinaţie între reverberaţia simplă (Reverberating delay) şi efectul Chorus. Ea este prezentată în figura 3.23:

Page 32: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 47 -

z-Mx(n) y(n)

g

wet

dry

d(n)

LFO

delay

amount

Figura 3.23 Structura efectului Flanger

După cum se poate observa, există un generator de forme de undă de frecvenţă foarte joasă (LFO), a căror amplitudine este ponderată cu amount care stabileşte gradul de modulaţie al timpului de întârziere delay. În rest avem aceeaşi configuraţie ca la secţiunea anterioară. Forma de undă modulatoare poate fi sinusoidală, triunghiulară, dreptunghiulară, rampă, aleatoare uniformă, etc.

)()( nfamountdelaynd ⋅+= (3.35)

unde f(n) ia valori în intervalul (-1,1), delay este timpul de întârziere în

eşantioane, iar amount este timpul de întârziere modulator. Condiţiile de alegere ale constantelor delay şi amount au fost discutate în

secţiunea 3.2. Preluând rezultatele:

Damountdelaynd <+=))(max( (3.36)

0))(min( >−= amountdelaynd (3.37)

unde D este lungimea maximă a liniei de întârziere. Scalarea se realizează ca în secţiunea anterioară. Se introduc cele două

constante A1, respectiv A2 care realizează scalarea semnalului de ieşire:

)1(

1gwetdry

dryA−⋅+

= (3.38)

Page 33: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 48 -

)1(

)1(2gwetdry

gwetA−⋅+

−⋅= (3.39)

În exemplul asamblat am folosit ca formă de undă modulatoare o undă

sinusoidală generată cu macroul sinpol.dsp prezentat în al doilea capitol. Programul care implementează efectul este conţinut de fişierul flanger.dsp. Se generează întâi sinusoida cu macroul sinpol.dsp, apoi se ponderează cu constanta amount şi se adună cu timpul de întârziere fix delay obţinându-se timpul de întârziere variabil d(n).

Se introduce acest timp în structura de tip filtru pieptene şi se extrage eşantionul de ieşire ponderat cu A2. Acesta se însumează cu eşantionul curent ponderat cu A1. Câtă vreme timpul de întârziere în secunde este situat în intervalul (0.1,10)ms efectul realizat este Flanger. În cazul în care acesta este situat în intervalul (10, 50)ms avem de-a face cu un Chorus cu reacţie, prezenţa acesteia îmbogăţind extraordinar vocea instrumentului procesat.

3.4.4 Filtrul trece-tot Este una din componentele de bază ale reverberatoarelor moderne. Propus în

1961 de Schroeder pentru simularea software acusticii încăperilor, este componenta de bază la realizarea componentei unui răspuns la impuls tipic încăperilor, denumit reverberaţie ulterioară.

z-Mx(n) y(n)

g

-g

Figura 3.24 Filtrul trece-tot

Funcţia de transfer a structurii din figură este:

Mgz

gMgz

MzMgz

gMzzH −−−−−

−=−−

−−=

111)(

(3.40)

Unde M este numărul de celule de întârziere, g coeficientul de ponderare cu

valori între (-1,1). Răspunsul la impuls al unei astfel de structuri este asemănător celui al filtrului

pieptene, deosebirea remacându-se la valorile impulsurilor:

Page 34: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 49 -

Figura 3.25 Răspunsul la impuls al filtrului trece-tot, g pozitiv

Ca şi la filtrul pieptene, răspunsul la impuls poate fi scris ca o sumă ponderată de cosinusoide care definesc frecvenţele proprii ale încăperii ce trebuie simulate.

Diferenţa majoră între cele două celule este că, spre deosebire de filtrul pieptene care introduce o colorare spectrală cu minime şi maxime, filtrul trece-tot prezintă un modul al funcţiei de transfer de tip plat. Iată răspunsul la impuls al unei celule trece-tot şi modulul caracteristicii de frecvenţă, la o rată de eşantionare de Fs=44100Hz, g=-0.6, M=10.

Figura 3.26 Răspunsul la impuls al filtrului trece-tot şi modulul caracteristicii de frecvenţă

Filtrul trece-tot şi filtrul pieptene sunt componente de bază în structurile ce

realizeză reverberaţia, proprietăţile lor fiind deosebite în momentul în care parametrii lor sunt aleşi cu atenţie din considerente teoretice sau practice.

Page 35: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 50 -

3.5 Modele de sinteză ale reverberaţiei 3.5.1 Reverberaţia reală

Reverberaţia este un fenomen natural propriu încăperilor cauzat de însumarea

multiplelor reflexii ale unei unde sonore de pereţii acesteia. Faţă de fenomenul de ecou, diferenţa constă în faptul că reflexiile sunt recepţionate de observatorul uman la intervale foarte mici de timp, aceasta având ca rezultat faptul că repetiţiile nu sunt percepute distinct ci percepute ca un tot. Sunetul emis de sursă se împrăştie în toate direcţiile la diferite unghiuri, se reflectă de pereţii încăperii şi este perceput de observator (figura 3.27).

Reflexiileiniţiale

Sursă

Undădirectă

Reflexiiulterioare

Observator

Figura 3.27 Reverberaţia

Răspunsul la impuls al unei încăperi are trei componente de bază asociate cu

fenomenele fizice petrecute: unda directă, reflexiile iniţiale ale undei sonore, reflexiile ulterioare ale undei (figura 3.28). Unda directă este unda ce ajunge pe cale directă între sursă şi receptor. Reflexiile iniţiale sunt date de undele ce ajung la receptor suferind un număr mic de reflexii, iar reflexiile ulterioare sunt date de undele ce suferă multiple reflexii pe pereţii încăperii până a fi recepţionate de observator.

Sunet direct Reflexiiiniţiale

Reverberaţieulterioară

Figura 3.28 Răspunsul la impuls al unei încăperi

Page 36: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 51 -

Pentru a extrage caracteristicile de bază ale răspunsurilor la impuls caracteristice acusticii încăperilor am efectuat analiza timp- frecvenţă pentru două răspunsuri la impuls eşantionate aparţinând a două săli celebre americane: East High Auditorium (figura 3.29a) şi Eastman Organ Recital Hall (figura 3.29b).

a

b

Figura 3.29 Răspunsuri la impuls reale Concluziile sunt următoarele: • Răspunsul la impuls trebuie să conţină suficiente componente pentru a

asigura o densitate de ecou şi o densitate de frecvenţă suficientă. • Pentru simularea unei comportări reale, trebuie avut în vedere că absorbţia

elementelor undei se face diferit: frecvenţele joase sunt mai greu absorbite de pereţii încăperii decât frecvenţele înalte. Aceasta poate sugera existenţa unui filtru trece-jos la ieşirea blocului de reverberaţie sau proiectarea unor componente de tip filtru pieptene cu o caracteristică trece-jos (Moorer).

Modelele algoritmice pentru simularea digitală a reverberaţiei au debutat în

1960 prin studiile lui Schroeder. Acesta a realizat un simulator de reverberaţie a cărui calitate, la ora actuală, este discutabilă, prin cascadarea a patru filtre pieptene în paralel cu două celule trece-tot serie. James A.Moorer, în anii 80, a îmbunătăţit

Page 37: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 52 -

modelul Scroeder prin simularea absorbţiei diferite în frecvenţă, a introdus celula pieptene trece-jos şi blocul de simulare a reflexiilor iniţiale. Pentru a micşora puterea de calcul folosită, Gardner a proiectat trei configuraţii dedicate pentru Motorola DSP56000, introducând celula trece-tot generalizată. Jean Marc Jot a realizat o structură introducând reţelele FDN (Feedback Delay Network) generalizând şi simplificând implementările. O altă implementare este aceea a lui Datorro, deosebită din punct de vedere al calităţii reverberaţiei şi puterii de calcul necesare.

3.5.2 Modelul de reverberaţie Schroeder Modelul de reverberaţie a lui Schroeder este prezentat în figura 3.30.

Frecvenţele proprii ale încăperii sunt simulate prin intermediul a patru filtre pieptene în paralel a căror ieşire este însumată şi introdusă în două filtre trece-tot a căror rol este acela de a păstra caracteristica de frecvenţă a etajului pieptene şi, cel mai important, de a realiza “îndesirea” treptată a răspunsului la impuls.

Celulă filtrupieptene

Celulă filtrupieptene

Celulă filtrupieptene

Celulă filtrupieptene

Celulătrece-tot

Celulătrece-tot

x(n)y(n)

dry

Figura 3.30 Modelul de reverberaţie a lui Schroeder

Deşi la ora aceea era o deosebită realizare în domeniu, reverberatorul lui

Schroeder nu satisface la ora actuală cerinţele de înaltă calitate şi realism. Dezavantajele sale sunt următoarele: nu simulează absorbţia diferită în frecvenţă a pereţilor unei încăperi ( se poate compensa printr-un filtru trece-jos la ieşirea reverberatorului ) sau prin folosirea celulelor pieptene propuse de Moorer, densitatea de frecvenţă şi de ecou nu este suficientă ( se poate creşte prin sporirea numărului de filtre pieptene puse în paralel ). Totuşi este unul dintre cele mai populare reverberatoare având în vedere că până în anii 80 studiourile de înregistrări deţineau blocuri de reverberaţie digitală bazate pe această structură.

Studiile de pionierat ale lui Schroeder au reliefat aspecte importante printre

care: • Timpul de reverberaţie dorit este o funcţie de coeficientul de reacţie al

blocului paralel de filtre pieptene. Pentru a evita rezonanţele nenaturale,

Page 38: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 53 -

Schroeder propune ca amortizarea răspunsului la impuls al filtrelor să se facă liniar pe o scară logaritmică de percepţie. Aceasta impune ca coeficienţii de reacţie ai celor 4 filtre pieptene să fie egali, modificabili simultan.

1..4i == constgi (3.41)

Aceasta impune ca razele polilor să fie egale:

PpMp

pgconstpr ...3,2,1pentru /1. === (3.42)

Celulele trece-tot de la final predispun semnalul procesat la rezonanţe nenaturale. Alegerea timpului de întârziere a fiecărei celule are o importanţă deosebită în evitarea acestor distorsiuni.

• Legătura între coeficienţii de reacţie gi şi timpul de reverberaţie dorit este:

si

iTM

gT ⋅=

/1log3

1060 (3.43)

Unde Mi este timpul de întârziere în eşantioane al fiecărei celule pieptene, gi sunt coeficienţii de reacţie ai celulelor şi Ts este perioada de eşantionare. Un răspuns la impuls tipic pentru o asemenea configuraţie este prezentat în

figura 3.31. Parametrii de simulare au fost următorii: gi = 0.5, pentru filtrele pieptene timpul de întârziere în eşantioane Mi=1543, 1764, 1984, 2205 şi pentru celulele trece-tot Mi=220, 75, gi = 0.7. Răspunsul la impuls nu reprezintă şi calea directă. Caracteristica de frecvenţă în timp este reprezentată în figura 3.32. Se remarcă faptul că nu este simulată absorbţia diferită în spaţiul frecvenţă iar datorită celulelor trece-tot apare o amplificare la frecvenţele superioare, sursă a rezonanţelor nenaturale.

Figura 3.31 Răspunsul la impuls pentru structura Schroeder

Page 39: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 54 -

Figura 3.32 Răspunsul în frecvenţă al structurii Schroeder

Calitatea reverberaţiei structurii Schroeder este depăşită la ora actuală. O îmbunătăţire a structurii a realizat-o Moorer în anii 80, reuşind, datorită modificărilor făcute, să creeze un sintetizator de reverberaţie de un realism deosebit.

3.5.3 Modelul de reverberaţie Moorer James A.Moorer a studiat modelul Schroeder şi, având în vedere punctele

slabe ale acestuia, a îmbunătăţit acest model. El a studiat densitatea de ecou şi densitatea de frecvenţă a răspunsurilor la impuls reale, eşantionate, şi a observat că o structură de 12 filtre pieptene în paralel, cascadată cu o celulă sau două de tip trece-tot realizează densităţile dorite. O altă observaţie de-a sa, este alegerea timpilor de întârziere în eşantioane ai blocului paralel de filtre pieptene numere prime. Aceasta “îndeseşte” răspunsul la impuls spre final ( reverberaţia ulterioară ), neafectând în acelaşi timp evoluţia dinamică a răspunsului ( răspunsurile filtrelor pieptene nu se suprapun dând naştere la rezonanţe ). Moorer a modificat structura filtrului pieptene pentru a-i imprima o caracteristică trece-jos spre a simula absorbţia mai puternică a frecvenţelor înalte (figura 3.33).

z-Mx(n) y(n)

g

z-1

a

Figura 3.33 Filtrul pieptene trece-jos

Page 40: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 55 -

Moorer introduce în reacţie un filtru trece-jos cu caracteristica de transfer:

11

1)(1 −−=

azzH (3.44)

Astfel, caracteristica de transfer a filtrului pieptene devine:

M

M

zzHgzzH −

⋅⋅−=

)(1)(

1

(3.45)

Criteriul obligatoriu de stabilitate a structurii este:

11

<− ag (3.46)

Efectul reacţiei trece-jos poate fi observat în figura 3.34.

Figura 3.34 Analiza timp frecvenţă a răspunsului la impuls al filtrului pieptene

trece-jos

Moorer introduce şi blocul de simulare al reflexiilor iniţiale, reprezentat printr-un filtru FIR identic cu cel descris în secţiunea 3.3.3. O altă îmbunătăţire este realizarea efectului stereo prin folosirea unei singure unităţi de procesare, la ieşire realizându-se diferenţierea semnalelor prin extragerea lor din puncte diferite ale filtrelor pieptene şi folosirea a blocuri diferite de procesare de tip trece-tot (figura 3.35).

Page 41: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 56 -

DEL1ReflexiiIniţiale

DEL2

+

+

+

Filtrupieptene

Filtrupieptene

Filtrupieptene

Filtrupieptene

+

+

Filtre trece-tot

Filtre trece-tot

xL(n)

xR(n)

eL(n)

eR(n)

yL(n)

yR(n)

Figura 3.35 Structura de reverberaţie a lui Moorer

După cum se observă în figură, semnalele stânga, dreapta, se însumează apoi intră în blocul FIR de sinteză a reflexiilor iniţiale (DEL1). Urmează apoi o linie de întârziere reglabilă DEL2 ce hotărăşte distanţa dintre reflexiile iniţiale şi reverberaţia ulterioară. Apoi blocul de sinteză a reverberaţiei ulterioare format din o serie de filtre pieptene legate în paralel şi două celule de tip trece-tot. Semnalul procesat este însumat cu reflexiile iniţiale şi cu semnalul direct.

Moorer a recomandat mai multe structuri pornind de la cea din figura 3.35. Una dintre acestea, descrisă în articolul "About This Reverberation Business," Computer Music Journal,Vol. 3, No. 2, pp. 13-28, 1979, conţine un filtru FIR, 6 filtre pieptene de tip trece-jos şi un filtru trece-tot ( figura 3.36 ).

Figura 3.36 Configuraţia Moorer pentru reverberaţie de tip “Auditorium”

Page 42: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe linii de întârziere

- 57 -

Pentru blocul de realizare a reflexiilor iniţiale Moorer recomandă o structură

FIR cu 18 întârzieri cu parametrii şi răspunsul la impuls din figura 3.37 ( calculul a fost făcut pentru o rată de eşantionare de 44100Hz).

Întârzieri Ponderi

Figura 3.37 Răspunsul la impuls şi parametrii filtrului FIR de generare a reflexiilor iniţiale

Parametrii etajului de realizare a reverberaţiei (filtre pieptene şi celulă trece-

tot) sunt prezentaţi în tabelul din figura 3.38:

Unitate Lungimea buferului Timpul de întârziere [sec] Filtru pieptene1 1759 40 ms Filtru pieptene2 1949 44 ms Filtru pieptene3 2113 48 ms Filtru pieptene4 2293 52 ms Filtru pieptene5 2467 56 ms Filtru pieptene6 2647 60 ms FIR reflexii iniţiale 3520 80 ms Filtru trece-tot 307 7 ms

Figura 3.38 Valorile numerice ale unităţilor de întârziere

Pentru implementarea pe ADSP 2181 Ez Kit Lite trebuiesc luate mai multe

aspecte în calcul. Programul matriţă folosit până acum pentru initializare foloseşte două dintre generatoarele de adrese DAG, I0 şi I1. Avem nevoie de 8 bufere pentru cele 8 linii de întârziere şi avem disponibile doar şase. Aşa că creem variabile DM care să memoreze valorile registrilor I folosiţi, pentru a putea adresa mai multe linii cu o singură celulă DAG. A trebuit să ţin cont şi de memoria disponibilă a procesorului, deci am folosit pentru unele linii memoria PM. Gestionarea liniilor de întârziere se complică datorită salvării pointerilor, aşa că am creat structurile local, nu am folosit macrourile definite în secţiunile anterioare. Pentru protecţia la depăşiri se efectuează o scalare cu 1/6 la însumarea filtrelor pieptene şi apoi o scalare cu 1/2 la însumarea cu semnalul direct. Toate valorile în eşantioane ale timpilor de întârziere sunt rotunjite spre cel mai apropiat număr prim pentru a nu exista suprapuneri de impulsuri. Cele trei blocuri componente, filtrul FIR – grupul de filtre pieptene – filtrul trece-tot, sunt implementate ca subrutine, programul de bază fiind situat la tratarea întreruperii codecului.

Page 43: Generator de funcţii cu căutare în tabel şi interpolare liniară

- 104 -

Efecte audio digitale bazate pe modularea în amplitudine

4.1 Introducere La începuturile electronicii muzicale, ideile de a transforma semnalele produse

de instrumente erau puţine, deoarece nu exista o experienţă în domeniu. De aceea, proiectanţii au recurs la testarea diferitelor circuite folosite în comunicaţii. Aşa au apărut efectele analogice bazate pe diversele tipuri de modulaţii: BLD-PS, MA, MA-BLU, etc. Primul efect apărut a fost Tremolo, bazat pe modularea MA a semnalului de procesat cu un semnal modulator divers de tip sinusoidal, dreptunghiular sau triunghiular de frecvenţă foarte joasă. La o frecvenţă infrasonoră, modificarea de amplitudine este percepută ca un “tremur” al semnalului procesat şi nu ca o deplasare în frecvenţă. Creşterea frecvenţei modulatoare în banda audibilă are ca efect translatarea spectrului semnalului procesat în frecvenţă, nepăstrând relaţiile armonice între componente, echivalent perceptual cu o distorsiune disonantă a mesajului audio. Cum disonanţa este uneori în muzică la fel de valoroasă ca armonia, s-a implementat şi un asemenea efect apelându-se însă la modulaţia de tip BLD-PS pentru a evita ca purtătoarea să fie audibilă. Aşa a apărut efectul sonor Ring-Modulation (numele este legat de primul tip de implementare: cu multiplicator cu diode în inel), unul dintre cele mai folosite efecte din anii 60 pentru transformarea vocii umane pentru a da senzaţia de “entitate extraterestră” vorbitorului. Existenţa celor doi lobi ai spectrului, măreşte disonanţa, aşa că următorul pas a fost încercarea modulaţiei de tip BLU, care păstrează un singur lob al spectrului.

4.2 Modulaţia în amplitudine. Efectul Tremolo În implementare analogică, minimul configuraţiei era realizat cu două

tranzistoare: unul ce realiza un oscilator sinusoidal de frecvenţă infrasonoră şi altul care realiza multiplicarea semnalului de intrare cu semnalul sinusoidal periodic. Implementarea digitală este extrem de simplă şi rapidă (figura 4.1).

Oscilator softsinusoidal

1

x(n) y(n)

m(n)wm

δ

Figura 4.1 Structura efectului Tremolo

Page 44: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe modularea în amplitudine

- 105 -

Sistemul implementează ecuaţia:

[ ] )()(1)( nxnmny ⋅⋅+= δ (4.1)

unde m(n) este semnalul periodic de un anumit tip (recomandabil sinusoidal)

şi δ este gradul de modulaţie al semnalului. Pe procesorul în virgulă fixă, semnalul de intrare x(n) este numeric situat în

intervalul (-1,1) formatul său fiind 1.15 în complement faţă de 2. Semnalul sinusoidal ales pentru implementare va fi generat tot în intervalul (-1,1) în acelaşi format, deci plaja dinamică a semnalului de ieşire va fi (-1-δ,1+δ). Cum δ este o constantă între limitele (0,1) echivalent gradului de modulaţie (0%, 100%), rezultă că plaja dinamică a semnalului de ieşire se va situa în intervalul (-2,2). Aceasta depăşeşte posibilităţile de reprezentare în 1.15, deci va fi necesară o scalare a funcţiei de transfer cu 1+δ. Conform acestei observaţii, semnalul de ieşire scalat ys(n) va fi:

)()(11

1)( nxnmnys ⋅⎥⎦⎤

⎢⎣⎡ ⋅

++

+=

δδ

δ (4.2)

Notăm

δ

δδ +

=+

=1

A2 1

11A (4.3)

Generarea semnalului modulator m(n) se poate realiza cu una din metodele

prezentate în capitolul 1. Am ales generarea prin aproximaţie polinomială aceasta necesitând doar apelarea macroului sinpol.dsp. Locul parametrului wm va fi deci luat de parametrul advance care va da frecvenţa de oscilaţie. Noua configuraţie convenabilă pentru implementare va fi (figura 4.2):

Oscilator softsinusoidal

A1

x(n) y(n)

m(n)advance

A2

Figura 4.2 Structura efectului Tremolo implementat

În continuare este prezentat un tabel de valori numerice ai parametrilor în funcţie de frecvenţa semnalului modulator şi gradul de modulaţie la o frecvenţă de eşantionare de Fs=44100Hz:

Page 45: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe modularea în amplitudine

- 106 -

Frecvenţa modulatoare

(fm)

Gradul de modulaţie

(δ)

Avansul de fază

(advance)

Ponderea A1

Poderea A2

1,34Hz 50% 0x0002 0x5555 0x2AAA 4,02Hz 100% 0x0006 0x4000 0x4000 6,03Hz 30% 0x0009 0x6276 0x1D89 10,05Hz 80% 0x000F 0x471C 0x38E3

În cazul existenţei unei interfeţe exterioare de selecţie, aceşti parametrii (sau

alţii doriţi de utilizator) se pot organiza ca o tabelă de programe presetate pentru a facilita schimbarea lor rapidă pe parcursul interpretării.

4.3 Modulaţia BLD-PS. Efectul Ring-Modulation. Sonorităţile ciudate oferite de efectul tremolo când frecvenţa semnalului

modulator devine sonoră, i-a îndrumat pe ingineri să obţină un astfel de efect suprimând purtătoarea audibilă care este deranjantă. Soluţia a oferit-o modularea de tip BLD-PS. Datorită faptului că nu păstrează relaţiile armonice între componentele spectrale ale semnalului de intrare, efectul nu are o deosebită popularitate în procesarea vocilor de instrumente, fiind folosit mai mult pentru alterarea vocilor umane (“robotizarea” sau obţinerea vocilor “extraterestre”). Configuraţia de obţinere a unui astfel de efect digital este prezentată în figura 4.3:

Oscilator softsinusoidal

x(n) y(n)

m(n)wm

Figura 4.3 Structura efectului Ring Modulation

Transpunerea în frecvenţă a componentelor semnalului de intrare x(n) duce la apariţia frecvenţelor sumă şi diferenţă specifice acestui tip de modulaţie. Dizarmonicitatea componentelor spectrale obţinute a consacrat acest efect în perioada sintetizatoarelor de sunet analogice pentru obţinerea sunetelor naturale metalice: clopote, instrumente de percuţie metalice etc. În tehnologie analogică, modulatorul se putea realiza cu un multiplicator cu diode în inel şi transformatoare, sau cu circuite integrate multiplicatoare în 4 cadrane. În digital implementarea este extrem de simplă şi rapidă ca viteză de calcul, necesitând doar o multiplicare. Ecuaţia unui astfel de sistem este:

)()()( nxnmny ⋅= (4.4)

Page 46: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe modularea în amplitudine

- 107 -

Unde m(n) poate fi un semnal sinusoidal sau periodic de orice altă natură (folosirea unei forme de undă bogată în armonici accentuează efectul dar îl distorsionează prea puternic).

Semnalul de intrare x(n) are plaja dinamică (-1,1) iar pentru ca y(n) să fie situat în aceeaşi plajă trebuie ca m(n) să fie în acelaşi interval. Deci pentru o implementare pe DSP nu este necesară nici o scalare ci doar generarea sinusoidei între (-1,1) şi multiplicarea ei cu semnalul de intrare x(n).

4.4 Variaţia periodică a poziţiei stereo. Efectul Ping-Pong. Simularea deplasării unei surse sonore în mod periodic de pe un canal de sunet

pe celelalt poate avea implicaţii interesante pentru ascultător. La frecvenţe mici de deplasare, 0.1- 8 Hz, se percepe deplasarea sursei de la canalul stâng la canalul drept şi invers. Creşterea frecvenţei (păstrând-o tot în domeniul infrasonor) dă impresia a două surse de sunet ce cântă la unison pe canale diferite. Configuraţia este simplă şi urmăreşte ideea de la efectul Tremolo , diferenţa constând în faptul că o ieşire este modulată cu sinusoida directă iar cealaltă cu sinusoida în antifază (figura 4.4):

Oscilator softsinusoidal

1

x(n) yL(n)

m(n)wm

δ 1-1

yR(n)

Figura 4.4 Structura de calcul efect Ping Pong

Când intensitatea semnalului creşte pe unul din canale va scădea proporţional pe celelalt. Se preferă un semnal modulator sinusoidal deoarece semnalele cu discontinuităţi pot genera la ieşire impulsuri parazite (aşa numitul “click” audio).

Ecuaţiile ce descriu funcţionarea circuitului sunt:

[ ] )()(1)( nxnmnyL ⋅⋅+= δ (4.5)

[ ] )()(1)( nxnmnyR ⋅⋅−= δ (4.6)

Având în vedere observaţia de la secţiunea 4.2, pentru a evita depăşirea

semnalului de ieşire scalăm cu valoarea maximă 1+δ. Cu ajutorul notaţiilor 4.7, ecuaţiile convenabile pentru implementarea cu un procesor cu virgulă fixă sunt 4.8, 4.9.

Page 47: Generator de funcţii cu căutare în tabel şi interpolare liniară

Efecte audio digitale bazate pe modularea în amplitudine

- 108 -

δ

δδ +

=+

=1

A2 1

11A (4.7)

[ ] )()(21)( nxnmAAnyL ⋅⋅+= (4.8)

[ ] )()(21)( nxnmAAnyR ⋅⋅−= (4.9)

Dacă δ este 0, atunci modularea nu va fi simţită. Creşterea lui δ duce la

apariţia, pe lângă semnalul central a unui semnal identic ce se va deplasa de pe un canal pe celelalt. Proporţional cu această creştere, semnalul central va scădea în amplitudine crescând în schimb semnalul modulat ce va deveni preponderent când δ=1.

Se pot imagina multe alte configuraţii bazate pe structurile simple prezentate

anterior. Astfel, se pot imagina efecte tremolo multiple ce procesează sunetul în paralel, ieşirile lor fiind ponderate şi însumate într-un mixer. Pe acelaşi principiu, dacă frecvenţele de modulaţie vor fi situate în spectrul audio, se poate crea un Ring Modulation multiplu cu efecte bizare asupra vocii umane sau vocilor de instrumente.