feat: add files
This commit is contained in:
commit
ac17c38479
165
TEB_test.m
Normal file
165
TEB_test.m
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
clear;
|
||||||
|
close all;
|
||||||
|
|
||||||
|
Fe = 24000; % fréquence d'échantillonage (Hz)
|
||||||
|
Te = 1/Fe; % période d'échantillonage (s)
|
||||||
|
N = 100000; % nombre de bits envoyés
|
||||||
|
Rb = 3000; % débit binaire
|
||||||
|
Fp = 2000; % fréquence porteuse
|
||||||
|
|
||||||
|
bits = [ 1 1 1 0 0 1 0 ];
|
||||||
|
% bits = randi([0, 1], 1, N); % bits envoyés
|
||||||
|
|
||||||
|
M = 2^1; % signal BPSK
|
||||||
|
Ts = log2(M)/Rb; % période symbole
|
||||||
|
Ns = floor(Ts/Te);
|
||||||
|
T = (0:N*Ns/log2(M)-1) * Te; % échelle temporelle
|
||||||
|
|
||||||
|
alpha0 = 1;
|
||||||
|
alpha1 = 0.5;
|
||||||
|
|
||||||
|
h = ones(1, Ns); % mise en forme: réponse impulsionnelle rectangulaire
|
||||||
|
h_c = [ alpha0 zeros(1, Ns-1) alpha1 ]; % propagation: sélectif
|
||||||
|
% h_c = [ 1 zeros(1, Ns-1) ]; % propagation: dirac
|
||||||
|
h_r = h; % réception: réponse impulsionnelle rectangulaire
|
||||||
|
|
||||||
|
n0 = Ns; % déterminé en traçant le diagramme de l'oeil ou g
|
||||||
|
|
||||||
|
%% tracé de g
|
||||||
|
g = conv(conv(h, h_c), h_r); % réponse impulsionnelle globale
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(g);
|
||||||
|
title("Tracé de g");
|
||||||
|
ylabel("Amplitude");
|
||||||
|
axis square;
|
||||||
|
|
||||||
|
%% chaine de transmission
|
||||||
|
X_m = 2 * bits - 1; % mapping binaire à moyenne nulle
|
||||||
|
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
|
||||||
|
X_f = filter(h, 1, X_k); % signal émis
|
||||||
|
X_c = filter(h_c, 1, X_f); % signal transmis
|
||||||
|
|
||||||
|
%% tracé de x_e
|
||||||
|
figure;
|
||||||
|
stairs(X_c);
|
||||||
|
axis(axis*1.1);
|
||||||
|
title("Signal transmis");
|
||||||
|
ylabel("Amplitude");
|
||||||
|
for i=1:length(bits)
|
||||||
|
index = n0/2 + (i-1)*Ns;
|
||||||
|
text(index + 0.8, X_c(index), num2str(bits(i)), 'Color', '#7E2F8E');
|
||||||
|
end
|
||||||
|
|
||||||
|
%% diagramme de l'oeil
|
||||||
|
figure;
|
||||||
|
X_r = filter(h_r, 1, X_c); % signal reçu, sans bruit
|
||||||
|
oeil = reshape(X_r(Ns+1:end), Ns, length(X_r(Ns+1:end))/Ns); % permet de tracer le diagramme de l'oeil, on retrouve n0 = 8
|
||||||
|
plot(oeil);
|
||||||
|
title("Diagramme de l'oeil");
|
||||||
|
ylabel("Amplitude");
|
||||||
|
axis square;
|
||||||
|
|
||||||
|
%% tracé de x_r
|
||||||
|
figure;
|
||||||
|
plot(X_r);
|
||||||
|
axis(axis*1.1);
|
||||||
|
title("Signal reçu");
|
||||||
|
ylabel("Amplitude");
|
||||||
|
|
||||||
|
%% réception
|
||||||
|
X_e = X_r( n0:Ns:length(bits)*Ns ); % échantillonage du signal reçu
|
||||||
|
recu = double( X_e > 0 ); % on récupère les bits, décision + "démapping"
|
||||||
|
erreur = mean((recu - bits).^2) % on calcule l'erreur
|
||||||
|
|
||||||
|
%% tracé des constellations
|
||||||
|
figure;
|
||||||
|
plot(complex(X_e(2:end)), "*");
|
||||||
|
hold;
|
||||||
|
plot(complex(X_m), ".", 'MarkerSize', 20);
|
||||||
|
axis(axis*1.1);
|
||||||
|
axis square;
|
||||||
|
title("Constellations");
|
||||||
|
legend("canal sélectif", "canal dirac");
|
||||||
|
xlabel("Re");
|
||||||
|
ylabel("Im");
|
||||||
|
|
||||||
|
%% tracé de TEB = f(E_b/N_0)
|
||||||
|
bits = randi([0, 1], 1, N); % bits envoyés
|
||||||
|
X_m = 2 * bits - 1; % mapping binaire à moyenne nulle
|
||||||
|
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
|
||||||
|
X_f = filter(h, 1, X_k); % signal émis
|
||||||
|
X_c = filter(h_c, 1, X_f); % signal transmis
|
||||||
|
|
||||||
|
P_x = mean(abs(X_c).^2); % puissance du signal en entrée de la reception
|
||||||
|
EbN0_db = linspace(0, 10, 200);
|
||||||
|
EbN0 = 10.^(EbN0_db./10);
|
||||||
|
TEBs = [];
|
||||||
|
for e=EbN0
|
||||||
|
sigma2_x = P_x * Ns / (log2(M) * e); % calcul de sigma^2
|
||||||
|
X_b = X_c + sqrt(sigma2_x) * randn(1, length(X_c)); % signal bruité
|
||||||
|
X_r = filter(h_r, 1, X_b); % signal reçu
|
||||||
|
|
||||||
|
X_e = X_r( n0:Ns:length(bits)*Ns/log2(M) ); % échantillonage du signal reçu
|
||||||
|
|
||||||
|
recu = double( X_e > 0 ); % on récupère les bits, décision + "démapping"
|
||||||
|
TEB = mean((recu - bits).^2); % on calcule l'erreur binaire
|
||||||
|
|
||||||
|
TEBs = [ TEBs TEB ];
|
||||||
|
end
|
||||||
|
|
||||||
|
TEB_theorique = 1/2*qfunc(3/2*sqrt(4/5*EbN0)) + 1/2*qfunc(1/2*sqrt(4/5*EbN0));
|
||||||
|
% TEB_theorique = qfunc(sqrt(EbN0));
|
||||||
|
|
||||||
|
close all;
|
||||||
|
|
||||||
|
figure;
|
||||||
|
semilogy(EbN0_db, TEBs, '+');
|
||||||
|
hold;
|
||||||
|
plot(EbN0_db, TEB_theorique);
|
||||||
|
title("TEB $$= f(E_b/N_0)$$", 'interpreter','latex');
|
||||||
|
xlabel("$$E_b/N_0$$ (dB)", 'interpreter','latex');
|
||||||
|
ylabel("TEB", 'interpreter','latex');
|
||||||
|
legend("TEB numérique", "TEB théorique (canal selectif)");
|
||||||
|
|
||||||
|
%% tracé de constellations bruitées
|
||||||
|
|
||||||
|
EbN0_db = linspace(0, 12, 4);
|
||||||
|
EbN0 = 10.^(EbN0_db./10);
|
||||||
|
for e=EbN0
|
||||||
|
sigma2_x = P_x * Ns / (log2(M) * e); % calcul de sigma^2
|
||||||
|
X_b = X_c + sqrt(sigma2_x) * randn(1, length(X_c)); % signal bruité
|
||||||
|
X_r = filter(h_r, 1, X_b); % signal reçu
|
||||||
|
|
||||||
|
X_e = X_r( n0:Ns:length(bits)*Ns/log2(M) ); % échantillonage du signal reçu
|
||||||
|
|
||||||
|
recu = double( X_e > 0 ); % on récupère les bits, décision + "démapping"
|
||||||
|
TEB = mean((recu - bits).^2); % on calcule l'erreur binaire
|
||||||
|
|
||||||
|
close all;
|
||||||
|
figure;
|
||||||
|
|
||||||
|
sp1 = subplot(2, 1, 1);
|
||||||
|
histogram(X_e, 100);
|
||||||
|
xlim([-40 40]);
|
||||||
|
xlabel("Re");
|
||||||
|
title("Histogramme, $$E_b/N_0 =$$ " + num2str(10*log10(e)) +"dB", 'interpreter','latex');
|
||||||
|
|
||||||
|
sp2 = subplot(2, 1, 2);
|
||||||
|
plot(complex(X_e(2:10:end)), "*");
|
||||||
|
hold;
|
||||||
|
plot(complex(X_m), ".", 'MarkerSize', 20);
|
||||||
|
xlim([-40 40]);
|
||||||
|
title("Constellations, $$E_b/N_0 =$$ " + num2str(10*log10(e)) +"dB", 'interpreter','latex');
|
||||||
|
legend("symboles bruités", "symboles théoriques");
|
||||||
|
xlabel("Re");
|
||||||
|
ylabel("Im");
|
||||||
|
|
||||||
|
sp2.Position(4) = 0.1;
|
||||||
|
sp1.Position(2) = 0.28;
|
||||||
|
sp1.Position(4) = 0.68;
|
||||||
|
|
||||||
|
pause(1);
|
||||||
|
print(gcf,"histcons_selectif_" + num2str(10*log10(e)) + "db.png", '-dpng', '-r300');
|
||||||
|
|
||||||
|
end
|
97
dessins.m
Normal file
97
dessins.m
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
clear;
|
||||||
|
close all;
|
||||||
|
|
||||||
|
Fe = 24000; % fréquence d'échantillonage (Hz)
|
||||||
|
Te = 1/Fe; % période d'échantillonage (s)
|
||||||
|
N = 10000; % nombre de bits envoyés
|
||||||
|
Rb = 3000; % débit binaire
|
||||||
|
|
||||||
|
M = 2^1; % signal BPSK
|
||||||
|
Ts = log2(M)/Rb; % période symbole
|
||||||
|
Ns = floor(Ts/Te);
|
||||||
|
T = (0:N*Ns/log2(M)-1) * Te; % échelle temporelle
|
||||||
|
|
||||||
|
alpha0 = 1;
|
||||||
|
alpha1 = 0.5;
|
||||||
|
|
||||||
|
n0 = Ns;
|
||||||
|
|
||||||
|
%% deux rectangles
|
||||||
|
figure;
|
||||||
|
LOS = ones(1, Ns);
|
||||||
|
multipath = ones(1, Ns)/2;
|
||||||
|
stairs(0:2*Ns-1, [LOS, multipath]);
|
||||||
|
ylim([0 1.1]);
|
||||||
|
xlim([0 2*Ns]);
|
||||||
|
title("h_e");
|
||||||
|
|
||||||
|
%% construction du signal avec les g
|
||||||
|
alpha0 = 1;
|
||||||
|
alpha1 = 0.5;
|
||||||
|
h = ones(1, Ns); % mise en forme: réponse impulsionnelle rectangulaire
|
||||||
|
h_c = [ alpha0 zeros(1, Ns-1) alpha1 ]; % propagation: sélectif
|
||||||
|
%h_c = [ 1 zeros(1, Ns-1) ]; % propagation: dirac
|
||||||
|
h_r = h; % réception: réponse impulsionnelle rectangulaire
|
||||||
|
g = conv(conv(h, h_c), h_r); % réponse impulsionnelle globale
|
||||||
|
|
||||||
|
bits = [ 1 1 1 0 0 1 0 ]; % bits envoyés
|
||||||
|
X_m = 2 * bits - 1; % mapping binaire à moyenne nulle
|
||||||
|
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
|
||||||
|
X_f = filter(h, 1, X_k); % signal émis
|
||||||
|
X_c = filter(h_c, 1, X_f); % signal transmis
|
||||||
|
X_r = filter(h_r, 1, X_c); % signal reçu, sans bruit
|
||||||
|
|
||||||
|
figure;
|
||||||
|
hold;
|
||||||
|
somme = zeros(1, length(g)+Ns*(length(bits)-1));
|
||||||
|
for i=0:length(bits)-1
|
||||||
|
somme = somme + [zeros(1, i*Ns) g*sign(X_m(i+1)) zeros(1, (length(bits)-i-1)*Ns) ];
|
||||||
|
plot( [zeros(1, i*Ns) g*sign(X_m(i+1)) zeros(1, (length(bits)-i-1)*Ns) ], '--');
|
||||||
|
text(Ns*(i+1) + 0, X_m(i+1), num2str(bits(i+1)), 'Color', '#7E2F8E');
|
||||||
|
end
|
||||||
|
plot(somme, 'LineWidth', 2);
|
||||||
|
legend('g(t - 0*Ns)', 'g(t - 1*Ns)', 'g(t - 2*Ns)', 'g(t - 3*Ns)', 'g(t - 4*Ns)', 'g(t - 5*Ns)', 'g(t - 6*Ns)', 'somme');
|
||||||
|
|
||||||
|
%% construction de z
|
||||||
|
|
||||||
|
alpha0 = 1;
|
||||||
|
alpha1 = 0.5;
|
||||||
|
h = ones(1, Ns); % mise en forme: réponse impulsionnelle rectangulaire
|
||||||
|
h_c = [ alpha0 zeros(1, Ns-1) alpha1 ]; % propagation: sélectif
|
||||||
|
%h_c = [ 1 zeros(1, Ns-1) ]; % propagation: dirac
|
||||||
|
h_r = h; % réception: réponse impulsionnelle rectangulaire
|
||||||
|
g = conv(conv(h, h_c), h_r); % réponse impulsionnelle globale
|
||||||
|
|
||||||
|
bits = [ 1 0 0 0 0 0 0 ]; % bits envoyés
|
||||||
|
X_m = 2 * bits - 1; % mapping binaire à moyenne nulle
|
||||||
|
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
|
||||||
|
X_f = filter(h, 1, X_k); % signal émis
|
||||||
|
X_c = filter(h_c, 1, X_f); % signal transmis
|
||||||
|
X_r = filter(h_r, 1, X_c); % signal reçu, sans bruit
|
||||||
|
|
||||||
|
figure;
|
||||||
|
hold;
|
||||||
|
somme = zeros(1, length(g)+Ns*(length(bits)-1));
|
||||||
|
for i=0:length(bits)-1
|
||||||
|
somme = somme + [zeros(1, i*Ns) g*sign(X_m(i+1)) zeros(1, (length(bits)-i-1)*Ns) ];
|
||||||
|
plot( [zeros(1, i*Ns) g*sign(X_m(i+1)) zeros(1, (length(bits)-i-1)*Ns) ], '--');
|
||||||
|
text(Ns*(i+1) + 0, X_m(i+1), num2str(bits(i+1)), 'Color', '#7E2F8E');
|
||||||
|
end
|
||||||
|
plot(somme);
|
||||||
|
|
||||||
|
%% quatres gaussiennes
|
||||||
|
T = -20:0.1:20;
|
||||||
|
sigma_w = sqrt(Ns);
|
||||||
|
g1 = gaussmf(T, [sigma_w -3*Ns/2]);
|
||||||
|
g2 = gaussmf(T, [sigma_w -Ns/2]);
|
||||||
|
g3 = gaussmf(T, [sigma_w Ns/2]);
|
||||||
|
g4 = gaussmf(T, [sigma_w 3*Ns/2]);
|
||||||
|
|
||||||
|
hold on;
|
||||||
|
plot(T, g1);
|
||||||
|
plot(T, g2);
|
||||||
|
plot(T, g3);
|
||||||
|
plot(T, g4);
|
||||||
|
|
||||||
|
legend("$$-\alpha_0-\alpha_1$$", "$$-\alpha_0+\alpha_1$$", "$$+\alpha_0-\alpha_1$$", "$$+\alpha_0+\alpha_1$$", 'interpreter','latex');
|
||||||
|
|
222
egalisation.m
Normal file
222
egalisation.m
Normal file
|
@ -0,0 +1,222 @@
|
||||||
|
clear;
|
||||||
|
close all;
|
||||||
|
|
||||||
|
Fe = 24000; % fréquence d'échantillonage (Hz)
|
||||||
|
Te = 1/Fe; % période d'échantillonage (s)
|
||||||
|
N = 10000; % nombre de bits envoyés
|
||||||
|
Rb = 3000; % débit binaire
|
||||||
|
|
||||||
|
zero_pad = 2^12;
|
||||||
|
|
||||||
|
M = 2^1; % signal BPSK
|
||||||
|
Ts = log2(M)/Rb; % période symbole
|
||||||
|
Ns = floor(Ts/Te);
|
||||||
|
T = (0:N*Ns/log2(M)-1) * Te; % échelle temporelle
|
||||||
|
|
||||||
|
alpha0 = 1;
|
||||||
|
alpha1 = 0.5;
|
||||||
|
|
||||||
|
h = ones(1, Ns); % mise en forme: réponse impulsionnelle rectangulaire
|
||||||
|
h_c = [ alpha0 zeros(1, Ns-1) alpha1 ]; % propagation: sélectif
|
||||||
|
h_r = h; % réception: réponse impulsionnelle rectangulaire
|
||||||
|
|
||||||
|
n0 = Ns; % déterminé en traçant le diagramme de l'oeil ou g
|
||||||
|
|
||||||
|
%% création de Z et C
|
||||||
|
ordre = 10;
|
||||||
|
K = ordre;
|
||||||
|
|
||||||
|
bits = [ 1 zeros(1, ordre-1) ]; % dirac
|
||||||
|
X_k = kron(bits, [1 zeros(1, Ns-1)]); % Suréchantillonnage
|
||||||
|
X_f = filter(h, 1, X_k); % signal émis
|
||||||
|
X_c = filter(h_c, 1, X_f); % signal transmis
|
||||||
|
X_r = filter(h_r, 1, X_c); % signal reçu, sans bruit
|
||||||
|
X_e = X_r( n0 : Ns : length(bits)*Ns ); % échantillonage du signal reçu
|
||||||
|
|
||||||
|
Z = zeros(K, ordre);
|
||||||
|
for i=1:ordre
|
||||||
|
Z(i:end, i) = X_e(1:K-i+1);
|
||||||
|
end
|
||||||
|
|
||||||
|
Y_0 = [ 1 zeros(1, ordre-1) ]';
|
||||||
|
C = Z \ Y_0;
|
||||||
|
|
||||||
|
%% tracés réponses en fréquence
|
||||||
|
|
||||||
|
X_eg = filter(C, 1, X_e);
|
||||||
|
|
||||||
|
g = conv(conv(h, h_c), h_r); % chaine globale
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(abs(fft(C, zero_pad)));
|
||||||
|
title("C");
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(abs(fft(g, zero_pad)));
|
||||||
|
title("G");
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(abs(fft(g, zero_pad).*fft(C', zero_pad)));
|
||||||
|
title("G \times C");
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot( ifft( abs(fft(g, zero_pad).*fft(C', zero_pad)) ));
|
||||||
|
title("g * c");
|
||||||
|
|
||||||
|
%% tracés réponses impulsionnelles
|
||||||
|
bits = [ 1 zeros(1, N-1) ];
|
||||||
|
X_m = 2 * bits - 1; % mapping binaire à moyenne nulle
|
||||||
|
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
|
||||||
|
X_f = filter(h, 1, X_k); % signal émis
|
||||||
|
X_c = filter(h_c, 1, X_f); % signal transmis
|
||||||
|
X_r = filter(h_r, 1, X_c); % signal reçu, sans bruit
|
||||||
|
X_e = X_r( n0 : Ns : length(bits)*Ns ); % échantillonage du signal reçu
|
||||||
|
X_eg = filter(C, 1, X_e); % égaliseur ZFE
|
||||||
|
|
||||||
|
figure;
|
||||||
|
tiledlayout(3,1);
|
||||||
|
|
||||||
|
ax1 = nexttile;
|
||||||
|
stairs(bits);
|
||||||
|
legend("Dirac");
|
||||||
|
|
||||||
|
ax2 = nexttile;
|
||||||
|
plot(X_e);
|
||||||
|
legend("Réponse impulsionnel non égalisée");
|
||||||
|
|
||||||
|
ax3 = nexttile;
|
||||||
|
plot(X_eg);
|
||||||
|
legend("Réponse impulsionnel égalisée");
|
||||||
|
|
||||||
|
linkaxes([ax1 ax2 ax3], 'xy');
|
||||||
|
axis( axis + [-1 1 -1 1]/5 );
|
||||||
|
axis
|
||||||
|
|
||||||
|
%% constellations
|
||||||
|
bits = randi([0, 1], 1, N); % bits envoyés
|
||||||
|
X_m = 2 * bits - 1; % mapping binaire à moyenne nulle
|
||||||
|
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
|
||||||
|
X_f = filter(h, 1, X_k); % signal émis
|
||||||
|
X_c = filter(h_c, 1, X_f); % signal transmis
|
||||||
|
X_r = filter(h_r, 1, X_c); % signal reçu, sans bruit
|
||||||
|
X_e = X_r( n0 : Ns : length(bits)*Ns ); % échantillonage du signal reçu
|
||||||
|
X_eg = filter(C, 1, X_e); % égaliseur ZFE
|
||||||
|
|
||||||
|
figure;
|
||||||
|
tiledlayout(3,1);
|
||||||
|
|
||||||
|
ax1 = nexttile;
|
||||||
|
plot(complex(X_m), ".", 'MarkerSize', 20);
|
||||||
|
symbols = unique(X_m(2:end));
|
||||||
|
for i=1:length(symbols)
|
||||||
|
text(symbols(i), 0.1, num2str(bits(find(X_m == symbols(i), 1))), 'Color', '#7E2F8E');
|
||||||
|
end
|
||||||
|
xlabel("Re");
|
||||||
|
ylabel("Im");
|
||||||
|
legend("Symboles théoriques");
|
||||||
|
grid;
|
||||||
|
|
||||||
|
ax2 = nexttile;
|
||||||
|
plot(complex(X_e(2:end)), ".", 'MarkerSize', 20);
|
||||||
|
symbols = unique(X_e(2:end));
|
||||||
|
for i=1:length(symbols)
|
||||||
|
text(symbols(i), 0.1, num2str(bits(find(X_e == symbols(i), 1))), 'Color', '#7E2F8E');
|
||||||
|
end
|
||||||
|
xlabel("Re");
|
||||||
|
ylabel("Im");
|
||||||
|
legend("Symboles reçus");
|
||||||
|
grid;
|
||||||
|
|
||||||
|
ax3 = nexttile;
|
||||||
|
plot(complex(X_eg(2:end)), ".", 'MarkerSize', 20);
|
||||||
|
symbols = unique(X_eg(2:end));
|
||||||
|
for i=1:length(symbols)
|
||||||
|
text(symbols(i), 0.1, num2str(bits(find(X_eg == symbols(i), 1))), 'Color', '#7E2F8E');
|
||||||
|
end
|
||||||
|
xlabel("Re");
|
||||||
|
ylabel("Im");
|
||||||
|
legend("Symboles égalisés");
|
||||||
|
grid;
|
||||||
|
|
||||||
|
linkaxes([ax1 ax2 ax3], 'xy');
|
||||||
|
|
||||||
|
%% tracé de constellations bruitées
|
||||||
|
|
||||||
|
P_x = mean(abs(X_c).^2); % puissance du signal en entrée de la reception
|
||||||
|
EbN0_db = linspace(0, 12, 4);
|
||||||
|
EbN0 = 10.^(EbN0_db./10);
|
||||||
|
for e=EbN0
|
||||||
|
sigma2_x = P_x * Ns / (log2(M) * e); % calcul de sigma^2
|
||||||
|
X_b = X_c + sqrt(sigma2_x) * randn(1, length(X_c)); % signal bruité
|
||||||
|
X_r = filter(h_r, 1, X_b); % signal reçu
|
||||||
|
X_e = X_r( n0:Ns:length(bits)*Ns/log2(M) ); % échantillonage du signal reçu
|
||||||
|
|
||||||
|
X_eg = filter(C, 1, X_e); % égaliseur ZFE
|
||||||
|
recu = double( X_eg > 0 ); % on récupère les bits, décision + "démapping"
|
||||||
|
|
||||||
|
close all;
|
||||||
|
figure;
|
||||||
|
|
||||||
|
sp1 = subplot(2, 1, 1);
|
||||||
|
histogram(X_eg, 100);
|
||||||
|
xlim([-4 4]);
|
||||||
|
xlabel("Re");
|
||||||
|
title("Histogramme, $$E_b/N_0 =$$ " + num2str(10*log10(e)) +"dB", 'interpreter','latex');
|
||||||
|
|
||||||
|
sp2 = subplot(2, 1, 2);
|
||||||
|
plot(complex(X_eg(2:10:end)), "*");
|
||||||
|
hold;
|
||||||
|
plot(complex(X_m), ".", 'MarkerSize', 20);
|
||||||
|
xlim([-4 4]);
|
||||||
|
title("Constellations, $$E_b/N_0 =$$ " + num2str(10*log10(e)) +"dB", 'interpreter','latex');
|
||||||
|
legend("symboles bruités", "symboles théoriques");
|
||||||
|
xlabel("Re");
|
||||||
|
ylabel("Im");
|
||||||
|
|
||||||
|
sp2.Position(4) = 0.1;
|
||||||
|
sp1.Position(2) = 0.28;
|
||||||
|
sp1.Position(4) = 0.68;
|
||||||
|
|
||||||
|
pause(1);
|
||||||
|
print(gcf,"histcons_egalise_" + num2str(10*log10(e)) + "db.png", '-dpng', '-r300');
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
%% tracé de TEB = f(E_b/N_0)
|
||||||
|
N = 100000; % nombre de bits envoyés
|
||||||
|
bits = randi([0, 1], 1, N); % bits envoyés
|
||||||
|
X_m = 2 * bits - 1; % mapping binaire à moyenne nulle
|
||||||
|
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
|
||||||
|
X_f = filter(h, 1, X_k); % signal émis
|
||||||
|
X_c = filter(h_c, 1, X_f); % signal transmis
|
||||||
|
|
||||||
|
P_x = mean(abs(X_c).^2); % puissance du signal en entrée de la reception
|
||||||
|
EbN0_db = linspace(0, 10, 200);
|
||||||
|
EbN0 = 10.^(EbN0_db./10);
|
||||||
|
TEBs = [];
|
||||||
|
for e=EbN0
|
||||||
|
sigma2_x = P_x * Ns / (log2(M) * e); % calcul de sigma^2
|
||||||
|
X_b = X_c + sqrt(sigma2_x) * randn(1, length(X_c)); % signal bruité
|
||||||
|
X_r = filter(h_r, 1, X_b); % signal reçu
|
||||||
|
|
||||||
|
X_e = X_r( n0:Ns:length(bits)*Ns/log2(M) ); % échantillonage du signal reçu
|
||||||
|
X_eg = filter(C, 1, X_e); % égaliseur ZFE
|
||||||
|
|
||||||
|
recu = double( X_eg > 0 ); % on récupère les bits, décision + "démapping"
|
||||||
|
TEB = mean((recu - bits).^2); % on calcule l'erreur binaire
|
||||||
|
|
||||||
|
TEBs = [ TEBs TEB ];
|
||||||
|
end
|
||||||
|
|
||||||
|
TEB_theorique = qfunc(sqrt(EbN0));
|
||||||
|
|
||||||
|
close all;
|
||||||
|
|
||||||
|
figure;
|
||||||
|
semilogy(EbN0_db, TEBs, '+');
|
||||||
|
hold;
|
||||||
|
plot(EbN0_db, TEB_theorique);
|
||||||
|
title("TEB $$= f(E_b/N_0)$$", 'interpreter','latex');
|
||||||
|
xlabel("$$E_b/N_0$$ (dB)", 'interpreter','latex');
|
||||||
|
ylabel("TEB", 'interpreter','latex');
|
||||||
|
legend("TEB numérique", "TEB théorique (canal dirac)");
|
84
oeil_g_trace_constellation.m
Normal file
84
oeil_g_trace_constellation.m
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
clear;
|
||||||
|
close all;
|
||||||
|
|
||||||
|
Fe = 24000; % fréquence d'échantillonage (Hz)
|
||||||
|
Te = 1/Fe; % période d'échantillonage (s)
|
||||||
|
N = 10000; % nombre de bits envoyés
|
||||||
|
Rb = 3000; % débit binaire
|
||||||
|
Fp = 2000; % fréquence porteuse
|
||||||
|
|
||||||
|
bits = [ 1 1 1 0 0 1 0 ];
|
||||||
|
% bits = randi([0, 1], 1, N); % bits envoyés
|
||||||
|
|
||||||
|
M = 2^1; % signal BPSK
|
||||||
|
Ts = log2(M)/Rb; % période symbole
|
||||||
|
Ns = floor(Ts/Te);
|
||||||
|
T = (0:N*Ns/log2(M)-1) * Te; % échelle temporelle
|
||||||
|
|
||||||
|
alpha0 = 1;
|
||||||
|
alpha1 = 0.5;
|
||||||
|
|
||||||
|
h = ones(1, Ns); % mise en forme: réponse impulsionnelle rectangulaire
|
||||||
|
h_c = [ alpha0 zeros(1, Ns-1) alpha1 ]; % propagation: sélectif
|
||||||
|
% h_c = [ 1 zeros(1, Ns-1) ]; % propagation: dirac
|
||||||
|
h_r = h; % réception: réponse impulsionnelle rectangulaire
|
||||||
|
|
||||||
|
n0 = Ns; % déterminé en traçant le diagramme de l'oeil ou g
|
||||||
|
|
||||||
|
%% tracé de g
|
||||||
|
g = conv(conv(h, h_c), h_r); % réponse impulsionnelle globale
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(g);
|
||||||
|
title("Tracé de g");
|
||||||
|
ylabel("Amplitude");
|
||||||
|
axis square;
|
||||||
|
|
||||||
|
%% chaine de transmission
|
||||||
|
X_m = 2 * bits - 1; % mapping binaire à moyenne nulle
|
||||||
|
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
|
||||||
|
X_f = filter(h, 1, X_k); % signal émis
|
||||||
|
X_c = filter(h_c, 1, X_f); % signal transmis
|
||||||
|
|
||||||
|
%% tracé de x_e
|
||||||
|
figure;
|
||||||
|
stairs(X_c);
|
||||||
|
axis(axis*1.1);
|
||||||
|
title("Signal transmis");
|
||||||
|
ylabel("Amplitude");
|
||||||
|
for i=1:length(bits)
|
||||||
|
index = n0/2 + (i-1)*Ns;
|
||||||
|
text(index + 0.8, X_c(index), num2str(bits(i)), 'Color', '#7E2F8E');
|
||||||
|
end
|
||||||
|
|
||||||
|
%% diagramme de l'oeil
|
||||||
|
figure;
|
||||||
|
X_r = filter(h_r, 1, X_c); % signal reçu, sans bruit
|
||||||
|
oeil = reshape(X_r(Ns+1:end), Ns, length(X_r(Ns+1:end))/Ns); % permet de tracer le diagramme de l'oeil, on retrouve n0 = 8
|
||||||
|
plot(oeil);
|
||||||
|
title("Diagramme de l'oeil");
|
||||||
|
ylabel("Amplitude");
|
||||||
|
axis square;
|
||||||
|
|
||||||
|
%% tracé de x_r
|
||||||
|
figure;
|
||||||
|
plot(X_r);
|
||||||
|
axis(axis*1.1);
|
||||||
|
title("Signal reçu");
|
||||||
|
ylabel("Amplitude");
|
||||||
|
|
||||||
|
%% réception
|
||||||
|
X_e = X_r( n0:Ns:length(bits)*Ns ); % échantillonage du signal reçu
|
||||||
|
recu = double( X_e > 0 ); % on récupère les bits, décision + "démapping"
|
||||||
|
erreur = mean((recu - bits).^2) % on calcule l'erreur
|
||||||
|
|
||||||
|
%% tracé des constellations
|
||||||
|
figure;
|
||||||
|
plot(complex(X_m), ".", 'MarkerSize', 20);
|
||||||
|
hold;
|
||||||
|
plot(complex(X_e(2:end)), "*");
|
||||||
|
axis(axis*1.1);
|
||||||
|
title("Constellations");
|
||||||
|
legend("canal dirac", "canal sélectif");
|
||||||
|
xlabel("Re");
|
||||||
|
ylabel("Im");
|
85
q2_2_4.m
Normal file
85
q2_2_4.m
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
clear;
|
||||||
|
close all;
|
||||||
|
|
||||||
|
Fe = 24000; % fréquence d'échantillonage (Hz)
|
||||||
|
Te = 1/Fe; % période d'échantillonage (s)
|
||||||
|
N = 50000; % nombre de bits envoyés
|
||||||
|
Rb = 3000; % débit binaire
|
||||||
|
Fp = 2000; % fréquence porteuse
|
||||||
|
|
||||||
|
% bits = [ 1 1 1 0 0 1 0 ];
|
||||||
|
bits = randi([0, 1], 1, N); % bits envoyés
|
||||||
|
|
||||||
|
M = 2^1; % signal BPSK
|
||||||
|
Ts = log2(M)/Rb; % période symbole
|
||||||
|
Ns = floor(Ts/Te);
|
||||||
|
T = (0:N*Ns/log2(M)-1) * Te; % échelle temporelle
|
||||||
|
|
||||||
|
alpha0 = 1;
|
||||||
|
alpha1 = 0.5;
|
||||||
|
|
||||||
|
h = ones(1, Ns); % mise en forme: réponse impulsionnelle rectangulaire
|
||||||
|
h_c = [ alpha0 zeros(1, Ns-1) alpha1 ]; % propagation: sélectif
|
||||||
|
% h_c = [ 1 zeros(1, Ns-1) ]; % propagation: dirac
|
||||||
|
h_r = h; % réception: réponse impulsionnelle rectangulaire
|
||||||
|
|
||||||
|
n0 = Ns; % déterminé en traçant le diagramme de l'oeil ou g
|
||||||
|
|
||||||
|
%% tracé de g
|
||||||
|
g = conv(conv(h, h_c), h_r); % réponse impulsionnelle globale
|
||||||
|
|
||||||
|
% figure;
|
||||||
|
% plot(g);
|
||||||
|
% title("Tracé de g");
|
||||||
|
% ylabel("Amplitude");
|
||||||
|
|
||||||
|
%% chaine de transmission
|
||||||
|
X_m = 2 * bits - 1; % mapping binaire à moyenne nulle
|
||||||
|
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
|
||||||
|
X_f = filter(h, 1, X_k); % signal émis
|
||||||
|
X_c = filter(h_c, 1, X_f); % signal transmis
|
||||||
|
|
||||||
|
%% tracé de X_c
|
||||||
|
% figure;
|
||||||
|
% stairs(X_c);
|
||||||
|
% axis(axis*1.1);
|
||||||
|
|
||||||
|
%% diagramme de l'oeil
|
||||||
|
figure;
|
||||||
|
X_r = filter(h_r, 1, X_c); % signal reçu, sans bruit
|
||||||
|
oeil = reshape(X_r(Ns+1:end), Ns, length(X_r(Ns+1:end))/Ns); % permet de tracer le diagramme de l'oeil, on retrouve n0 = 8
|
||||||
|
plot(oeil);
|
||||||
|
title("Diagramme de l'oeil");
|
||||||
|
xlabel("Temps (s)");
|
||||||
|
ylabel("Amplitude");
|
||||||
|
|
||||||
|
%% tracé de TEB = f(E_b/N_0)
|
||||||
|
P_x = mean(abs(X_c).^2);
|
||||||
|
EbN0_db = linspace(0, 10, 200);
|
||||||
|
EbN0 = 10.^(EbN0_db./10);
|
||||||
|
TEBs = [];
|
||||||
|
for e=EbN0
|
||||||
|
|
||||||
|
sigma2_x = P_x * Ns / (2 * log2(M) * e); % calcul de sigma^2
|
||||||
|
X_b = X_c + sqrt(sigma2_x) * randn(1, length(X_c)); % signal bruité
|
||||||
|
X_r = filter(h_r, 1, X_b); % signal reçu
|
||||||
|
|
||||||
|
X_e = X_r( n0:Ns:length(bits)*Ns/log2(M) ); % échantillonage du signal reçu
|
||||||
|
|
||||||
|
recu = double( X_e > 0 ); % on récupère les bits, décision + "démapping"
|
||||||
|
TEB = mean((recu - bits).^2); % on calcule l'erreur binaire
|
||||||
|
|
||||||
|
TEBs = [ TEBs TEB ];
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
bidule = sqrt ( EbN0 / 2 );
|
||||||
|
TEB_theorique = 1/2*qfunc(3 * bidule) + 1/2*qfunc(bidule);
|
||||||
|
|
||||||
|
figure;
|
||||||
|
semilogy(EbN0_db, TEBs, '+');
|
||||||
|
hold;
|
||||||
|
plot(EbN0_db, TEB_theorique);
|
||||||
|
title("TEB $$= f(E_b/N_0)$$", 'interpreter','latex');
|
||||||
|
xlabel("$$E_b/N_0$$ (dB)", 'interpreter','latex');
|
||||||
|
ylabel("TEB", 'interpreter','latex');
|
123
q3_2_2_a.m
Normal file
123
q3_2_2_a.m
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
clear;
|
||||||
|
close all;
|
||||||
|
|
||||||
|
Fe = 24000; % fréquence d'échantillonage (Hz)
|
||||||
|
Te = 1/Fe; % période d'échantillonage (s)
|
||||||
|
N = 50000; % nombre de bits envoyés (bit)
|
||||||
|
Rb = 3000; % débit binaire (bit/s)
|
||||||
|
|
||||||
|
% bits = [ 1 1 1 0 0 1 0 ];
|
||||||
|
|
||||||
|
M = 2^1; % signal BPSK
|
||||||
|
Ts = log2(M)/Rb; % période symbole
|
||||||
|
Ns = floor(Ts/Te);
|
||||||
|
T = (0:N*Ns/log2(M)-1) * Te; % échelle temporelle
|
||||||
|
|
||||||
|
h = ones(1, Ns); % mise en forme: réponse impulsionnelle rectangulaire
|
||||||
|
h_c = [ 1 zeros(1, Ns-1) 0.5 ]; % propagation: sélectif
|
||||||
|
h_r = h; % réception: réponse impulsionnelle rectangulaire
|
||||||
|
|
||||||
|
n0 = Ns; % déterminé en traçant le diagramme de l'oeil ou g
|
||||||
|
|
||||||
|
%% création de Z et C
|
||||||
|
|
||||||
|
ordre = 10;
|
||||||
|
K = ordre;
|
||||||
|
|
||||||
|
bits = [ 1 zeros(1, ordre-1) ]; % dirac
|
||||||
|
X_m = 2 * bits - 1; % mapping binaire à moyenne nulle
|
||||||
|
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
|
||||||
|
X_f = filter(h, 1, X_k); % signal émis
|
||||||
|
X_c = filter(h_c, 1, X_f); % signal transmis
|
||||||
|
X_r = filter(h_r, 1, X_c); % signal reçu, sans bruit
|
||||||
|
X_e = X_r( n0:Ns:length(bits)*Ns ); % échantillonage du signal reçu
|
||||||
|
|
||||||
|
Z = zeros(K, ordre);
|
||||||
|
for i=1:ordre
|
||||||
|
Z(i:end, i) = X_e(1:K-i+1);
|
||||||
|
end
|
||||||
|
|
||||||
|
Y_0 = [ 1 zeros(1, ordre-1) ]';
|
||||||
|
C = Z \ Y_0;
|
||||||
|
|
||||||
|
%% tracé de X_c
|
||||||
|
% figure;
|
||||||
|
% plot(X_e);
|
||||||
|
% axis(axis*1.1);
|
||||||
|
% title("non égalisé");
|
||||||
|
|
||||||
|
%% tracé de X_egal
|
||||||
|
|
||||||
|
% X_egal = filter(C, 1, X_e);
|
||||||
|
|
||||||
|
% figure;
|
||||||
|
% plot(X_egal);
|
||||||
|
% axis(axis*1.1);
|
||||||
|
% title("égalisé");
|
||||||
|
|
||||||
|
%% tracé de g et g_eg
|
||||||
|
|
||||||
|
g = conv(conv(h, h_c), h_r);
|
||||||
|
g_eg = conv(g, C);
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(abs(fft(g, 4096)));
|
||||||
|
figure;
|
||||||
|
plot(abs(fft(g_eg, 4096)));
|
||||||
|
|
||||||
|
%% tracé de g et g_eg
|
||||||
|
|
||||||
|
% figure;
|
||||||
|
% plot(g);
|
||||||
|
% figure;
|
||||||
|
% plot(g_eg);
|
||||||
|
|
||||||
|
%% tracé de TEB = f(E_b/N_0)
|
||||||
|
|
||||||
|
bits = randi([0, 1], 1, N); % bits envoyés
|
||||||
|
X_m = 2 * bits - 1; % mapping binaire à moyenne nulle
|
||||||
|
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
|
||||||
|
X_f = filter(h, 1, X_k); % signal émis
|
||||||
|
X_c = filter(h_c, 1, X_f); % signal transmis
|
||||||
|
|
||||||
|
P_x = mean(abs(X_c).^2);
|
||||||
|
EbN0_db = linspace(0, 10, 200);
|
||||||
|
EbN0 = 10.^(EbN0_db./10);
|
||||||
|
TEBs = [];
|
||||||
|
for e=EbN0
|
||||||
|
|
||||||
|
sigma2_x = P_x * Ns / (2 * log2(M) * e); % calcul de sigma^2
|
||||||
|
X_b = X_c + sqrt(sigma2_x) * randn(1, length(X_c)); % signal bruité
|
||||||
|
|
||||||
|
X_eg = filter(C, 1, X_b); % égalisation ZFE
|
||||||
|
X_r = filter(h_r, 1, X_eg); % signal reçu
|
||||||
|
|
||||||
|
X_e = X_r( n0:Ns:length(bits)*Ns/log2(M) ); % échantillonage du signal reçu
|
||||||
|
|
||||||
|
recu = double( X_e > 0 ); % on récupère les bits, décision + "démapping"
|
||||||
|
TEB = mean((recu - bits).^2); % on calcule l'erreur binaire
|
||||||
|
|
||||||
|
TEBs = [ TEBs TEB ];
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
bidule = sqrt ( EbN0 / 2 );
|
||||||
|
TEB_theorique = 1/2*qfunc(3 * bidule) + 1/2*qfunc(bidule);
|
||||||
|
|
||||||
|
figure;
|
||||||
|
semilogy(EbN0_db, TEBs, '+');
|
||||||
|
hold;
|
||||||
|
plot(EbN0_db, TEB_theorique);
|
||||||
|
title("TEB $$= f(E_b/N_0)$$", 'interpreter','latex');
|
||||||
|
xlabel("$$E_b/N_0$$ (dB)", 'interpreter','latex');
|
||||||
|
ylabel("TEB", 'interpreter','latex');
|
||||||
|
|
||||||
|
%% tracé des constellations
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(complex(X_m), '.', 'MarkerSize', 25);
|
||||||
|
hold;
|
||||||
|
plot(complex(X_e), '+');
|
||||||
|
plot(complex(X_eg), '*');
|
||||||
|
axis([-2 2 -1 1]);
|
||||||
|
legend("symboles", "non égalisé", "égalisé");
|
BIN
rapport.pdf
Normal file
BIN
rapport.pdf
Normal file
Binary file not shown.
87
reponse_impsulsionnelle.m
Normal file
87
reponse_impsulsionnelle.m
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
clear;
|
||||||
|
close all;
|
||||||
|
|
||||||
|
Fe = 24000; % fréquence d'échantillonage (Hz)
|
||||||
|
Te = 1/Fe; % période d'échantillonage (s)
|
||||||
|
N = 10; % nombre de bits envoyés
|
||||||
|
Rb = 3000; % débit binaire
|
||||||
|
|
||||||
|
M = 2^1; % signal BPSK
|
||||||
|
Ts = log2(M)/Rb; % période symbole
|
||||||
|
Ns = floor(Ts/Te);
|
||||||
|
T = (0:N*Ns/log2(M)-1) * Te; % échelle temporelle
|
||||||
|
|
||||||
|
alpha0 = 1;
|
||||||
|
alpha1 = 0.5;
|
||||||
|
|
||||||
|
h = ones(1, Ns); % mise en forme: réponse impulsionnelle rectangulaire
|
||||||
|
h_c = [ alpha0 zeros(1, Ns-1) alpha1 ]; % propagation: sélectif
|
||||||
|
h_r = h; % réception: réponse impulsionnelle rectangulaire
|
||||||
|
|
||||||
|
n0 = Ns; % déterminé en traçant le diagramme de l'oeil ou g
|
||||||
|
|
||||||
|
%% création de Z et C
|
||||||
|
|
||||||
|
ordre = 10;
|
||||||
|
K = ordre;
|
||||||
|
|
||||||
|
bits = [ 1 zeros(1, ordre-1) ]; % dirac
|
||||||
|
X_m = 2 * bits - 1; % mapping binaire à moyenne nulle
|
||||||
|
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
|
||||||
|
X_f = filter(h, 1, X_k); % signal émis
|
||||||
|
X_c = filter(h_c, 1, X_f); % signal transmis
|
||||||
|
X_r = filter(h_r, 1, X_c); % signal reçu, sans bruit
|
||||||
|
X_e = X_r( n0 : Ns : length(bits)*Ns ); % échantillonage du signal reçu
|
||||||
|
|
||||||
|
Z = zeros(K, ordre);
|
||||||
|
for i=1:ordre
|
||||||
|
Z(i:end, i) = X_e(1:K-i+1);
|
||||||
|
end
|
||||||
|
|
||||||
|
Y_0 = [ 1 zeros(1, ordre-1) ]';
|
||||||
|
C = Z \ Y_0;
|
||||||
|
|
||||||
|
X_eg = filter(C, 1, X_e);
|
||||||
|
|
||||||
|
g = conv(conv(h, h_c), h_r); % chaine globale
|
||||||
|
|
||||||
|
% figure;
|
||||||
|
% plot(g);
|
||||||
|
% hold;
|
||||||
|
% plot(g_eg);
|
||||||
|
|
||||||
|
% figure;
|
||||||
|
% plot(abs(fft(C, 2^10)));
|
||||||
|
% title("C");
|
||||||
|
% figure;
|
||||||
|
% plot(abs(fft(g, 2^10)));
|
||||||
|
% title("g");
|
||||||
|
% figure;
|
||||||
|
% plot(abs(fft(g, 2^10).*fft(C', 2^10)));
|
||||||
|
% title("g \times C");
|
||||||
|
|
||||||
|
%% tracé d'une réponse impulsionnelle
|
||||||
|
|
||||||
|
bits = [ 1 zeros(1, N-1) ];
|
||||||
|
X_m = 2 * bits - 1; % mapping binaire à moyenne nulle
|
||||||
|
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
|
||||||
|
X_f = filter(h, 1, X_k); % signal émis
|
||||||
|
X_c = filter(h_c, 1, X_f); % signal transmis
|
||||||
|
X_r = filter(h_r, 1, X_c); % signal reçu, sans bruit
|
||||||
|
X_e = X_r( n0 : Ns : length(bits)*Ns ); % échantillonage du signal reçu
|
||||||
|
X_eg = filter(C, 1, X_e); % égaliseur ZFE
|
||||||
|
|
||||||
|
figure;
|
||||||
|
stairs(X_m);
|
||||||
|
title("X_m");
|
||||||
|
axis([1 10 -1.1 1.1]);
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(X_e);
|
||||||
|
title("X_e");
|
||||||
|
saveaxis = axis;
|
||||||
|
figure;
|
||||||
|
|
||||||
|
plot(X_eg);
|
||||||
|
title("X_{eg}");
|
||||||
|
axis(saveaxis);
|
Loading…
Reference in a new issue