Vous êtes sur la page 1sur 11

République Algérienne Démocratique et Populaire

Ministère de l’Enseignement Supérieur et


De la Recherche Scientifique

Université Aboubakr Belkaïd – Tlemcen –


Faculté de TECHNOLOGIE
Département de télécommunication

TP N°4 : Simulation d’une chaine de transmission OFDM en utilisant


la performance de M-QAM sous un canal AWGN

Préparé par:
• Matoug Bilal

• Mediani Mehdi Nourdine

Groupe  : M1 RT G22

1. Introduction  :
Les communications sans fil font l'objet de l'étude d'un grand nombre de chercheurs. Ceci, dans le but
d'obtenir une bonne qualité de communications sans fil avec des débits de transmission élevé. Dans ce
type de systèmes de communications il faut combattre adéquatement 1'effet des canaux à trajets multiples.
Ceci a mené au développement et à l'utilisation de la technique du multiplexage par division de
fréquences orthogonales (OFDM) qui semble être une solution très prometteuse .La transmission OFDM
consiste à répartir l’information sur un grand nombre de sous porteuses, créant ainsi des sous-canaux très
étroits. Elle convient à des types de propagation par trajets multiples. La répartition des symboles sur
plusieurs sous porteuses est la propriété plus importante de la transmission OFDM. C'est elle qui
engendre la robustesse contre le délai d'étalement et par conséquent diminue le taux de transmission par
sous-porteuse.
2. Modulation mono porteuse  :
Dans la modulation mono-porteuse, chaque symbole élémentaire d’information occupe toute la bande
spectrale disponible sur un intervalle de temps minimale.

Figure 1: format de modulation à porteuse unique.

Les techniques qu’on appelle multi porteuses consistent à transmettre des données numériques en les
modulant sur un grand nombre de porteuses en même temps. Ce sont des techniques de multiplexage en
fréquence qui existent depuis longtemps. Son principe est de diviser la totalité de la bande passante
allouée à la transmission en un nombre fini de sous-porteuses. L’information sera transmise sur chacune
de ces sous-porteuses. En effet, le train binaire contenant l’information à transmettre sera répartie sur N
sous-porteuses orthogonales. L’espacement entre les sous-porteuses est choisit tel que ces dernières soient
mathématiquement orthogonales les unes par rapport aux autres. Il existe plusieurs formes de techniques
de modulation multi-porteuse qui sont en usage d'être étudiée pour une utilisation future. Certains des
systèmes plus connus sont résumées ci-dessous :

• Generalized Frequency Division Multiplexing, GFDM.


• Filter Bank Multi Carrier, FBM.
• Orthogonal Frequency Division Multiplexing, OFDM.

Figure 2: Spectre de fréquences

3. Modulation multi porteuse  :


L’OFDM est utilisé dans les réseaux sans fil et les réseaux cellulaires, son principe consiste à répartir
sur un grand nombre de sous-porteuses le signal numérique que l'on veut transmettre Pour que les
fréquences des sous-porteuses soient les plus proches possibles et ainsi transmettre le maximum
d'information sur une portion de fréquences donnée, l'OFDM utilise des sous-porteuses orthogonales
entre elles. Les signaux des différentes sous-porteuses se chevauchent mais grâce à l'orthogonalité
n'interfèrent pas entre eux. Comme la montre là Figure 3.

Figure 3 : Représentation fréquentielle et temporelle d’un signal OFDM.

4. Travail demandé:

Exercice 1 :
La performance de la modulation/démodulation QAM sous un canal AWGN.
% Paramètres de simulation %
M = ………;% M = 2, 4, 8, 16, 32, 64.
SNR = ……..; % -20 dB , -10 dB , 0 dB, 10 dB, 20 dB
NoBits=5000;
%++++++++ Performance d'une modulation/démodulation QAM sous AWGN +++++++
%
Data = randi([0 M-1],NoBits,1);
Mod_QAM = modem.qammod(M);
Demod_QAM = modem.qamdemod(Mod_QAM);
Modulated_Signal= modulate(Mod_QAM,Data);
received_Signal= awgn(Modulated_Signal,SNR,'measured');
received_Data=demodulate(Demod_QAM,received_Signal);
%++++++++++++++++++ Taux d'erreur et nombre d'erreurs ++++++++++++++++++++
%
hError = comm.ErrorRate('ComputationDelay',1);
errorStats = step(hError, Data, received_Data);
fprintf('Error rate = %f\nNumber of errors = %d\n',errorStats(1),errorStats(2));
%++++++++++++++++++++++++++ Constellation +++++++++++++++++++++++++++%
scatterPlot=
commscope.ScatterPlot('SamplesPerSymbol',1,'Constellation',Mod_QAM.Constellation);
scatterPlot.PlotSettings.Constellation = 'on';
update(scatterPlot,received_Signal);

