Beruflich Dokumente
Kultur Dokumente
OFDM
S0n s0n nk
S1n s1n
Sl sk yk
S/P IFFT P/S PC
SN-1, n sN-1, n
N
Y0n y0n
Y1n y1n
Yl
P/S FFT S/P PC
YN-1, n yN-1, n
1/N
On suppose que le système OFDM est composé de N sous porteuses. On suppose que les
- 1/7 -
Etude de l’ICI générée par une erreur de synchronisation en fréquence
Pour étudier l’ICI (InterChannel Interference) générée par une erreur en fréquence de δ f sur
l’une des sous-porteuses, on suppose que le symbole Smn correspondant à cette sous-porteuse
est nul. Sans perte de généralité, on peut supposer que S0n est nul. On suppose aussi que le
bruit nk est nul (variance σ n2 prise nulle). On génère un seul symbole OFDM, à savoir le
d’échantillonnage.
Travail Demandé (Partie 1) : Générer sur MATLAB les échantillons s du symbole OFDM
numéro 0 en prenant S00 = 0 et en tirant Sm 0 , m = 1, 2,K , N − 1 , aléatoirement dans l’alphabet Ω .
Introduire le décalage en fréquence δ f . Démoduler ensuite le signal reçu y pour générer le
vecteur de Y = (Y00 , Y10 ,K , YN −1,0 ) . Vérifier que Y00 est nul lorsque δ f = 0 et qu’il peut ne pas
l’erreur en fréquence normalisée ε = δ fTu , pour N = 64 (WIFI 802.11a&g), 128, 256, 512,
1024, 2048, 4096 et 8192. Pour vérifier les résultats de simulation, tracer également les
courbes correspondant à l’expression théorique de la variance de l’ICI
2 2
sin(πε ) sinc(ε )
var( ICI ) / Es = 1 − = 1− ,
N sin(πε / N ) sinc(ε / N )
valable pour N quelconque.
Pour comparaison, tracer également la courbe correspondant à l’expression théorique de la
variance de l’ICI
2
var( ICI ) / Es = 1 − sinc(ε ) ,
Programme MATLAB :
- 2/7 -
clear;
N = 16;
Epsilon = -1/2:0.01:1/2;
Es = 1;
M = 2500; % Nombre d'expériences
Statistiques = zeros(size(Epsilon));
for experience = 1:M,
if rem(experience, 100) == 0,
experience
end
S = sqrt(Es/2)*((2*(rand(1, N)>0.5)-1)+ j*(2*(rand(1, N)>0.5)-1)); %
Séquence de symboles du symbole OFDM numéro 0
S(1) = 0; % Rien n'est émis sur la sous-porteuse numéro 0
s = ifft(S)*sqrt(N); % Echantillons générés sans l'insertion d'un
préfixe cyclique
indice = 1;
for epsilon = Epsilon,
d = exp(j*2*pi*epsilon*(0:(N-1))/N); % Décalage en fréquence de
l'erreur de fréquence normalisée epsilon
y = s.*d; % Echnatillons reçus
Y = fft(y)/sqrt(N); % variables de décision contenant uniquement de
l'ICI sur la sous-porteuse numéro 0
Statistiques(indice) = Statistiques(indice) + abs(Y(1))^2;
indice = indice + 1;
end
end
VarICI = Statistiques/(M*Es);
VarICITheN = 1 - (sinc(Epsilon)./sinc(Epsilon/N)).^2; % Expression
théorique de la variance de l'ICI pour N donné
VarICITheInfini = 1 - (sinc(Epsilon)).^2; % Expression théorique de la
variance de l'ICI pour un système OFDM à temps continu
figure;
plot(Epsilon, VarICI, 'k--', Epsilon, VarICITheN, 'b:', Epsilon,
VarICITheInfini, 'r-.');
θ ∈ { 0,1,K ,N s }−1 , choisi à l’avance à la main. Pour ce faire, on supprime les N s − θ premiers
- 3/7 -
est la période d’échantillonnage et ε = δ f Tu est le décalage de fréquence normalisé. On
sous-porteuses, ce qui revient à choisir ε dans [ −1/ 2,1/ 2[ . On rajoute ensuite des
Λ (θ%
) = γ (θ%
) − ρφ (θ%
)
où
θ%
+ N g −1
γ (θ%
)= ∑
k =θ%
yk* yk + N ,
θ%
+ N g −1
φ (θ%
)=
1
2
∑
k =θ%
(y k
2
+ yk + N
2
),
yk , k ∈ {0,1,K , ( M + 1) N s + θ − 1} sont les échantillons reçus et ρ = SNR / (1 + SNR ) , pour
(1024, 64, 512, 0, 8), (512, 32, 256, 0, 8), (256, 16, 128, 0, 8) et N 0 = 0 (absence de bruit).
On moyenne ensuite, membre à membre, les blocs successifs calculés de longueur N s , afin
d’obtenir
1 M −1 M −1 M −1
Γ= ∑
M k =0
Λ ( kN s ), ∑
k =0
Λ (1 + kN s ), K , ∑
k =0
Λ( Ns − 1 + kNs ) .
( N , N g ,θ , ε , M ) .
Programme MATLAB :
clear;
N = 128; % Nombre de porteuses
- 4/7 -
M = 64; % Nombre de symboles OFDM - 2 (M+2) symboles OFDM générés pour
introduire le décalage et calculer les métriques
theta = N/2;
epsilon = 0;
lambda = 1/16; % Durée du préfixe cyclique / Durée utile d'un symbole OFDM
Ng = N*lambda; % Nombre d'échantillons dans le préfixe cyclique
Ns = N + Ng;
Es = 1;
N0 = 0; % Absence de bruit (SNR infini)
rho = 1; % rho = SNR/(1+SNR);
SeqTx = []; % Séquence modulée transmise composée de M+2 symboles OFDM,
incluant leurs préfixes cycliques
for experience = -1:M,
S = sqrt(Es/2)*((2*(rand(1, N)>0.5)-1)+ j*(2*(rand(1, N)>0.5)-1)); %
Séquence de symboles du symbole OFDM numéro 0
s = ifft(S)*sqrt(N); % Echantillons générés sans l'insertion d'un
préfixe cyclique
PC = s((N-Ng+1):N);
SeqTx = [SeqTx, PC, s];
end
d = exp(j*2*pi*epsilon*(0:(Ns*(M+2)-1))/N); % Décalage en fréquence de
l'erreur de fréquence normalisée epsilon
SeqRx = SeqTx.*d; % Sequence reçue
SeqRx = SeqRx(Ns-theta+1:numel(SeqRx)); % Décalage en temps de l'erreur en
temps théta (en nombre d'échantillons de durée Te = Tu/N)
Lambda = []; % Tableau des statistiques
for k=1:M*Ns,
gamma = SeqRx(k+N:(k+Ng+N-1))*SeqRx(k:(k+Ng-1))';
phi = (SeqRx(k:(k+Ng-1))*SeqRx(k:(k+Ng-1))' + SeqRx(k+N:(k+Ng+N-
1))*SeqRx(k+N:(k+Ng+N-1))')/2;
lambda = abs(gamma) - rho*phi;
Lambda = [Lambda lambda];
end
figure;
plot(0:(M*Ns-1), Lambda);
Gamma = zeros(1, Ns); % Statistiques moyennées
for l=1:M,
Gamma = Gamma + Lambda((l-1)*Ns+1:l*Ns);
end
Gamma = Gamma/M;
figure;
plot(0:(Ns-1), Gamma);
θˆ = arg max γ k
0≤ k < N s
R γ (θˆ)
εˆ = .
2π
- 5/7 -
On répète l’expérience plusieurs fois pour sortir des estimations des variances d’erreurs
2
d’estimation σ θ = E θˆ − θ et σ ε = E εˆ − ε . On trace ensuite des courbes représentant
2 2 2
(1024, 64, 3*64, 1/8, 1), (1024, 64, 3*64, 1/8, 2) et (1024, 64, 3*64, 1/8, 4). On prendra
SNRdB = 10 log10 ( SNR ) dans l’ensemble {0, 1, 2, …, 20}.
Programme MATLAB :
clear;
N = 1024; % Nombre de porteuses
M = 1; % Nombre de symboles OFDM - 2 (M+2) symboles OFDM générés pour
introduire le décalage et calculer les métriques
lambda = 1/16; % Durée du préfixe cyclique / Durée utile d'un symbole OFDM
Ng = N*lambda; % Nombre d'échantillons dans le préfixe cyclique
Ns = N + Ng;
Theta = 3*Ng;
Epsilon = 1/8;
Es = 1;
TabSNRdB = 0:2:20;
NbrExper = 500; % Nombres d'expériences
d = exp(j*2*pi*Epsilon*(0:(Ns*(M+2)-1))/N); % Décalage en fréquence de
l'erreur de fréquence normalisée epsilon
StatThetaErr = zeros(size(TabSNRdB));
StatEpsilonErr = zeros(size(TabSNRdB));
for NumExper = 1:NbrExper,
NumExper
SeqTx = [];
for NumSymbOFDM = -1:M, % Numéro du symbole OFDM
S = sqrt(Es/2)*((2*(rand(1, N)>0.5)-1)+ j*(2*(rand(1, N)>0.5)-1));
% Séquence de symboles du symbole OFDM numéro 0
s = ifft(S)*sqrt(N); % Echantillons générés sans l'insertion d'un
préfixe cyclique
PC = s((N-Ng+1):N);
SeqTx = [SeqTx, PC, s];
end
SeqRxSansBruit = SeqTx.*d; % Sequence reçue sans bruit
SeqRxSansBruit = SeqRxSansBruit(Ns-Theta+1:numel(SeqTx)); % Décalage en
temps de théta de la séquence non bruitée
BruitNorm = sqrt(1/2)*(randn(size(SeqRxSansBruit))
+j*randn(size(SeqRxSansBruit))); % Génération du bruit normalisé de
variance unité
IndiceSNRdB = 1;
for SNRdB = TabSNRdB,
SNR = 10^(SNRdB/10);
N0 = Es/SNR; % Variance du bruit
rho = SNR/(SNR+1);
SeqTx = []; % Séquence modulée transmise composée de M+2 symboles
OFDM, incluant leurs préfixes cycliques
Bruit = sqrt(N0)*BruitNorm; % Génération du bruit
SeqRx = SeqRxSansBruit + Bruit; % Séquence reçue avec bruit
Lambda = []; % Tableau des statistiques
for k=1:M*Ns,
- 6/7 -
gamma = SeqRx(k+N:(k+Ng+N-1))*SeqRx(k:(k+Ng-1))';
phi = (SeqRx(k:(k+Ng-1))*SeqRx(k:(k+Ng-1))' + SeqRx(k+N:
(k+Ng+N-1))*SeqRx(k+N:(k+Ng+N-1))')/2;
lambda = abs(gamma) - rho*phi;
Lambda = [Lambda lambda];
end
%0
%plot(0:length(Lambda)-1, Lambda);
%pause;
Gamma = zeros(1, Ns); % Statistiques moyennées
for l=1:M,
Gamma = Gamma + Lambda((l-1)*Ns+1:l*Ns);
end
Gamma = Gamma/M;
%plot(0:Ns-1, Gamma);
%pause;
[MaxGamma, IndiceMax] = max(Gamma);
ThetaEst = IndiceMax-1; % Estimation de theta
CumulGamma = 0;
for l=1:M,
CumulGamma = CumulGamma + SeqRx(IndiceMax+N+(l-1)*Ns:
(IndiceMax+Ng+N-1+(l-1)*Ns))*SeqRx(IndiceMax+(l-1)*Ns:(IndiceMax+Ng-1+(l-
1)*Ns))';
end
EpsilonEst = phase(CumulGamma)/(2*pi);
%ThetaEst - Theta
StatThetaErr(IndiceSNRdB) = StatThetaErr(IndiceSNRdB) + (ThetaEst -
Theta)^2;
%EpsilonEst-Epsilon
StatEpsilonErr(IndiceSNRdB) = StatEpsilonErr(IndiceSNRdB) +
(EpsilonEst-Epsilon)^2;
IndiceSNRdB = IndiceSNRdB + 1;
end
end
VarTheta = StatThetaErr/NbrExper;
EcartTypeTheta = sqrt(VarTheta);
VarEpsilon = StatEpsilonErr/NbrExper;
EcartTypeEpsilon = sqrt(VarEpsilon);
figure;
plot(TabSNRdB, EcartTypeTheta);
xlabel('SNR [dB]');
ylabel('Sqrt(Est(\sigma_\theta^2))');
figure;
plot(TabSNRdB, EcartTypeEpsilon);
xlabel('SNR [dB]');
ylabel('Sqrt(Est(\epsilon_\theta^2))');
- 7/7 -