Documente Academic
Documente Profesional
Documente Cultură
clear all;
close all;
%*************************************************************************
****************************************
%modulatorul
%*************************************************************************
****************************************
switch tipdata
case 1,
fid=fopen('inputdata.txt');
[y]=fscanf(fid,'%f');
x=reshape(y(1:5*N),5,N);
x=x';
st=fclose(fid);
case 2,
x=randint(N,5);
otherwise,
%sprintf('\nAlegere incorecta. Sirul se va genera aleator\n')
x=randint(N,5);
end
tempx=[];
for i=1:N,
temp(1:5)=x(i,1:5);
tempx(1+5*(i-1):5*i)=temp;
end;
k=3;
sprintf('\nSe vor introduce automat %i simboluri pentru sincronizarea de tact;se transmit
N+3=%i simboluri',k,(N+3))
x=[0,0,0,0,0;0,1,1,1,1;0,0,0,0,0;x]; %3, [1,j,1], simboluri pentru sincronizarea de tact
for i=1:(N+k),
if x(i,:)== [0,0,0,0,0],
semnal(i)=1;
end
if x(i,:)== [0,0,0,0,1],
semnal(i)=exp(j*2*pi/32);
end
if x(i,:)== [0,0,0,1,0],
semnal(i)=exp(j*2*2*pi/32);
end
if x(i,:)== [0,0,0,1,1],
semnal(i)=exp(j*3*2*pi/32);
end
if x(i,:)== [0,0,1,0,0],
semnal(i)=exp(j*4*2*pi/32);
end
if x(i,:)== [0,0,1,0,1],
semnal(i)=exp(j*5*2*pi/32);
end
if x(i,:)== [0,0,1,1,0],
semnal(i)=exp(j*6*2*pi/32);
%5
end
if x(i,:)== [0,0,1,1,1],
semnal(i)=exp(j*7*2*pi/32);
end
if x(i,:)== [0,1,0,0,0],
semnal(i)=exp(j*8*2*pi/32);
end
if x(i,:)== [0,1,0,0,1],
semnal(i)=exp(j*9*2*pi/32);
end
if x(i,:)== [0,1,0,1,0],
semnal(i)=exp(j*10*2*pi/32);
end
if x(i,:)== [0,1,0,1,1],
semnal(i)=exp(j*11*2*pi/32);
end
if x(i,:)== [0,1,1,0,0],
semnal(i)=exp(j*12*2*pi/32);
end
if x(i,:)== [0,1,1,0,1],
semnal(i)=exp(j*13*2*pi/32);
end
if x(i,:)== [0,1,1,1,0],
semnal(i)=exp(j*14*2*pi/32);
end
if x(i,:)== [0,1,1,1,1],
semnal(i)=exp(j*15*2*pi/32);
end
if x(i,:)== [1,0,0,0,0],
semnal(i)=exp(j*16*2*pi/32);
end
if x(i,:)== [1,0,0,0,1],
semnal(i)=exp(j*17*2*pi/32);
end
if x(i,:)== [1,0,0,1,0],
semnal(i)=exp(j*18*2*pi/32);
end
if x(i,:)== [1,0,0,1,1],
semnal(i)=exp(j*19*2*pi/32);
end
if x(i,:)== [1,0,1,0,0],
semnal(i)=exp(j*20*2*pi/32);
end
if x(i,:)== [1,0,1,0,1],
semnal(i)=exp(j*21*2*pi/32);
end
if x(i,:)== [1,0,1,1,0],
semnal(i)=exp(j*22*2*pi/32);
end
if x(i,:)== [1,0,1,1,1],
semnal(i)=exp(j*23*2*pi/32);
end
if x(i,:)== [1,1,0,0,0],
semnal(i)=exp(j*24*2*pi/32);
end
if x(i,:)== [1,1,0,0,1],
semnal(i)=exp(j*25*2*pi/32);
end
if x(i,:)== [1,1,0,1,0],
semnal(i)=exp(j*26*2*pi/32);
end
if x(i,:)== [1,1,0,1,1],
semnal(i)=exp(j*27*2*pi/32);
end
if x(i,:)== [1,1,1,0,0],
semnal(i)=exp(j*28*2*pi/32);
end
if x(i,:)== [1,1,1,0,1],
semnal(i)=exp(j*29*2*pi/32);
end
if x(i,:)== [1,1,1,1,0],
semnal(i)=exp(j*30*2*pi/32);
end
if x(i,:)== [1,1,1,1,1],
semnal(i)=exp(j*31*pi/32);
end
end
sprintf('Apasati orice tasta pentru a genera semnalul purtator SSRC(radical din cosinus-
ridicat) si semnalul modulat BB(banda de baza)')
pause
close (figure(1))
close (figure(2))
%modularea
m((1+rata*(i-1)):(rata*(2*p+i-1)))=m((1+rata*(i-1)):(rata*(2*p+i-1)))+semnal(i)*g;
end
sprintf('\nNumarul de perioade de simbol pentru reprezentarea semnalului modulat(maxim
%i):',(k+N+2*p-1))
n=input('');
%figure(2), subplot(2,1,1), stem([2*p:n-2*p+2*p], real(semnal)), grid
% hold on
figure(2), subplot(2,1,1),
plot([1:n*rata]/rata,real(m(1:(n*rata))),'r')
hold off
figure(3),subplot(2,1,1),plot([1:n*rata]/rata,real(m(1:(n*rata))),'b'),title('Realul semnalului
modulat'),grid
hold on
figure(3),subplot(2,1,2),plot([1:n*rata]/rata,imag(m(1:(n*rata))),'b'),title('Imaginarul
semnalului modulat'),grid
hold on
sprintf('Apasati orice tasta pentru a continua')
pause
%*************************************************************************
************************************
%modelarea canalului
%*************************************************************************
************************************
sprintf('\n+++++ Canalul: efectul asupra datelor +++++\n');
display('Canalul de transmisiune')
tipdata=input('\nAlegeti tipul de zgomot:\n1-fara zgomot\n2-din fisierul de intrare
"noise.txt";\n3-AWGN;\n');
switch tipdata
case 1,
mnoisy=m;
case 2,
fid=fopen('noise.txt','r+');
[yn]=fread(fid,'float');
mnoisy=m'+yn(1:2:(2*length(m)-1))+j*yn(2:2:2*length(m));
mnoisy=mnoisy';
st=fclose(fid);
case 3,
SNR=input('Introduceti SNR(dB)=')
q=0;
for i=1:length(m)
q=q+(abs(m(i)))^2;
end
sigma2=q*(10^(-SNR/10))/length(m);
mnoisy=m+sigma2*randn(size(m))+j*sigma2*randn(size(m));
otherwise,
sprintf('\nAlegere incorecta. Se va considera cazul fara zgomot');
mnoisy=m;
end
figure(3),subplot(2,1,1),plot([1:n*rata]/rata,real(mnoisy(1:(n*rata))),'r'),title('Faza modulata
afectata de zgomot')
%title('Realul semnalului modulat. Albastru semnalul fara zgomot, Rosu semnalul afectat de
zgomot')
hold off
figure(3),subplot(2,1,2),plot([1:n*rata]/rata,imag(mnoisy(1:(n*rata))),'r'),title('Cuadratura
modulata afectata de zgomot')
hold off
sprintf('Apasati orice tasta pentru a continua')
pause
%close (figure(3))
%*************************************************************************
****************
%demodulatorul
%*************************************************************************
****************
sprintf('\n+++++ Demodulatorul: recuperarea datelor +++++\n');
rc=conv([g(length(g)),g],g)*T/rata;
figure(5),stem([1:length(rc)]/rata,rc),title('Semnalul cosinus ridicat'),grid
%sincronizarea
tipdata=input('Alegei:\n1-sincronizare ideala;\n2-circuit de sincronizare:\n');
mdemod=[1,j,1];
switch tipdata
case 1,
rataest=rata; %rata estimata
Nest=N; %N estimat
for i=(k+1):(Nest+k)
mdemod=[mdemod,(mrec(rataest*(2*p+i-1))-mdemod(i-3)*rc((2*p+3)*rataest)-mdemod(i-
2)*rc((2*p+2)*rataest)-mdemod(i-1)*rc((2*p+1)*rataest))];
end
case 2,
%se aplica criteriul MP tinandu-se cont de faptul ca semnalul este
%codat Gray
i1=1;
while abs(real(mrec(i1))-1)>=0.1
i1=i1+1;
end
%i1 %aprox.primul maxim din comp.faza
i2=1;
while abs(imag(mrec(i2))-1)>=0.1
i2=i2+1;
end
%i2 %aprox.primul maxim din
comp.cuadratura
rataest=i2-i1;
int=round(rataest/5);
[m1,i11]=min(abs(real(mrec((i1-int):(i1+int)))-1));
%prima val aprox=1 din comp.faza
[m2,i21]=min(abs(imag(mrec((i2-int):(i2+int)))-1));
%primul maxim din comp.cuadratura
i1=i1-int+i11-1;
i2=i2-int+i21-1;
rataest=i2-i1;
int=floor(rataest/5);
[m3,i31]=min(abs(real(mrec((i2-int):(i2+int)))));
%primul min de dupa primul max din comp.faza
[m4,i41]=min(abs(imag(mrec((i1-int):(i1+int)))));
%ultimul min de dinainte de primul max din comp.cuadratura
i3=i2-int+i31-1;
i4=i1-int+i41-1;
rataest=floor((i2-i1+i3-i4)/2);
ratabit_est=floor(rataest/3)
rataest=ratabit_est*3;
mdemod=[mdemod,(mrec(count)-mdemod(length(mdemod)-2)*rc((2*p+3)*rataest)-
mdemod(length(mdemod)-1)*rc((2*p+2)*rataest)-
mdemod(length(mdemod))*rc((2*p+1)*rataest))];
count=count+rataest;
end
Nest=count/rataest-k-2*p
end
%detectia de prag
close(figure(5))
figure(5), scatterplot(mdemod)
xest=zeros((Nest+k),5); %decodarea:xest este secventa binara recuperata
unghiest=round((angle(mdemod))/(2*pi/32));
for i=1:(Nest+k)
if unghiest(i)==0,
xest(i,:)= [0,0,0,0,0];
elseif unghiest(i)==1,
xest(i,:)= [0,0,0,0,1];
elseif unghiest(i)==2,
xest(i,:)= [0,0,0,1,0];
elseif unghiest(i)==3,
xest(i,:)= [0,0,0,1,1];
elseif unghiest(i)==4,
xest(i,:)= [0,0,1,0,0];
elseif unghiest(i)==5,
xest(i,:)= [0,0,1,0,1];
elseif unghiest(i)==6,
xest(i,:)= [0,0,1,1,0];
elseif unghiest(i)==7,
xest(i,:)= [0,0,1,1,1];
elseif abs(unghiest(i))==8,
xest(i,:)= [0,1,0,0,0];
elseif unghiest(i)==9,
xest(i,:)= [0,1,0,0,1];
elseif unghiest(i)==10,
xest(i,:)= [0,1,0,1,0];
elseif unghiest(i)==11,
xest(i,:)= [0,1,0,1,1];
elseif unghiest(i)==12,
xest(i,:)= [0,1,1,0,0];
elseif unghiest(i)==13,
xest(i,:)= [0,1,1,0,1];
elseif unghiest(i)==14,
xest(i,:)= [0,1,1,1,0];
elseif unghiest(i)==15,
xest(i,:)= [0,1,1,1,1];
elseif unghiest(i)==-15,
xest(i,:)= [1,0,0,0,0];
elseif abs(unghiest(i))==-14,
xest(i,:)= [1,0,0,0,1];
elseif unghiest(i)==-13,
xest(i,:)= [1,0,0,1,0];
elseif unghiest(i)==-12,
xest(i,:)= [1,0,0,1,1];
elseif unghiest(i)==-11,
xest(i,:)= [1,0,1,0,0];
elseif unghiest(i)==-10,
xest(i,:)= [1,0,1,0,1];
elseif unghiest(i)==-9,
xest(i,:)= [1,0,1,1,0];
elseif unghiest(i)==-8,
xest(i,:)= [1,0,1,1,1];
elseif unghiest(i)==-7,
xest(i,:)= [1,1,0,0,0];
elseif unghiest(i)==-6,
xest(i,:)= [1,1,0,0,1];
elseif unghiest(i)==-5,
xest(i,:)= [1,1,0,1,0];
elseif unghiest(i)==-4,
xest(i,:)= [1,1,0,1,1];
elseif unghiest(i)==-3,
xest(i,:)= [1,1,1,0,0];
elseif unghiest(i)==-2,
xest(i,:)= [1,1,1,0,1];
elseif unghiest(i)==-1,
xest(i,:)= [1,1,1,1,0];
elseif unghiest(i)==0,
xest(i,:)= [1,1,1,1,1];
end
end
tempx=[];
for i=1:N,
temp(1:5)=x(i,1:5);
tempx(1+5*(i-1):5*i)=temp;
end;
tempxest=[];
for i=1:Nest,
temp(1:5)=xest(i,1:5);
tempxest(1+5*(i-1):5*i)=temp;
end;
%*************************************************************************
********************
%numaratorul de erori
%*************************************************************************
********************
Nmin=min(N,Nest);
[nerr,Perr]=biterr(x((k+1):(Nmin+k),:),xest((k+1):(Nmin+k),:))
1.Introducere Teoretica
+
n(t)
AFISARE
Blocurile principale
MOD - modulatorul
DEMOD – demodulatorul
EVALUARE REZULTAT + AFISARE – poate furniza şi numărul de erori
Comutatorul K1
K1 => 1 – simulare în absenţa zgomotului
K1 => 2 – simulare în prezenţa zgomotului (simulează canalul real cu
erori)
2.Modulatorul
2.1.Schema bloc a modulatorului
I t
m
Ts
aIn
n g(t)
Tb Ts
+ x(t)
S/P MOD
{an} DECOD
NUM
4 -
g(t)
aQn
m
Qt
^
aIn
FTJ
mI(t)+… ^
k
x(t)
y(t)=x(t)+n(t)
mQ(t)+…
FTJ
^
aQn
3.2.Explicarea schemei
x(t) – semnalul modulat
y(t) - semnalul modulat plus zgomotul (ZAGA)
Simulatorul permite realizarea demodulării în cazul unui canal ideal (fără
zgomot) sau în cazul unui canal real (cu zgomot)
Prin înmulţirea cu cos(ct), sin(ct) separ componentele în fază şi în
cuadratură. Apoi trec printr-un filtru adaptat impulsului şi eşantionez (de
fapt eşantionez un semnal gata eşantionat, ceea ce înseamnă decimare sau
interpolare). Pe o perioadă de simbol este necesar un singur simbol pentru
detecţia datelor. Acesta trebuie selectat la momentul optim (sau îl generez
prin interpolare). Urmează o estimare a lui aIn, aQn , o detecţie de prag (o
regiune de decizie). Faza semnalului recepţionat o evaluez cu un
^
^ aQn
^
comparator de fază. n arctg ^ aIn
aIn
Decizia
^ ^
Dacă n n n n n 2
2 2 după decizie.
4 4 4 4 4
Asociez valoarea de mai sus pentru tot domeniul haşurat.
Im{m(t)}
Re{m(t)}
Fig. 3.2.Decizia
nerr =
19
Perr =
0.1267
Psk este un proces de modulare prin intermediul careia semnalul de intrare,sub forma
binara,shifteaza faza la iesire la una determinata de un numar fix.Semnalul poate fii scris sub
forma:
O performanta a demodulatorului o constitue rata erorii de bit(bit error rate) care este definita ca
BER = NE/NT, fiind definita ca complementara functiei de eroare.Tinand cont si de zgomotul total
se poate estima eroarea.
Modulare:
Principala metoda de evaluare a unei transmisiuni digitale o constitue masurarii erorii de
bit ,ceea ce este de fapt o ratie a numarului de biti receptionati eronati in raport cu toti bitii
trimisi.
Cand se vorbeste despre eroarea debit trebuie luate in considerare doua tipuri de semnal:
-cel codat ,in care numai bitii curenti sunt importanti,putandu-se accepta oeroare de bit mare
atata timp cat informatia poate fii decodata.Rata de eroare de bit informational este mai mica
decat cea a semnalului codat adica:
BERbit inf ormatie BERbiticodati
-semnal necodat,neexistand codare astfel incat toti bitii sunt importanti.
Atata timp cat semnalele sunt codata trebuie facuta diferenta intre eroarea de bit a semnalului
receptionat codat sau eroarea bitilor de informatie.
.
In fugura de mai sus observam 2 simboluri,un 0 si un 1 cu forma transmisa si cu rezultatul
obtinut in urma adaugarii zgomotului aleator.
In figura de mai sus simbolurile ajung sub diferite forme de distorsiune la receptor.Prin
compararea amplitudinii receptorul ia decizia.
Schema de mai jos reprezinta metoda de baza a evaluarii erorii:
Se mai poate face si o comparatie referitoare la eroarea de bit in functie de diferitele tipuri de
modulatie PSK: