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