Pour cette question, j’ai utilisé deux fonctions supplémentaires : une pour gérer la constellation
et une autre pour changer les données de la forme [0,1,2…] pour la forme de la constellation.
nb_symbol_new=1024;// Nsc*8
Data1=int(rand(1, nb_symbol_new, 'uniform')*M);
Data=mapping(Data1,nb_symbol_new,M,type_constellation);
end
elseif (type_constellation=="PSK")
for i=0:M-1
Constellation(1,i+1) = 3*(cos(%pi/M + i*2*%pi/M) + %i*sin(%pi/M + i*2*%pi/M))
end
2
end
endfunction
map = zeros(1,size_data)
for j = 1:size_data
for k = 1:M
if data(1,j) == symbol_mapping(1,k)
map(1,j)= constellation(1,k)
end
end
end
endfunction
reel = real(vsig_ofdm)
imaginaire = imag(vsig_ofdm)
temps = 0:Tech:length(reel)*Tech-Tech
figure(1);
subplot(2,1,1),plot(temps, reel);
title("Partie reel du signal OFDM")
xlabel("temps [s]")
ylabel("partie reel")
3
subplot(2,1,2), plot(temps, imaginaire);
title("Partie imaginaire du signal OFDM")
xlabel("temps [s]")
ylabel("partie imaginaire")
figure(2);
subplot(2,1,1),histplot(50, reel);
title("histogramme de la partie reel du signal OFDM")
subplot(2,1,2), histplot(50, imaginaire);
title("histogramme de la partie imaginaire du signal OFDM")
4
3.3- Afficher la densité spectrale de puissance du signal
5
psdx = (1/((1/Tech)/N))*abs(xdft).^2;
frequence = 0:(1/Tech)/N:(1/Tech)/2;
psdx_db = 10*log10(psdx);
plot(frequence, psdx_db) ;
title("Densité spectrale de puissance en dB");
p_signal = mean(abs(vsig_ofdm).^2);
p_bruit = p_signal*10^(-SNR/10);
bruit = sqrt(p_bruit/2)*(rand(1, length(vsig_ofdm), 'normal') +
%i*rand(1,length(vsig_ofdm), 'normal'));
SNR_test = 10*log10(p_signal) - 10*log10(mean(abs(bruit).^2));
sig_recu = vsig_ofdm + bruit;
6
5-Réception du OFDM
verreur = sig_demo-Data;
bit_error = length(verreur);
for i = 1:length(verreur);
if verreur(i)==0+%i*0 then
bit_error = bit_error-1;
end
end
taux_error = bit_error/length(verreur) ;
disp("Pour une modulation: ", type_constellation, M) ;
disp("SNR: ", SNR) ;
disp("Taux d’erreur:") ;
disp(taux_error) ;
// Symboles reçus
fig = figure();
plot(real(v_sig_recu), imag(v_sig_recu), 'r*')
title("Symboles reçus")
xlabel("partie reel")
ylabel("Partie imaginaire")
7
// Fonction pour la question 5
for i=1:length(data)
for j=1:length(constellation)
if distance(i,j) == min(distance(i,:))
demodulation(1,i)=constellation(1,j)
end
end
end
endfunction
8
Partie 2
QAM-16 et SNR=-5dB
taux_error = 0.4697266
9
QAM-16 et SNR=0
taux_error = 0.2763672
QAM-16 et SNR=5dB
taux_error = 0.0654297
10
QAM-16 et SNR=10dB
taux_error = 0.0039062
11
QAM-16 et SNR=15dB
taux_error=0
12
PSK
PSK-16 et SNR=-5dB
taux_error = 0.5107422
13
PSK-16 et SNR=0 dB
taux_error = 0.3037109
14
PSK-16 et SNR=5dB
taux_error = 0.0644531
15
PSK-16 et SNR=10dB
taux_error = 0.0029297
16
PSK-16 et SNR=15 dB
taux_error = 0.
Nous pouvons conclure que QAM a taux d’erreur qui est plus petit que PSK.
17