Répondre sur les questions suivantes :


1. Compléter les tableaux suivants
-Le programme  :

% Paramètres de simulation %
M =2;% M = 2, 4, 8, 16, 32, 64.
SNR = -20; % -20 dB , -10 dB , 0 dB, 10 dB, 20 dB
NoBits=5000;
%++++++++ Performance d'une modulation/démodulation QAM sous AWGN +++++++%
Data = randi([0 M-1],NoBits,1);
Mod_QAM = modem.qammod(M);
Demod_QAM = modem.qamdemod(Mod_QAM);
Modulated_Signal= modulate(Mod_QAM,Data);
received_Signal= awgn(Modulated_Signal,SNR,'measured');
received_Data=demodulate(Demod_QAM,received_Signal);
%++++++++++++++++++ Taux d'erreur et nombre d'erreurs ++++++++++++++++++++%
hError = comm.ErrorRate('ComputationDelay',1);
errorStats = step(hError, Data, received_Data);
fprintf('Error rate = %f\nNumber of errors =
%d\n',errorStats(1),errorStats(2));
%++++++++++++++++++++++++++ Constellation +++++++++++++++++++++++++++%
scatterPlot=
commscope.ScatterPlot('SamplesPerSymbol',1,'Constellation',Mod_QAM.Constellati
on);
scatterPlot.PlotSettings.Constellation = 'on';
update(scatterPlot, received_Signal)
quelque exemple pour cette manipulation :

SNR=20  :

Pour M=2 :  pour M=4 :

pour M=16 :    pour M=8 : 

pour M=64 :  pour M=32 : 

Voila les tableaus de cette manipulation  :


SNR Taux d’erreurs binaires- BER

2-QAM 4-QAM 8-QAM 16-QAM 32-QAM 64-QAM


-20 0.43 0.69 0.84 0.92 0.95 0.97

-10 0.33 0.61 0.79 0.89 0.94 0.97

0 0.07 0.29 0.58 0.74 0.86 0.92

10 0.00 0.00 0.08 0.21 0.45 0.68

20 0.00 0.00 0.00 0.00 0.00 0.05

SNR Nombre d’erreurs

2-QAM 4-QAM 8-QAM 16-QAM 32-QAM 64-QAM

-20 2178 3499 4248 4614 4797 4895

-10 1653 3078 3971 4487 4740 4858

0 373 1482 2910 3712 4308 4628

10 0 7 426 1068 2218 3375

20 0 0 0 0 15 253

2. Tracer les résultats de BER en fonction de SNR dans une seule figure. (Utiliser la fonction
semilogy):
Réponse:
-Le programme:
clc
Clear all
close all
%M=2
BER1=[0.43 0.33 0.07 0.00 0.00]
%M=4
BER2=[0.69 0.61 0.29 0.00 0.00]
%M=8
BER3=[0.84 0.79 0.58 0.08 0.00]
%M=16
BER4=[0.92 0.89 0.74 0.21 0.00]
%M=32
BER4=[0.95 0.94 0.86 0.45 0.00]
%M=64
BER5=[0.97 0.97 0.92 0.67 0.05]
SNR=[-20 -10 0 10 20]
semilogy(SNR,BER1,SNR,BER2,SNR,BER3,SNR,BER4,SNR,BER5)
Le traçage de BER en fonction de SNR :

3. Commenter les résultats obtenus:


La réponse :
Il est clair que dans se cas ,
1/Plus de modultion ~ plus de senssible au bruit
SNR  augmenté et le bruit diminue
2/ L’augmentation de M réduit la distance entre symbole sur la constellation et cela dégradé
naturellement les performances
3/plus le niveau de bruit est important, le taux d’erreur binaire est plus faible , plus la décision sera en
tachée d’erreur

Exercice 2 :
La performance de la modulation/démodulation OFDM en utilisant M-QAM sous un canal AWGN.
Cet exemple montre comment effectuer une simulation du taux d'erreur de symbole (SER) d'une liaison
de communication en utilisant une modulation/démodulation OFDM avec des symboles M-QAM est
simulée.
Construisez les objets d’un modulateur et démodulateur M-QAM.

M =…….;% M = 2, 4, 8, 16, 32, 64.


Mod_QAM = modem.qammod(M);
Demod_QAM = modem.qamdemod(Mod_QAM);

Construisez la paire modulateur OFDM en utilisant les paramètres par défaut.

OFDM_Mod = comm.OFDMModulator;
OFDM_Demod = comm.OFDMDemodulator(OFDM_Mod);

Utilisez la méthode info pour déterminer les dimensions d'entrée requises pour le modulateur OFDM.

modDim = info(OFDM_Mod);
1. Créez un objet de canal AWGN avec un rapport signal sur bruit.

SNR = …….; % -20 dB , -10 dB , 0 dB, 10 dB, 20 dB


AWGN = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)','SNR', SNR);

