Permalänk
Medlem

Matlab [Hammingkod]

Tjena,

Har precis börjat med matlab och har fått en uppgift där man ska koda enligt hammingkodning.(Felrättande koder osv.)

Uppgiften går ut på att koda en hammingkod (7,4) och försöka illustrera en graf där brusnivå* ska anges på y-axeln.

*Med brusnivå avses här sannolikheten att värdet på en bit under överföringen blir slumpmäassigt (med samma
sannolikhet för noll och ett). Praktiskt kan man låta en slumptalsgenerator alstra lika många tal som överföringen
har bitar. Dessa tal skall vara likformigt fördelade mellan noll och ett, och om värdet understiger brusnivån låter man
en ny slumpgenerator avgöra bitens värde. För enkelhets skull kan ni här använda det nägot orealistiska antagandet
att bruset, dvs slumptalen, är oberoende av varandra.

Såhär långt har vi kommit med själv koden och hur hammingkoden ska fungera för [7,4]

A=[1 1 0 1;1 0 1 1;0 1 1 1]; G=[1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1; 1 1 0 1; 1 0 1 1; 0 1 1 1]; k=0; % Loop random number x 100. while (k<100); x=round(rand(4,1)); c=G*x; c; for j=5:7 if (mod(c(j),2)==0) c(j)=0; else c(j)=1; end end disp(c); for a=1:7 if c=round(randn(99))==1 P=[1 1 0 1 1 0 0; 1 0 1 1 0 1 0;0 1 1 1 0 0 1]; S=P*c; for i=1:3 if (mod(S(i),2)==0) S(i)=0; disp(S); k=k+1; end

Problemet: Vi vill skapa en slumpgenerator som ska skicka in brus i koden för att koden ska ändra och även ha en funktion som kan avläsa antalet fel i procent.

Visa signatur

Desktop: Case: Loque - Ghost S1 MK2 + L-Top Hat | MB: ASRock Z390 Phantom Gaming-ITX/ac | GK: Gigabyte GeForce RTX 2070 8GB GAMING OC | CPU: Intel Core i7 9700K @ Stock | PSU: Corsair SF600 v2 | RAM: Corsair Vengeance LPX DDR4 3200MHz 2x8GB | SSD: Samsung 970 EVO 500GB | Watercooling: NZXT Kraken X52 (2xNoctua NF-A12x25 PWM)| [Win 10 x64].

Permalänk
Skrivet av Munib:

Tjena,

Har precis börjat med matlab och har fått en uppgift där man ska koda enligt hammingkodning.(Felrättande koder osv.)

Uppgiften går ut på att koda en hammingkod (7,4) och försöka illustrera en graf där brusnivå* ska anges på y-axeln.

*Med brusnivå avses här sannolikheten att värdet på en bit under överföringen blir slumpmäassigt (med samma
sannolikhet för noll och ett). Praktiskt kan man låta en slumptalsgenerator alstra lika många tal som överföringen
har bitar. Dessa tal skall vara likformigt fördelade mellan noll och ett, och om värdet understiger brusnivån låter man
en ny slumpgenerator avgöra bitens värde. För enkelhets skull kan ni här använda det nägot orealistiska antagandet
att bruset, dvs slumptalen, är oberoende av varandra.

Såhär långt har vi kommit med själv koden och hur hammingkoden ska fungera för [7,4]

A=[1 1 0 1;1 0 1 1;0 1 1 1]; G=[1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1; 1 1 0 1; 1 0 1 1; 0 1 1 1]; k=0; % Loop random number x 100. while (k<100); x=round(rand(4,1)); c=G*x; c; for j=5:7 if (mod(c(j),2)==0) c(j)=0; else c(j)=1; end end disp(c); for a=1:7 if c=round(randn(99))==1 P=[1 1 0 1 1 0 0; 1 0 1 1 0 1 0;0 1 1 1 0 0 1]; S=P*c; for i=1:3 if (mod(S(i),2)==0) S(i)=0; disp(S); k=k+1; end

Problemet: Vi vill skapa en slumpgenerator som ska skicka in brus i koden för att koden ska ändra och även ha en funktion som kan avläsa antalet fel i procent.

Är problemet att skapa bruset? round(rand(m,n)) är väl ett utmärkt sätt att få fram slumpvist fördelade ettor och nollor, vilket ni verkar använda er av?

Visa signatur

CPU: AMD FX-8350 @ 4.7GHz | RAM: 32GB Vengeance @1600MHz | GPU: Asus HD7970 DCII Top @ 1.0/5.6 GHz | ASRock 990FX Fatal1ty | PSU: Newton R3 800W Platinum | HD: 128 GB Plextor M3 Pro, 300 GB WD Green | triple-boot: Win7-64,WinXP-32,debian-64

Permalänk
Medlem

jag lyckades lösa själv brusbiten men har nu fel med procent biten dvs. när Bruce = 1 (100%) så ska fel efter rättning (antal vektror) bli lika med 100, eller hur? Vi får ca 80-90.

A=[1 1 0 1;1 0 1 1;0 1 1 1]; G=[1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1; 1 1 0 1; 1 0 1 1; 0 1 1 1]; k=0; bruce = 1; fel = 0; fel2 = 0; %Loop random number x 100. while (k<100); x=round(rand(4,1)); c=G*x; c; for j=5:7 if (mod(c(j),2)==0) c(j)=0; else c(j)=1; end end for i=1:7 if (rand(1) < bruce) c(i) = round(rand(1)); fel = fel +1; end end % Det som vi multiplicerar c med. P=[1 1 0 1 1 0 0; 1 0 1 1 0 1 0;0 1 1 1 0 0 1]; S=P*c; for i=1 if (mod(S(i),2)==0) S(i)=0; else S(i)=1; end end for i=2 if (mod(S(i),2)==0) S(i)=0; else S(i)=1; end end for i=3 if (mod(S(i),2)==0) S(i)=0; else S(i)=1; end end if S(1)+S(2)+S(3)>0; fel2=fel2+1; else end k=k+1; end disp('Fel efter rättning(antal vektorer)=') disp(fel2) disp('Fel innan rättning(antal siffror)=') disp(fel)

Visa signatur

Desktop: Case: Loque - Ghost S1 MK2 + L-Top Hat | MB: ASRock Z390 Phantom Gaming-ITX/ac | GK: Gigabyte GeForce RTX 2070 8GB GAMING OC | CPU: Intel Core i7 9700K @ Stock | PSU: Corsair SF600 v2 | RAM: Corsair Vengeance LPX DDR4 3200MHz 2x8GB | SSD: Samsung 970 EVO 500GB | Watercooling: NZXT Kraken X52 (2xNoctua NF-A12x25 PWM)| [Win 10 x64].