Beruflich Dokumente
Kultur Dokumente
Travaux Pratiques
COMMUNICATIONS NUMERIQUES
AVANT-PROPOS
Les TPs sont sélectionnées en fonction de matériel du cours. L’objectif des TPs est de familiariser les
étudiants aux méthodes de mesure et d’analyse des techniques numériques de communications. Les TPs
couvriront :
Compte-rendu
Un rapport devrait être rendu à l’enseignante de TP, par voie électronique, avant la prochaine séance de
TP (Email : moufida.hajjaj@gmail.com). Le format retenu est le format PDF. Le rapport devrait contenir
deux parties :
- La première partie : un compte-rendu de TP déjà traité en classe. La notation portera
essentiellement sur les commentaires et les interprétations des différents résultats.
- La deuxième partie : des réponses aux questions de la partie « Préparation théorique » du
prochain TP. La notation portera essentiellement sur la clarté des réponses.
TP 1: INTRODUCTION
I. Rappels
1. Signaux continus et discrets
Il existe deux types de signaux temporels :
En pratique
- Les signaux continus x(t) ne sont pas stockables et étudiables sur ordinateur (ils contiennent une
infinité de valeurs !). Ils peuvent être vus comme des fonctions mathématiques. On les étudie
principalement pour avoir des modèles théoriques des signaux que l’on veut étudier. Ils
modélisent des phénomènes physiques tels que les ondes acoustiques, les signaux électriques,
etc...
- Les signaux discrets xn au contraire peuvent être stockés et étudiés sur ordinateur. Ils ont en
général un nombre fini de valeurs non nulles. Un signal discret est ainsi représenté comme un
vecteur contenant toutes les valeurs xn. On y associe un vecteur temps contenant toutes les
valeurs tn des instants où l’on connaît le signal.
Remarque : Tous les signaux que nous allons étudier avec MATLAB sont donc des signaux discrets.
Qu’est-ce que l’échantillonnage ?
- Principe : Convertir un signal continu en un signal discret en ne stockant que ce qui se passe à
certains instants tn
- On ne va considérer ici que l’échantillonnage uniforme, c’est à dire qu’on prend une valeur
toutes les Ts secondes, où Ts est fixe
2. Signaux particuliers
où A : amplitude,
f0 : fréquence fondamentale (en Hz), Très utile pour modéliser de façon théorique le
ϕ: phase à l’origine processus d’échantillonnage. Signal
et x(t) est périodique de période périodique de période fondamentale T.
fondamentale
T0 =1/f0 Sinus cardinal
Dirac
A.2 Echantillonnez le signal de A.1 en prenant une valeur toutes le 0.1 s. La fréquence d'échantillonnage
Fe =10 Hz et le nombre de points de la séquence N = 20.
>> t=0:0.02:2
>> Fe = 10 ;
>> N=20 ;
>> exemple_echantillonnage(t,Fe,N);
A.3 Rangez les valeurs dans un vecteur et représentez le signal discret obtenu :
>> Fe = 10 ;
>> N=20 ;
>> exemple_signal_discret(Fe,N) ;
B. Signaux particuliers
B.1 En utilisant la fonction sinusoide, générez un signal sinusoïdal d’amplitude A = 1.5, de fréquence
fondamentale f0 = 1 Hz et de phase ϕ = 0 :
>> t=0 :0.02 :2;
>> A = 1.5 ;
>> F0 = 1 ;
>> phase = 0 ;
>> sinusoide (t,A,F0,phase) ;
B.2 Générez les signaux Dirac, peigne de Dirac, sinus cardinal et porte par
>> exemple_dirac;
>> exemple_peigne_dirac;
>> exemple_sinus_cardinal;
>> exemple_porte;
Représentez graphiquement (sur une figure avec quatre cadrants) ces quatre signaux numériques,
avec une échelle des temps correcte, et en indiquant sur chaque courbe la fréquence d’échantillonnage
et le nombre de points.
On échantillonne ces signaux à la fréquence de Fe = 20 kHz, soit un pas Te = 1/Fe = 0.5 ms.
Calculez et tracez ensuite les transformées de Fourier inverses des ŝi (fonction ifft), et les comparez
avec les signaux de départ.
Augmentez progressivement la puissance du bruit du canal sigma ∈ {0.05, 0.1, 0.5, 1} et observez les
changements à la sortie du canal.
À quel niveau de puissance de bruit, la forme d'onde de sortie du canal devient-elle indiscernable du
bruit?
Repérer l’amplitude maximale M de la transformée de Fourier. Définir un seuil S (10% par exemple).
Pour sigma = 0.5, tracez le signal s2 et sa transformée de Fourier ŝ2 (fonction fft).
Créer un filtre F selon les caractéristiques suivantes:
− F a la même taille que le signal initial.
− Lorsque l’amplitude de la FFT est plus petite que S × M le filtre vaut 0, et vaut 1 sinon.
Appliquer le filtre F à la FFT du signal (multiplication terme à terme).
Calculer la transformée de Fourier inverse au signal filtré.
Commenter le résultat obtenu.
TP 2: CODAGE EN LIGNE
I. Objectifs:
Dans ce TP, vous observez la manière dont les informations binaires sont codées en série pour la
transmission aux fréquences de bande de base. En particulier, vous allez étudier:
• les méthodes de codage en ligne qui sont actuellement utilisées dans les applications de communication
de données;
• fonctions de densité spectrale de puissance (Power spectral density, PSD) associées aux différents
codes en ligne;
• causes de distorsion de signal dans un canal de communication de données;
• les effets de l'interférence inter-symboles (ISI) et le bruit du canal en observant le diagramme de l’œil.
II. Rappels
1. Codes en ligne
La manière la plus simple de transmettre un signal est d'utiliser deux niveaux de tension pour représenter
les deux états binaires 0 et 1. La présence d'une tension peut, par exemple, représenter un 1 tandis que
l'absence d'une tension représente un 0. C'est le cas du codage NRZ-L (Non Return to Zero Level)
unipolaire. Cette technique, ainsi que d'autres, est illustrée à la figure 1.
2
Une impulsion de la moitié de la
A2Tb sin fTb / 2 1
n
RZ unipolaire PUni. RZ ( f )
16 fTb / 2 Tb
1 ( f T ) durée de NRZ nécessite deux fois la
n b
bande passante!
Les longues chaînes de 1 ne sont
plus un problème. Cependant, les
chaînes de 0 posent encore
problème.
Occupation spectrale double par
rapport au code NRZ.
2
sin fTb
NRZ polaire PPolar NRZ ( f ) A Tb 2
fTb
Pas de composant DC, donc plus
économe en énergie.
2
A2Tb sin fTb
RZ polaire PBipolar RZ ( f ) sin fTb
2
4 fTb
Manchester 2
sin fTb / 2
PManch. NRZ ( f ) A2Tb sin fTb / 2
2
2. Canal de transmission
Une chaîne de transmission est composée d’un émetteur, d’un canal et d’un récepteur. Le canal
de transmission est caractérisé par :
sa bande passante : c’est la plage de fréquence dans laquelle l’atténuation du signal
est inférieure à une certaine valeur ;
sa distorsion : c’est la déformation que va subir un signal analogique. Elle est liée
à la distance entre l’émetteur et le récepteur et peut poser des problèmes lors de la
détection de signaux numériques. Par exemple un signal carré émis peut être reçu
comme le montre le schéma suivant :
3. Diagramme de l’œil :
Le diagramme de l’œil est une représentation graphique qui permet d’estimer la qualité d’un canal de
transmission donc du signal reçu. Ce diagramme est obtenu en superposant toutes les formes possibles
du signal sur un intervalle de durée T. Il représente toutes les configurations possibles d’une séquence
aléatoire, le principe général étant que plus l’aire centrale de l’œil est grande, plus la qualité de la
transmission est bonne.
Seuil -
Ouverture horizontale
Diagramme de l’oeil
ce qui sera détecté comme inférieur à [−VS] sera considéré comme -1. Tout ce qui sera détecté à un
niveau compris entre [+VS] et [−VS] sera considéré comme 0.
Puisque vous comparez les formes d'onde au même Rb, vous pouvez utiliser la fonction wave_gen avec
seulement deux arguments.
Q2.1
Pour l'ensemble de codes en ligne ci-dessus, déterminez qui générera une forme d'onde sans composant
DC, quelle que soit la séquence binaire représentée. Pourquoi l'absence d'un composant DC a une
signification pratique sur la transmission des signaux?
A.3 Fonctions de densité spectrale de puissance (PSD) des codes en ligne: génèrez une séquence binaire
de 1000 échantillons:
>> b = binary(1000);
Affichez la fonction PSD de chaque code de ligne utilisé dans la partie A.1:
>> psd(wave_gen(b, 'line code name' ));
Soit:
fp1: premier pic spectral; fn1: premier nul spectral
fp2: deuxième pic spectral; fn2: second nul spectral tel que tout f (.)> 0. Enregistrez vos observations dans
le tableau 2.1.
Tableau 2.1
Rb = fp1 fn1 fp2 fn2 BT
NRZ unipolaire
NRZ polaire
RZ unipolaire
NRZ bipolaire
Manchester
Bruit
B.1 Créez une séquence binaire b de 10 échantillons et générez une forme d'onde représentant b au
format de signalisation NRZ polaire. Utilisez Rb = 1 kbps.
>> b = binary(10);
>> x = wave_gen(b, 'polar_nrz' , 1000);
De votre observation dans la partie A, déterminer la bande passante de transmission BT de x:
BT = Hz
B.2 Considérons un canal de transmission de données en bande de base avec un gain unitaire et un bruit
blanc gaussien additif (AWGN) où la puissance de bruit est 10-2 W et la bande passante du canal est de
4,9 kHz.
Transmettre la forme d'onde x sur ce canal. Affichez les signaux d'entrée et de sortie du canal:
>> y = channel(x, 1, 0.01, 4900);
>> subplot(211), waveplot(x);
>> subplot(212), waveplot(y);
Si le format de signalisation est NRZ polaire à Rb = 1 kbps, estimez la séquence transmise à partir de
l'affichage de la forme d'onde de sortie du canal.
b̂ =
Comparez votre estimation avec la séquence originale b.
B.3 Effet du bruit de canal sur la forme d'onde transmise: augmentez progressivement la puissance du
bruit du canal tout en conservant la bande passante du canal à 4,9 kHz et observez les changements à la
sortie du canal.
>> y = channel(x, 1, sigma, 4900);
>> waveplot(y);
où sigma ∈ {0.1, 0.5, 1, 2, 5}. À quel niveau de puissance de bruit, la forme d'onde de sortie du canal
devient-elle indiscernable du bruit?
B.4 Vous pouvez également observer les effets de l'augmentation de la puissance du bruit du canal en
regardant le PSD de la forme d'onde de sortie du canal.
>> b = binary(1000);
>> x = wave_gen(b, 'polar_nrz', 1000);
>> clf; subplot(121); psd(x);
>> subplot(122); psd(channel(x, 1, 0.01, 4900));
Q2.3
Étant donné que le bruit du canal est additif et non corrélé avec l'entrée du canal, déterminez une
expression qui décrira le PSD de la sortie du canal en fonction des fonctions PSD d'entrée et de bruit.
B.5 Effets de la bande passante du canal sur la forme d'onde transmise: La distorsion observée dans
l'affichage du temps de la sortie du canal est due à la bande passante finie du canal et due au bruit. Pour
étudier la distorsion due uniquement à la bande passante du canal, régler la puissance de bruit sur zéro
et régénérer la forme d'onde de sortie du canal:
>> hold off; clf;
>> b = binary(10);
>> x = wave_gen(b, 'polar_nrz' , 1000);
>> subplot(211), waveplot(x);
>> subplot(212), waveplot(channel(x, 1, 0, 4900));
B.5 Étudier les effets de la bande passante du canal sur la forme d'onde de sortie.
>> subplot(212), waveplot(channel(x, 1, 0, bw));
où bw ∈{3000, 2000, 1000, 500}. Observez le retard dans la forme d'onde de sortie en raison des
caractéristiques de filtrage du canal. Tracez les formes d'onde d'entrée et de sortie. Déterminer les
instants d'échantillonnage appropriés pour le décodage de la forme d'onde pour le cas bw = 500.
C. Diagramme de l’œil
Les effets du filtrage des canaux et du bruit peuvent être mieux vus en observant la forme d'onde de
sortie sous la forme d'un «diagramme de l’œil». Le diagramme de l’œil est généré avec plusieurs
balayages où chaque balayage est déclenché par un signal d'horloge et la largeur de balayage est
légèrement supérieure à la période de données binaires Tb = 1 / Rb. Dans cette simulation, le diagramme
de l’œil est basé sur une largeur de balayage de 2Tb.
C.1 Génération du diagramme de l’œil:
>> b = [1 0 0 1 0 1 1 0];
>> x = wave_gen(b, 'polar_nrz', 1000);
>> clf;
>> subplot(221), waveplot(x);
>> subplot(223), eye_diag(x);
Le diagramme de l’œil pour la forme d'onde x représente ce que vous devriez espérer voir pour un signal
non déformé. Pour observer comment le diagramme de l’œil est généré et pour observer les effets de la
distorsion du signal lorsque le signal x est transmis sur un canal de bande passante finie sans composant
de bruit:
>> y = channel(x, 1, 0, 4000);
>> subplot(222), waveplot(y);
>> subplot(224), eye_diag(y, -1);
Si le deuxième argument de la fonction eye_diag est négatif, vous devez appuyer sur la touche « Entrée »
pour afficher la trace suivante. Cela vous aidera à comprendre comment le diagramme de l’œil est
généré.
C.2
Générez le diagramme de l’œil à partir d'une forme d'onde polaire NRZ à la sortie du canal pour les
valeurs de la variance du bruit s2 et la bande passante du canal bw montrée dans le tableau 2.2.
Enregistrez t*, A et B pour chaque ensemble de s2 et b
>> clf;
>> b = binary(100);
>> x = wave_gen(b, 'polar_nrz', 1000);
>> eye_diag(channel(x, 1, s2, bw));
Tableau 2.2
Code en ligne NRZ polaire
s2 bw t* A B
3000
0.01 2000
1000
0.02
0.08 4000
0.10
C.3 Répétez l'étape C.2 pour le code en ligne manchester et enregistrez vos résultats dans le tableau 2.3.
Tableau 2.3
Code en ligne Manchester
s2 bw t* A B
3000
0.01 2000
1000
0.02
0.08 4000
0.10
Q2.4
Lorsque vous comparez les diagrammes de l’œil de C.2 et C.3 pour s2 = 0.01 et bw = 1000, pour quel
code en ligne observez-vous un diagramme de l’œil "raisonnable"? Expliquez la différence en termes
de propriétés de code en ligne respectives.
C.4 Générer des diagrammes d'œil comme à l'étape C.2 pour les codes de lignes RZ polaires et RZ
unipolaires et NRZ unipolaires et observer comment le code en ligne dicte la forme et la symétrie du
diagramme de l’œil.
V. Objectifs:
Dans ce TP, vous allez étudier le processus de détection du signal en étudiant les éléments d'un récepteur
et du processus de décodage. En particulier, vous:
- Étudiez les caractéristiques des filtres adaptés;
- Étudiez les performances de diverses récepteurs en fonction de différents filtres récepteurs en
mesurant la probabilité d'erreur binaire;
- Utilisez le diagramme de l’œil pour définir les paramètres du processus de détection.
VI. Rappels
1. Filtrage adapté
Soit un signal codé avec la forme d'onde g(t) (formant du code en ligne), et bruité :
𝑥(𝑡) = 𝑔(𝑡) + 𝑛(𝑡), 𝑡 ∈ [0; 𝑇 ]
où n est un BBAG de densité spectrale 𝑁(𝑓) = 𝑁0 /2
𝑦(𝑡) = ℎ(𝑡) ∗ 𝑥(𝑡) = 𝑔0 (𝑡) + 𝑛(𝑡)
tel que le RSB en t = T (instant de décision) :
|𝑔 (𝑇)|2
0
𝜂 = 𝐸(𝑛 2 (𝑡)) soit maximal
On a
Par Cauchy-Schwarz, on a,
2
η≤ ∫ |𝐺(𝑓)|2 𝑑𝑓
𝑁0 ℝ
avec égalité si et seulement si,
̅̅̅̅̅̅𝑒 −2𝑖𝜋𝑓𝑇 , 𝑘 ∈ ℂ
𝐻(𝑓) = 𝑘𝐺(𝑓)
soit, pour des filtres réels,
ℎ(𝑡) = 𝑔(𝑇 − 𝑡)
Le filtre h(t) = g(T-t) est le filtre optimal, ou filtre adapté, a la détection du signal g(t) bruité.
Le filtre adapté est le filtre optimal pour la détection du signal utile.
-∆/2 ∆/2
t
0
h(t)=uBR(∆/2-t)
t0
t
-∆/2 ∆/2 ∆
probabilité de décider qu’un bit 1 à était reçu alors qu’un bit 0 a été envoyé, ou inversement.
On trouve de même,
1 𝐴−𝜆
𝑝(0|1) = 𝑒𝑟𝑓𝑐 ( )
2 √𝑁0 ⁄𝑇𝑏
Au total, on obtient,
𝑝1 𝐴−𝜆 𝑝0 𝐴+𝜆
𝑒𝑟𝑓𝑐 ( ) + 𝑒𝑟𝑓𝑐 ( )
2 √𝑁0 ⁄𝑇𝑏 2 √𝑁0 ⁄𝑇𝑏
Dans le cas où, p0 = p1 = 1/ 2 , alors pe est minimum pour λ = 0 et alors,
1 𝐴
𝑝𝑒 = 𝑒𝑟𝑓𝑐 ( )
2 √𝑁0 ⁄𝑇𝑏
et donc, si on pose εb = A2 Tb, l’énergie par bit (impulsion d’amplitude A de durée Tb), alors,
1 𝜀𝑏
𝑝𝑒 = 𝑒𝑟𝑓𝑐 (√ )
2 𝑁0
Q3.2
Si la largeur d'impulsion triangulaire est changée à 1 ms, déterminez l'amplitude du pic de la sortie du
filtre adapté?
A.5 Répétez les parties A.1-A.3 pour une impulsion manchester avec une largeur d'impulsion de 10 ms
et une amplitude de crête d’une unité. Prévoyez la réponse impulsionnelle du filtre adapté et la sortie du
filtre adapté. Vérifiez vos prédictions à l'aide des fonctions MATLAB.
A.6 Générez une forme d'onde polaire NRZ qui représente la séquence binaire de 5 bits [1 0 0 1 0]. Le
taux de données binaires Rb est de 1 kbps et l'amplitude d'impulsion A est de 1 V.
>> x5 = wave_gen([1 0 0 1 0], 'polar_nrz', 1000);
>> clf; subplot(211); waveplot(x5);
Enregistrez la forme d'onde x5
A.7 Appliquez x5 à un filtre adapté. Enregistrez la sortie.
>> subplot(212); waveplot(match('polar_nrz', x5));
Q3.3
Construisez la forme d'onde à la sortie de filtre adapté si l'entrée est une forme d'onde NRZ unipolaire
qui représente la séquence binaire [1 0 0 1 0].
B. Détection du signal
B.1 Générez une séquence binaire de 10 bits et une forme d'onde qui représente cette séquence binaire
en format de signalisation NRZ polaire.
>> b10 = binary(10);
>> x10 = wave_gen(b10, 'polar_nrz', 1000);
>> subplot(211); waveplot(x10);
B.2 Appliquez x10 à un canal avec une bande passante de 4,9 kHz et AWGN où la puissance de bruit
est de 2W. Affichez la forme d'onde de sortie du canal y10:
>> y10 = channel(x10, 1, 2, 4900);
>> subplot(212); waveplot(y10);
Décodez la séquence binaire de la forme d'onde y10:
̂ =
b10
B.3 Appliquez y10 à un filtre adapté. Affichez la forme d'onde de sortie z10:
>> z10 = match('polar_nrz', y10);
>> subplot(212); waveplot(z10);
B.4 Soit Tb la période de données binaires. Échantillonnez la sortie du filtre adapté à kTb; k = 1, …, 10
et appliquez la règle de décision suivante:
′
̂k = {0, si la valeur de ′l échantillon < 0;
b
1, si la valeur d échantillon > 0;
̂k est la valeur estimée du kème élément de la séquence binaire b10. Appliquer cette règle de décision
où b
sur la sortie du filtre adapté z10:
̂ =
b10
Comparez votre séquence décodée avec la séquence initiale b10.
Q3.4
Commentez s'il est plus facile de décoder la séquence binaire transmise directement à partir de la sortie
de canal y10 ou de la sortie de filtre adapté z10. Si des instants d'échantillonnage autres que ceux
spécifiés ci-dessus sont utilisés, la probabilité d'une erreur de décodage sera plus grande. Pourquoi?
C. Récepteur de filtre adapté
C.1 Générez une séquence binaire b de 2000 bits et une forme d'onde polaire NRZ basée sur b:
>> b = binary(2000);
>> x = wave_gen(b, 'polar_nrz');
Appliquez x à un canal avec une bande passante de 4,9 kHz et une puissance de bruit de canal de 0,5 W.
Soit y la forme d'onde de sortie du canal.
>> y = channel(x, 1, 0.5, 4900);
C.2 Appliquez y à un filtre adapté. Affichez le diagramme de l’œil de la sortie du filtre adapté z.
>> z = match('polar_nrz', y);
>> eye_diag(z);
À partir du diagramme de l’œil, déterminez les instants d'échantillonnage optimums et la valeur de seuil
𝜆_th pour que le détecteur décode la séquence binaire transmise b. Les instants d'échantillonnage de la
sortie du filtre adapté sont mesurés par rapport à l'origine du temps. Par exemple, si la période de données
binaires est Tb et que le paramètre instant_échantillonnage est réglé sur ti, le détecteur échantillonnera
le signal à ti, ti + Tb, ti + 2Tb, … etc.
𝜆_th = V
instant_échantillonnage = sec
Utilisez 𝜆_th et instant_échantillonnage dans le détecteur qui fonctionnera sur la sortie du filtre adapté.
Enregistrez la probabilité résultante d'erreur binaire Pe (TEB) dans le Tableau 3.1.
>> detect(z, 𝜆_th, instant_echantillonnage, b);
Tableau 3.1
σ2n (W) Pe expérimental Pe théorique
0.5
1
1.5
2
C.3 Répétez C.1-C.2 pour une puissance de bruit du canal de 1, 1.5 et 2 W sans afficher le diagramme
de l’œil de la sortie du filtre adapté z. Enregistrez les résultats de Pe dans le tableau 3.1.
C.4 Si différents instants d’échantillonnage autre que les valeurs optimales sont utilisés, le TEB résultant
sera plus grand. Vous pouvez l'observer en décodant la séquence binaire en utilisant les valeurs du
paramètre instant d'échantillonnage qui sont 0,9 et 0,5 fois la valeur optimale utilisée dans la partie C.3.
Q3.5
Évaluez la probabilité théorique des valeurs d'erreur binaire pour tous les cas considérés ci-dessus et
enregistrez les dans le Tableau 3.1.
TP 4: MODULATION NUMERIQUE
I. Objectifs:
Dans ce TP, vous allez appliquer les concepts de transmission numérique en bande de base et de
modulation analogique de signaux continus à l'étude de la transmission numérique passe bande. Vous
examinerez:
- génération de formes d'ondes modulées numériquement;
- détection cohérente (synchrone) et non cohérente (enveloppe) de signaux modulés;
- performance du système en présence de bruit.
II. Rappels
L'utilisation des modulations numériques répond à deux impératifs:
lorsque la transmission des signaux numériques en bande de base n'est pas possible (dans l'air
ou sur les lignes téléphoniques), on est obligé de translater le spectre de la bande de base vers
les hautes fréquences: il faut réaliser une modulation,
la demande en plages de fréquences augmente considérablement, alors que le spectre en espace
libre est une ressource partagée. Le numérique utilise plus efficacement ces plages car son
encombrement est réduit grâce à des techniques de compression de données et de modulations
adaptées.
1. Modulation cohérente ou incohérente
On peut distinguer deux grandes classes de modulation numérique, qui possèdent chacune des propriétés
particulières:
la modulation cohérente: la fréquence de la porteuse est un multiple entier du rythme
d'émission 1/Tb,
la modulation incohérente: la fréquence de la porteuse n'est pas un multiple entier du rythme
d'émission 1/Tb.
Dans le premier cas, la modulation peut être vue comme un cas particulier de codage en ligne à l'émission
en bande de base; l'onde de mise en forme est tout simplement un signal sinusoïdal périodique.
Toutefois, la modulation cohérente exige une synchronisation parfaite entre la source d'information et
la porteuse, ce qui n'est guère aisé à réaliser. Il faut alors recourir à une modulation incohérente. On
devine que la conception du récepteur sera guidée par d'autres principes et qu'elle demandera un soin
tout particulier.
2. Démodulation cohérente ou incohérente
Il ne faudrait pas confondre la nomenclature du type de modulation avec le principe utilisé dans certains
démodulateurs utilisant une reconstitution de la porteuse pour démoduler le signal reçu. Ainsi, on définit
également une démodulation cohérente, pour laquelle le récepteur dispose de la fréquence et de la phase
instantanées en permanence, et une démodulation incohérente, pour laquelle cette information n'est pas
disponible.
modulés de type on/off keying. Pour construire chacun d'eux, il suffit de prendre un signal nul au droit
des symboles de l'autre séquence.
Figure 4.1: Signal modulant numérique et signaux modulés respectivement en AM, PM et FM.
A.3 Afficher les 5 premiers bits de xu et sa dans la séquence binaire b. Comparez les deux formes d'onde.
>> subplot(211); waveplot(xu(1:5*SAMPLING_CONSTANT));
>> subplot(212); waveplot(sa(1:5*SAMPLING_CONSTANT));
Affichez et enregistrez également les fonctions PSD respectives sur l'intervalle de fréquence [0, 8 kHz].
>> fr = [0, 8000];
>> subplot(211); psd(xu, fr);
>> subplot(212); psd(sa, fr);
Phase-Shift Keying (PSK)
A.4 Pour générer le signal PSK sp, avec une fréquence porteuse de 4 kHz:
- génèrez un signal NRZ polaire xp, à partir de la séquence b;
- mélangez xp avec la sortie d'un oscillateur fonctionnant à 4 kHz.
>> xp = wave_gen(b, 'polar_nrz');
>> sp = mixer(xp, osc(4000));
A.5 Afficher les 5 premiers échantillons des formes d'onde xp et sp:
>> subplot(211); waveplot(xp(1:5*SAMPLING_CONSTANT));
>> subplot(212); waveplot(sp(1:5*SAMPLING_CONSTANT));
Quelle est la différence de phase entre sp et la porteuse sin (2πfct) pendant les première et deuxième
périodes de bits?
A.6 Affichez les fonctions PSD de xp et sp over l'intervalle de fréquence [0, 8 kHz]. Enregistrez les
principales caractéristiques de chaque fonction PSD.
>> fr = [0, 8000];
>> subplot(211); psd(xp, fr);
>> subplot(212); psd(sp, fr);
Frequency-Shift Keying (FSK)
A.7 Pour générer le signal FSK en phase continue sf, avec des fréquences f0 et f1 de 2 et 4 kHz,
respectivement:
- générez un signal NRZ polaire à partir de la séquence b;
- mélangez xp et appliquez la forme d'onde polaire à l'entrée d'un oscillateur à tension contrôlée (voltage
controlled oscillator, VCO). Dans cette expérience, le VCO a la fréquence de fonctionnement réglée à
3 kHz et a une sensibilité de -1 kHz / V.
>> xf = wave_gen(b, 'polar_nrz');
>> sf = vco(xf);
A.8 Affichez les formes d'onde xf et sf pour 0 <t <5Tb.
>> subplot(211); waveplot(xf(1:5*SAMPLING_CONSTANT));
>> subplot(212); waveplot(sf(1:5*SAMPLING_CONSTANT));
Affichez et enregistrez la fonction PSD du signal FSK.
>> fr = [0, 8000];
>> subplot(211); psd(xf, fr);
>> subplot(212); psd(sf, fr);
Q4.1
Comment générer un signal FSK à partir de deux signaux ASK? Pour un système où une utilisation
efficace de la bande passante est requise, quel schéma de modulation préférez-vous?
B. Détection cohérente
B.1 Un détecteur cohérent pour les signaux ASK et PSK est représenté sur la figure 4.1.
B.4 Pour observer l'effet de l'écart de fréquence en démodulant un signal ASK, démodulez sa avec un
oscillateur local réglé à 3900 Hz. Affichez et comparez les signaux démodulés ya et ya1.
>> ya1 = match('unipolar_nrz', mixer(sa, osc(3900)));
>> subplot(211); waveplot(ya(1:5*SAMPLING_CONSTANT));
>> subplot(212); waveplot(ya1(1:5*SAMPLING_CONSTANT));
La séquence binaire d'origine peut-elle être récupérée sur ya1? Considérons un deuxième cas où la
fréquence de l'oscillateur local est réglée à 3985 Hz. Démodulez sa et générez la sortie du filtre apparié:
>> ya2 = match('unipolar_nrz', mixer(sa, osc(3985)));
>> subplot(211); waveplot(ya(1:5*SAMPLING_CONSTANT)); subplot(212);
waveplot(ya2(1:5*SAMPLING_CONSTANT));
Déterminer la fréquence de l'enveloppe de la sortie du filtre adapté.
C. Performance du système sous bruit
Détection cohérente
C.1 Générer un signal ASK représentant une séquence binaire de 500 échantillons:
>> b = [1 0 0 1 0 binary(495)];
>> sa = mixer(wave_gen(b, 'unipolar_nrz'), osc(4000));
C.2 Appliquer sa à un canal avec un gain unitaire, un bruit de canal σ2n = 1 W, et une large bande
passante de telle sorte qu'aucune distorsion ne soit introduite dans le signal. Affichez le signal ASK sa
et la sortie du canal y pour 0 <t <5Tb.
>> y = channel(sa, 1, 1, 49000);
>> subplot(211); waveplot(sa(1:5*SAMPLING_CONSTANT));
>> subplot(212); waveplot(y(1:5*SAMPLING_CONSTANT));
C.3 Utilisez un détecteur cohérent pour démoduler y. Affichez le diagramme de l’œil de la sortie du
filtre adapté.
>> zm = match('unipolar_nrz', mixer(y, osc(4000)));
>> clf; eye_diag(zm);
À partir du diagramme de l’œil, déterminez les instants d'échantillonnage et la valeur seuil optimale.
Appliquer zm au circuit de décision, et enregistrer la probabilité résultante d'erreur de bit.
>> detect(zm, 3.8e-4, 0.001, b);
Q4.4
Calculez la probabilité théorique d'erreur binaire pour le cas considéré ci-dessus.
I. Objectifs:
Ce TP examine le codage de canal comme un moyen d'améliorer le taux d'erreur binaire à travers des
canaux hostiles. Plus précisément, nous examinerons:
- Codes en bloc linéaires et leurs performances contre les erreurs aléatoires;
- Les codes en bloc BCH et leur performance contre les erreurs éclatantes;
- Codes convolutifs et décodage Viterbi;
- Différences entre les décisions hard et les décisions soft.
II. Préparation théorique:
1. Considérez le code ci-contre: message mot de code
a) Est-ce un code linéaire? Expliquez. 000 0000000
b) Est-ce un code systématique? 001 0010110
010 0101000
c) Quelle est la matrice générateur du code G?
011 0111110
d) Construire la matrice de contrôle de parité H.
100 1000101
e) Quelle est la distance minimale dmin ? 101 1010011
f) Quelle est la capacité de correction d'erreur? 110 1101101
g) Quelle est la capacité de détection d'erreur? 111 1111011
III. Travaux pratiques:
1. Codes en bloc linéaires
1.1 Codes Hamming : Les codes de Hamming constituent une famille de codes en bloc linéaires
couvrant une large gamme de mots et de longueur de mots de code (n et k). D'abord, générer une
séquence de bits suffisamment longue pour le codage:
>> b = round(rand(20000,1));
Codez cette séquence en utilisant un code Hamming (7,4).
>> c = encode(b, 7,4, 'hamming/binary');
Vous allez maintenant transmettre cette séquence à travers un canal symétrique binaire avec une
probabilité d'erreur de bit de 0,01. Il s'agit d'un modèle de canal abstrait qui est souvent utilisé dans
l'étude de codes en raison de sa simplicité. Il inclut l'effet de la modulation et de la démodulation, du
bruit additif et de la mise en forme de l'impulsion. Son seul paramètre caractéristique est la probabilité
d'erreur binaire, ce qui est identique, même si 1 ou 0 ont été transmis (d'où la désignation: "symétrique").
>> d = bsc(c,0.01);
Décodez le signal à la sortie du canal.
>> e = decode(d,7,4, 'hamming/binary');
Enfin, calculer les taux d'erreur de bit codés et non codés pc et pu et les enregistrer dans le Tableau 1.
>> [n_err,pc] = biterr(b,e(1:20000))
>> [n_err,pu] = biterr(c,d)
Répétez cette expérience pour un code Hamming (15,11) et un Hamming (31,26).
1.2 codage BCH et le seuil de codage : Nous allons maintenant expérimenter une famille de codes plus
puissante, les codes Bose-Chandhuri-Hocquenghem (BCH).
Afin d'effectuer une comparaison «équitable» entre les liaisons de communication codées et non codées,
il faut tenir compte de la quantité d’overhead requise par le code. Considérons un système BPSK avec
un débit binaire de 1 kb / s. Supposons que =4 chez le destinataire. Par conséquent:
1
= = 0.0125
2
Si nous voulons maintenant introduire un code BCH (127,36) dans ce système tout en conservant le
même débit de données utile, il faudra augmenter le débit brut par un facteur de . Puisque l'amplitude
de la forme d'onde reçue est fixée, cela diminuera d'un facteur de . En utilisant cette nouvelle valeur,
un taux d'erreur de bit de canal "ajusté" (avant le décodage) peut être calculé en tenant compte du débit
binaire augmenté requis par le code.
Calculez les taux d'erreur binaire de canal avec et sans codage pour tous les cas répertoriés dans le
tableau 2. Utilisez la commande erfc pour calculer les valeurs de la fonction. Enregistrez vos résultats.
Maintenant, codez b en utilisant un code BCH (127,36):
>> n = 127;
>> k = 36;
>> nwords = 2000;
>> msgTx = gf(randi([0 1],nwords,k));
>> [~,t] = bchgenpoly(n,k)
>> c = bchenc(msgTx,n,k);
En supposant que =4 dans le cas non codé, transmettre la séquence codée à travers un canal
symétrique binaire avec un taux d'erreur de bit correctement ajusté. Décoder la séquence reçue et
calculer le taux d'erreur de bit codé; enregistrez-le dans le tableau 2. À cette fin, utilisez
>> d = bsc(c,0.0125);
>> [msgRx2,numerr] = bchdec(d,n,k);
>> pc = sum(numerr)/(nwords*k)
Répétez cette séquence d'opérations pour toutes les valeurs de indiquées dans le tableau.
2. Codes convolutifs
Un code convolutif est défini par trois paramètres (n, k, K). Le nombre de registres à décalage parallèles
utilisés dans le codeur est n alors que k est le nombre de bits de sortie chaque fois que les registres à
décalage tournent. Par conséquent, le débit de codage est défini comme étant avec des codes linéaires,
soit k/n. Le paramètre K est la longueur en bits du registre à décalage le plus long, et on l'appelle la
longueur de contrainte (constraint length). Puisqu'il indique la quantité de mémoire intrinsèque au code,
c'est une mesure importante de la puissance du code.
L'encodeur convolutif présenté dans II (figure 1) a la fonction de transfert binaire
1 1 1 1
!
1 0 1 1
Il est facile de voir la correspondance entre les branches reliant le registre à décalage aux additionneurs
supérieur et inférieur et les bits dans la fonction de transfert. Tout simplement, un "0" indique l'absence
d'une branche à la position correspondante.
Matlab n'accepte pas les fonctions de transfert binaire (ou au moins pas dans un format simple comme
expliqué ci-dessus), mais accepte un format octal équivalent selon lequel la fonction de transfert ci-
dessus serait [17,13].
2.1 Tout d'abord, générer une séquence de bits plus courte:
>> b = round(rand(2000,1));
Définissez la fonction de transfert octale d'un code convolutif optimal (3,7,5) et utilisez-le pour coder b.
>> trellis =poly2trellis(3, [7 5]);
>> c = convenc(b , trellis);
Pour démontrer la puissance d'un simple code convolutif, nous utiliserons encore la chaîne la plus
hostile: un canal symétrique binaire avec un taux d'erreur de 0,1 bit.
>> d = bsc(c,0.1);
Pour décoder la séquence reçue, la commande decode de Matlab utilise l'algorithme de Viterbi pour
une estimation de vraisemblance maximale de la séquence transmise. L'algorithme de Viterbi trouve le
chemin le plus court à travers le trellis depuis le début de la transmission. En pratique, cependant,
il est nécessaire de truncate l'historique du chemin d'une longueur finie pour économiser de la
mémoire et obtenir un délai de décodage fini et raisonnable. Il est généralement admis qu'une longueur
de troncature de 5 fois la longueur de contrainte du code est suffisante pour assurer une dégradation
minimale des performances.
>> tb=2 ;
>> e= vitdec(d,trellis, tb, 'trunc', 'hard') ;
>> [n_err,pc] = biterr(b,e)
La longueur de troncature est le 6ème paramètre facultatif de la commande decode de Matlab.
Calculez le taux d'erreur binaire comme d'habitude. Enregistrez vos résultats dans le Tableau 3. Répétez
cette procédure pour le code K =4 défini dans la table; n'oubliez pas d'utiliser toujours la longueur de
troncature 5K.
Tableau 3: Codes convolutifs.