Définissez le générateur de nombres aléatoires sur sa valeur par défaut pour vous assurer que les résultats sont répétables.
Déterminez le nombre de symboles OFDM par trames en utilisant la première valeur du tableau

modDim.DataInputSize. rng('default') % Initialiser le générateur de nombres aléatoires


nFrames = 100; % Nombre de trames OFDM à transmettre
nSymbolsPerFrame =modDim.DataInputSize(1);
Créez un objet de taux d'erreur pour le suivi des statistiques d'erreur et activez la réinitialisation de l'objet lors de chaque
itération de boucle.

Error = comm.ErrorRate('ResetInputPort',true);
SER = zeros(nFrames, 1);

Exécutez la simulation sur 100 trames OFDM (5300 symboles). Pendant l’exécution de la boucle, générez un vecteur de
données aléatoires d’une longueur égale au nombre requis de symboles

par trames, appliquez la modulation M-QAM puis appliquez la modulation OFDM. Passez les données modulées OFDM
sous un canal AWGN, puis appliquez la démodulation OFDM. Démodulez les données M-QAM résultantes et comparez-l
avec les données d'origine pour déterminer le taux d'erreur du symbole.

for i = 1:nFrames
% Générer des données aléatoires pour chaque trame OFDM
data = randi([0 M-1], nSymbolsPerFrame, 1);
% Appliquer la modulation QAM pour moduler les données(data)
mod_Data = modulate(Mod_QAM, data);
% Moduler les symboles QAM en utilisant OFDM
data_OFDM = step(OFDM_Mod, mod_Data);
% Passer le signal OFDM sous un canal AWGN
received_Signal = step(AWGN, data_OFDM);
% Démoduler les données OFDM
received_OFDM_Data = step(OFDM_Demod, received_Signal);
% Appliquer la démodulation QAM pour démoduler les données(data)
received_Data = demodulate(Demod_QAM, received_OFDM_Data);
% Calculer le taux d'erreur des symboles
errors = step(Error, data, received_Data,1);
SER(i) = errors(1);
NoE(i) = errors(2);
end

Le programme sera comme ci de suite  :

clc
clear all
close all
M =2.;% M = 2, 4, 8, 16, 32, 64.
Mod_QAM = modem.qammod(M);
Demod_QAM = modem.qamdemod(Mod_QAM);
OFDM_Mod = comm.OFDMModulator;
OFDM_Demod = comm.OFDMDemodulator(OFDM_Mod);
modDim = info(OFDM_Mod);
SNR =10.; % -20 dB , -10 dB , 0 dB, 10 dB, 20 dB
AWGN = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)','SNR', SNR);

rng('default') % Initialiser le générateur de nombres aléatoires


nFrames = 100; % Nombre de trames OFDM à transmettre
nSymbolsPerFrame = modDim.DataInputSize(1);

