TT12S1E Tietoliikenteen perusteet Metropolia/A. Koivumäki Laskuharjoitus 4 (2.10.2013): Tehtävien vastauksia 1. Tutkitaan signaalista näytteenotolla muodostettua PAM (Pulse Amplitude Modulation) -signaalia. Käytetään Matlabia, saatavilla valmis Matlab-ohjelma (http://users.metropolia.fi/~koiva/s2013/tt12s1e-tlt/matlab/lh4_teht1.m). Se piirtää analogisen aaltomuodon ja sen spektrin. Sitten ohjelma toteuttaa näytteenoton ja piirtää saadun PAM-signaalin ja sen spektrin. Nähdään että kirjan kuvassa 3.8 kerrottu spektriin liittyvä asia toteutuu. Kun olet katsellut, mitä tapahtuu, kun näytteenottotaajuus on riittävän iso, vaihda taajuudeksi (ohjelmassa muuttuja Fs2) muita arvoja, isompia ja pienempiä. Erityisesti tutki, mitä tapahtuu, kun taajuus on pienempi kuin Nyqvistin mukainen minimi. Nyt kun analogisen signaalin suurin taajuus on 4 khz, on pienin sallittu näytteenottotaajuus 8 khz. Kokeile vaikka 6.5 khz:iä. Totea, että nyt ei PAM-signaalista pystytä suodattamaan alkuperäisen signaalin spektriä ulos. Tässä Matlab-koodi: % Laskuharjoitus 4, tehtävä 1 % Määritellään muutama tarpeellinen lähtötieto: Fs = 500000; % Laskettavien arvojen (näytteiden) määrä sekunnissa dt = 1/Fs; % Aika-arvojen väli sekunteina T = 5; % Signaalin kesto sekunteina t = 0:dt:T; % Ajanhetket taulukkoon t. Näinä hetkinä laskemme signaalin arvon. % Määritellään signaali, kolmen sinin summa, taajuudet 2, 3 ja 4 khz: f1 = 2000; f2 = 3000; f3 = 4000; % Taajuudet Hz A1 = 1; A2 = 2; A3 = 3; % Amplitudit fii1 = 0; fii2 = 0; fii3 = 0; % Vaihekulmat radiaaneina % Signaalin yhtälö on: v = A1*cos(2*pi*f1*t+fii1) + A2*cos(2*pi*f2*t+fii2)... + A3*cos(2*pi*f3*t+fii3); % Nyt jokaisena taulukon t hetkenä on signaalin arvo taulukossa v % Piirretään v:n kuvaaja t:n funktiona: subplot(4,1,1); plot(t,v); xlim([0 0.002]); % Otetaan näkyviin vain sen verran aika-akselia % että aaltomuoto näkyy hyvin. Tässä 2 ms:n pätkä. % Lasketaan v:n Fourier-muunnos eli spektri: V = fft(v); % fft-funktio laskee spektrin, jolloin tuloksena taulukko V, % jossa on kompleksilukuja yhtä monta kuin v:ssä % signaalin arvoja % Spektrin käsittely vaatii komentoja, jotta amplitudispektri näkyy oikein: df = 1/T; % Taajuusaskel Fourier-muunnoksessa f = 0:df:Fs/2; % Spektri laskettiin näillä taajuuksilla Nf = length(f); % Taajuuksien määrä Vpos = abs(v(1:nf))/nf; % Tässä taulukossa amplitudispektri taajuusvälillä % 0... Fs/2 subplot(4,1,2); % Amplitudispektri alempaan kuvaan plot(f,vpos); xlim([0 50000]); % Piirretään spektri 5 khz asti ylim([0 4]); % Pystyakselin maksimiarvo = 4 % Muodostetaan PAM-signaali (eli pulssijono) v2, johon poimitaan v:n % aaltomuodosta joka kymmenes arvo, jolloin näytteenottotaajuus on 10 khz, % siis Nyqvistin näytteenottoteoreeman mukaan riittävän iso: Fs2 = 10000; % Nyqvistin näytteenottoteoreeman mukaan riittävän iso d = floor(fs/fs2); % Joka d:s v:n arvo poimitaan v:stä v2 = v-v; % v:n kokoinen nollia sisältävä taulukko for i=1:d:fs v2(i) = v(i); % Joka d:s v2:n arvo = vastaava v:n arvo end; % PAM-signaalin plottaus: subplot(4,1,3); plot(t,v2); xlim([0 0.002]); % Plotataan v2:ta saman verran kuin v:tä % Lasketaan PAM-signaalin Fourier-muunnos eli spektri:
V2 = fft(v2); % fft-funktio laskee spektrin, jolloin tuloksena taulukko V, % jossa on kompleksilukuja yhtä monta kuin v:ssä % signaalin arvoja % Spektrin käsittely vaatii komentoja, jotta amplitudispektri näkyy oikein: df = 1/T; % Taajuusaskel Fourier-muunnoksessa f = 0:df:Fs/2; % Spektri laskettiin näillä taajuuksilla Nf = length(f); % Taajuuksien määrä V2pos = abs(v2(1:nf))/nf; % Tässä taulukossa amplitudispektri taajuusvälillä % 0... Fs/2 subplot(4,1,4); % Amplitudispektri alempaan kuvaan plot(f,v2pos); xlim([0 50000]); % Piirretään spektri 5 khz asti %ylim([0 4]); % Pystyakselin maksimiarvo = 4 Matlabin tulostus: PAM-signaalissa näytteenottotaajuus 10 khz. Alimmassa kuvassa näkyy asia, jota on selitetty kirjan kuvassa 8.3. Analogisesta signaalista v(t) näytteenottotaajuudella f s muodostetun PAM-signaalin v 2 (t) spektri koostuu alkuperäisen signaalin spektrin kopioista, jotka ovat taajuusakselin kohdissa n f, missä n on kokonaisluku. Nyt alkuperäisen signaalin spektri sisältää taajuudet ±2 khz, ±3 khz ja ±4 khz, joten näytteenottotaajuudella f s = 10 khz muodostetun PAM-signaalin spektrissä on piikit noiden alkuperäisten taajuuksien lisäksi myös taajuuksilla 10±2 khz, 10±3 khz ja 10±4 khz ja taajuuksilla 20±2 khz, 20±3 khz ja 20±4 khz jne. (Se asia, että jos alkuperäinen signaali sisältää taajuudet 2, 3 ja 4 khz, niin se sisältää myös vastaavat negatiiviset taajuudet 2, 3 ja 4 khz, on Fourier-analyysiin syvällisemmin perehtyvän matemattisen tarkastelun asia. Esim. Integraalimuunnokset-kurssilla asia varmaankin tulee esille.) PCM:hän toimii niin, että kun lähetyspäässä on muodostettu näytteenotolla PAM-signaali, siinä olevien pulssien jännitearvot kvantisoidaan ja koodataan koodisanoiksi. Näin saadut bitit lähetetään. Vastaanottaja muodostaa saamiensa koodisanojen perusteella PAM-signaalin ja laittaa sen läpi alipäästösuodattimesta, jonka rajataajuus on puolet näytteenottotaajuudesta, siis nyt 5 khz. Nyt siis suodatuksen jälkeen ylläolevan PAM-signaalin spektristä katoavat taajuudet 6 khz, 7 khz, 8 khz, 12 khz, 13 khz, 14 khz jne. jolloin jäljelle jäävät vain alkuperäisen asignaalin sisältämät taajuudet 2, 3 ja 4 khz. Toimii. s
Pienennetään PAM-signaalin muodostuksessa käytettävää näytteenottotaajuutta: f s = 6.55 khz. Tämähän on Nyqvistin näytteenottoteoreeman mukaan liian pieni, koska nyt suurin signaaliin v(t) sisältyvä taajuus on 4 khz. Silloin Nyqvistin mukaan pitää olla f s > 8 khz. Mitä tapahtuu? Matlabin tulostus, kun f s = 6.5 khz: Alkuperäisen signaalin spektripiikkien (2 khz, 3 khz ja 4 khz) lisäksi PAM-signaalin spektrissä on piikit myös taajuuksilla 6.5±2 khz, 6.5±3 khz ja 6.5±4 khz ja taajuuksilla 13±2 khz, 13±3 khz ja 13±4 khz jne. Pienimmästä luetellen nuo PAM-signaalin ylimääräiset taajuudet ovat siis 2.5, 3.5, 4.5, 8.5, 9, 9.5, 10, 10.5, 11 khz jne. Siis alkuperäisen signaalin taajuuskaistalle ilmestyy taajuuksia, joita siellä ei pidä olla. Tätä ilmiötä kutsutaan laskostumiseksi eli aliasing-ilmiöksi. Nyt ei minkäänlaisella alipäästösuodattimella voida tuosta spektriviivojen sekamelskasta saada aikaa alkuperäisen signaalin spektriä. Ei toimi. 2. Tallenna äskeinen Matlab-ohjelma uudella nimellä, esim. lh4_teht2.m. Muuta ohjelmaa niin, että tehdään sama tutkimus kuin tehtävässä 1, mutta käytetään signaalina tätä puhetta sisältävää wav-tiedostoa: http://users.metropolia.fi/~koiva/s2013/tt12s1e-tlt/matlab/puhe3.wav. Puheesta on suodatettu kaikki yli 3 khz taajuudet pois, joten sen spektrillä on varsin selkeä muoto. Kun plottaa spektrin desibeleinä, niin ulkoasu selkeytyy vielä lisää. Ota mallia laskuharjoituksen 2 tehtävän 6 Matlab-koodista (http://users.metropolia.fi/~koiva/s2013/tt12s1e- TLT/Matlab/lh2_teht6.m), josta voit katsoa miten signaalille v luetaan sisältö wav-tiedostosta. Muokkaamalla edellistä Matlab-koodia saadaan tämä: % Laskuharjoitus 4, tehtävä 2 % Luetaan signaali äänitiedostosta: [v,fs] = wavread('puhe3.wav'); % Uutistenlukija puhuu % Samalla tuli luettua tiedostosta aaltomuodon % arvojen määrä sekunnissa eli näytteenottotaajuus Fs. % Määritellään muutama tarpeellinen lähtötieto: dt = 1/Fs; % Aika-arvojen väli sekunteina N = length(v); % Näytteiden kokonaismäärä T = (N-1)*dt; % Signaalin kesto sekunteina t = 0:dt:T; % Ajanhetket taulukkoon t. Näinä hetkinä laskemme signaalin arvon. % Piirretään v:n kuvaaja t:n funktiona: subplot(4,1,1);
plot(t,v); xlim([0 0.01]); % Otetaan näkyviin vain sen verran aika-akselia % että aaltomuoto näkyy hyvin. Tässä 2 ms:n pätkä. % Lasketaan v:n Fourier-muunnos eli spektri: V = fft(v); % fft-funktio laskee spektrin, jolloin tuloksena taulukko V, % jossa on kompleksilukuja yhtä monta kuin v:ssä % signaalin arvoja % Spektrin käsittely vaatii komentoja, jotta amplitudispektri näkyy oikein: df = 1/T; % Taajuusaskel Fourier-muunnoksessa f = 0:df:Fs/2; % Spektri laskettiin näillä taajuuksilla Nf = length(f); % Taajuuksien määrä Vpos = abs(v(1:nf))/nf; % Tässä taulukossa amplitudispektri taajuusvälillä % 0... Fs/2 subplot(4,1,2); % Amplitudispektri alempaan kuvaan plot(f,vpos); xlim([0 50000]); % Piirretään spektri 5 khz asti %ylim([0 4]); % Pystyakselin maksimiarvo = 4 % Muodostetaan PAM-signaali (eli pulssijono) v2, johon poimitaan v:n % aaltomuodosta joka kymmenes arvo, jolloin näytteenottotaajuus on 10 khz, % siis Nyqvistin näytteenottoteoreeman mukaan riittävän iso: Fs2 = 7350; % Nyqvistin näytteenottoteoreeman mukaan riittävän iso d = floor(fs/fs2); % Joka d:s v:n arvo poimitaan v:stä v2 = v-v; % v:n kokoinen nollia sisältävä taulukko for i=1:d:fs v2(i) = v(i); % Joka d:s v2:n arvo = vastaava v:n arvo end; % PAM-signaalin plottaus: subplot(4,1,3); plot(t,v2); xlim([0 0.01]); % Plotataan v2:ta saman verran kuin v:tä % Lasketaan PAM-signaalin Fourier-muunnos eli spektri: V2 = fft(v2); % fft-funktio laskee spektrin, jolloin tuloksena taulukko V, % jossa on kompleksilukuja yhtä monta kuin v:ssä % signaalin arvoja % Spektrin käsittely vaatii komentoja, jotta amplitudispektri näkyy oikein: df = 1/T; % Taajuusaskel Fourier-muunnoksessa f = 0:df:Fs/2; % Spektri laskettiin näillä taajuuksilla Nf = length(f); % Taajuuksien määrä V2pos = abs(v2(1:nf))/nf; % Tässä taulukossa amplitudispektri taajuusvälillä % 0... Fs/2 subplot(4,1,4); % Amplitudispektri alempaan kuvaan plot(f,v2pos); xlim([0 50000]); % Piirretään spektri 5 khz asti %ylim([0 4]); % Pystyakselin maksimiarvo = 4 Tiedostossa puhe3.wav oleva ääni on audio-cd-formaatin mukaista eli signaalin aaltomuodon arvoja on 44100 kpl sekunnissa. Kun tämä signaali muutetaan PCM-tyyppiseksi PAM-signaaliksi näytteenottotaajuudella 7350 Hz, on Matlabin tulostus tällainen:
Spektristä selvästi näkyy, että äänestä on jyrkästi suodatettu pois yli 3 khz:n taajuudet. Ja nyt kun näytteenottotaajuus (7.35 khz) on selvästi vaadittua (2 3 khz = 6 khz) isompi, on PAM-signaalin spektrissä alkuperäinen spektri (0... 3 khz) selvästi eroteltavissa 7.35 khz:n kohdalle taajuuksille 4.35... 7.35 khz ja 7.35... 11.35 khz kopioituneesta spektristä. Niinpä alipäästösuodattimella PAM-signaalista saa helposti esille alkuperäisen äänen. Toimii. Jos käytetään liian pientä näytteenottotaajuutta 3.675 khz, on tulos tämä:
Näytteet liian harvassa, laskostuminen pilaa PAM-signaalin spektrin, suodattamalla ei alkuperäistä spektriä saa esille. Ei toimi. 3. Kirjan tehtävä 3.23. Tässä: Draw the analog waveform generated by a PCM decoder with a digital milliwatt as the input signal of the decoder. Use Figure 3.14 to determine the approximate analog signal value. What is the periodic time and what is the frequency of the analog signal produced? Mainittu kuva 3.14 ohessa. Tuon kuvan perusteella on kuitenkin aika hankala etsiä lukuarvoja. Sen sijaan niitä voi hakea tästä Excel-taulukosta: http://users.metropolia.fi/~koiva/s2013/tt12s1e-tlt/a-laki-dekoodaus.xls Digitaalinen milliwatti on määritelty kirjan luvussa 3.8.3. Tässä digitaalisen milliwatin määrittelevät 8-bittiset koodisanat: 00110100 00100001 00100001 00110100 10110100 10100001 10100001 10110100 Mutta kun PCM:ssä siirtoa varten koodisanan joka toinen bitti (alkaen toisesta bitistä) invertoidaan, ovat todelliset koodisanat oheiset 01100001 01110100 01110100 01100001 11100001 11110100 11110100 11100001 Excel-taulukosta löytyy puhelinverkon PCM-järjestelmän jokaista 8-bittistä koodisanaa vastaava signaalijännitearvo. (Taulukossa jännitearvot on skaalattu välille 1... 1. Se, montako volttia kutakin koodisanaa vastaava jännite sitten on elävässä elämässä puhelinkeskuksen PCM-laitteistossa, on eri asia.)
Etsimällä taulukosta kullekin digitaalisen milliwatin koodisanalle jännitearvovastine saadaan seuraava dekoodaustulos: Aika/µs Koodisana Jännite 0 01100001-0.27451 125 01110100-0.62249 250 01110100-0.62249 375 01100001-0.27451 500 11100001 0.27451 675 11110100 0.62249 750 11110100 0.62249 875 11100001 0.27451 1000 01100001-0.27451 1125 01110100-0.62249 1250 01110100-0.62249 1375 01100001-0.27451 1500 11100001 0.27451 1675 11110100 0.62249 1750 11110100 0.62249 1875 11100001 0.27451 2000 01100001-0.27451 Koska näytteenottotaajuus on 8 khz, on näyteiden väli 125 µs. Taulukkoon on laitettu nuo 8 koodisanaa kahteen kertaan, jotta saadaan digitaalisen milliwatin aaltomuotoa näkyviin enemmän kuin yksi jakso. Excelillä saadaan aikaan tämä grafiikka: Hiukan horjahtelevan näköinen 1 khz:n sinihän tuo on. 4. Tekstissä Analogisen signaalin digitaalinen siirto (http://users.metropolia.fi/~koiva/s2013/tt12s1e- TLT/anal.sign.digit.siirto.pdf) on sivulla 5 kuva 4, jossa näkyy, miten aaltomuoto muuttuu, kun PCM-koodataan kolmella bitillä tasavälisellä kvantisoinnilla. Piirrä Excelillä sama kuva niin, että lisäät siihen kolmanneksi käyräksi A- lain mukaista epätasavälistä kvantisointia käyttäen saatava aaltomuoto. Kaikki tarvittavat lukuarvot löytyvät sivulla 9 olevasta taulukosta eli tästä: Tasavälinen kvantisointi Epätasavälinen kvantisointi t/µs Näytteen Lähin Koodisana Lähin Koodisana arvo / V kvantisointitaso / V kvantisointitaso / V 0 0.625 0.5 011 0.51 001 100 0.123 0.5 011 0.13 010 200 0.427 0.5 100 0.51 110 300 1.457 1.5 010 2.02 000 400 0.721 0.5 011 0.51 001 500 3.876 3.5 111 2.02 111 600 0.843 0.5 100 0.51 110 700 1.996 1.5 010 2.02 000 800 0.185 0.5 100 0.13 101 900 0.048 0.5 100 0.03 100 1000 0.324 0.5 011 0.51 001
Alla Excelillä piirretyt alkuperäinen aaltomuoto sekä tasavälistä ja epätasavälistä (A-laki) kvantisointia käyttäen siirretty aaltomuoto. Kun signaalijännite on pieni, antaa epätasavälinen kvantisointi tarkemman tuloksen. Tämä onkin epätasavälisen kvantisoinnin tärkeä etu. Puhesignaalin jännite on suurimman osan aikaa melko pieni, joten äänen aaltomuodon keskimääräinen tarkkuus on epätasavälistä kvantisointia käytettäessä parempi kuin jos käytettäisiin tasavälistä kvantisointia.