Documente Academic
Documente Profesional
Documente Cultură
LSTT10
LSTT10
1. Obiectivul lucrării
2. Introducere teoretică
sin 2 f t sin 2 f t dt 0
0
k k j j 2
X N k X k* , k 1, 2, , K 1
X 0' Re( X 0 ) 3
X Im( X 0 ).
'
k
3
1
unde este un simplu factor de scală. Şirul xn , 0 n N 1 cores-
N
punde eşantioanelor semnalului OFDM multipurtător x(t ) ce constă în
K N / 2 subpurtători ortogonali. Fie atunci T durata semnalului şi
nT
xn x , n 0,1, , N 1. Putem exprima semnalul astfel:
N
N 1 kt
1 j 2 n
x(t )
N
X k' e
k 0
T
, 0 t T. 5
' '
Semnalul de informaţie X 0 , care este reprezentat de X 0 şi X k aşa cum se
arată în (3), corespunde componentei de curent continuu ( f 0 0 ) din (5).
Pentru ca semnalul OFDM multipurtător dat în (5) să nu aibă componentă
de curent continuu, este convenabil să facem X 0 0 . Făcând apoi uz de
relaţiile de simetrie date în (3), semnalul OFDM din (5) se poate exprima ca
mai jos
2 K 1
2 kt
x(t )
N
Xk 1
k cos
T
k , 0 t T
6
j
unde simbolurile de informaţie X k X k e k , k 1, 2, , K 1.
Transformata Fourier discretă (TFD) este prin definiţie:
N 1 n
1 j 2 k
Xk
N
xne
n 0
N
, k 0,1, , N 1. 7
Simboluri Semnal
Modulator
de intrare Registru Convertor de emisie
multipurtător
serie-paralel D/A
{Xk} (TFDI) x(t)
Emiţător
Simboluri Semnal
Demodulator de recepţie
de ieşire Convertor OFDM Convertor
Detector
paralel-serie (TFD) A/D
r(t)
Receptor
Figura 1 Schema bloc a emiţătorului şi a receptorului OFDM.
Rezolvare:
În acest exemplu, K = 10 şi N = 20. Programul MATLAB este dat mai jos.
% Program MATLAB pentru Problema 1.
echo on
K=10;N=2*K;T=100;
a=rand(1,36);
a=sign(a–0.5);
b=reshape(a,9,4);
% Generează cele 16 puncte.
XXX=2*b(:,1)+b(:,2)+j*(2*b(:,3)+b(:,4));
XX=XXX' ;
X=[0 XX 0 conj(XX(9:–1:1))];
xt=zeros(1,101);
for t=0:100
for k=0:N–1
xt(1,t+1)=xt(1,t+1)+1/sqrt(N)*X(k+1)*exp(j*2*pi*k*t/T);
echo off
end
end
echo on
xn=zeros(1,N);
for n=0:N–1
for k=0:N–1
xn(n+1)=xn(n+1)+1/sqrt(N)*X(k+1)*exp(j*2*pi*n*k/N);
echo off
end
end
echo on
7
xn=zeros(1,N);
for n=0:N–1
for k=0:N–1
xn(n+1)=xn(n+1)+1/sqrt(N)*X(k+1)*exp(j*2*pi*n*k/N);
echo off
end
end
echo on
pause % Apăsaţi pe orice tastă pentru a vedea graficul lui x(t ) .
plot([0:100],abs(xt))
% Verifică diferenţa dintre xn şi esantioanele lui x(t ) .
for n=0:N–1
d(n+1)=xt(T/N*n+1)–xn(1+n);
echo off
end
echo on
e=norm(d);
Y=zeros(1,10);
for k=1:9
for n=0:N–1
Y(1,k+1)=Y(1,k+1)+1/sqrt(N)*xn(n+1)*exp(–j*2*pi*k*n/N);
echo off
end
end
echo on
dd=Y(1:10)–X(1:10);
ee=norm(dd);
8
Problema 2
Efectul zgomotului aditiv asupra semnalului OFDM
Considerăm sistemul OFDM descris în Problema 1. Presupunem că eşan-
tioanele TFDI ale semnalului transmis date de (4) sunt perturbate de zgomot
Gaussian aditiv având medie zero şi varianţă 2 . Fie g n componenta de
zgomot. Eşantioanele semnalului de recepţie se reprezintă astfel:
rn xn g n , n 0,1, N 1.
Pentru fiecare valoare a lui 2 , să se detecteze şirul Xˆ k şi să se obţină
astfel simbolurile de ieşire din detector X . Să se comenteze acurateţea
k
simbolurilor detectate.
Rezolvare:
Programul MATLAB este dat mai jos. El calculează numărul de simboluri
recepţionate eronat pentru 2 = 1. Făcând o schimbare a variabilei
„varianţă“, putem obţine numărul de erori pentru diferite valori ale varianţei
zgomotului.
% Program MATLAB pentru Problema 2
echo on
K=10;N=2*K;T=100; variance=1;
noise=sqrt(variance)*randn(1,N);
a=rand(1,36);
b=reshape(a,9,4);
% Generează cele 16 puncte.
XXX=2*b(:,1)+b(:,2)+j*(2*b(:,3)+b(:,4));
XX=XXX' ;
X=[0 XX 0 conj(XX(9:–1:1))];
x=zeros(1,N);
9
for n=0:N–1
for k=0:N–1
x(n+1)= x(n+1)+1/sqrt(N)*X(k+1)*exp(j*2*pi*n*k/N);
echo off
end
end
echo on
r=x+noise;
Y=zeros(1,10);
for k=1:9
for n=0:N–1
Y(1,k+1)= Y(1,k+1)+1/sqrt(N)*exp(–j*2*pi*k*n/N);
echo off
end
end
echo on
% Detectează cel mai apropiat vecin din constelaţia 16QAM.
for k=1:9
if real(Y(1,k+1))>0
if real(Y(1,k+1))>2
Z(1,k+1)=3;
else
Z(1,k+1)=1;
end
else
if real(Y(1,k+1))<–2
Z(1,k+1)=–3;
else
10
Z(1,k+1)=–1;
end
end
if imag(Y(1,k+1))>0
if imag(Y(1,k+1))>2
Z(1,k+1)=Z(1,k+1)+3*j;
else
Z(1,k+1)=Z(1,k+1)+j;
end
else
if imag(Y(1,k+1))<–2
Z(1,k+1)=Z(1,k+1)–3*j;
else
Z(1,k+1)=Z(1,k+1)–j;
end
end
echo off
end
echo on
error=max(size(find(Z(1,2:10)–X(1,2:10))));