TP-telecommunications/TP1/TP1_all.m
2023-06-20 21:23:24 +02:00

80 lines
2.1 KiB
Matlab

clear;
close all;
Fe = 24000;
Te = 1/Fe;
N = 1000000;
bits = randi([0, 1], 1, N);
Rb = 6000;
% modulateur 1
M = 2^1;
Ts = log2(M)/Rb;
Ns = floor(Ts/Te);
T = (0:N*Ns/log2(M)-1) * Te;
X_m = 2 * bits - 1; % mapping
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
h = ones(1, Ns); % réponse impulsionnelle rectangulaire
X_f = filter(h, 1, X_k); % produit de convolution (filtrage)
DSP_numerique = smoothdata(pwelch(X_f));
F_num = linspace(0, Fe/2, length(DSP_numerique));
plot(F_num, DSP_numerique/max(DSP_numerique));
hold;
% modulateur 2
M = 2^2;
Ts = log2(M)/Rb;
Ns = floor(Ts/Te);
T = (0:N*Ns/log2(M)-1) * Te;
X_r = reshape(bits, 2, N/2).'; % on regroupe pour avoir un symbole 4-aire
X_d = bi2de(X_r); % conversion en décimaux
X_m = X_d*2 - 3; % mapping
h = ones(1, Ns); % réponse impulsionnelle rectangulaire
X_k = kron(X_m.', [1 zeros(1, Ns-1)]); % Suréchantillonnage
X_f = filter(h, 1, X_k); % produit de convolution (filtrage)
DSP_numerique = smoothdata(pwelch(X_f));
F_num = linspace(0, Fe/2, length(DSP_numerique));
plot(F_num, DSP_numerique/max(DSP_numerique));
% modulateur 3
M = 2^1;
Ts = log2(M)/Rb;
Ns = floor(Ts/Te);
T = (0:N*Ns/log2(M)-1) * Te;
X_m = bits * 2 -1; % mapping
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
h = [ones(1, Ns/2) -ones(1, Ns/2)]; % réponse impulsionnelle de type front
X_f = filter(h, 1, X_k); % produit de convolution (filtrage)
DSP_numerique = smoothdata(pwelch(X_f));
F_num = linspace(0, Fe/2, length(DSP_numerique));
plot(F_num, DSP_numerique/max(DSP_numerique));
% modulateur 4
M = 2^1;
Ts = log2(M)/Rb;
Ns = floor(Ts/Te);
T = (0:N*Ns/log2(M)-1) * Te;
X_m = 2 * bits - 1; % mapping
X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage
h = rcosdesign(0.5, 8, Ns); % réponse impulsionnelle en racine de cosinus surélevé.
X_f = filter(h, 1, X_k); % produit de convolution (filtrage)
DSP_numerique = smoothdata(pwelch(X_f));
F_num = linspace(0, Fe/2, length(DSP_numerique));
plot(F_num, DSP_numerique/max(DSP_numerique));
% details
title("DSP des signaux transmis");
xlabel("Fréquence (Hz)");
ylabel("Amplitude");
ylim([ 0 1.5 ]);
legend("Modulateur 1", "Modulateur 2", "Modulateur 3", "Modulateur 4");