bonsoir ,

Je suis entrain de modéliser avec matlab une chaine de transmission en utlisant la modulation monoporteuse.

Le problème c'est que même si j'ajoute du bruit le signal reçu n'a pas d'erreur même si le SNR est trop faible.
Je vous envoie le script et je compte sur vous

Le script

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
clear; 
clc ;
close all;
k=2; %Ordre de modulation%
Nsymb=20;%Nbre de symbole
N=16;% le taux d'échantillonage
SNR=1; %rapport signal sur bruit en Db
 
%---------Paramètres du filtre de mise en forme 
 
g=ones(N,1);
Eg=sum(abs(g).^2); % Eg=16
g=g/sqrt(Eg);  % Eg=1 normalisation de l energie de l impulsion a l unité
Eg=sum(abs(g).^2);
 
%---------Generation des donnees binaires
 rand ('state', 13215);  randn ('state', 13215);
 data_tx=rand(Nsymb*k,1)>0.5; % Données logiques
 subplot(511);
 stem (data_tx,'r');grid on;
 
 
 %---------Mapping
 
 symb_tx=qam(data_tx,k);
 subplot(512);
 stem (symb_tx,'b');grid on;
break;
 %--------constellation à l emission
% scatterplot(symb_tx,1,0,'bo');grid on;%1 ne sauter aucun elt 0 commencer ar 0
 
 %--------Upsampling
 symb_tx_up=upsample(symb_tx,N);
 subplot(513);
 stem (symb_tx_up,'b');grid on;
 
 %---------Filtrage d'émission
 sig_tx=filter(g,1,symb_tx_up);
 subplot(514);plot (real(symb_tx_up),'r');grid on;
 
 %---------ajout du bruit blanc gaussien
sig_rx=awgn(sig_tx,SNR,'measured');
subplot(515);plot(real(sig_rx),'m');grid on;
 
 
%--------Filtrage de reception %
 symb_rx_up=filter(g,1,sig_rx);
 figure(2);
 subplot(411);plot (real(symb_rx_up),'r');grid on;
 
 
%-------downsampling(echantillonnage)
symb_rx=symb_rx_up(N:N:end);
subplot(412);stem(real(symb_rx),'m');grid on;
 
% -------demapping
data_rx=demodqam(symb_rx,k);
subplot(413);stem(real(data_rx),'r');grid on;
 
 
%--------constellation à la reception
 
% scatterplot(symb_rx,1,0,'ro');grid on;
 
 
%--------comparaison de données
 
vec_err=xor(data_tx,data_rx);% on retrouve l erreur dans un seul point si on a pas d'erreur on retrouve 1
N_err=sum(vec_err);
subplot(414);stem(real(vec_err),'m');grid on;
%Diagramme oeil
eyediagram(symb_rx_up,N,1,0);% le 1 est la periode -t/2 et +t/2 le 0 est l offset
grid on;
la fonction QAM qui fait le mapping
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
function out=qam(data,k)
NSymb=length(data)/k;
mat_bin=reshape(data,NSymb,k);
vec_dec=bi2de(mat_bin);
const=alphabet(k);
out=const(vec_dec+1);%donnée en ligne
out=out(:); %ts les elt de la matrice sous forme de colonne
end
Fonction alphabet pour les constelations
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
function alphabet = alphabet(k)
 
     switch k
     case  1 
            alphabet= [-1 1];
     case 2
            alphabet= [-1+j -1-j 1+j 1-j];
     case 4
            alphabet= [-1+j -1-j 1+j 1-j 3-j 3+j -3-j -3+j 1+3j 1-3j -1+3j -1-3j 3+3j 3-3j -3+3j -3-3j ];
 
     otherwise
            disp('Cette option n existe pas')
 
     end
Fonction demoqam
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
function data=demodqam(symb_rx,k)
const=alphabet(k);
for i=1:length(symb_rx)
[dist(i) index(i)]=min(abs(symb_rx(i)-const));
vec_dec(i)=index(i)-1;
mat_bin=de2bi(vec_dec,k)>0.5;
data=mat_bin(:);
end