Oblig 4 - Mathias Hedberg Oppgave nr. 1 En ser for QPSK skal overføre data: [0,1,1,0,0,1,1,1,1,0] 1. Tegn datasignalet for I(t) y = [0,1,0,1,1,9];figure; stairs(0:length(y)-1,y); ylim([-.5 1.5]); h = gcf;set(h,'position', [0 0 500 100]) 2. Tegn datasignalet for Q(t) y = [1,0,1,1,0,9];figure; stairs(0:length(y)-1,y); ylim([-.5 1.5]); h = gcf;set(h,'position', [0 0 500 100]) 3. Tegn omhylningkurven for I(t) 4. Tegn omhylningkurven for Q(t) 5. Tegn omhylnigkurven for QPSK signalet
Oppgave nr. 2 a) Hva kjennetegner frekvensspektret for et MSK signal i forhold til QPSK signal MSK pakker inn mer effekt i hovedloben på den frekvensen det ses på. QPSK vil ha mange flere sidefrekvenskomponenter som stjeler effekt. b) Data inn på en MSK modulator er [ 1, 0, 1, 1, 0, 1, 0, 0 ]. Tegn fasen som funksjon av bit. nr. Vi antar fase lik 0 for t=0. Tegn også signalene: data, I og Q som funksjon av tiden binary = [ 1, 0, 1, 1, 0, 1, 0, 0 ]; old=0; i=0; figure; for bit = binary if bit==0 bit=-1; plot([i,i+1], bit*90*[0,1]+old);hold on; x=old+bit*90*1; old=x;i=i+1; c) Et MSK signal har matematisk form: der rad/sek og millisek.
Finn en formel for den øyeblikkelige frekvensen! Hva er forskjellen mellom høyeste og laveste frekvens? Er signalene med høyest og lavest frekvens ortogonale? t=[0:9999]*1e-10; w_c=2*pi*1e7; T_b=0.2e-3; w_max=w_c+(pi/(2*t_b));w_min=w_c-(pi/(2*t_b)); f_c=w_c/(2*pi), f_max=w_max/(2*pi), f_min=w_min/(2*pi); f_c = 10000000 f_max = 10001250 f_diff=f_max-f_min f_diff = 2500 f_dist=1/(2*t_b) f_dist = 2500 Kravene for ortogonalitet er opfylt i følge kompium, men når jeg beregner om de er ortogonale så stemmer det ikke? y1=cos(w_c.*t + (pi/(2*t_b)).*t*1) y1 = 1.0000 1.0000 0.9999 0.9998 0.9997 0.9995 0.9993 0.9990 y2=cos(w_c.*t - (pi/(2*t_b)).*t*2) y2 = 1.0000 1.0000 0.9999 0.9998 0.9997 0.9995 0.9993 0.9990 Dette tyder på ikke ortogonal. Plotten viser at de er ganske like, men faseringen blir større etterhvert. figure;plot(t,y1,'b',t,y2,'r'); grid;
Oppgave nr. 3 a) Finn entropien til en binær kilde med p=0,35 0.35*log2(1/0.35)+0.65*log2(1/0.65) ans = 0.9341 b) Beregn entropien til en diskret kilde med 6 symbol uten minne når: pa=0,45,pb=0,25, pc =0,15, pd=pe= pf=0,05. p=[0.45 0.25 0.15 0.05 0.05 0.05]; beregnentropi(p) %funksjonen beskrevet på siste side ans = 2.0772 Finn informasjonen følge meldinger: 1. ABABBA 2. FDDFDF 3. ABAACF og sammenlign med forventningsverdien for informasjon i en melding som består av 6 vilkårlige symbol a1=['a' 'b' 'a' 'b' 'b' 'a']; a2=['f' 'd' 'd' 'f' 'd' 'f']; a3=['a' 'b' 'a' 'a' 'c' 'f']; sekv1=bitberegn(a1,p) sekv1 = 9.4560
sekv2=bitberegn(a2,p) sekv2 = 25.9316 sekv3=bitberegn(a3,p) %funksjonen beskrevet på siste side sekv3 = 12.5149 c) Finn en Huffman kode for disse symbolene og midlere kodelengde huffmankoder={ 'A',[1]; 'B',[0,1]; 'C',[0,0,1]; 'D',[0,0,0,1]; 'E',[0,0,0,0,0]; 'F',[0,0,0,0,1]; }; bitpersymbol= midlerelengde(p, huffmankoder) %funksjonen beskrevet på siste side bitpersymbol = 2.1000 Oppgave nr. 4 En fjern sivilisasjon bruker et alfabet med tre symbol, $,! og? a) Et raskt studium av språket viser at hyppighet for de tre symbolene er: p$=0,7; p!=0,2 og p?=0,1; Finn kildens entropi, H(X). p=[0.7, 0.2, 0.1]; entropi = beregnentropi(p) entropi = 1.1568
%funksjonen beskrevet på siste side b) Konstruer en Huffman kode med bruk av ett symbol av gangen og finn midlere lengde for denne koden huffmankoder={ '$',[1]; '!',[0,1]; '?',[0,0]; }; bitpersymbol = midlerelengde(p,huffmankoder) %funksjonen beskrevet på siste side bitpersymbol = 1.3000 c) Vi ønsker å effektivisere koden, og ser to og to symbol. Finn sannsynlighet for de forskjellige kombinasjonene og den tilhøre Huffman kode. Finn midlere lengde for denne koden og sammenlign med H(X) parray={}; for i=1:length(p) for y=1:length(p) sans=p(i)*p(y); parray(+1,:) = {huffmankoder{i,1},huffmankoder{y,1},sans}; p=sort(cell2mat(parray(:,3)),'desc'); kombinasjoner=parray(:,:) kombinasjoner = '$' '$' [0.4900] '$' '!' [0.1400] '$' '?' [0.0700] '!' '$' [0.1400] '!' '!' [0.0400] '!' '?' [0.0200] '?' '$' [0.0700] '?' '!' [0.0200] '?' '?' [0.0100] Tallene sorteres of huffman koder beregnes grafisk
huffmankoder ={ '$$',[0]; '!$',[1,1,1]; '$!',[1,1,0]; '?$',[1,0,1,1]; '$?',[1,0,1,0]; '!!',[1,0,0,0]; '!?',[1,0,0,1,0]; '?!',[1,0,0,1,1,1]; '??',[1,0,0,1,1,0] }; bitpersymbol = midlerelengde(p,huffmankoder)/2 %funksjonen beskrevet på siste side bitpersymbol = 1.1650 Vi ser at vi får redusert den fra 1.3 til 1.165. Oppgave nr. 5 En foldingsenkoder er som vist på figur.
a) Finn Coding Rate og Trellis diagrammet for enkoderen Coding rate er 0.5 Trellis = poly2trellis(3,[3,5]) Trellis = numinputsymbols: 2 numoutputsymbols: 4 numstates: 4 nextstates: [4 2 double] outputs: [4 2 double] Trellis.outputs ans = 0 1 3 2 2 3 1 0 Trellis.nextStates ans = 0 2 0 2 1 3 1 3 Vi putter disse resultatene inn i diagramet under b) Vi påtrykker meldingen [1, 0, 1, 0, 1, 0, 0, 0] på Inn porten. Finn signalet som kommer ut på Ut 1 og Ut 2. m=[1, 0, 1, 0, 1, 0, 0, 0]; K=convenc(m, Trellis); % Hvert odde bit representerer utgang 1, resten utgang 2.; utgang1 = K(1:2:length(K)) utgang1 = 0 1 1 1 1 1 1 0 utgang2 = K(2:2:length(K))
utgang2 = 1 0 0 0 0 0 1 0 Oppgave nr.6 En foldingsenkoder har polynombeskrivelse: t = poly2trellis([3 3],[4,5,7; 7,4,2]); a) Tegn hardware for denne enkoderen og finn coding rate for enkoderen Lengden er 3 med to innganger, så 2 grupper av 2 shift registere. Krets={'XOR1',[4,7]; 'XOR2',[5,4]; 'XOR3',[7,2]}; n=3; binary=xorbinary(n,krets); XOR1=binary{1,2}, XOR2=binary{2,2}, XOR3=binary{3,2}, XOR1 = 100 111 XOR2 = 101 100 XOR3 = 111 010 Hver av disse forteler oss hvilke verdier fra shift registerene og inngangene som skal kobles til de forskjellige kretsene. Så XOR1 skal koble seg bare til inngangen 1 fra den første gruppen med shift registere, fra den andre skal den ha fra inngang, ut shift1 og ut shift2. Diagramet under viser dette: Coding rate =2/3 b) Vi påtrykker et signal: m = [1,1, 0,1, 1,1, 1,0, 1,0, 1,1, 0,1, 1,1]. Bruk Matlab for å finne utsignalet! Trellis = poly2trellis([3 3],[4,5,7; 7,4,2]); m=[1,1, 0,1, 1,1, 1,0, 1,0, 1,1, 0,1, 1,1];
K=convenc(m, Trellis) K = 0 0 1 0 1 0 0 1 1 1 1 1 0 utgang1 = K(1:3:length(K)),utgang2 = K(2:3:length(K)),utgang3 = K(3:3:length(K)) utgang1 = 0 0 0 1 0 0 0 0 utgang2 = 0 1 1 1 0 1 0 1 utgang3 = 1 0 1 1 1 1 1 1 Oppgave nr. 7 En krets for Trellis Kodet Modulasjon er som vist på Figur Vi starter med 0 på utgangen av alle skiftregisterene. Vi påtrykker en datasekvens med to bit: [1, 3, 2, 0, 1, 3, 0, 0]; Finn sekvensen av Signal nr. som blir generert.
Det blir generert: 2, 7, 1, 1, 3, 6, 4, 4 Funksjoner: Disse funksjonene har jeg laget 100% selv. Funksjonen for å beregne antall bit brukt function bits = bitberegn(a,p) bits=0; for b = a i=double(b)-96; bits=bits+1*log2(1/p(i)); Regner ut entropi for en array med p. function entropi = beregnentropi(p) entropi=0; for i = p entropi=entropi+i*log2(1/i); Regner ut midlere lengde function bitpersymbol = midlerelengde(p,koderarray)
bitpersymbol=0; for i=1:length(koderarray) koder=koderarray{i,2}; bitpersymbol=bitpersymbol+length(koder)*p(i); Regner xor bit input function binary=xorbinary(n,krets) binary={}; for i=1:length(krets) binary(+1,:)={krets{i,1},dec2bin(krets{i,2},n)};