Vous êtes sur la page 1sur 17

LABO OFDM

ÉLÈVE: Jamila-Maria DE SOUZA ABID


1-Définition des paramètres de l’émetteur OFDM
M=4;
Nsc=128;
type_constellation= "QAM";
n=8;
nb_symbol=2^10;
SNR=100;
Tu=10^(-6);
Tech=Tu/Nsc;
gi_length=round((1/n)*(Tu/Tech));
Tg=gi_length*Tech;
Ts=Tu+Tg;
Du=1/Tu;

2-Préparation données à transmettre

Pour cette question, j’ai utilisé deux fonctions supplémentaires : une pour gérer la constellation et
une autre pour changer les données de la forme [0,1,2…] pour la forme de la constellation.

2.1 Préparation des données à transmettre

nb_symbol_new=1024;// Nsc*8
Data1=int(rand(1, nb_symbol_new, 'uniform')*M);
Data=mapping(Data1,nb_symbol_new,M,type_constellation);

2.2 Fonction constellation pour la question 2

function Constellation=conste(M, type_constellation)


if (type_constellation=="QAM")
nb_par_qua = sqrt(M);
k=0
for i=0:nb_par_qua-1
for j=0:nb_par_qua-1
k = k+1
Constellation (1,k) = (-1 -(nb_par_qua/2-1)*2 + i*2) + (%i* (-1 -
(nb_par_qua/2-1)*2 + j*2));
end

end
elseif (type_constellation=="PSK")
for i=0:M-1
Constellation(1,i+1) = 3*(cos(%pi/M + i*2*%pi/M) + %i*sin(%pi/M + i*2*%pi/M))
end

2
end
endfunction

2.3 Fonction map

function map=mapping(data, size_data, M, type_constellation)


for i=1:M
symbol_mapping(1,i) = i-1
end
constellation = conste(M, type_constellation)

map = zeros(1,size_data)
for j = 1:size_data
for k = 1:M
if data(1,j) == symbol_mapping(1,k)
map(1,j)= constellation(1,k)
end
end
end
endfunction

3-Génération du signal OFDM

3.1- Génération du OFDM


symb_ofdm = matrix(Data, Nsc, nb_symb_new/Nsc);
sig_ofdm = fft(symb_ofdm, 1);
sig_ofdm_garde = [sig_ofdm([Nsc-15:Nsc],:) ; sig_ofdm];
vsig_ofdm = matrix(sig_ofdm_garde, 1, length(sig_ofdm_garde));

3.2 Afficher la partie réel et la partie imaginaire

reel = real(vsig_ofdm)
imaginaire = imag(vsig_ofdm)
temps = 0:Tech:length(reel)*Tech-Tech

figure(1);
subplot(2,1,1),plot(temps, reel);
title("Partie reel du signal OFDM")
xlabel("temps [s]")

3
ylabel("partie reel")
subplot(2,1,2), plot(temps, imaginaire);
title("Partie imaginaire du signal OFDM")
xlabel("temps [s]")
ylabel("partie imaginaire")

figure(2);
subplot(2,1,1),histplot(50, reel);
title("histogramme de la partie reel du signal OFDM")
subplot(2,1,2), histplot(50, imaginaire);
title("histogramme de la partie imaginaire du signal OFDM")

4
3.3- Afficher la densité spectrale de puissance du signal

xdft = fft(vsig_ofdm, -1);


figure(3);
N = length(vsig_ofdm);
xdft = xdft(1:N/2+1);
5
psdx = (1/((1/Tech)/N))*abs(xdft).^2;
frequence = 0:(1/Tech)/N:(1/Tech)/2;
psdx_db = 10*log10(psdx);
plot(frequence, psdx_db) ;
title("Densité spectrale de puissance en dB");

4- Propagation sur le canal additif gaussien

p_signal = mean(abs(vsig_ofdm).^2);
p_bruit = p_signal*10^(-SNR/10);
bruit = sqrt(p_bruit/2)*(rand(1, length(vsig_ofdm), 'normal') +
%i*rand(1,length(vsig_ofdm), 'normal'));
SNR_test = 10*log10(p_signal) - 10*log10(mean(abs(bruit).^2));
sig_recu = vsig_ofdm + bruit;

6
5-Réception du OFDM

sig_recue_reshape = matrix(sig_recue, Nsc+gi_length, nb_symb_new/Nsc);


sig_recue_reshape = sig_recue_reshape([gi_length+1:Nsc+gi_length],:);
sig_recue_fft = fft(sig_recu_reshape, -1);
vsig_recue = matrix(sig_recue_fft, 1, length(sig_recue_fft));
constellation = conste(M, type_constellation) ;
sig_demo = demo(constellation, vsig_recue);

verreur = sig_demo-Data;
bit_error = length(verreur);
for i = 1:length(verreur);
if verreur(i)==0+%i*0 then
bit_error = bit_error-1;
end
end
taux_error = bit_error/length(verreur) ;
disp("Pour une modulation: ", type_constellation, M) ;
disp("SNR: ", SNR) ;
disp("Taux d’erreur:") ;
disp(taux_error) ;

// Symboles reçus

fig = figure();
plot(real(v_sig_recu), imag(v_sig_recu), 'r*')
title("Symboles reçus")
xlabel("partie reel")
ylabel("Partie imaginaire")

7
// Fonction pour la question 5

function demodulation=demo(constellation, data)


distance = zeros(length(data), length(constellation))
for i=1:length(data)
for j=1:length(constellation)
distance(i,j) = abs(data(i)-constellation(j))
end
end
clear i,j;

for i=1:length(data)
for j=1:length(constellation)
if distance(i,j) == min(distance(i,:))
demodulation(1,i)=constellation(1,j)
end
end
end
endfunction

8
Partie 2

QAM-16 et SNR=-5dB
taux_error = 0.4697266

9
QAM-16 et SNR=0
taux_error = 0.2763672

QAM-16 et SNR=5dB
taux_error = 0.0654297

10
QAM-16 et SNR=10dB
taux_error = 0.0039062

11
QAM-16 et SNR=15dB
taux_error=0

12
PSK

PSK-16 et SNR=-5dB
taux_error = 0.5107422

13
PSK-16 et SNR=0 dB
taux_error = 0.3037109

14
PSK-16 et SNR=5dB
taux_error = 0.0644531

15
PSK-16 et SNR=10dB
taux_error = 0.0029297

16
PSK-16 et SNR=15 dB
taux_error = 0.

Nous pouvons conclure que QAM a taux d’erreur qui est plus petit que PSK.

17

Vous aimerez peut-être aussi