-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPart3_ChaineDeReference.m
138 lines (109 loc) · 3.92 KB
/
Part3_ChaineDeReference.m
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
%% Nettoyage
close all;
clear;
%% Variables initiales
nb_bits = 10000;
seuil_erreur = 1000;
Fe = 24000;
Rb = 3000;
N = 101;
a = [-1 1];
h = ones(1,Fe/Rb);
%h = ones(1,N);
hr = ones(1,Fe/Rb);
%hr = ones(1,N);
n0 = Fe/Rb;
%% Sans bruit
fprintf("Sans bruit\n");
[info_binaire_env_sans_bruit, info_binaire_recu_sans_bruit, ~, ~, x, ~, z] = transmission(Fe,Rb,N,a,nb_bits,Inf,n0,h,0,hr);
mod_DSP_2 = fftshift(abs(fft(xcorr(x,'unbiased'))));
plage_module_2=(-Fe/2:Fe/(length(mod_DSP_2)-1):Fe/2);
g = conv(h,hr);
oeil = reshape(z, 2*(Fe/Rb), length(z)/(2*(Fe/Rb)));
taux_erreur_binaire = sum(abs(info_binaire_recu_sans_bruit-info_binaire_env_sans_bruit))/length(info_binaire_env_sans_bruit);
%% Affichage sans bruit
figure('Name',"Modulateur",'Position', [100 100 1300 600]);
Bit = [0;1];
Mapping = a';
T = table(Bit,Mapping);
uitable('Data',T{:,:},'ColumnName',T.Properties.VariableNames,'FontUnits','normalized','FontSize',0.2,'Units','normalized','Position',[0 0.5 0.5 0.5]);
subplot(2,2,2);
plot((0:((Fe/Rb-1)/Fe)/(length(h)-1):(Fe/Rb-1)/Fe), h);
title('Filtre de mise en forme rectangulaire');
xlabel('Temps (s)');
ylabel('Hauteur');
subplot(2,2,3)
plot((0:1/Fe:((Fe/Rb)*nb_bits-1)/Fe), x);
title('Filtrage du modulateur 1');
xlabel('Temps (s)');
ylabel('Amplitude');
subplot(2,2,4);
plage_module=(-Fe/2:Fe/(length(mod_DSP_2)-1):Fe/2);
semilogy(plage_module,mod_DSP_2);
title("DSP du modulateur");
xlabel('Hz');
ylabel('Module TFD');
figure('Name','Signal filtré','Position', [100 100 1300 600]);
plot((0:1/Fe:((Fe/Rb)*nb_bits-1)/Fe),z);
title("Signal en sortie de filtre de réception");
xlabel("Temps")
ylabel("Amplitude");
figure('Name','Convolution','Position', [100 100 1300 600]);
plot((0:(2*(Fe/Rb-1)/Fe)/(length(g)-1):2*((Fe/Rb)-1)/Fe),g);
figure('Name',"Diagramme de l'oeil",'Position', [100 100 1300 600]);
plot(oeil(:,1:2*(Fe/Rb)));
fprintf("Taux d'erreur pour n0 = %.1f : %.4f.\n", n0, taux_erreur_binaire);
%% Avec bruit
fprintf("Avec bruit\n");
TEB_5_2 = [];
Z_5_2 = [];
E_bN0dB_2_oeil = 4:4:16;
E_bN0dB_2_TEB = 0:0.5:8;
i = 1;
figure('Name',"Différents diagrammes de l'oeil",'Position', [100 100 1300 600]);
for k=E_bN0dB_2_oeil
[~, ~ , ~, ~, ~, ~, z] = transmission(Fe,Rb,N,a,nb_bits,k,n0,h,0,hr);
oeil_bruit = reshape(z, 2*(Fe/Rb), length(z)/(2*(Fe/Rb)));
subplot(2,2,i);
plot(oeil_bruit(:,1:100*(Fe/Rb)));
title(strcat("Diagramme de l'oeil pour E_b/N_0", num2str(k), "dB"));
xlabel("Echantillons");
ylabel("Amplitude");
i = i + 1;
end;
% Calculs
for k=E_bN0dB_2_TEB
nb_bits_faux = 0;
nb_bits_tot = 0;
while nb_bits_faux < seuil_erreur
[info_binaire_env, info_binaire_recu, ~, ~, ~, ~, z] = transmission(Fe,Rb,N,a,nb_bits,k,n0,h,0,hr);
nb_bits_faux = sum(abs(info_binaire_recu-info_binaire_env)) + nb_bits_faux;
nb_bits_tot = nb_bits_tot + nb_bits;
end;
Z_5_2 = [Z_5_2 z'];
TEB_5_2 = [TEB_5_2 nb_bits_faux/nb_bits_tot];
end;
%% Théorique
TEB_th = qfunc(sqrt(2.*10.^(E_bN0dB_2_TEB/10)));
%% Affichage avec bruit
nb_diagramme_oeil = 4;
figure('Name',"Différents diagrammes de l'oeil",'Position', [100 100 1300 600]);
%for i=1:nb_diagramme_oeil
% subplot(floor(sqrt(nb_diagramme_oeil)),ceil(sqrt(nb_diagramme_oeil)),i);
% oeil_bruit = reshape(Z_5_2(:,floor(i*size(Z_5_2,2)/nb_diagramme_oeil)), 2*(Fe/Rb), length(Z_5_2(:,i*floor(size(Z_5_2,2)/nb_diagramme_oeil)))/(2*(Fe/Rb)));
% plot(oeil_bruit(:,1:100*(Fe/Rb)));
%title(strcat("Diagramme de l'oeil pour E_b/N_0 ",num2str(E_bN0dB_2(floor(i*size(Z_5_2,2)/nb_diagramme_oeil)))," dB"));
%xlabel("Echantillons");
%ylabel("Amplitude");
%end;
figure('Name', "Taux Erreur Binaire",'Position', [100 100 1300 600]);
s1 = semilogy(E_bN0dB_2_TEB, TEB_5_2);
hold on;
s2 = semilogy(E_bN0dB_2_TEB,TEB_th);
legend([s1, s2],"Valeur pratique","Valeur théorique");
hold off;
xlabel('Eb/N0 (dB)');
ylabel('TEB');
title('TEB simulé et théorique');
clearvars -except mod_DSP_2 plage_module_2 TEB_5_2 E_bN0dB_2_TEB;
save Chaine_5_2;