clear; close all; Fe = 24000; % Hz Te = 1/Fe; % s N = 1000; % nombre de bits envoyés Rb = 3000; % débit binaire bits = randi([0, 1], 1, N); % bits envoyés M = 2^1; % signal binaire Ts = log2(M)/Rb; % période symbole Ns = floor(Ts/Te); T = (0:N*Ns/log2(M)-1) * Te; % échelle temporelle fc = 1000; % fréquence de coupure, BW ordre = 100; % ordre du filtre span = 10; % largeur du racine de cosinus surélevé h = rcosdesign(0.5, span, Ns); % mise en forme: racine de cosinus surélevé h_c = (2*fc/Fe)*sinc(2*fc*[-(ordre-1)*Te/2 : Te : (ordre-1)*Te/2]); % propagation: bande limitée BW h_r = h; % réception: racine de cosinus surélevé g = conv(conv(h, h_c), h_r); % réponse impulsionnelle globale n0 = 1; % déterminé en traçant g figure; plot(g); title("Tracé de g"); ylabel("Amplitude"); X_m = 2 * bits - 1; % mapping binaire à moyenne nulle X_k = kron(X_m, [1 zeros(1, Ns-1)]); % Suréchantillonnage X_k = [ X_k zeros(1, span*Ns + ordre/2) ]; % on rajoute des zéros pour le retard 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 X_r = X_r(span*Ns+1 + ordre/2:length(X_r)); % on supprime le retard figure; oeil = reshape(X_r, Ns, length(X_r)/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"); X_e = X_r( n0:Ns:N*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 figure; hold; padding = 2^10; F = [0:1/padding:1-1/padding]*Fe; plot( F, normalize(abs(fft(conv(h, h_r), padding)), 'range') ); plot( F, abs(fft(h_c, padding)) ); xlabel('Fréquence (Hz)'); ylabel('Amplitude'); legend('|H H_r|', '|H_c|'); title(strcat("Critère de Nyquist en fréquentiel pour BW = ", num2str(fc)));