Postopki obdelave signalov

4. vaja – kvantizacija
Kvantizacija je postopek, pri katerem vrednosti vzorcev (amplitude časovno diskretnega signala), ki lahko zavzemajo poljubno vrednost, preslikamo v vrednosti iz omejenega, končnega nabora kvantov. Vsak kvant zapišemo z binarno besedo končne dolžine. Vhod v sistem za digitalno obdelavo signalov je tako vzorčen in kvantiziran signal – vrednosti signala v časovno diskretnih trenutkih, ki so zapisani z binarno besedo končne dolžine. Pretvorbo iz desetiškega v binarni sistem in obratno najlažje predstavimo s primeroma (za ostale sisteme velja enak postopek): 10 2 : 2 10: 11 1011 1011 11 3 2 11 : 2 = 5 ost. 1 1011 = 1 ⋅ 2 + 0 ⋅ 2 + 1 ⋅ 21 + 1 ⋅ 2 0 5 : 2 = 2 ost. 1 = 1 ⋅ 8 + 0 ⋅ 4 + 1 ⋅ 2 + 1 ⋅1 2 : 2 = 1 ost. 0 = 11 1 : 2 = 0 ost. 1 Dolžina binarne besede, s katero zapišemo kvant, merimo v bit-ih, kjer vsako mesto kamore je zapisana '1' ali '0' pomeni 1 bit. Tako je beseda '1011' iz gornjega primera dolga 4 bit-e. V praksi pa se običajno srečujemo z bistveno večjimi merskimi enotami, ki so predstavljene v spodnji tabeli bit : 1 bit byte : 8 bit-ov kbyte : 210 byte-ov = 1024 byte-ov Mbyte : 210 kbyte-ov = 1024 kbyte-ov Gbyte : 210 Mbyte-ov = 1024 Mbyte-ov Dolžina binarne besede direktno določa največje možno število kvantov, oziroma kvantizacijskih nivojev, ki jih zmoremo predstaviti z besedo izbrane dolžine: N = 2b , kjer b predstavlja dolžino besede v bitih. Prvi bit (skrajno levi) običajno označuje predznak. Pri vaji si bomo ogledali enakomerno kvanizacijo, kjer bodo kvantizacijski nivoji simetrični glede na vrednost nič (midrise kvantizator). Enakomerna kvantizacija pomeni, da je razdalja med kvantizacijskimi nivoji, imenovana kvantizacijski korak ( Δ ), vedno enaka. Za povezavo med dolžino besede in kavntizacijskim korakom pa moramo podati še obseg kvantizatorja ( R ): R = x max − x min , R Δ= N, interval kvantizacijske napake eq pa nato lahko zapišemo kot :

− Δ ≤ eq < Δ , če dejansko vrednost zaokrožujemo, ter 2 2 0 ≤ eq < Δ , če preostanek preprosto 'odrežemo'.

011

010

001

000 0

100

101

110

111

1.) V Matlabu simulirajte zvočni signal frekvence f 0 = 440 Hz, amplitudo A = 1 , ter fazo φ = π . 3 Frekvenca vzorčenja naj bo f s = 11025 Hz, vzorčenje naj traja 3 sekunde. Dobljena vzorčeni zvočni signala lahko predvajate z uorabo funkcije sound(x,fs). Koliko (celih) period signala je vzorčenih? _______________ 2.) Zvočni signal iz prve naloge želimo kvantizirati, in sicer želimo vzorec signala zapisati z: a) 8 biti (1 byte) b) 4 biti Koliko različnih vrednosti lahko zavzame kvantizirani signal? a) b) _____________ _____________ Koliko pomnilniškega prostora (kByte) zavzame ena sekunda kvantiziranega signala? a) b) _____________ _____________ 3.) V Matlabu kvantizirajte signal iz prve naloge. Uporabite enakomerno kvantizacijo. V ta namen pripravite funkcijo (glej navodila na zadnji strani), ki sprejme vzorčen signal in vektor kvantizacijskih nivojev, ter vrne kvantiziran signal. Signal kvantizirajte za oba primera kvantizacije iz 2. naloge (8 bitov, 4 biti), in sicer naj bo kvantizacija v obeh primerih enakomerna. Kvantizirana signala predvajajte z ukazom sound(xq,fs). Primerjajte kvaliteto zvoka s primerom iz prve naloge? Kateri je najboljši in kateri najslabši?