Error = comm.ErrorRate('ResetInputPort',true);
SER = zeros(nFrames, 1);

for i = 1:nFrames
% Générer des données aléatoires pour chaque trame OFDM
data = randi ([0 M-1], nSymbolsPerFrame, 1);
% Appliquer la modulation QAM pour moduler les données (data)
mod_Data = modulate(Mod_QAM, data);
% Moduler les symboles QAM en utilisant OFDM
data_OFDM = step(OFDM_Mod, mod_Data);
% Passer le signal OFDM sous un canal AWGN
received_Signal = step(AWGN, data_OFDM);
% Démoduler les données OFDM
received_OFDM_Data = step(OFDM_Demod, received_Signal);
% Appliquer la démodulation QAM pour démoduler les données(data)
received_Data = demodulate(Demod_QAM, received_OFDM_Data);
% Calculer le taux d'erreur des symboles
errors = step(Error, data, received_Data,1);
SER(i) = errors(1);
NoE(i) = errors(2);
end

Répondre sur les questions suivantes :

• Afficher les données de taux d'erreur des symboles pour les vingt premières trames avec un SNR égale à 10 dB et
M égale à 2.
Réponse :
Le programme sera comme ci de suite  :

clc
clear all
close all
%M=2
SER1=[0.54 0.45 0.50 0.43 0.52 0.41 0.45 0.56 0.54 0.32]
SER2=[0.54 0.43 0.49 0.41 0.52 0.39 0.43 0.56 0.49 0.30]
SER3=[0.45 0.33 0.41 0.32 0.50 0.37 0.41 0.49 0.35 0.28]
SER4=[0.28 0.22 0.26 0.39 0.18 0.32 0.32 0.26 0.16 0.30]
SER5=[0.07 0.01 0.05 0.01 0.03 0.03 0.03 0.05 0.01 0.01]
ntrame=[1:1:10]
semilogy(ntrame,SER1,ntrame,SER2,ntrame,SER3,ntrame,SER4,ntrame,SER5)

• Tracer le taux d'erreur des symboles en fonction de nombre de trames, pour des SNR suivants : -20 dB ; -10 dB
0 dB, 10 dB, 20 dB, et de M qu’égale à 2. (Utiliser la fonction semilogy) :
Réponse  :
Le traçage :

• Tracer le taux d'erreur des symboles en fonction de nombre de trames, pour des M suivants : 2, 4, 8, 16, 32, 64, e
un SNR qu’égale à 20 dB. (Utiliser la fonction semilogy)
Réponse  :

Le programme sera comme ci de suite  :

clc
clear all
close all
%SNR=20
M1=[0.075 0.018 0.056 0.018 0.037 0.037 0.037 0.056 0.018 0.018 ]
M2=[0.075 0.056 0.056 0.075 0.094 0.056 0.056 0.113 0.094 0.037]
M3=[0.132 0.075 0.094 0.037 0.056 0.075 0.056 0.169 0.132 0.132]
M4=[0.132 0.094 0.113 0.075 0.075 0.094 0.075 0.188 0.132 0.169]
M5=[0.132 0.113 0.113 0.094 0.056 0.094 0.075 0.188 0.113 0.169]
M6=[0.132 0.113 0.113 0.094 0.075 0.113 0.094 0.118 0.169 0.207]
ntrame=[1:1:10]
semilogy(ntrame,M1,ntrame,M2,ntrame,M3,ntrame,M4,ntrame,M5,ntrame,M6)

Le traçage :

• Commenter les résultats obtenus:


Réponse  :
Lorsque le nombre de porteuse n augmente, erreur augmente dans le cas la modulation M-QAM quand le SNR augment
le taux d’erreurBER.

* Conclusion  *
La simulation Simulink que nous avons réalisée a permis de mettre en relie
les intérêts d’une modulation et démodulation OFDM d’un point de vue taux d’erreur
binaire , ainsi que les paramètres de la chaine de transmission primordiaux (nombre de
porteuses , choix de constellation ) à ajuster en fonction du canal et des données à
transmettre . Dans cette partie de la simulation, nous avons réalisé une chaîne basic de la
technique OFDM, en guise de perspectives nous comptons y introduire d’autres types de
bruits.

Vous aimerez peut-être aussi