CommLab CommLab 22/23 (2..22) PCM (Pulse Code Modulation) Impulsna kodna modulacija Cilj vežbe Cilj vežbe je upoznavanje sa PCM modulacijom. PCM predstavlja metodu kojom se kontinuirani analogni signal konvertuje u ekvivalentni digitalni signal. To je standardna forma za digitalne audio signale i različite Blu ray, Compact Disc i DVD formate, kao i za sisteme digitalne telefonije. Za konverziju analognog signala u digitalni korišćenjem PCM potrebno je preduzeti tri koraka: odmeravanje (uzorkovanje) sampling kvantizacija kodiranje Kao rezultat dobija se niz binarnih signala (bit stream). Konvencionalni PCM sistemi zahtevaju 6 puta veću širinu propusnog opsega u odnosu na analogni signal. Na primer, 4 KHz za analogni govorni kana l 6 x 4 = 64 KHz za digitalni signal (PC M). Faktor za ocenu kvaliteta PCM sistema predstavlja stepen greške bita BER (Bir Error Rate). Kriterijumi su takvi da BER ne sme da pređe sledeće vrednosti (BER=x 6, x 9, x 2 itd). Na osnovu Nyquist ovog kriterijuma uzorci se uzimaju za 4 KHz govorni signal svakih /8 u sekundi ili svakih 25 μs ili za 5 KHz audio signal /3 u sekundi što odgovara intervalu od 33,3 μs. Za signal na slici, nivoi kvantizacije u trenutku uzorkovanja su: 7, 9,, 2, 3, 4, 4, 5, 5, 5, 4, itd. Kodiranjem ovih vrednosti u binarne cifre će se dobiti sledeći skup simbola dužine 4 bita (nibl): (23 +22 +2 +2 =+4+2+=7),,,,,,,,,,. Zadatak.. Ovaj program ilustruje kako izgleda kvantizovani signal. Generisati signal x=sin(t) i nacrtati ga u vremenskom intervalu: t=:.:;
Prikaz signala se vrši sledećim kodom: CommLab 22/23 (2..22) clc close all clear all % analogni signal t=:.:; x=sin(t); subplot(2); plot(t,x); Izvršiti uniformnu kvantizaciju sa 8, a zatim i 6 nivoa na signalu x. Nacrtati kvantizovane signale na istom grafikonu kao i originalni signal (ukupno dva grafikona). Upotrebiti funkciju uquant. Funkcija uquant je ekstreni Matlab skript pod nazivom uquant.m koji se poziva kao potprogram iz glavnog programa. Kod koji poziva uquant sa parametrima kvantizacije na 8 nivoa je: Quantized_signal=uquant(x,8); subplot(22); plot(t,quantized_signal); Funkcija uquant ima sledeći kod i snima se kao Matlab dokument (m file) pod nazivom uquant.m u istom direktorijumu gde se nalazi i glavni program. function y=uquant(x,n) % defining the function in MATLAB % This function perform a uniform quantization and required two parameters, % the first one is the sample and the second is # of levels that we need a=max(max(x))-min(min(x)); % this is a variable that compute the difference between the maximum value % of the signal and the minimum one. delta= a/(n-); % the value of the quantization step between levels. z=(x-min(min(x)))/delta; y=round(z); % Round the sampled signal to the nearest level. Rešenje... 5 -.5-2 3 4 5 6 7 8 9.5 -.5-2 3 4 5 6 7 8 9 8 5 6 4 2 2 3 4 5 6 7 8 9 Slika.. a) 8 nivoa kvantizacije 5 2 3 4 5 6 7 8 9 Slika.. b) 6 nivoa kvantizacije
CommLab 22/23 (2..22) Zadatak.2. Generisati signal x=sin(t) i nacrtati ga u vremenskom intervalu: t=:.:; Matlab skript treba da izvrši prikaz originalnog signala, signala sa 8 i signala sa 6 nivoa kvantizacije. Pored navedenog, skript proračunava vrednosti SQNR (Signal to Quantization Noise Ratio) u db za oba kvantizovana signala. Skript ima sledeći kod: % vremenski interval t=[:.:]; % signal x=sin(t); % poziv funkcije za prikaz PCM signala sa 8 nivoa kvantizacije [sqnr8,aquan8,code8]=u_pcm(x,8); % prikaz vrednosti za SQNR - Signal-to-Quantization-Noise Ratio u db fprintf('\n\nsa 8 nivoa kvantizacije SQRN ima vrednost:%2.2f db\n',sqnr8); % poziv funkcije za prikaz PCM signala sa 6 nivoa kvantizacije [sqnr6,aquan6,code6]=u_pcm(x,6); % prikaz vrednosti za SQNR - Signal-to-Quantization-Noise Ratio u db fprintf('\nsa 6 nivoa kvantizacije SQRN ima vrednost:%2.2f db\n',sqnr6); plot(t,x,t,aquan8,t,aquan6, t,zeros(,length(t))); Za prikaz kvantizovanih signala i proračun SQNR koristi potprogram u_pcm.m koji sadrži sledeći kod: function [sqnr,a_quan,code]=u_pcm(a,n) % U_PCM - uniform PCM encoding of a sequence % SQNR,A_QUAN,CODE]=U_PCM(A,N) % a=input sequence. % n=number of quantization levels (even). % sqnr=output SQNR (in db). % a_quan=quantized output before encoding. % code=the encoded output. amax=max(abs(a)); a_quan=a/amax; b_quan=a_quan; d=2/n; q=d.*[:n-]; q=q-((n-)/2)*d; for i=:n a_quan(find((q(i)-d/2 <= a_quan) & (a_quan <= q(i)+d/2)))=... q(i).*ones(,length(find((q(i)-d/2 <= a_quan) & (a_quan <= q(i)+d/2)))); b_quan(find( a_quan==q(i) ))=(i-).*ones(,length(find( a_quan==q(i) ))); a_quan=a_quan*amax; nu=ceil(log2(n)); code=zeros(length(a),nu); for i=:length(a) for j=nu:-:
if ( fix(b_quan(i)/(2^j)) == ) code(i,(nu-j)) = ; b_quan(i) = b_quan(i) - 2^j; sqnr=2*log(norm(a)/norm(a-a_quan)); CommLab 22/23 (2..22) Rešenje.2..8.6.4.2 -.2 -.4 -.6 -.8-2 3 4 5 6 7 8 9 Slika.2. Signal sa 8 i 6 nivoa kvantizacije Zadatak.3. Koristeći kod i funkciju uquant.m kao u zadatku.. prikazati kvantizovani signal sin 2 sin 2 3 3 sa 8 i 6 nivoa kvantizacije. Rešenje.3..5 -.5 -.5..5.2.25.3.35.5 -.5 -.5..5.2.25.3.35 8 5 6 4 2 5.5..5.2.25.3.35.5..5.2.25.3.35 Slika.3. a) 8 nivoa kvantizacije Slika.3. b) 6 nivoa kvantizacije Zadatak.4.
CommLab 22/23 (2..22) Koristeći kod i funkciju u_pcm.m kao u zadatku.2. prikazati kvantizovani signal sa 8 i 6 nivoa kvantizacije i proračunati SQNR. Rešenje.4. sin 2 sin 2 3 3.8.6.4.2 -.2 -.4 -.6 -.8 -.5..5.2.25.3. 35 Literatura Slika.4. Signal sa 8 i 6 nivoa kvantizacije [ ] John G. Proakis, Masoud Salehi, Contemporary Communication Systems using Matlab, PWS Publishing Company, Boston, USA, 998.