Lab 3. Kodningsmetoder 15 Lab 3 Kodningsmetoder Starta Matlab och ladda ner följande filer från kurswebben till er lab-katalog: lab3blocks.mdl okodat.mdl repetitionskod.mdl hammingkod.mdl planet.mat Denna gång ska ni framför allt mäta upp bitfelsannolikheter då olika felrättande koder används. En kort studie av huffmankoder ingår också. 3.1 Okodad kommunikation över en binär-symmetrisk kanal Först får ni en helt avskalad variant av mätuppsättningen där ingen felrättning används. Den finns i modellen okodat.mdl och kommunikationen sker över en binär-symmetrisk kanal. Med modellens inställningar simuleras 10 5 skickade bitar, vilket tar c:a 20 sekunder att simulera. Okodat: Uppmätt bitfelsannolikhet i % Uppmätt felsannolikhet Den uppmätta bitfelssannolikheten bör vara i närheten av kanalens angivna felsannolikhet. Om så inte är fallet är något fel. 3.2 Repetitionskodning Modellen repetitionskod.mdl innehåller ett kommunikationssystem som använder en repetitionskod för att kommunicera över en binär-symmetrisk kanal. Alla ingående block i denna modell använder variabeln n (kodordslängden), som därför måste sättas i Matlab. På så sätt behöver ni bara ändra på ett ställe.
16 Lab-PM för TSEI67 Telekommunikation Repetitionskodning: Uppmätt bitfelsannolikhet i % n = 3 n = 5 n = 7 n = 9 Vilken felrättningsförmåga har koderna? Hur avspeglas felrättningsförmågan i mätningarna? 3.3 Hammingkod Modellen hammingkod.mdl innehåller ett kommunikationssystem som använder en hammingkod för att kommunicera över en binär-symmetrisk kanal. Förutom variabelnnanvänds här också variabeln k (kodens dimension). Hammingkoder: Uppmätt bitfelsannolikhet i % n = 7 k = n = 15 k = n = 31 k = n = 63 k = Observera att repetitionskoden med (n,k) = (3, 1) också är en hammingkod. Varför ökar bitfelssannolikheten med ökande kodordslängd?
3.4 BCH-koder 17 3.4 BCH-koder BCH-koder är en klass av linjära binära koder som tillåter en att göra en viss avvägning mellan parametrarna kodordslängd, dimension och minavstånd. Utgå nu från modellen hammingkod.mdl, men ersätt kodare och avkodare med motsvarande för BCH-koder från modellen lab3blocks.mdl. Dessa block använder också variablerna n och k. Man kan inte välja n och k godtyckligt. Slå upp hjälpsidan förbchenc i Matlabs hjälp. Där anges några tillåtna kombinationer. Notera att de BCH-koder som har samma parametrar som hammingkoder verkligen är hammingkoder. Prova några kombinationer av n och k och fyll i dina resultat nedan. Passa på att jämföra koder med ungefär samma takt, R = k/n. Exempelvis kan ni jämföra BCH-(15,5) med repetitionskoden som har n = 3, och BCH-(63,36) med hamming-(7,4). BCH: Uppmätt bitfelsannolikhet i % n k R Uppmätt bitfelsannolikhet Om takten kan hållas oförändrad verkar bitfelssannolikheten sjunka med ökande kodordslängd, åtminstone för låg felsannolikhet på kanalen. Vad skulle det kunna bero på? Fundera också kring varför det inte gäller för hög felsannolikhet på kanalen.
18 Lab-PM för TSEI67 Telekommunikation 3.5 Källkodning Simulink har för all del stöd för viss källkodning, men inte för huffmankodning. Det får istället bli ren Matlab för denna studie. Dubbelklicka på planet.mat i Matlabs filbläddrare. Det är en 256 256 punkters gråskalebild med heltalsvärden från 0 till 255, där 0 motsvarar svart och 255 motsvarar vitt. Om ni vill kan ni titta på bilden med imshow(reshape(planet(1:65536),256,256),[0 255]) För att bestämma en Huffmankod behövs en sannolikhetsfördelning. Skapa en ur bilden med prob = hist(planet(:),[0:255])/256^2; och titta på den med plot(prob) Koden skapas sedan med [dict,avglen] = huffmandict([0:255],prob); I dict finns den tabell som beskriver koden, och avglen är medelkodordslängden. Kodordslängderna kan ni få med L = zeros(1,256); for i=1:256 L(i)=length(dict{i,2}); end; Dessa kan ni också titta på med plot. Hur förhåller sig kodordslängderna till sannolikheterna? Entropin 255 Pr{i} log 2 Pr{i} i=0 utgör en undre gräns för medelkodordslängden. Den kan man bestämma så: -sum(prob(prob>0).*log2(prob(prob>0))) Det prob>0 som förekommer i uttrycket är till för att ta bort alla förekomster av sannolikheten 0, så att Matlab slipper beräkna logaritmen av 0. Kodens redundans uttryckt i bit per symbol är då differensen mellan medelkodordslängden och entropin. Vad blir redundansen för koden?
3.6 Om ni har tid över 19 3.6 Om ni har tid över Utgå från modellen repetitionskod.mdl, men ersätt kanalen med kombinationen linjekod Polar NRZ förstärkare AWGN-kanal anpassat filter detektor, dvs. så som det såg ut i lab 2. Denna kombination finns färdig i lab3blocks.mdl och ger en binärsymmetrisk kanal. För att dessa simuleringar inte ska ta alldeles för lång tid, bör ni behöva minska antalet sända bitar, exempelvis till 10 3. Jämför nu okodad kommunikation med repetitionskod i termer av bitfelssannolikhet, men se till att ni använder samma energi per informationsbit i båda fallen. Välj denna bitenergi och variansen på kanalen så att bitfelssannolikheten i det okodade fallet blir ungefär 5%. Justera parametern Spb så att antalet sampel per informationsbit blir densamma i de två fallen. Vad kan ni observera? Hur kan denna observation förklaras?