Cap 5 sinus v4 - ERASMUS Pulse · UTARE ÎN TABEL Generarea sinusului este folositoare în comunica...
Transcript of Cap 5 sinus v4 - ERASMUS Pulse · UTARE ÎN TABEL Generarea sinusului este folositoare în comunica...
Capitolul 5 – Generarea semnalelor sinusoidale 151
CAPITOLUL 5
GENERAREA SEMNALELOR SINUSOIDALE
5.1 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 = − + − + (5.1)
Pentru valori mici ale lui x sunt suficienţi mai puţini termeni ai seriei.
Totuşi, dacă x se apropie de π / 2 sunt necesari mai mulţi termeni, în funcţie
de precizia dorită.
Formula erorii pentru dezvoltarea funcţiei sinus în serie Taylor este:
( ) ( ) ( ) ( )1 1
1sin1 ! 1 !
n nn
n
x xe x
n n
+ ++= ≤
+ + (5.2)
Din această formulă 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ă:
Aplicaţii ale procesoarelor de semnal în comunicaţii 152
( )
1
4
π2 10
1 !
n
n
+
−
⎛ ⎞⎜ ⎟⎝ ⎠ ≤+
(5.3)
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= + ∈ (5.4)
Rezultă:
( ) ( )( )
sin , parsin
sin , impar
t nx
t n
⎧= ⎨−⎩
(5.5)
Pentru ca numărul n să fie cel mai apropiat întreg, multiplu de π, faţă de
x, acesta se calculează prin rotunjire:
roundπ
xn ⎛ ⎞= ⎜ ⎟
⎝ ⎠ (5.6)
Eroarea de rotunjire va fi mai mică de ½ adică:
1
, unde| |2
xn δ δ
π= + ≤ (5.7)
Rezultă:
1
π π π ππ 2
xt x n x δ δ⎛ ⎞= − = − + = ≤⎜ ⎟
⎝ ⎠ (5.8)
Deci funcţia ( )sin x calculată cu formula (5.5) şi cu substituţia (5.4) va
avea ca argument π/2 π/2t− ≤ ≤ .
Pentru 0t < se poate folosi relaţia:
sin( ) sin( )t t− = − (5.9)
Capitolul 5 – Generarea semnalelor sinusoidale 153
Rutina de calcul pentru sin( )x va avea două părţi:
1. Stabilirea intervalului de valori pentru x şi realizarea substituţiilor
pentru obţinerea rezultatului corect.
2. Calculul valorii sin( )x conform formulei (5.1).
Pentru procesoarele de semnal în virgulă fixă, această implementare
ridică unele probleme datorită reprezentării în format fracţionar pentru x.
Aceasta implică scalarea lui x în intervalul [ 1,1)− , considerând
/ 2 / 2xπ π− ≤ < , adică:
2
π=s
xx . (5.10)
Se poate aduce formula (5.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
⎛ ⎞≈ − + − + = − + − +⎜ ⎟
⎝ ⎠ (5.11)
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π
= + + + + + (5.12)
Unde constantele includ semnul şi factorii de scalare:
2
1
10.4112335
3! 2a
π⎛ ⎞= − = −⎜ ⎟⎝ ⎠
, 4
2
10.0507339
5! 2
π⎛ ⎞= =⎜ ⎟⎝ ⎠
a ,
6
3
10.0029804
7! 2
π⎛ ⎞= − = −⎜ ⎟⎝ ⎠
a . 8
4
10.0001021
9! 2
π⎛ ⎞= =⎜ ⎟⎝ ⎠
a
De asemenea se poate aplica regula de factorizare a lui Horner pentru a
reduce numărul de înmulţiri:
2 4 6 8 2
2 2 21 1 1sin( ) 1 1
3! 5! 7! 9! 3! 5! 7! 9!
x x x x xx x x x x x
⎛ ⎞⎛ ⎞⎛ ⎞⎛ ⎞ ⎛ ⎞≈ − + − + = − − − −⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟⎜ ⎟⎝ ⎠ ⎝ ⎠⎝ ⎠⎝ ⎠⎝ ⎠
(5.13)
Aplicaţii ale procesoarelor de semnal în comunicaţii 154
Şi în final termenii factoriali pot fi şi ei factorizaţi:
2 2 2 2
sin( ) 1 1 1 12 3 4 5 6 7 8 9
x x x xx x
⎛ ⎞⎛ ⎞⎛ ⎞⎛ ⎞≈ − − − −⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⋅ ⋅ ⋅ ⋅⎝ ⎠⎝ ⎠⎝ ⎠⎝ ⎠
(5.14)
sau, făcând schimbarea de variabilă
2 sx xπ
= . (5.15)
Se obţine:
2 2 2 2 2 2 2 2
sin( ) 1 1 1 12 4 2 3 4 4 5 4 6 7 4 8 9
s s s ss
x x x xx x
π π π π π⎛ ⎞⎛ ⎞⎛ ⎞⎛ ⎞≈ − − − −⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⋅ ⋅ ⋅ ⋅⎝ ⎠⎝ ⎠⎝ ⎠⎝ ⎠
(5.16)
Coeficienţii care-l înmulţesc pe 2sx vor fi precalculaţi în format Word16
conform tabelului:
Coeficient ka fracţionar
Coeficientul în format Word16 152ka ⋅
Reprezentare hexazecimală
2
0
10.4112...
4 2 3a
π= =
⋅ 13475 0x34A3
2
1
10.1233...
4 4 5a
π= =
⋅ 4043 0x0FCB
2
2
10.0587...
4 6 7a
π= =
⋅ 1925 0x0785
2
3
10.0342...
4 8 9a
π= =
⋅ 1123 0x0463
Valoarea 1 va fi aproximată la valoarea maximă pozitivă pe 32 de biţi:
MAX_32=(Word32)0x7fffffff. Primul factor multiplicativ 2 sxπ
va fi calculat
ca 24 sxπ⋅ deoarece 1
2
π> . Astfel se defineşte valoarea constantă PI_4=
0.78539... adică 25736 pe format Word16.
Capitolul 5 – Generarea semnalelor sinusoidale 155
#include <prototype.h> #define MAX_32 (Word32)0x7fffffff #define PI_4 25736 Word16 a[]={13475,4043,1925,1123}; Word16 sin(Word16 x) { Word16 res0,res1,x_2,x_pi_4; x_pi_4=mult_r(PI_4,x); // x*pi/4 x_2=mult_r(x,x); res0=msu_r(MAX_32,a[3],x_2); // res0=(1-(1/8.9)*x_2) res1=mult_r(a[2],x_2); // res1=(1/6.7)*x_2) res0=msu_r(MAX_32,res1,res0); // (1-res1(res0)) res1=mult_r(a[1],x_2); // res1=(1/4.5)*x_2) res0=msu_r(MAX_32,res1,res0); // (1-res1(res0)) res1=mult_r(a[0],x_2); // res1=(1/2.3)*x_2) res0=msu_r(MAX_32,res1,res0); // (1-res1(res0)) res0=mult_r(x_pi_4,res0); // pi/4*x*() return shl(res0,1); // 2*(pi/4)=pi/2 }
Aplicaţii ale procesoarelor de semnal în comunicaţii 156
5.2 GENERAREA SINUSULUI CU CĂUTARE ÎN TABEL
Generarea sinusului este folositoare în comunicaţii şi aplicaţii de
control. Odată cu introducerea procesoarelor digitale de semnal cu viteză şi
precizie ridicate se poate genera digital un sinus stabil şi cu distorsiuni mici la
orice frecvenţă folosind un tabel de căutare cu interpolare pentru reducerea
distorsiunilor.
Valorile unei perioade a sinusului sunt înmagazinate într-un tabel în
memorie după cum urmează:
1i N= − [ ]sin ( 1) 2 /N Nπ− ⋅
. .
i → [ ]sin ( ) 2 /i Nπ⋅
. .
2i = [ ]sin (2) 2 / Nπ⋅
1i = [ ]sin (1) 2 / Nπ⋅
0i = [ ]sin (0) 2 / Nπ⋅
unde:
N = lungimea tabelului;
i = indexul în tabel, 0 1i N≤ ≤ − ;
( ) sin( 2 / )s i i Nπ= ⋅ = valoarea înmagazinată la locaţia i din tabel.
Semnalul sinusoidal poate fi generat prin citirea periodică a valorilor
din tabel.
Capitolul 5 – Generarea semnalelor sinusoidale 157
Pentru a obţine valoarea unui eşantion ( )s n , tabelul poate fi parcurs cu
un pas Δ (din Δ în Δ valori) semnalul generat având expresia:
( ) sin(2 / )s n N nπ= ⋅Δ ⋅ , 0, 1, 2,n = … (5.17)
Frecvenţa normată a sinusului generat este:
fN
Δ= , (5.18)
Dacă 1Δ = (sunt citite valorile consecutive) şi perioada de eşantionare
este TS (tabelul de lungime N este accesat la fiecare TS secunde), perioada
sinusului sintetizat va fi:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
N=16
T0 = NTS
s(n)
s(t)
TS
Aplicaţii ale procesoarelor de semnal în comunicaţii 158
0 [s]ST N T= ⋅ (5.19)
Deci frecvenţa nenormată fundamentală (pentru 1Δ = ) este:
0 [Hz]SFF
N= (5.20)
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
sinusului sintetizat va fi:
0 [Hz]SF F FN
Δ= ⋅ = Δ ⋅ (5.21)
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ă. Valoarea maximă pentru Δ este
/ 2N deoarece pentru sintetizarea sinusului fără aliere sunt necesare cel puţin
două eşantioane pe perioadă.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
N=16
T = (N/Δ)TS
s(n)
TS
Capitolul 5 – Generarea semnalelor sinusoidale 159
5.2.1 Căutarea în tabel cu delta întreg
Această implementare este o metodă de căutare directă în tabel cu delta
fiind un număr întreg şi pozitiv. Deoarece delta este întreg, toate eşantioanele
cerute sunt conţinute în tabel; nu sunt necesare aproximări. Figura de mai jos
ilustrează această metodă pentru 8N = şi 2Δ = .
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
2=Δ
Valorile din tabel
Valorile generate
Figura 5.1. Generarea eşantioanelor sinusului pentru delta întreg
Tabelul cu valorile pe o perioadă a funcţiei sinus este precalculat şi
stocat în memorie fără a putea fi modificat pe parcursul execuţiei
programului. De aceea trebuie stabilită de la început lungimea N optimă
pentru a putea genera una sau mai multe frecvenţe alegând un pas Δ
corespunzător.
Aplicaţii ale procesoarelor de semnal în comunicaţii 160
EXERCIŢII:
1. Determinaţi lungimea N şi pasul Δ, valori întregi minime, pentru a genera
un semnal sinusoidal de frecvenţa F = 210 Hz, dacă frecvenţa de eşantionare
la care lucrează convertorul A/D şi D/A este FS = 48 kHz.
210 7
48000 1600S
F
N F
Δ= = = (5.22)
De unde rezultă N=1600 şi Δ=7.
2. Determinaţi lungimea N şi paşii Δ1, Δ2, valori întregi minime, pentru a
genera folosind acelaşi tabel două semnale sinusoidale de frecvenţe F1 = 4
kHz, F2 = 6 kHz dacă frecvenţa de eşantionare este FS = 48 kHz.
1 1
2 2
S
S
F
N F
F
N F
Δ⎧ =⎪⎪⎨Δ⎪ =⎪⎩
=>
1 1
2 2
22
2
3
24S
F
F
FN
F
Δ⎧ = =⎪Δ⎪⎨⎪ = Δ =⎪⎩
(5.23)
De unde rezultă Δ1=2, Δ2=3 şi N=24.
Implementarea programului de generare a unui semnal sinusoidal cu
delta întreg:
• Se stochează în variabila table valorile precalculate (de ex. în Matlab) ale unei perioade a sinusului.
k=0:N-1; table=sin(2*pi/N*k);
• Eşantioanele semnalului generat sunt citite din tabel de la un index multiplu de delta (în exemplul de mai jos din două în două valori).
• Pentru a nu se depăşi dimensiunea tabelului şi pentru a se respecta periodicitatea funcţiei sinus, indexul se calculează modulo N.
Capitolul 5 – Generarea semnalelor sinusoidale 161
#define DataSize 256 #define N 128 Word16 table[N]; Word16 s[DataSize]; short i, delta=2; // fread(table,... for (i=0; i<DataSize; i++) { s[i]=table[(i*delta)%N]; } // fwrite(s,...
5.2.2 Căutarea în tabel cu delta raţional prin interpolare liniară
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 sinusul de orice frecvenţă cu distorsiuni mici, o
metodă de interpolare trebuie folosită împreună cu căutarea în tabel. Folosind
interpolarea, valorile sinusului 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
sinusului î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Δ = .
Aplicaţii ale procesoarelor de semnal în comunicaţii 162
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ă
Figura 5.2. Generarea eşantioanelor sinusului prin interpolare liniară
Algoritmul folosit pentru interpolarea liniară se bazează pe ecuaţia
dreptei în două puncte:
1 1( )y y m x x− = − (5.24)
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 tabelul sinusului 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< < .
Capitolul 5 – Generarea semnalelor sinusoidale 163
De aceea avem:
( )[ ] [ ] [ 1] [ ]S i f S i f S i S i+ = + ⋅ + − (5.25)
Pasul Δ este acum un număr raţional. Vom considera reprezentarea
separată într-un întreg cu semn şi o fracţie fără semn pe care le stocăm într-o
variabilă de 32 de biţi astfel:
–215 214 20. 2–1 2–2
s intreg fracţie
16 biţi 16 biţi
De exemplu valoarea 2.5 se reprezintă în hexazecimal 0 x 0002 8000.
16 biţi
Parte întreagă
16 biţi
. Fracţie
i = 0 phaseaccum = 0 00 … 00000 00000 … 00
+ 2,5Δ = + 00 … 00010 10000 … 00
i = 1 phaseaccum = 2,5 = 00 … 00010 10000 … 00
+ 2,5Δ = + 00 … 00010 10000 … 00
i = 2 phaseaccum = 5,0 = 00 … 00101 00000 … 00
+ 2,5Δ = + 00 … 00010 10000 … 00
i = 3 phaseaccum = 7,5 = 00 … 00111 10000 … 00
2,5Δ = + 00 … 00010 10000 … 00
i = 4 phaseaccum = 10,0 = 00 … 01010 00000 … 00
Aplicaţii ale procesoarelor de semnal în comunicaţii 164
Indexul pentru eşantionul [ ]S i este partea întreagă a variabilei de
phaseaccum. Pentru a nu se depăşi lungimea N a tabelului, indexul se
calculează modulo N: i_index1 = (phaseaccum >> 16)%N;
De exemplu dacă N = 8 la a 4-a acumulare a lui delta în variabila
phaseaccum partea întreagă devine 10 (reprezentată în primii 16 MSB ai
phaseaccum), iar indexul se calculează modulo 8 adică va fi 2.
Partea fracţionară se obţine anulând biţii pentru partea întreagă:
phaseaccum & 0x0000ffff şi deplasând rezultatul la dreapta cu un bit
pentru a obţine un număr fracţionar cu MSB bit de semn.
#define DataSize 256 #define N 128 unsigned short i_index1,i_index2; Word16 i_tone1,i_tone2,frac; UWord32 phaseaccum=0; Word32 delta=0x00028000; // delta=2.5 ... for (i = 0; i < DataSize; i++) { i_index1 = (phaseaccum >> 16)%N; i_index2 = (i_index1+1)%N; i_tone1 = table[i_index1]; i_tone2 = table[i_index2]; /* partea fractionara se obtine din ultimii 16 LSB*/ frac = (Word16) ((Word32)((phaseaccum & 0xffff)>>1)); /* interpolare liniara */ s[i] = add(mult(sub(i_tone2,i_tone1),frac),i_tone1); /* phaseaccum este un intreg unsigned ce variaza intre 0 si 0xffffffff, prin incrementare, porneste de la 0 */ phaseaccum+=delta; }
Capitolul 5 – Generarea semnalelor sinusoidale 165
5.3 METODE RECURSIVE DE GENERARE A SEMNALELOR
5.3.1 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 (5.26)
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 1=A ) se obţine aplicând
transformata Z ecuaţiei (5.26):
( )( )
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 (5.27)
Evident acest sistem are polii 0ωje şi 0ω− je aflaţi pe cercul de rază
unitate. Efectuând calculele rezultă:
1
01 2
0
( ) sin( )
( ) 1 2cos
ωω
−
− −= =− +
Y z zH z
X z z z (5.28)
Ecuaţia cu diferenţe finite este:
0 0( ) 2cos ( 1) ( 2) sin ( 1)ω ω= − − − + −y n y n y n x n (5.29)
Dacă la intrarea sistemului se aplică impulsul unitate pentru 2≥n ,
ieşirea ( )y n poate fi calculată recursiv astfel:
0( ) 2cos ( 1) ( 2), 2ω= − − − ≥y n y n y n n (5.30)
Aplicaţii ale procesoarelor de semnal în comunicaţii 166
cu condiţiile iniţiale 0(1) sinω=y şi (0) 0=y .
Deoarece termenul 02cosω poate avea valori supraunitare algoritmul
va calcula ieşirea ( )y n astfel:
1. 0( 1)cosω= −a y n
2. ( ) 2 ( 2)= − −y n a y n
0cos2 ω
1−1−z
1−z
)(ny
)1(1 −= nys
)2(2 −= nys
Figura 5.3. 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ω ω ω −Δ = − − (5.31)
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.
Capitolul 5 – Generarea semnalelor sinusoidale 167
Î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.
... Word16 s[DataSize],c0,s1,s2,temp; short i; c0=WORD16(0.99144486); //cos(w0), F=1kHz, Fs=48kHz; s1=WORD16(0.13052619); //y[-1]=sin(w0) s2=0; //y[-2]=0 for (i = 0; i < DataSize; i++) { temp=mult_r(c0,s1); temp=shl_nosat(temp,1); s[i]=sub(temp,s2); s2=s1; s1=s[i]; } ...
Aplicaţii ale procesoarelor de semnal în comunicaţii 168
5.3.2 Generarea semnalelor 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 sinα α α α α+ = −n n n (5.32)
sin ( 1) cos sin sin cosα α α α α+ = +n n n (5.33)
unde 02 / SF Fα π= .
Pentru generarea frecvenţei dorite trebuie iniţializate valorile cos0 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ă
Capitolul 5 – Generarea semnalelor sinusoidale 169
Frecvenţa va fi dată deci de incrementul de fază 02 / SF Fα π= .
#define DataSize 40 #define MAX_16 (Word16)0x7fff Word16 c[DataBlockSize],s[DataBlockSize],c0,s0; Word32 temp; int i; c0=WORD16(0.809); s0=WORD16(0.587785); c[0]=MAX_16; s[0]=0; for (i = 0; i < DataBlockSize-1; i++) { temp=L_mult(c[i],c0); c[i+1]=msu_r(temp,s[i],s0); temp=L_mult(s[i],c0); s[i+1]=mac_r(temp,c[i],s0); }
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ă 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 (5.34)
Aplicaţii ale procesoarelor de semnal în comunicaţii 170
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 (5.35)
Pot apare trei cazuri de-a lungul desfăşurării programului :
1. Dacă 0=err , 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,1=err . 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.
Capitolul 5 – Generarea semnalelor sinusoidale 171
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,1= −err . Acesta se va aduna cu 1 şi se va înmulţii cu valorile
anterioare alesin( )αn şi cos( )αn , pentru a scădea amplitudinea.
5.3.3 Obţinerea structurilor unor oscilatoare discrete
Fizicianul german Heinrich Barkhausen în anii 1990 a formulat
cerinţele necesare pentru o oscilaţie. El a modelat un oscilator ca un
amplificator recursiv. Plecând de la acest model el a dedus şi a formulat două
condiţii necesare pentru realizarea unui oscilator. Criteriile lui Barkhausen,
aşa cum sunt ele cunoscute astăzi, impun câştigul pe buclă să fie unitar, iar
defazajul buclei sa fie multiplu de π2 radiani. Dacă s-ar uni toate modelele de
oscilatoare recursive în timp discret într-o singură teorie, ar trebui găsit
echivalentul în timp discret al criteriilor lui Barkhausen şi folosit pentru a găsi
o teorie generală.
Dar mai întâi se analizează câteva formule trigonometrice văzute nu
într-un mod uzual, ci într-un mod în care ele pot fi utilizate pentru generarea
sinusoidelor. Multe oscilatoare au fost proiectate pornind de la această idee.
O formulă cu o sumă şi o diferenţă de unghiuri scrisă explicit într-o
formă recursivă este:
( ) ( ) ( ) ( )cos 2cos cos cosφ ω ω φ φ ω+ = − − (5.36)
Aceasta poartă numele de „forma directă” de implementare.
Astfel se observă cum eşantionul următor poate fi calculat în funcţie de
două valori ale eşantioanelor anterioare ce diferă prin unghiul ω pe de o parte
Aplicaţii ale procesoarelor de semnal în comunicaţii 172
şi un factor 2cosω . Pentru a vedea cum poate fi această idee utilizată pentru
generarea iterativă a unei sinusoide, se consideră formula:
( )2cosNextCos CurrentCos LastCosω= × − (5.37)
În loc de folosirea unei singure ecuaţii pentru o relaţie de recurenţă,
poate fi folosită o pereche de formule trigonometrice. De exemplu:
( ) ( ) ( ) ( ) ( )( ) ( ) ( ) ( ) ( )
cos cos cos sin sin
sin cos sin sin cos
φ ω φ ω φ ω
φ ω φ ω φ ω
+ = −
+ = − (5.38)
Aceste relaţii poartă denumirea de formă „cuplată”. Cuplarea este
evidentă prin faptul că fiecare ecuaţie foloseşte nu numai valoarea sa
precedentă ci şi valoarea precedentă generată de cealaltă ecuaţie.
Din nou ω este folosit ca unghiul de variaţie pe iteraţie, şi aceasta
conduce la o frecvenţă de ieşire a oscilatorului de πω 2/fs , unde sf este
frecvenţa de eşantionare. La fel ca şi forma „directă”, forma „cuplată”
foloseşte două valori precedente. Aceasta este valabilă pentru toate
oscilatoarele sinusoidale limitate la folosirea numerelor reale.
Derivarea matricei proprietăţilor oscilatorului
Se doreşte găsirea unui proces general care poate fi folosit pentru a
exprima ambele forme de ecuaţii: „directă” şi „cuplată”. Pentru aceasta se
notează valorile precedente (care se numesc variabile de stare) cu 1x şi 2x şi
sunt valorile folosite pentru determinarea noilor valori. Se observă că noile
ecuaţii sunt liniare pentru ambele forme, aşa că se pot scrie ca o înmulţire de
matrici.
Matricea pentru calculul unei iteraţii pentru forma „directă” este:
( )1 1
2 2
ˆ 2cos 1
ˆ 01
x x
x x
ω⎡ −⎡ ⎤ ⎡ ⎤⎤= ⎢⎢ ⎥ ⎢ ⎥⎥
⎦⎣ ⎦ ⎣ ⎦⎣ (5.39)
Capitolul 5 – Generarea semnalelor sinusoidale 173
Pentru forma „cuplată”:
( )( )
( )( )
1 1
2 2
cos sinˆ
ˆ sin cos
x x
x x
ω ω
ω ω
⎡ ⎤⎡ ⎤ ⎡ ⎤= ⎢ ⎥⎢ ⎥ ⎢ ⎥−⎢ ⎥⎣ ⎦ ⎣ ⎦⎣ ⎦
(5.40)
Interpretarea matricei este: vectorul coloană din partea stângă conţine
valorile vechi ale variabilelor de stare şi, prin înmulţire cu matricea de rotaţie,
se obţine un nou set de valori. Apoi, următoarea iteraţie foloseşte valorile noi
din iteraţia precedentă ca valori vechi pentru următoarea iteraţie. Exprimarea
matriceală pare că complică inutil lucrurile, dar cu ajutorul acestora se pot
găsi noi tipuri de oscilatoare. Termenul de rotaţie este folosit din momentul în
care multiplicarea matricei poate fi observată dintr-un anumit punct ca fiind o
rotaţie.
O formă generală care se potriveşte ambelor oscilatoare menţionate mai
sus este folosirea unei matrici de rotaţie 22× şi 2 variabile de stare.
Deci ecuaţia generală a unui oscilator se scrie sub forma:
1 1
2 2
ˆ
ˆ
x xa b
x c d x
⎡ ⎤ ⎡ ⎤⎡ ⎤=⎢ ⎥ ⎢ ⎥⎢ ⎥⎣ ⎦⎣ ⎦ ⎣ ⎦
(5.41)
Un exemplu numeric de oscilator care nu este nici de tip „direct”, nici
de tip „cuplat”. Se ia ⎥⎦
⎤⎢⎣
⎡ −95.00975.0
195.0 ca matrice de rotaţie şi se foloseşte ⎥
⎦
⎤⎢⎣
⎡0
1
pentru valorile iniţiale ale variabilelor de stare.
Graficul pentru valorile celor două variabile de stare pentru primele 100
de iteraţii este prezentat în figura următoare.
Se pune următoarea întrebare: care sunt constrângerile asupra valorilor
celor patru elemente din matricea de rotaţie şi dacă matricea mai poate fi
folosită ca o iteraţie pentru oscilator?
Aplicaţii ale procesoarelor de semnal în comunicaţii 174
Se poate demonstra că există două constrângeri şi acestea sunt
echivalenţele în timp discret din criteriul lui Barkhausen. Acestea sunt:
1ad bc− =
2a d+ <
Prima constrângere impune ca determinantul matricei de rotaţie să fie
egal cu 1, analog cu câştigul pe buclă unitar. Cea de-a doua constrângere
(considerând ca prima constrângere este îndeplinită) spune că matricea are
valori proprii complexe. Aceasta înseamnă că ieşirea oscilatorului se va
repeta. Aceasta reprezintă echivalentul în timp discret din criteriul lui
Barkhausen pentru periodicitate.
Deşi nu este evident, se poate deduce din cele doua constrângeri că
ambele elemente ale matricei b şi c, trebuie să fie nenule; deci, matricea de
rotaţie nu poate fi triunghiulară. Ceea ce s-a demonstrat până aici este de fapt
un set de reguli care poate fi aplicat cu uşurinţă pentru orice matrice 22×
pentru a vedea dacă poate fi folosită pentru realizarea unui oscilator.
Capitolul 5 – Generarea semnalelor sinusoidale 175
În cele ce urmează, se vor obţine mai multe reguli care vor permite
identificarea tipului de oscilator doar analizând matricea sa.
Se consideră operaţiile de identitate ca adunarea cu zero şi înmulţirea
cu unu. Apare întrebarea: „există un vector x care înmulţit cu o matrice A să
rezulte un multiplu scalar λ la vectorul iniţial?” Matematic aceasta se scrie
ca:
λ=Ax x (5.42)
Când această relaţie este îndeplinită, λ este o valoare proprie, iar x
corespunde unui vector propriu pentru matricea A. Pentru matricile 22× care
se supun criteriului lui Barkhausen, vor exista două valori proprii; de fapt ele
sunt complex conjugate unul celuilalt, şi fiecare are modulul 1.
Pentru a putea studia evoluţia sistemului pe mai multe perioade trebuie
să reducem matricea de rotaţie la o formă mai simplă. De aici înainte,
matricea de rotaţie, A, se presupune a fi o matrice 22× constând în patru
valori reale, şi ele se supun criteriului Barkhausen.
Explicit, matricea A este:
a b
Ac d
⎡ ⎤= ⎢ ⎥⎣ ⎦
(5.43)
Valorile proprii ale matricii A se obţin din:
0a b
c d
λλ
−=
− (5.44)
0*****)(*)( 2 =−+−−=−−− bcdadabcda λλλλλ (5.45)
0***)(2 =−++− bcdada λλ (5.46)
Care are rădăcinile de forma:
2
)**(*4)( 2 bcdadada −−+±+=λ (5.47)
Aplicaţii ale procesoarelor de semnal în comunicaţii 176
Punând condiţiile |ad-bc| = 1 şi 2a d+ < rezultă:
2
)(4* 2dajda +−±+=λ (5.48)
Deci valorile proprii sunt complex conjugate şi de modul unitar:
2
)(4* 2
1
dajda +−++=λ
2
)(4* 2
2
dajda +−−+=λ (5.49)
Vectorii proprii se obţin înlocuind valorile proprii în:
( ) 0λ− =A I x (5.50)
Acum, se foloseşte rezultatul teoriei valorilor proprii şi factorizarea
matricei generale într-un produs de trei matrici. Acesta de fapt face ca
ridicarea la putere a matricei să fie mult mai uşor de realizat:
1−=A SDS (5.51)
Matricea D este o matrice diagonală a cărei elemente nenule se află pe
diagonala principală. Aceste valori sunt valorile proprii. În termenii matricei
de rotaţie iniţiale, matricea diagonală este:
0
0
j
j
e
e
ω
ω
⎡ ⎤= ⎢ ⎥⎣ ⎦
D (5.52)
unde ⎟⎠⎞
⎜⎝⎛ Δ=ω −
2cos 1 şi da +=Δ .
Matricea S conţine vectorii proprii ce corespund valorilor proprii
folosite în matricea D. Din nou, în termenii matricei de rotaţie iniţiale,
matricea S este:
⎥⎦
⎤⎢⎣
⎡ψψ
= φ−φ jj ee
11S (5.53)
unde b
c−=ψ şi ( )η=φ arg , unde
( )b2
4jad 2Δ−+−=η .
Capitolul 5 – Generarea semnalelor sinusoidale 177
Dacă vectorul x conţine valorile iniţiale ale variabilelor de stare, a n-a
ieşire, y(n) a oscilatorului poate fi scrisă ca:
( ) nn =y A x (5.54)
Deci, nA poate fi scris ca: ( )( )( ) ( )1 1 1 1...− − − −SDS SDS SDS SDS şi după
ce se simplifică perechea externă de termeni 1−S S , obţinându-se următoarea
simplificare pentru ieşirea oscilatorului:
( ) 1nn −=y SD S x (5.55)
Ridicarea la putere a matricei diagonală D presupune ridicarea la
aceeaşi putere a elementelor de pe diagonală. La acest punct se poate vedea în
ce fel ridicarea la putere a matricei D afectează rotaţia. De fapt, ω , este
unghiul de variaţie pe iteraţie.
Este interesant de comentat faptul că o rotaţie a matricei este factorizată
într-un produs de matrici cu valori complexe. Oricum matricile implementate
folosesc doar valorile reale.
Aceasta conduce la teoria atribuită matematicianului francez Jacques
Hadamard: „Calea cea mai scurtă între adevăruri în domeniul real trece prin
domeniul complex”.
Noţiunea „schimbarea bazei” a fost menţionată în legătura cu matricea
S. Aceasta este folosită de când matricile S şi S-1 fac legătura între spaţiul
extern şi intern. Aceasta ar trebui privită ca o variaţie de stare trecând prin trei
procese. Primul proces constă în o transformare către reprezentarea spaţiului
intern. Al doilea constă într-o pereche de rotaţii realizate pe variabilele de
stare, iar ultimul proces constă într-o transformare înapoi către spaţiul extern.
În spaţiul intern cele două rotaţii sunt realizate în direcţii opuse; aceasta
permite combinarea numerelor complexe, obţinându-se rezultate numai în
numere reale.
Aplicaţii ale procesoarelor de semnal în comunicaţii 178
Se consideră variabila z ca o reprezentare internă după cum urmează:
1−=z S x (5.56)
Apoi, considerând ca x să aibă o valoare iniţială, se obţine:
0.5
0.5
⎡ ⎤= ⎢ ⎥⎣ ⎦
z . (5.57)
Apoi ieşirea oscilatorului este scrisă simplu ca: ( ) nn =y SD z . După
simplificare se obţine:
( ) ( )( )
cos
cos
nn
n
ωψ ω ϕ⎡ ⎤
= ⎢ ⎥+⎣ ⎦y . (5.58)
Dându-se o valoare iniţială pentru z, atunci valoarea variabilei de stare
iniţiale este:
=x Sz (5.59)
după simplificare obţinându-se:
( )1
cosψ ϕ⎡ ⎤
= ⎢ ⎥⎣ ⎦
x (5.60)
care este ( )0y .
Interpretarea matricei de rotaţie
Aspectul atractiv al acestei metode de analiză este că se poate evalua
comportarea unui oscilator analizând matricea sa de rotaţie. Această analiză
include două unghiuri. Unghiul ωeste unghiul de variaţie pe iteraţie, iar
unghiul φ reprezintă diferenţa de fază dintre cele două variabile de stare.
Deci, dacă se doreşte obţinerea unui oscilator în cuadratură, atunci unghiul φ
trebuie să fie egal cu 090± , ceea ce în termeni ai elementelor matricei de
rotaţie, aceasta presupune ca cele două variabile de pe diagonala principală
trebuie să fie egale. În concluzie, dacă da = , se obţine un oscilator în
Capitolul 5 – Generarea semnalelor sinusoidale 179
cuadratură. Factorul ψ arată amplitudinea celei de-a doua variabile de stare
relativ faţa de prima. Dacă se doreşte ca cele două ieşiri să aibă amplitudini
egale, atunci elementele de pe diagonala secundară trebuie să fie egale şi de
sens opus. Adică, cb −= .
Revenind la exemplul numeric, se poate descoperi că ieşirile sunt în
cuadratură, dar de amplitudini diferite aşa cum rezultă şi din grafic.
Când se programează oscilatorul într-un DSP, se alege implementarea
fiecărei iteraţii ca o înmulţire de matrici. Totuşi, se poate simplifica
implementarea reprezentând structura care reprezintă operaţiile generale de
multiplicare şi sumare ale matricei de rotaţie.
În domeniul procesoarelor de semnal se obişnuieşte încercarea de a
folosi numai operaţiile de adunare, înmulţire şi întârzierile. Piesa principala
din structura din figură este perechea de elemente de întârziere ce reţine
variabilele de stare. Pentru fiecare iteraţie, ieşirile elementelor de întârziere
sunt folosite ca valorile precedente, iar intrările elementelor de întârziere sunt
noile valori.
De exemplu, intrarea în elementul de întârziere următor din figură este
calculat astfel:
211 byayy += (5.61)
Aplicaţii ale procesoarelor de semnal în comunicaţii 180
Această formă generică necesită patru înmulţiri şi două adunări pentru
fiecare iteraţie. Dacă matricea de rotaţie are câteva valori comune sau câteva
elemente sunt zero sau unu, atunci iteraţia poate deveni mai simplă.
Clasificarea oscilatoarelor
După ce s-a prezentat teoria oscilatoarelor recursive în timp discret, se
vor lista câteva oscilatoare comune împreună cu caracteristicile lor. S-a ales
caracterizarea a cinci oscilatoare care diferă prin numărul de înmulţiri pe
iteraţie şi tipurile lor de ieşire. Toate oscilatoarele reprezentate prin matrici
22× vor genera două sinusoide simultan. Aceste două sinusoide vor avea
întotdeauna aceeaşi frecvenţă, faze diferite una faţă de cealaltă şi pot avea
amplitudini diferite.
Daca ieşirile au diferenţă de fază de 090 , atunci este vorba despre un
oscilator în cuadratură. Dacă ieşirile celor două sinusoide au aceeaşi
amplitudine, atunci este vorba de un oscilator de amplitudine egală.
Patru din cele cinci oscilatoare prezentate în continuare sunt folosite în
industrie, menţionate în diferite note de aplicaţii şi în articole de specialitate.
Se pot obţine noi variante de oscilatoare prin permutarea elementelor
unei matrici corespunzătoare unui oscilator cunoscut. Dacă se aplică criteriul
Barkhausen matricei obţinute se poate observa dacă noile elemente păstrează
acest criteriu. De asemenea se poate înmulţi matricea unui oscilator cu o altă
matrice, obţinându-se un alt oscilator. În concluzie, lista de oscilatoare poate
fi extinsă.
Pentru a simplifica structura matricei, este introdus conceptul de factor
de acord. Acest parametru, k, se referă la unghiul de variaţie, ω . Atunci
relaţia exactă, ce depinde de oscilatorul particular folosit, va fi generată.
Capitolul 5 – Generarea semnalelor sinusoidale 181
Forma directă
Oscilatorul prezentat sub forma „forma directă” a fost unul din cele
mai simple oscilatoare discrete folosit în aplicaţiile procesoarelor de semnal.
Se revine la aplicaţia iniţială din anul 1980 care folosea acest oscilator
pentru generarea tonurilor de apel din telefonie. S-a găsit această aplicaţie
interesantă de când François Viète a descoperit relaţia de recurenţă
( ) ( ) ( ) ( )ω−ϕ−ϕω=ω+ϕ coscoscos2cos ; rezultatul obţinut de el a fost
publicat în anul 1571!
Oscilatorul „forma directă” are ieşirile de amplitudini egale şi care au o
fază relativă, schimbată cu ω :
( )ω= cos2k (5.62)
Rezultă matricea de rotaţie de forma:
⎥⎦
⎤⎢⎣
⎡ −01
1k (5.63)
Când elementele acestei matrici de rotaţie sunt înlocuite în structura
discretă, oscilatorul devine oscilatorul „formă directă”, reprezentat în
următoarea figură:
Aplicaţii ale procesoarelor de semnal în comunicaţii 182
Oscilatorul digital ghid de undă
Oscilatorul digital ghid de undă este cel mai simplu oscilator cu ieşirile
în cuadratură. Pentru k tinzând la zero, ieşirile sunt aproape egale în
amplitudine. Figura alăturată prezintă forma reţelei pentru acest tip de
oscilator, cu ( )φ= cosk , iar matricea sa de rotaţie este:
⎥⎦
⎤⎢⎣
⎡+
−k1k
1kk (5.64)
Oscilatorul de amplitudine egală
Numele acestui tip de oscilator provine de la ideea că o variabila de
stare este actualizată şi apoi noua valoare este folosită în iniţializarea
variabilelor rămase. Ieşirile oscilatorului sunt de amplitudini egale şi în cvasi-
cuadratură, relaţia de cuadratură în limitele lui k. Pentru prezentarea clară a
iteraţiei oscilatorului pe etaje, dispunem de matricea sa de rotaţie şi de
factorul k.
Matricea oscilatorului poate fi exprimată sub forma unui produs de
două matrici triunghiulare, nici una din ele nu pot funcţiona ca un oscilator.
Capitolul 5 – Generarea semnalelor sinusoidale 183
⎥⎦
⎤⎢⎣
⎡−
⋅⎥⎦
⎤⎢⎣
⎡−
=⎥⎥⎦
⎤
⎢⎢⎣
⎡
−−
1k
01
10
k1
1k
kk1 2 (5.65)
unde ⎟⎠⎞
⎜⎝⎛ ω=
2sin2k
Structura oscilatorului este prezentată în următoarea figură:
Oscilatorul în cuadratură în trepte
Acest oscilator în cuadratură, pentru k mic, are ieşirile aproape egale în
amplitudine. Din nou, ca mai înainte, se exprimă matricea ca un produs de
alte două matrici, aici, factorul drept este efectiv un oscilator „directă”.
Factorul stâng este folosit pentru a schimba configuraţia oscilatorului drept.
⎥⎦
⎤⎢⎣
⎡−
⋅⎥⎦
⎤⎢⎣
⎡ −=
⎥⎥⎦
⎤
⎢⎢⎣
⎡
−−
k1
10
10
k1
k1
k1k 2 (5.66)
unde ( )ω= cosk .
Acest tip de oscilator este prezentat în figură:
Aplicaţii ale procesoarelor de semnal în comunicaţii 184
Oscilatorul cuplat, în cuadratură standard
Oscilatorul cuplat, în cuadratură standard are ieşirile de amplitudini
egale şi în cuadratură. Există însă şi un dezavantaj; oscilatorul impune patru
înmulţiri per iteraţie. Acesta, ca şi cel directă se poate obţine direct din
formulele trigonometrice:
( )( ) ( ) ( ) ( ) ( )ωω−ωω=+ω sinnsincosncos1ncos
( )( ) ( ) ( ) ( ) ( )ωω+ωω=+ω cosnsinsinncos1nsin
Aceste formule scrise în funcţie de un singur parametru k sunt:
⎥⎥⎦
⎤
⎢⎢⎣
⎡
−−−
2
2
k1k
kk1 (5.67)
unde ( )ω= sink
Pe baza proprietăţilor oscilatoarelor, se poate realiza următorul tabel:
Capitolul 5 – Generarea semnalelor sinusoidale 185
Proprietăţile oscilatoarelor digitale
Oscilator Înmulţiri/
iteraţie Amplitu-dini egale
Ieşiri în cuadratură
k Matricea de
rotaţie
Directă 1 Da Nu ( )2cos ω 1
1 0
k −⎡ ⎤⎢ ⎥⎣ ⎦
Digital ghid de undă
1 Nu Da ( )cos ω
1
1
k k
k k
−⎡ ⎤⎢ ⎥+⎣ ⎦
De amplitudine egală
2 Da Nu 2sin2
ω⎛ ⎞⎜ ⎟⎝ ⎠
21
1
k k
k
⎡ ⎤−⎢ ⎥−⎣ ⎦
În cuadratură în trepte
2 Nu Da ( )cos ω 21
1
k k
k
⎡ ⎤−⎢ ⎥−⎣ ⎦
Cuplat, în cuadratură standard
4 Da Da ( )sin ω 2
2
1
1
k k
k k
⎡ ⎤−⎢ ⎥⎢ ⎥− −⎣ ⎦
Controlul dinamic al amplitudinii
Oscilatoarele descrise până în acest punct sunt balistice, în sensul că ele
sunt încărcate cu anumite valori şi pot funcţiona liber. Dacă timpul de
funcţionare este „scurt”, atunci acesta poate funcţiona corect. Dar erorile se
pot acumula până în punctul în care, ieşirile nu îndeplinesc cerinţele impuse.
De aceea, se impune o modalitate de control a amplitudinii
oscilatorului. O abordare standard foloseşte un control automat al câştigului
(CAG). Deoarece oscilatorul se repetă recursiv, s-ar putea măsura doar
puterea la ieşire şi se corectează după fiecare iteraţie. Dacă erorile sunt mici,
corecţiile pot fi aproximate.
Acum, când se măsoară ieşirile oscilatorului se vor folosi puterile
(pătratele amplitudinilor) în locul amplitudinilor, pentru a evita radicalul.
Aplicaţii ale procesoarelor de semnal în comunicaţii 186
Calculele cu radical tind să fie costisitoare în DSP (procesor digital de
semnal). Puterea instantanee, P, este dată de formula:
( )
( )φ
φ−
−−=
2
2122
21
sin
cosxxc
b2x
c
bx
P (5.68)
Această formulă este greu de implementat, dar pentru frecvenţe fixe,
calculul implică şase înmulţiri şi două scăderi. Totuşi, analizând momentul
anterior schimbării frecvenţei, se observă, că în cazul în care ne limităm la
oscilatoarele în cuadratură ( )090±φ , formula puterii se poate scrie sub o
formă mai simplă:
22
21 x
c
bxP −= (5.69)
In acelaşi timp cu măsurarea puterii, trebuie găsit şi câştigul necesar
pentru gama de reprezentare a variabilelor de stare. O formulă generală pentru
câştig:
q
q0
P
PG = (5.70)
unde P este puterea măsurată, 0P este puterea de referinţă, q este
factorul de convergenţă.
Deoarece se preferă să nu se folosească împărţirea, se va folosi
aproximarea Taylor de ordin întâi; această aproximare are proprietatea de a
transforma precis împărţirea în scădere. Se obţine:
0P
Pqq1G ⋅−+≈ (5.71)
Deoarece se foloseşte G ca scară de reprezentare a amplitudinilor
(variabilelor de stare), este indicat ca 2
1q = . Pentru procesoare de semnal în
Capitolul 5 – Generarea semnalelor sinusoidale 187
virgulă fixă, este potrivită alegerea 2
1P0 = ( 707,0eamplitudin ≈ ). Astfel
formula devine: P2
3G −= .
Apare cazul în care G poate fi unu, şi uneori va trebui sa se
înmulţească variabilele de stare cu un număr puţin mai mare ca unu. O soluţie
ar putea fi înmulţirea variabilelor de stare cu G2
1 şi apoi dublarea
rezultatului. Pe scurt, controlul automat al câştigului implică următorii paşi
pentru fiecare iteraţie:
1) Calculul ieşirilor unei iteraţii a oscilatorului pentru actualizarea
variabilelor de stare
2) Măsurarea puterii, P , la ieşirea oscilatorului
3) Calculul factorului de câştig, G
4) Scalarea variabilelor de stare cu factorul de câştig.
Controlul dinamic al frecvenţei
În cele din urmă, se analizează controlul dinamic al frecvenţei.
Deoarece există aplicaţii unde este necesar un control numeric al
oscilatorului, ne vom referi pe scurt la ce implică acest control asupra acestor
oscilatoare. Schimbarea frecvenţei unui oscilator, necesită modificarea numai
a valorii k a matricei de rotaţie, pentru orice valoare a frecvenţei ω . Totuşi,
partea dificilă este menţinerea controlului amplitudinii pe perioada schimbării
dinamice a frecvenţei. Deoarece formula generală pentru putere
Aplicaţii ale procesoarelor de semnal în comunicaţii 188
( )
( )φ
φ−
−−=
2
2122
21
sin
cosxxc
b2x
c
bx
P
arată o dependenţa atât de frecvenţă cât şi de raportul amplitudinii,
aceasta se dovedeşte a fi ineficientă în cazul general. Astfel, problema se
rezumă la actualizarea coeficienţilor în formula puterii, odată cu schimbarea
frecvenţei. În plus, unele oscilatoare îşi vor modifica amplitudinile de la
ieşire.
Dacă aplicăm anumite restricţii în funcţie de tipul oscilatorului, situaţia
se poate simplifica. Dacă se analizează cazul oscilatorului cuplat în cuadratură
standard, aceste probleme dispar. In acest caz, formula puterii nu depinde de
elementele matricei la un loc.
Totuşi, dificultatea în acest caz, constă în aplicarea radicalului la doi
dintre coeficienţi. Unul dintre ei poate folosi o dezvoltare binomială de
ordinul întâi pentru aceşti doi termeni, dar în acest caz, determinantulnu este
chiar unu şi astfel CCA trebuie să corecteze eroarea. Matricea de rotaţie a
oscilatorului cuplat standard în cuadratură ce foloseşte dezvoltarea binomială
de ordinul întâi pentru cei doi termeni cu radicali are forma:
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
−−
−
2
k1k
k2
k1
2
2
Matricea de mai sus are un determinant aproape egal cu unu (mai exact,
4
k1
2+ ), astfel încât compensarea câştigului se aplică într-o gamă largă a lui
k . Dar chiar dacă se foloseşte un oscilator în cuadratură cu amplitudini
diferite, se poate găsi o soluţie simplă pentru controlul amplitudinii. Se poate
muta aproximarea procesului din matricea de rotaţie la măsurarea puterii.
Capitolul 5 – Generarea semnalelor sinusoidale 189
Un exemplu ce foloseşte un oscilator digital ghid de undă va fi
prezentat în cele ce urmează. Formula puterii pentru acest oscilator, în funcţie
de parametrul k variabil este:
22
21 x
1k
1kxP ⋅
+−
−=
Ştiind că se calculează puterea la fiecare iteraţie şi încercând să se evite
împărţirea, se va folosi dezvoltarea serie de ordin întâi a numitorului ceea ce
duce la următoarea aproximaţie pentru P :
( ) 22
221 xk1xP ⋅−+≈
Această aproximare este bună pentru k mic şi k este mic pentru
frecvenţe apropriate de 4
1 din rata de eşantionare. Dacă intervalul de variaţie
trebuia mărit, trebuie folosită o dezvoltare serie de ordin mai mare.
Până în acest moment s-a realizat controlul simplu al oscilatorului la
dezvoltări serie de ordin mic pentru termenii dificil de calculat. Dar aceste
aproximări implică un cost; acela că fie se foloseşte oscilatorul într-o bandă
îngustă în care k este mic, sau se utilizează dezvoltări de ordin mai mare
pentru a acoperi intervale mai mari. Rezultatele obţinute în urma unei
aproximaţii de ordin mic sunt bune pentru un interval finit. Uneori, problema
se va reduce la operarea într-un interval în care k este centrat în jurul unei
valori diferite de zero. Această situaţie este rezolvata prin folosirea unei
matrici de translaţie în frecvenţă. Această matrice deplasează frecvenţa
centrală a oscilatorului în punctul de interes. Frecvenţa centrală a oscilatorului
este considerată ca fiind frecvenţa unde k este zero, şi astfel aproximaţiile
sunt exacte la această frecvenţă.
Aplicaţii ale procesoarelor de semnal în comunicaţii 190
Paşii unei iteraţii a unui oscilator controlat în amplitudine şi cu control
dinamic al frecvenţei ce foloseşte o matrice de translaţie în frecvenţă sunt
următorii:
1) Se execută o iteraţie a unui oscilator armonic pentru a actualiza
variabilele de stare. Acesta poate fi unul din oscilatoarele în cuadratură
descrise mai sus.
2) Reactualizarea variabilelor de stare folosind matricea de translaţie in
frecvenţă. Această matrice este identică cu cea a oscilatorului cuplat în
cuadratură standard, unde k este fixat şi reprezintă translaţia frecvenţei.
Deoarece valorile din această matrice se consideră constante, aceste
valori pot fi calculate într-o iteraţie anterioară.
3) Măsurarea puterii, P , la ieşirea oscilatorului. Se face aplicând formula:
( )
( )φ
φ−
−−=
2
2122
21
sin
cosxxc
b2x
c
bx
P sau una din variantele mai simple
cu variabilele de stare.
4) Calcularea factorului de câştig, G .
5) Scalarea variabilelor de stare cu acest factor de câştig.
Trebuie înţeles că o singură pereche de variabile de stare este folosită în
etapele descrise mai sus. Paşii 1,2 şi 5 lucrează cu o singură pereche de valori.
Şi pasul 3 foloseşte aceeaşi pereche la calculul puterii. Acest lucru poate fi
văzut ca două oscilatoare ce funcţionează cu aceleaşi variabile de stare. Se
poate ca un oscilator să permită controlul dinamic al frecvenţei şi celălalt doar
să realizeze o schimbare în frecvenţă.
Structurile reprezentând iteraţiile oscilatoarelor rămân aceleaşi ca în
tabelul anterior. Explicit, se poate scrie matricea de translaţie ca:
Capitolul 5 – Generarea semnalelor sinusoidale 191
( ) ( )( ) ( )⎥⎦
⎤⎢⎣
⎡ωω−ωω
cossin
sincos
Într-o implementare practică, se va seta s
0
f
f2π=ω , unde 0f este
frecvenţa de salt în Hertz, şi sf este frecvenţa de eşantionare. Frecvenţa de
salt poate să difere de frecvenţa centrală dorită, din moment ce pentru unele
oscilatoare frecvenţa centrală este 4
1 din frecvenţa de eşantionare.
Paşii pentru proiectarea unui oscilator recursiv sunt:
1) Alegerea unghiului de măsură în funcţie de frecvenţa dorită a
oscilatorului, folosind sf
f2π=ω .
2) Selectarea unei reţele de oscilatoare pe baza proprietăţilor din tabel.
3) Definirea lui k folosind relaţia cu ω din tabel.
4) Determinarea coeficienţilor reţelei din matricea de rotaţie din tabel.
5) Stabilirea condiţiilor iniţiale conform relaţiei: ( )⎥⎦⎤
⎢⎣
⎡φψ
=cos
1x .
6) Implementarea oscilatorului folosind un mediu hardware pentru a
determina daca este necesar un control dinamic al amplitudinii.
Dacă se foloseşte un control dinamic al frecventei, să se afle matricea
de translaţie, acolo unde este necesar.