CR TP Transmission en DVB

Transcription

CR TP Transmission en DVB
CR TP VIDEOTRANSMISSION
Sujet: La transmission en DVB
Master 1 Audiovisuel et multimédia de Valenciennes
option ISIS
Mai 2008
Encadrant: M. Ossaka Anicet
Notes approuvées par M. Iyad Dayoub
Elève: Clément Follet
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 1
Travail préléminaire:
- Pour que l'échantillonnage soit correct, il faut respecter le critère de Nyquist/Shannon qui dit que
fe>=2*fmax.
– La bande passante est de 8MHz en DVB-C, on sait qu'en DVB-C la fréquence des symboles est
de 7MHz, d'où pour une modulation 16-QAM, un débit binaire de 7*16=112 Mbits par seconde.
Avec un codeur convolutif (multiplexeur) où k/n=1/2 cela ne nous fait plus que 56 Mbits par
seconde à l'origine.
Travail pratique:
Détermination du BER par simulation des modulations QPSK et 16-QAM
●
Modulation QPSK (Quadrature Phase-shift keying ):
Souvent connues sous le nom de 4-PSK ou
QPSK, cette modulation utilise un
diagramme de constellation à quatre points, à
équidistance autour d'un cercle. Avec quatre
phases, QPSK peut coder deux bits par
symbole, cf schéma code de Gray. Cela
permet de soit multiplier le débit binaire par
deux comparé à un système BPSK tout en maintenant la bande
passante du signal ou alors de maintenir le débit en réduisant la bande passante utilisée par
deux. Cette modulation qui est simple et efficace est utilisée pour le satellite à cause de
l'importante dégradation du signal durant le trajet.
function[]=modulationqpsk()
M=4; %modulation en quadrature de phase
%GENERATION D'UN SIGNAL BINAIRE ALEATOIRE
z = randint(1,16)
%REGROUPEMENT PAR SYMBOLE (2bits->1symbole =>4symboles possibles =>4phases
possibles)
for i=1:2:length(z) %en code de gray->modulation:'gray'
if z(i)==0 && z(i+1)==0 z(i)=0; end
if z(i)==1 && z(i+1)==1 z(i)=1; end
if z(i)==0 && z(i+1)==1 z(i)=2; end
if z(i)==1 && z(i+1)==0 z(i)=3; end
end
z;
%SOUS-ECHANTILLONNAGE
%Sert à éliminer les valeurs en z(i+1) qui sont dès lors inutiles
z=downsample(z,2);
%MODULATION: adaptation du flux binaire au canal de transmission
zmod=pskmod(z,M,0) %'gray'(code de gray)ou 'bin'(normal)
scatterplot(pskmod(z,M));
%DEMODULATION
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 2
zdemod=pskdemod(zmod,M,0)
%SUR-ECHANTILLONNAGE
%Sert à ajouter les valeurs en z(i+1) qui vont être remplies
z=upsample(z,2);
%DEGROUPEMENT DES SYMBOLEs (1symbole->2bits)
for i=1:2:length(z)
if z(i)==0 z(i)=0; z(i+1)=0; end
if z(i)==1 z(i)=1; z(i+1)=1; end
if z(i)==2 z(i)=0; z(i+1)=1; end
if z(i)==3 z(i)=1; z(i+1)=0; end
end
z
●
Modulation 16-QAM (Quadrature Amplitude Modulation):
La modulation 16-QAM repose sur le
même principe que la QPSK sauf que
l'on introduit une modulation
d'amplitude. Il y a maintenant 12
phases possibles avec 3 amplitudes
possibles. Il existe aussi la
modulation 64-QAM qui produit 64
points, les bits sont codés par paquets
de 6. Ces modulations sont utilisées
pour le câble.
function[]=modulationqam()
M=16; %modulation de phase et d'amplitude
%GENERATION D'UN SIGNAL BINAIRE ALEATOIRE
z = randint(1,200) %16 phases et amplitudes différentes
%REGROUPEMENT PAR SYMBOLE (2bits->1symbole =>16symboles possibles
=>12phases+3amplitudes possibles)
for i=1:2:length(z) %en code de gray->modulation:'gray'
if z(i)==0 && z(i+1)==0 zb(i)=0; end
if z(i)==1 && z(i+1)==1 zb(i)=1; end
if z(i)==0 && z(i+1)==1 zb(i)=2; end
if z(i)==1 && z(i+1)==0 zb(i)=3; end
end
zb;
for i=1:4:length(zb) %en code de gray->modulation:'gray'
if zb(i)==0 && zb(i+2)==0 z(i)=0; end
if zb(i)==0 && zb(i+2)==1 z(i)=1; end
if zb(i)==0 && zb(i+2)==2 z(i)=2; end
if zb(i)==0 && zb(i+2)==3 z(i)=3; end
if zb(i)==1 && zb(i+2)==0 z(i)=4; end
if zb(i)==1 && zb(i+2)==1 z(i)=5; end
if zb(i)==1 && zb(i+2)==2 z(i)=6; end
if zb(i)==1 && zb(i+2)==3 z(i)=7; end
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 3
if
if
if
if
if
if
if
if
end
zb(i)==2
zb(i)==2
zb(i)==2
zb(i)==2
zb(i)==3
zb(i)==3
zb(i)==3
zb(i)==3
&&
&&
&&
&&
&&
&&
&&
&&
zb(i+2)==0
zb(i+2)==1
zb(i+2)==2
zb(i+2)==3
zb(i+2)==0
zb(i+2)==1
zb(i+2)==2
zb(i+2)==3
z(i)=8; end
z(i)=9; end
z(i)=10; end
z(i)=11; end
z(i)=12; end
z(i)=13; end
z(i)=14; end
z(i)=15; end
z;
%SOUS-ECHANTILLONNAGE
%Sert à éliminer les valeurs en z(i+1,+2,+3) qui sont dès lors inutiles
z=downsample(z,4)
%MODULATION: adaptation du flux binaire au canal de transmission
zmod=qammod(z,M,0) %'gray'(code de gray)ou 'bin'(normal)
scatterplot(qammod(z,M));
%DEMODULATION
zdemod=qamdemod(zmod,M,0)
%SUR-ECHANTILLONNAGE
%Sert à ajouter les valeurs en z(i+1) qui vont être remplies
z=upsample(z,4);
%DEGROUPEMENT DES SYMBOLEs (1symbole->2bits)
for i=1:4:length(z) %en code de gray->modulation:'gray'
if z(i)==0 zb(i)=0; zb(i+2)=0; end
if z(i)==1 zb(i)=0; zb(i+2)=1; end
if z(i)==2 zb(i)=0; zb(i+2)=2; end
if z(i)==3 zb(i)=0; zb(i+2)=3; end
if z(i)==4 zb(i)=1; zb(i+2)=0; end
if z(i)==5 zb(i)=1; zb(i+2)=1; end
if z(i)==6 zb(i)=1; zb(i+2)=2; end
if z(i)==7 zb(i)=1; zb(i+2)=3; end
if z(i)==8 zb(i)=2; zb(i+2)=0; end
if z(i)==9 zb(i)=2; zb(i+2)=1; end
if z(i)==10 zb(i)=2; zb(i+2)=2; end
if z(i)==11 zb(i)=2; zb(i+2)=3; end
if z(i)==12 zb(i)=3; zb(i+2)=0; end
if z(i)==13 zb(i)=3; zb(i+2)=1; end
if z(i)==14 zb(i)=3; zb(i+2)=2; end
if z(i)==15 zb(i)=3; zb(i+2)=3; end
end
zb;
for i=1:2:length(zb) %en code de gray->modulation:'gray'
if zb(i)==0 z(i)=0; z(i+1)=0; end
if zb(i)==1 z(i)=1; z(i+1)=1; end
if zb(i)==2 z(i)=0; z(i+1)=1; end
if zb(i)==3 z(i)=1; z(i+1)=0; end
end
zout=z
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 4
●
Introduction du bruit dans le canal de transmission
Il faut ajouter un bruit sur le signal modulé durant la transmission pour que l'on puisse analyser la
réponse en Taux d'erreur binaire du canal en fonction du rapport signal/bruit. Ce bruit est un bruit
aléatoire qui au final sur une longue durée se répartit uniformément en fréquence. Il représente le
bruit de fond causé par les électrons quand la distance de transmission augmente.
On ajoute au programme une boucle suivant le rapport signal à bruit qui va nous donner plusieurs
mesures, en insérant pendant la transmission le bruit:
%BRUIT POUR SIMULATION DU CANAL DE TRANSMISSION
z=awgn(z,snr,'measured','db'); %Y = AWGN(X,SNR,SIGPOWER,STATE
●
Améliorations:
Pour réduire le taux d'erreur pendant la transmission,
on va faire appel premièrement à un codeur convolutif.
Le principe du codage convolutif est d'insérer dans le
flux de symboles des redondances qui permettront au
décodage de retrouver les bonnes valeurs malgré le
bruit durant la transmission.
Du fait de l'adjonction d'une redondance, le message
effectivement transmis est plus long. Un code se
caractérise par son rendement R. Si le codeur génère N
bits à partir de K bits d'information, le rendement R
vaut K/N.
Le codeur est constitué de m registres à décalage de K
éléments binaires.
Le message décomposé en blocs de K bits, est remplacé par un bloc de N bits comprenant
directement les K bits d'information et N-K bits de redondance calculés à partir des bits
d'information, le codage d'un bloc se faisant indépendamment des précédents. Le codage d'un bloc
de K bits dépend non seulement de ce bloc mais également des blocs précédents.
Ici les paramètres du codeur sont:
– longueur de contrainte, K=3
– rendement : r = 1/N = ½
– polynômes générateurs : A = 7, B=5
function[z]=viterbi()
%codeur convolutif taux=1/2=k/n et K=3 et g1=5 g2=7
%[3]:matrice 1*k ou K=3, [5 7]: matrice k*n ou
%[g1 g2]
msg=[ 0 1 0 1 1 0 1 1 0 0 1 ]
t=poly2trellis([3],[5 7]); %génère le treillis
%msg = [1 1 0 1 0 0 1 1]
z=convenc(msg,t)
z=vitdec(z,t,1,'trunc','hard')
%'hard':décodage à decision dure (signal recu: bits et non symboles)
%avec cont delay de 1 bit en sortie car tblen=1, tblen est un entier positif
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 5
●
Influence du codage convolutif sur le taux d'erreur binaire:
Sans codage convolutif
Sans codage convolutif
Avec codage convolutif
Avec codage convolutif
Modulation 16-QAM +
codage convolutif
Modulation QPSK sans
codage convolutif
QPSK avec bruit
maximal
16-QAM avec
bruit maximal
QPSK avec bruit
moyen
QPSK avec bruit
minimal
16-QAM avec
bruit moyen
16-QAM avec
bruit minimal
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 6
On remarque que la modulation QPSK a un une probabilité d'erreur bien inférieure à la modulation
16-QAM, ce qui est logique puisqu'il n'y a que 4 points possibles, un codage convolutif n'est donc
pas nécessaire pour la transmission satellite.
●
Perturbations du canal pendant la transmission.
Filtrage de Nyquist:
Le signal modulé pouvant être modèlisé par deux canaux binaire, un premier réel et un deuxième
imaginaire, on a affaire à l'entrée du canal à deux signaux carrés d'amplitude réelle et de module
imaginaire.
Un canal provoque une déformation du signal qui se rapproche de la forme sinus cardinal, le canal
est, si parfait, un filtre à pente infinie à la fréquence de coupure correspondant à la bande passante
du canal (8MHz en DVB-C, 36MHz en DVB-S). Il est alors considéré comme une fonction porte.
A gauche, le signal transmis, à droite le signal reçu:
La déformation du signal provoque des interférences entre symboles, ce qui mauvais, on a alors
recourt à un filtre de nyquist en entrée du canal. Nyquist qui était très futé a prouvé qu'il existe un
filtre adapté au canal tel qu'il n'engendre pas de perturbation du signal, l'amplitude reste inchangée
et les amplitudes de la forme sinus cardinale en (2k+1)/T, k impair sont nulles. Seul l'amplitude 1/T
pose problème, l'idée est donc de sur-echantillonner double en entrée du canal, de filtrer, puis de
sous-échantillonner double à la réception. Pour avoir un filtre de nyquist, il doit respecter la règle
suivante: la fréquence de coupure doit être égale à la moitié de la rapidité des symboles R c'est à
dire quasiment la moitié de la bande passante.
Sur la figure de droite on voit l'influence du roll-off sur la pende du filtre, et donc sur le nombre
d'amplitudes d'harmoniques (2k+1)/T de la fonction sinus cardinale temporelle associée.
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 7
function[]=nyquist()
%Canal video+son en transmission:8Mhz DVB-C
%Il faut régler le filtre pour simuler une bande passante de 8MHz
nb_ech_filtrage=1;
facteur_echantillonnage=2;
%échantillon à traiter
z=[1+1i 0.65+1i 0-0.25i 0+1i 0-1i 0+1i 1+1i 0-1i 0+1i 0-1i 0+1i 0-1i 1-1i 0+1i ];
zin=z
%calcul des coefficients du filtre FIR
%Fsymbole=7Mhz(DVB-C), pour avoir un filtre de nyquist
%il faut que la fréquence de coupure du filtre soit la moitié de la
%fréquence des symboles, d'où fc=3.5MHz.
%le filtre représentant l'effet de filtrage du canal il faut donc obtenir
%un débit binaire deux fois plus élevé que la fc du filtre
%la fonction rcosfir envoie en sortie T(symb/s)*rate(ici 2), cette sortie
%doit être égale à 7MHz pour respecter la bande passante=>T=3.5e6
%2:nombre de points ds chaque symbole, fait mieux apparaitre les pics
coeff=rcosfir(0.35,[-nb_ech_filtrage,nb_ech_filtrage],2,3.5e6);
%oversampling pour faire apparaitre le pic (1) à la réception
z=upsample(z,facteur_echantillonnage);
%simulation de l'effet du canal de transmission sur le signal carré
zreel=real(z);
zimag=imag(z);
zreel=filter(coeff,1,zreel);
zimag=filter(coeff,1,zimag);
z=zreel+zimag*i;
%affichage des pics (sinus cardinaux)
hold on;
semilogy([1:1:length(z)],z);
%décalage des bits du au retard du filtre
z=z(2*nb_ech_filtrage+1:length(z));
%sous-échantillonnage inverse
z=downsample(z,facteur_echantillonnage);
%fonction de décision:pas besoin
zout=z
Non-effet du filtre sur la courbe de réponse:
On teste avec le filtre et sans le filtre pour voir
si la courbe du taux d'erreur binaire est la
même. Dans ce cas le filtre est bien adapté au
canal le canal n'engendre pas perturbations.
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 8
Egalisation zéro-forcing:
Le canal perturbe de manière fréquentielle le signal et le déforme. Après analyse du canal on en
déduit la perturbation que l'on considère comme un filtre de la forme c=[0 -4 -8 -12 -16 -20] pour
un canal Rax, cas du DVB-C. Aujourd'hui on ne passe pas forcément par une anlyse puisqu'il existe
des systèmes qui recherche automatiquement et continuellement la meilleure qualité de reception
par des algorithmes... Lorsqu'on connaît les atténuations fréquentielles du canal il suffit alors de
retrouver le filtre inverse et de l'appliquer au signal, on appelle cela un égaliseur zéro-forcing.
Voici la fonction qui permet de retouver le filtre correcteur à partir du filtre perturbant:
function[eq_zf]=e_zf(c)
M=10;
% Initialisations :
N=length(c); % Longueur du canal
Q=zeros(N+M-1,M); % Initialisation de Q
delta=zeros(N+M-1,1); % Définition de Delta(n-R)
R=(N+M)/2;
delta(R)=1;
% Définition de la matrice Q décrivant le système linéaire
for i=1:N+M-1
for j=max(1,i-N+1):min(M,i)
Q(i,j)=c(i-j+1);
end
end
% Inversion du système
eq_zf=pinv(Q)*delta;
Et voici la fonction qui joue le rôle d'égaliseur zéroforcing:
function[]=filtre()
M=10;
c=[0 -4 -8 -12 -16 -20]
% Initialisations :
N=length(c); % Longueur du canal
Q=zeros(N+M-1,M); % Initialisation de Q
delta=zeros(N+M-1,1); % Définition de Delta(n-R)
R=(N+M)/2;
delta(R)=1;
% Définition de la matrice Q décrivant le système linéaire
for i=1:N+M-1
for j=max(1,i-N+1):min(M,i)
Q(i,j)=c(i-j+1);
end
end
% Inversion du système
e_zf=pinv(Q)*delta
RSB=[5 7.5 10 12.5 15 17.5 20 22.5 25 27.5 30 32.5 35 37.5 40];% Niveaux de RSB pour l’étude (en dB)
BER=[];
for snr=1:length(RSB)
nb_ech=10000;
zin=randint(1,nb_ech);
data = zin+10^(-RSB(snr)/20)*randn(1,nb_ech); % Signal bruité avec le RSB=RSB(i);
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 9
y=filter(c,1,data);
z=filter(e_zf,1,y);
seuil_decision=0.5;
for i=1:1:length(z)
if z(i)<seuil_decision z(i)=0;
else z(i)=1;
end
end
z;
%CALCUL DU TEB
L=length(y);
%a cause du décalage généré par le filtrage
zout=z(R:L);
zin=zin(1:L-R+1);
nbecherron=0;
for i=1:1:length(zin)
nbecherron=nbecherron+abs(zout(i)-zin(i));
end
teb=nbecherron/nb_ech
BER=[BER teb];
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%trace la courbe de la probabilité d'erreur en fct du SNR
hold on;
semilogy([0+5:2.5:5+(length(RSB)-1)*2.5],BER);
On observe une belle correction de ce système lorsqu'il y a présence de bruit:
Effe t du canal
san s corre ction
Effe t du canal ave c
é galise u r z é ro-forcin g
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 10
●
Assemblage des différentes fonctions:
Voici les programmes qpsk() et qam() qui regroupent les différentes fonctions vues précédemment
dans l'ordre suivant: génération de séquence binaire aléatoire, regroupement par parquets suivant
symbole, modulation des syboles, simulation du bruit ajouté dans la canal pendant la transmission,
application du filtre d'atténuations fréquentielles, application du filtre de nyquist avec suréchantillonnage, reception avec sous-échantillonnage (nyquist), égaliseur zéro-forcing,
démodulation, décodage des symboles, analyse de la séquence binaire finale avec l'initiale et calcul
du taux d'erreur binaire pour diférents rapports signal à bruit.
Fonction qpsk():
function[]= qpsk()
codeconvolutif=0; %pas utilisé en DVB-S normalement
filtrenyquist=0;
tic
BER=[];
nb_ech=1e4;%nombre d'échantillon doit être pair
%boucle pour avoir un tableau de n valeurs du Taux d'Erreur Binaire en
%fonction du bruit ajouté sur le canal de transmission (SNR)
for snr=0:1:14
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%GENERATION D'UN SIGNAL BINAIRE ALEATOIRE
z = randint(1,nb_ech);
zin=z; %affichage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%CODEUR CONVOLUTIF (ajoute des bits de redondance contre les erreurs
%pendant la transmission)
if codeconvolutif==1
%taux=1/2=k/n et K=3 et g1=5 g2=7
%[3]:matrice 1*k ou K=3, [5 7]: matrice k*n ou
%[g1 g2]
t=poly2trellis([3],[5 7]);
z=convenc(z,t);
end
%REGROUPEMENT PAR SYMBOLE (2bits->1symbole =>4symboles possibles
=>4phases possibles)
for i=1:2:length(z) %en code de gray->modulation:'gray'
if z(i)==0 && z(i+1)==0 z(i)=0; end
if z(i)==1 && z(i+1)==1 z(i)=1; end
if z(i)==0 && z(i+1)==1 z(i)=2; end
if z(i)==1 && z(i+1)==0 z(i)=3; end
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 11
end
z;
%SOUS-ECHANTILLONNAGE
%Sert à éliminer les valeurs en z(i+1) qui sont dès lors inutiles
z=downsample(z,2);
%MODULATION: adaptation du flux binaire au canal de transmission
M=4; %M=max d'un echantillon+1 (echantillon entre 0 ou 1)
z=pskmod(z,M,0); %'gray'(code de gray) ou 'bin'(normal)
%%%%%%% CANAL %%%%%%%%%%%%%%%%%%
%BRUIT POUR SIMULATION DU CANAL DE TRANSMISSION
z=awgn(z,snr,'measured','db'); %Y = AWGN(X,SNR,SIGPOWER,STATE
%FILTRE DE NYQUIST POUR SIMULER LA BANDE PASSANTE DU CANAL
%But: arriver à faire un filtre sans perturber le signal
%et obtenir la même courbe que sans filtre
if filtrenyquist==1
nb_ech_filtrage=1;
facteur_echantillonnage=2;
%calcul des coefficients du filtre FIR
%Fsymbole=7Mhz(DVB-C), pour avoir un filtre de nyquist
%il faut que la fréquence de coupure du filtre soit la moitié de la
%fréquence des symboles, d'où fc=3.5MHz.
%le filtre représentant l'effet de filtrage du canal il faut donc obtenir
%un débit binaire deux fois plus élevé que la fc du filtre
%la fonction rcosfir envoie en sortie T(symb/s)*rate(ici 2), cette sortie
%doit être égale à 7MHz pour respecter la bande passante=>T=3.5e6
%2:nombre de points ds chaque symbole, fait mieux apparaitre les pics
coeff=rcosfir(0.15,[-nb_ech_filtrage,nb_ech_filtrage],2,3.5e6);
%oversampling pour faire apparaitre le pic (1) à la réception
z=upsample(z,facteur_echantillonnage);
%simulation de l'effet du canal de transmission sur le signal carré
zreel=real(z);
zimag=imag(z);
zreel=filter(coeff,1,zreel);
zimag=filter(coeff,1,zimag);
z=zreel+zimag*j;
end
%%%% RECEPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%
if filtrenyquist==1
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 12
%décalage des bits du au retard du filtre
z=z(2*nb_ech_filtrage+1:length(z));
%sous-échantillonnage inverse
z=downsample(z,facteur_echantillonnage);
end
scatterplot(z);
%DEMODULATION
M=4;
z=pskdemod(z,M,0);
zout=z;
%SUR-ECHANTILLONNAGE
%Sert à ajouter les valeurs en z(i+1) qui vont être remplies
z=upsample(z,2);
%DEGROUPEMENT DES SYMBOLEs (1symbole->2bits)
for i=1:2:length(z)
if z(i)==0 z(i)=0; z(i+1)=0; end
if z(i)==1 z(i)=1; z(i+1)=1; end
if z(i)==2 z(i)=0; z(i+1)=1; end
if z(i)==3 z(i)=1; z(i+1)=0; end
end
zout=z;
%DECODEUR CONVOLUTIF
if codeconvolutif==1
z=vitdec(z,t,1,'trunc','hard');
zout=z;
%'hard':décodage à decision dure (signal recu: bits et non symboles)
%avec cont delay de 1 bit en sortie car tblen=1, tblen est un entier
%positif
end
zout; %affichage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%CALCUL DU TEB
nbecherron=0;
for i=1:1:length(zin)
nbecherron=nbecherron+abs(zout(i)-zin(i));
end
teb=nbecherron/nb_ech
BER=[BER teb];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 13
%trace la courbe de la probabilité d'erreur en fct du SNR
hold on;
semilogy([0:1:14],BER);
toc
Fonction qam():
function[]= qam()
tic
%%%%%%%%%%%%%%
%codeconvolutif: applique un codage convolutif dans la chaîne
codeconvolutif=0; %Pas utilisé en DVB-S
%%%%%%%%%%%%%%
filtrenyquist=0;
%%%%%%%%%%%%%%
%zero-forcing: engendre la perturbation du signal ds le canal
%correctionegaliseur: applique la correction pour voir la différence
zeroforcing=0;correctionegaliseur=0;
%cas de la DVB-C uniquement
c=[0 -4 -8 -12 -16 -20]
%calcul du filtre correcteur
eq_zf=e_zf(c)
M=10; %longueur de l’égaliseur
N=length(c); % Longueur du canal
R=(N+M)/2;%retard des echantillons dû au zeroforcing
%%%%%%%%%%%%%%
BER=[]; %vecteur de valeurs de TEB
nb_ech=1e4; %nombre d'échantillons à analyser !!!doit être divisible par quatre (1symbole>4bits)!!!
%boucle pour avoir un tableau de n valeurs du Taux d'Erreur Binaire en
%fonction du bruit ajouté sur le canal de transmission (SNR)
for snr=0:1:14
%%%% GENERATION SIGNAL %%%%%%%%%%%%%%%
%GENERATION D'UN SIGNAL BINAIRE ALEATOIRE
z = randint(1,nb_ech);
zin=z;
%%%% MISE EN FORME %%%%%%%%%%%%%%%%%%%
%CODEUR CONVOLUTIF !!! NORMALEMENT QUE EN DVB-S !!!
if codeconvolutif==1
%taux=1/2=k/n et K=3 et g1=5 g2=7
%[3]:matrice 1*k ou K=3, [5 7]: matrice k*n ou
%[g1 g2]
t=poly2trellis([3],[5 7]);
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 14
z=convenc(z,t);
end
%REGROUPEMENT PAR SYMBOLE (2bits->1symbole =>16symboles possibles
=>12phases+3amplitudes possibles)
for i=1:2:length(z) %en code de gray->modulation:'gray'
if z(i)==0 && z(i+1)==0 zb(i)=0; end
if z(i)==1 && z(i+1)==1 zb(i)=1; end
if z(i)==0 && z(i+1)==1 zb(i)=2; end
if z(i)==1 && z(i+1)==0 zb(i)=3; end
end
zb;
for i=1:4:length(zb) %en code de gray->modulation:'gray'
if zb(i)==0 && zb(i+2)==0 z(i)=0; end
if zb(i)==0 && zb(i+2)==1 z(i)=1; end
if zb(i)==0 && zb(i+2)==2 z(i)=2; end
if zb(i)==0 && zb(i+2)==3 z(i)=3; end
if zb(i)==1 && zb(i+2)==0 z(i)=4; end
if zb(i)==1 && zb(i+2)==1 z(i)=5; end
if zb(i)==1 && zb(i+2)==2 z(i)=6; end
if zb(i)==1 && zb(i+2)==3 z(i)=7; end
if zb(i)==2 && zb(i+2)==0 z(i)=8; end
if zb(i)==2 && zb(i+2)==1 z(i)=9; end
if zb(i)==2 && zb(i+2)==2 z(i)=10; end
if zb(i)==2 && zb(i+2)==3 z(i)=11; end
if zb(i)==3 && zb(i+2)==0 z(i)=12; end
if zb(i)==3 && zb(i+2)==1 z(i)=13; end
if zb(i)==3 && zb(i+2)==2 z(i)=14; end
if zb(i)==3 && zb(i+2)==3 z(i)=15; end
end
z;
%SOUS-ECHANTILLONNAGE
%Sert à éliminer les valeurs en z(i+1,+2,+3) qui sont dès lors inutiles
z=downsample(z,4);
%MODULATION: adaptation du flux binaire au canal de transmission
M=16; %16-QAM
z=qammod(z,M,0); %'gray'(code de gray)ou 'bin'(normal)
%%%% CANAL %%%%%%%%%%%%%%%%%%%%%%%%%%%
%BRUIT POUR SIMULATION DU CANAL DE TRANSMISSION
z=awgn(z,snr,'measured','db'); %Y = AWGN(X,SNR,SIGPOWER,STATE
%FILTRE SIMULANT LES ATTENUATIONS FREQUENTIELLES DU CANAL
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 15
if zeroforcing==1
%application du filtre modélisant le canal
z=filter(c,1,z);
end
%FILTRE DE NYQUIST POUR SIMULER LA BANDE PASSANTE DU CANAL
%But: arriver à faire un filtre sans perturber le signal
%et obtenir la même courbe que sans filtre
if filtrenyquist==1
nb_ech_filtrage=1;
facteur_echantillonnage=2;
%calcul des coefficients du filtre FIR
%Fsymbole=7Mhz(DVB-C), pour avoir un filtre de nyquist
%il faut que la fréquence de coupure du filtre soit la moitié de la
%fréquence des symboles, d'où fc=3.5MHz.
%le filtre représentant l'effet de filtrage du canal il faut donc obtenir
%un débit binaire deux fois plus élevé que la fc du filtre
%la fonction rcosfir envoie en sortie T(symb/s)*rate(ici 2), cette sortie
%doit être égale à 7MHz pour respecter la bande passante=>T=3.5e6
%2:nombre de points ds chaque symbole, fait mieux apparaitre les pics
coeff=rcosfir(0.15,[-nb_ech_filtrage,nb_ech_filtrage],2,3.5e6);
%oversampling pour faire apparaitre le pic (1) à la réception
z=upsample(z,facteur_echantillonnage);
%simulation de l'effet du canal de transmission sur le signal carré
zreel=real(z);
zimag=imag(z);
zreel=filter(coeff,1,zreel);
zimag=filter(coeff,1,zimag);
z=zreel+zimag*j;
end
%%%% RECEPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%
if filtrenyquist==1
%décalage des bits du au retard du filtre
z=z(2*nb_ech_filtrage+1:length(z));
%sous-échantillonnage inverse
z=downsample(z,facteur_echantillonnage);
end
%EGALISEUR ZERO-FORCING POUR CORRIGER LES ATTENUATIONS
%FREQUENTIELLES DU CANAL
if zeroforcing==1
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 16
if correctionegaliseur==1
%application du filtre correcteur
z=filter(eq_zf,1,z);
%a cause du décalage généré par le filtrage
%on enleve les R derniers bits des valeurs initiales pour les remplacer
% par des zeros
%on enleve les R bits en début de chaine à la sortie de l'égaliseur
% et on ajoute des zéros à la fin pour avoir toujours le même nombre
% de bits qu'au départ(perte de données minime=R sur 1e4 échantillons)
L1=length(zin);
L2=length(z);
zin=zin(1:L1-2*R+2);%zin(L1-2*R+4:L1)=zeros(2*R,1); %2*R parce que
L(zin)=2*L(z)
z=z(R:L2);%z(L2-R+1:L2)=zeros(R,1);
%L1=10000ech->conv->20000>symbol->5000=L2
z;
end
end
%scatterplot(z);
%DEMODULATION
M=16; %quadrature de phase
z=qamdemod(z,M,0);
zout=z;
%SUR-ECHANTILLONNAGE
%Sert à ajouter les valeurs en z(i+1) qui vont être remplies
z=upsample(z,4);
%DEGROUPEMENT DES SYMBOLEs (1symbole->2bits)
for i=1:4:length(z) %en code de gray->modulation:'gray'
if z(i)==0 zb(i)=0; zb(i+2)=0; end
if z(i)==1 zb(i)=0; zb(i+2)=1; end
if z(i)==2 zb(i)=0; zb(i+2)=2; end
if z(i)==3 zb(i)=0; zb(i+2)=3; end
if z(i)==4 zb(i)=1; zb(i+2)=0; end
if z(i)==5 zb(i)=1; zb(i+2)=1; end
if z(i)==6 zb(i)=1; zb(i+2)=2; end
if z(i)==7 zb(i)=1; zb(i+2)=3; end
if z(i)==8 zb(i)=2; zb(i+2)=0; end
if z(i)==9 zb(i)=2; zb(i+2)=1; end
if z(i)==10 zb(i)=2; zb(i+2)=2; end
if z(i)==11 zb(i)=2; zb(i+2)=3; end
if z(i)==12 zb(i)=3; zb(i+2)=0; end
if z(i)==13 zb(i)=3; zb(i+2)=1; end
if z(i)==14 zb(i)=3; zb(i+2)=2; end
if z(i)==15 zb(i)=3; zb(i+2)=3; end
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 17
end
zb;
for i=1:2:length(zb) %en code de gray->modulation:'gray'
if zb(i)==0 z(i)=0; z(i+1)=0; end
if zb(i)==1 z(i)=1; z(i+1)=1; end
if zb(i)==2 z(i)=0; z(i+1)=1; end
if zb(i)==3 z(i)=1; z(i+1)=0; end
end
zout=z;
%DECODEUR CONVOLUTIF
if codeconvolutif==1
z=vitdec(z,t,1,'trunc','hard');
zout=z;
%'hard':décodage à decision dure (signal recu: bits et non symboles)
%avec cont delay de 1 bit en sortie car tblen=1, tblen est un entier
%positif
end
zout; %affichage
%%%% EXPLOITATION SIGNAL TRANSMIS %%%%%%%%%
%CALCUL DU TEB
nbecherron=0;
for i=1:1:length(zin)
nbecherron=nbecherron+abs(zout(i)-zin(i));
end
teb=nbecherron/nb_ech
BER=[BER teb];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end %Fin de boucle SNR
%trace la courbe de la probabilité d'erreur en fct du SNR
hold on;
semilogy([0:1:14],BER);
toc
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 18
TP Vidéotransmission – Master Audiovisuel et multimédia de Valenciennes – ISIS – Clément Follet – Mai 2008 – page 19