4.) Z ukazom stem(n,x) si oglejte 'originalni' signal, ter signal kvantiziran s 4 biti, ter ju skicirajte. Pri risanju uporabite le prvih 40 vzorcev: stem(n(0:41),x(0:41) Uporabite lahko tudi funkcijo 'SigReconstruction', ki smo jo uporabili pri prejšni vaji (glej navodila na zadnji strani). Funkcija vam prikaže, kakšen je videti rekonstruirani signal: SigReconstruction(x(0:41))
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1

0

5

10

15

20

25

30

35

40

0

5

10

15

20

25

30

35

40

5.) Oglejte in skicirajte še spekter 'originalnega' signala, ter signala kvantiziranega s 4 biti. Pri skiciranju bodite pozorni na nivo šuma. Pri izračunu spektra uporabite MATLAB-ovo funkcijo fft(x) : X=1/11025*fft(x(1:11025)); f=0:11024; semilogy(f,abs(X));
1

0.001

1.0E-6

1.0E-9

1.0E-12

1.0E-15 0

1k

2k

3k

4k

5k f

6k

7k

8k

9k

10k

11k

1

0.001

1.0E-6

1.0E-9

1.0E-12

1.0E-15 0

1k

2k

3k

4k

5k f

6k

7k

8k

9k

10k

11k

Priprava funkcije 'kvantiziraj'

Funkcijo lahko pripravite ročno, ali pa jo prenesete s portala MMK. Če jo pripravite sami, potem v polju 'Current Directory' (levo gornje polje Matlab-a, zavihek 'Current Directory') z desnim gumbom prikličite meni in izberite new M-file. Popravite njegovo ime na 'kvantiziraj.m', ter ga odprite. Vpišite naslednjo kodo:
function y = kvantiziraj(x,q) for i=1:length(x), y(i)=q(najblizjiKvant(x(i),q)); end function index = najblizjiKvant(X,q) [minimum,index] = min(abs(q-X)); end end

Funkcijo uporabite tako, da ji ob klicu podate signal, ki ga želite kvantizirati, ter niz kvantizacijskih nivojev, ki jih želite ob tem uporabiti: Xq = kvantiziraj(x,q); Funkcijo lahko tudi prenesete s strani predmeta 'Postopki obdelave signalov' na portalu MMK. Datoteko shranite npr. na namizje ali katero drugo dosegljivo mapo. V Matlab-u bodite pozorni na levo zgornje okno. Pojdite na zavihek 'Current Directory', ter preverite, če je na seznamu tudi datoteka 'kvantiziraj.m'. Če ni, prestavite lokacijo na mapo, v katero ste shranili datoteko. Funkcijo kličete tako, kot je opisano zgoraj.

Priprava funkcije 'SigReconstruction'

Za namestitev funkcije 'SigReconstruction' morate na vaš računalnik namestiti datoteko 'SigReconstruction.m', ki jo najdete na portalu MMK na strani predmeta POS. Datoteko shranite npr. na namizje ali katero drugo dosegljivo mapo. V Matlab-u bodite pozorni na levo zgornje okno. Pojdite na zavihek 'Current Directory', ter preverite, če je na seznamu tudi datoteka 'SigReconstruction.m'. Če ni, prestavite lokacijo na mapo, v katero ste shranili datoteko. Funkcijo kličete tako, da v ukazno okno vpišete SigReconstruction(x) kjer je x niz, ki predstavlja vzorčen signal, katerega želite rekonstruirati.