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");