Académique Documents
Professionnel Documents
Culture Documents
m 1/2
clear;
close all;
%% Modulateur OFDM TP1
%ICI ON TRAVAILLE ON VECTEUR LIGNE
%% Paramètres:
B = 1 . 0 9 5 * 1 0 ^ 6 ; % bande occupée (−CP)
N = 1 2 8 ; % Nb de sous porteuses, ou FFT Size
S C S = 1 5 * 1 0 ^ 3 ; % espacement entre les sous porteuses
l = 2 ;%première indice de la fréquence active selon la figure 2
M = 4 ; % modulation QAM
Fs=1.92*10^6;
t=(0:N−1)/Fs;
rng(0);
%% 2)
%% a)sous−porteuses actives
C=(B/SCS)−1; % nb de sous porteuses actives (−1 à acause de DC)
%nb de symboles QAM à générer
ind_freq=[l:round(C/2)+1 (N−(round(C/2)+1−l):N)]; % selon figure2 on a C/2 actives positives,
%0 au milieu, C/2 actives negatives
%% b)symboles aléatoire
seq_ent=randsrc(1,C,[0:M−1]);
d=qammod(seq_ent,M);
%% c) IFFT
e(ind_freq)=d; %mettre les symboles sur les porteuses actives; % add zeros
s=ifft(e);
Ts=1/Fs;
Tu=N*Ts; %durée d’une symbole, et nombre de point
plot(t,real(s),’o−’), grid o n;
%% 3)
%% a) Nombre de points du CP
Tg_long=16.67*10^−6; % donnée par l’énoncé
Ng=round(Tg_long*Fs);
Perte_long=Ng/(Ng+N);
%% b) Puissance
K = N + N g ; % longueur total du symbole OFDM avec OFDM
%puissance estimé
P=(1/K)*sum(sg.*conj(sg)); %1/K)*sum(abs(sg).^2) (5)
% puissance théorique
dk=qammod([0:3],M); %(valeur possible)
var_dk=(1/M)*sum(dk.*conj(dk));
p_th=C*var_dk*(1/N^2);
1 2 / 3 / 2 1 1 0 : 2 5 P M /home/orimbato/TP_CNU/TP1_1.m 2/2
%% c) Facteur d’Amplitude A
Pa_dbm=−30;
Pa_db=Pa_dbm−30;
A_dB=Pa_db−(10*log10(P));
A=10^(A_dB/20);
verif_lte_symbol(s_test,1,1,M,Pa_db);
1 2 / 3 / 2 1 1 0 : 2 6 P M /home/orimbato/TP_CNU/TP1_2_frame.m 1/2
close all;
clear;
%% frame OFDM
%% paramètres
B = 1 . 0 9 5 * 1 0 ^ 6 ; % bande occupée (−CP)
N = 1 2 8 ; % Nb de sous porteuses, ou FFT Size
S C S = 1 5 * 1 0 ^ 3 ; % espacement entre les sous porteuses
l = 2 ;%première indice de la fréquence active selon la figure 2
M = 4 ; % modulation QAM
Fs=1.92*10^6;
t=(0:N−1)/Fs;
rng(0);
%préfixe cyclique
Tg_long=16.67*10^−6;
Ng=round(Tg_long*Fs);
ind_freq=[l:round(C/2)+1 (N−(round(C/2)+1−l):N)];
%%
Nu=C;
%% donées à transmettre
% data=zeros(C,Nt);
%
% for i=1:Nt
% e_b=randsrc(1,Nu,[0:M−1]);
% d=qammod(e_b,M);
% d=d.’; %vecteur colonne
% data(:,i)=d;
% end
seq_ent=randsrc(C,Nt,(0:M−1)); %matrice de Nu*Nt
data=qammod(seq_ent,M);
%% trame
frame=zeros(N+Ng,Nt);
for k=1:Nt
d=data(:,k);
d=d.’;
e(ind_freq)=d; %entrée IFFT
s=ifft(e);
CP=s(N−Ng+1:N); %prefixe cyclique
sg=[CP s]; %vecteur ligne ajout préfixe cyclique
sg=sg.’; %ranger en vecteur colonne
frame(:,k)=sg;
end
frame=frame(:);
1 2 / 3 / 2 1 1 0 : 2 6 P M /home/orimbato/TP_CNU/TP1_2_frame.m 2/2
%% ajustement de puissance
P=(1/length(frame))*sum(frame.*conj(frame));
Pa_dbm=−10;
Pa_db=Pa_dbm−30;
A_dB=−(10*log10(P));
A=10^(A_dB/20);
frame=A*frame;
verif_lte_frame(frame,1,2,M,Pa_db);
%% 5) DSP
1 2 / 3 / 2 1 1 0 : 2 6 P M /home/orimbato/TP_CNU/TP2_1.m 1/2
clear;
close all;
%% Démodulateur OFDM TP2
%ICI ON TRAVAILLE ON VECTEUR LIGNE
%% Paramètres:
B = 1 . 0 9 5 * 1 0 ^ 6 ; % bande occupée (−CP)
N = 1 2 8 ; % Nb de sous porteuses, ou FFT Size
S C S = 1 5 * 1 0 ^ 3 ; % espacement entre les sous porteuses
l = 2 ;%première indice de la fréquence active selon la figure 2
M = 4 ; % modulation QAM
Fs=1.92*10^6;
t=(0:N−1)/Fs;
rng(0);
%% Modulation
%sous−porteuses actives
C=(B/SCS)−1;
ind_freq=[l:round(C/2)+1 (N−(round(C/2)+1−l):N)]; % selon figure2 on a C/2 actives positives,
%0 au milieu, C/2 actives negatives
%symboles aléatoire
seq_ent=randsrc(1,C,[0:M−1]);
d=qammod(seq_ent,M);
%IFFT
e(ind_freq)=d; %mettre les symboles sur les porteuses actives; % add zeros
s=ifft(e);
Ts=1/Fs;
Tu=N*Ts; %durée d’une symbole, et nombre de point
%Nombre de points du CP
Tg_long=16.67*10^−6; % donnée par l’énoncé
Ng=round(Tg_long*Fs);
CP=s(N−Ng+1:N); %+1 à cause de l’indice Matlab
sg=[CP s]; % ajout du préfixe cyclique
%Puissance
K = N + N g ; % longueur total du symbole OFDM avec OFDM
%puissance estimé
P=(1/K)*sum(sg.*conj(sg)); %1/K)*sum(abs(sg).^2) (5)
%% c) Facteur d’Amplitude A
Pa_dbm=−10;
Pa_db=Pa_dbm−30;
A_dB=Pa_db−(10*log10(P));
A=10^(A_dB/20);
rg=A*sg;
%% 1 Génération de x(t)
%puissance du bruit
Pb_dbm=−100;
Pb_db=Pb_dbm−30;
Pb=10^(Pb_db/10);
%atténuation
k_db=−60;%20log(k)
k=10^(k_db/20);
SNR=Pa_dbm−Pb_dbm;
b=complex((sqrt(Pb/2))*randn(1,length(rg)),(sqrt(Pb/2))*randn(1,length(rg)));
%% 2)RSB
x=k*rg+b;
1 2 / 3 / 2 1 1 0 : 2 6 P M /home/orimbato/TP_CNU/TP2_1.m 2/2
%% 3 Démodulation seule
%% i) remove CP
x=x(length(CP)+1:length(x));
%% ii) FFT
y=fft(x);
%% iii) remove zeros
y_n=y(ind_freq);
%% 4) Information binaire/entiere
yn=y_n/(A*k); %symboles QAM démodulés
scatterplot(y_n), grid o n;
%% 5)Estimation RSBout
%signal sans bruit
st=k*rg;
x_est=st(length(CP)+1:length(st));
x_k=fft(x_est);
%bruit seul
nn=b(length(CP)+1:length(st));
nn_k=fft(nn); %bruit en sortie de l’FFT
yn_k=x_k+nn_k;
RSBout_th=(N/C)*10^(RSB/10);
RSBout=Pst/Pnn_k;
close all;
clear;
%% 6. démodulation frame OFDM
%% paramètres
B = 1 . 0 9 5 * 1 0 ^ 6 ; % bande occupée (−CP)
N = 1 2 8 ; % Nb de sous porteuses, ou FFT Size
S C S = 1 5 * 1 0 ^ 3 ; % espacement entre les sous porteuses
l = 2 ;%première indice de la fréquence active selon la figure 2
M = 4 ; % modulation QAM
Fs=1.92*10^6;
t=(0:N−1)/Fs;
rng(0);
Pa_dbm=−10;
Pa_db=Pa_dbm−30;
%préfixe cyclique
Tg_long=16.67*10^−6;
Ng=round(Tg_long*Fs);
end
frame=frame(:);
frame=frame.’;
%ajustement de puissance
P=(1/length(frame))*sum(frame.*conj(frame));
A_dB=Pa_db−(10*log10(P));
A=10^(A_dB/20);
frame=A*frame;
%% 2) Ajout du bruit
Pb_dbm=−100;
Pb_db=Pb_dbm−30;
Pb=10^(Pb_db/10);
%attenutaion
k_db=−60;
k=10^(k_db/20);
SNR=Pa_dbm−Pb_dbm;
b=complex((sqrt(Pb/2))*randn(1,length(frame)),(sqrt(Pb/2))*randn(1,length(frame)));
RSB=k_db+Pa_db−Pb_db;
1 2 / 3 / 2 1 1 0 : 2 7 P M /home/orimbato/TP_CNU/TP2_2_frame.m 2/2
%% 3) Démodulation
frame_y=zeros(Nu,Nt);
%% info_binaire/reconstitué
y_frame=frame_y/(A*k);
y_frame=y_frame(:);
scatterplot(y_frame),grid o n;
seq_est=qamdemod(y_frame,M);
seq_ent=qamdemod(data(:),M); %s/f matrice
[Nberreur,SER]=symerr(seq_ent,seq_est);
[Nberreur_bit,BER]=biterr(de2bi(seq_ent),de2bi(seq_est));
1 2 / 3 / 2 1 1 0 : 2 8 P M /home/orimbato/TP_CNU/OFDM_CTM.m 1/2
%% parametres
B = 1 . 0 9 5 * 1 0 ^ 6 ; % bande occupée (−CP)
N = 1 2 8 ; % Nb de sous porteuses, ou FFT Size
S C S = 1 5 * 1 0 ^ 3 ; % espacement entre les sous porteuses
l = 2 ;%première indice de la fréquence active selon la figure 2
M = 4 ; % modulation QAM
Fs=1.92*10^6;
t=(0:N−1)/Fs;
rng(0);
%% canal
a=[0.04 −0.05 0.07 −0.21 −0.5 0.72 0.36 0 0.21 0.03 0.07]; %proakis a
b=[0.407 0.815 0.407]; %proakis b
%echos
rho=0.9*exp(1i*pi/4);
ao=1/sqrt(1+abs(rho)^2);
a1=rho/sqrt(1+abs(rho)^2);
echo=[ao a1];
%% symboles aléatoires
seq_ent=randsrc(1,C,[0:M−1]);
d=qammod(seq_ent,M);
%%IFFT
e(ind_freq)=d; %mettre les symboles sur les porteuses actives; % add zeros
s=ifft(e);
Ts=1/Fs;
Tu=N*Ts;
%% Ajout du CP
Tg_long=16.67*10^−6;
Ng=round(Tg_long*Fs);
CP=s(N−Ng+1:N);
sg=[CP s];
rg=sg;
%rg=s; %sans CP
%% Canal
Cn=fft(a,N); % réponse fréquentielle du canal à écho
x=filter(a,1,rg);
%ajout du bruit
%% reception 1.
xg=x(length(CP)+1:length(x));
y=fft(xg);
y_1=y(ind_freq);
scatterplot(y_1),grid o n; %toutes infos sont perdues
1 2 / 3 / 2 1 1 0 : 2 8 P M /home/orimbato/TP_CNU/OFDM_CTM.m 2/2
%% egalisation
En=1./Cn;
zn=En.*y; %Egalisation
zn=zn(ind_freq);
scatterplot(zn),grid o n; % parfaitement reconstitué
1 2 / 3 / 2 1 1 0 : 0 1 P M /home/orimbato/TP_CNU_EXAM2020−2021/prog1.m 1/1
clear;
close all;
rng(0); %% génère toujour la meme séquence
%% paramètres
N = 1 0 0 0 ; %FFT Size
C = 7 0 0 ; % Sous porteuses actives
%Tu=(1/10^4);
Fs=10*10^6;
Ts=1/Fs;
l = 2 ; %indice après le DC
M = 1 6 ; % taille de la constellation
n=log2(M); %nombre de bit par symbole QAM
%% 0 Préliminaires
Tu=N*Ts;
delta_f=1/Tu;
Tg=Tu/10;
Ng=Tg/Ts;
N_ofdm=N+Ng;
%% indices de fréquence
ind_freq=[l:round(C/2)+1 (N−(round(C/2)+1−l):N)];
%bande de fréquence
B=C*(1/Tu);
%% symboles OFDM
% symboles QAM
e_b=randsrc(1,C,[0:M−1]);
d=qammod(e_b,M);
%ifft
e(ind_freq)=d; % entrée IFFT
s=ifft(e); %sortie IFFT
%% puissance
P=(1/(N_ofdm))*sum(sg.*conj(sg));
%facteur d’amplitude
Pa_dbm=0;
A_dB=Pa_dbm−30−(10*log10(P));
A=10^(A_dB/20);
clear;
close all;
rng(0); %% génère toujour la meme séquence
%% paramètres
N = 1 0 0 0 ; %FFT Size
C = 7 0 0 ; % Sous porteuses actives
Nu=C;
%Tu=(1/10^4);
Fs=10*10^6;
Ts=1/Fs;
l = 2 ; %indice après le DC
M = 1 6 ; % taille de la constellation
n=log2(M); %nombre de bit par symbole QAM
Nt=7*20;
%% 0 Préliminaires
Tu=N*Ts;
delta_f=1/Tu;
Tg=Tu/10;
Ng=Tg/Ts;
N_ofdm=N+Ng;
%% indices de fréquence
ind_freq=[l:round(C/2)+1 (N−(round(C/2)+1−l):N)];
%bande de fréquence
B=C*(1/Tu);
%% frame OFDM
% on fait passer chaque colonne de
frame=zeros(N_ofdm,Nt);
e=zeros(1,N);
for i=1:Nt
d=data(:,i);
d=transpose(d);% ramener en ligne
e(ind_freq)=d; %entrée IFFT
s=ifft(e);
CP=s(N−Ng+1:N); %prefixe cyclique
sg=[CP s]; %vecteur ligne ajout préfixe cyclique=d1.’; %revenir en ligne
sg=transpose(sg);
frame(:,i)=sg;
end
frame=frame(:); % transformer en vecteur colonne
%% ajustement de puissance
P=(1/length(frame))*sum(frame.*conj(frame));
Pa_dbm=0;
Pa_db=Pa_dbm−30
A_dB=−(10*log10(P));
A=10^(A_dB/20);
frame=A*frame;
verif_ofdm(frame,2,1);
1 2 / 3 / 2 1 1 0 : 0 1 P M /home/orimbato/TP_CNU_EXAM2020−2021/prog2.m 2/2
1 2 / 3 / 2 1 1 0 : 0 0 P M /home/orimbato/TP_CNU_EXAM2020−2021/prog3.m 1/2
clear;
close all;
rng(0); %% génère toujour la meme séquence
%% paramètres
N = 1 0 0 0 ; %FFT Size
C = 7 0 0 ; % Sous porteuses actives
Nu=C;
%Tu=(1/10^4);
Fs=10*10^6;
Ts=1/Fs;
l = 2 ; %indice après le DC
M = 1 6 ; % taille de la constellation
n=log2(M); %nombre de bit par symbole QAM
Nt=7*20;
%% 0 Préliminaires
Tu=N*Ts;
delta_f=1/Tu;
Tg=Tu/10;
Ng=Tg/Ts;
N_ofdm=N+Ng;
%% indices de fréquence
ind_freq=[l:round(C/2)+1 (N−(round(C/2)+1−l):N)];
%bande de fréquence
B=C*(1/Tu);
%% frame OFDM
frame=zeros(N_ofdm,Nt);
e=zeros(1,N);
for i=1:Nt
d=data(:,i);
d=transpose(d);% ramener en ligne
e(ind_freq)=d; %entrée IFFT
s=ifft(e);
CP=s(N−Ng+1:N); %prefixe cyclique
sg=[CP s]; %vecteur ligne ajout préfixe cyclique;
sg=transpose(sg); %revenir en ligne
frame(:,i)=sg;
end
frame=frame(:); % transformer en vecteur colonne
%% ajustement de puissance
P=(1/length(frame))*sum(frame.*conj(frame));
Pa_dbm=0;
Pa_db=Pa_dbm−30;
A_dB=Pa_db−(10*log10(P));
A=10^(A_dB/20);
frame=A*frame;
%puissance du bruit
Pb_dbm=−95;
Pb_db=Pb_dbm−30;
Pb=10^(Pb_db/10);
%bruit
b=complex((sqrt(Pb/2))*randn(1,length(frame)),(sqrt(Pb/2))*randn(1,length(frame)));
b=transpose(b); %vecteur colonne
%signal
x=k*frame+b;
verif_ofdm(x,3,1)
[B,V]=pwelch(b,[256],[128],[1024],Fs,’centered’) ;
[X_sans_bruit,V2]=pwelch(x_sans_bruit,[256],[128],[1024],Fs,’centered’) ;
%
figure,
plot(V,10*log10(B)), grid o n, hold o n %V2 and V
plot(V2,10*log10(X_sans_bruit),’linewidth’,2),title("Spectres du signal et du bruit") ,
xlabel(’Hz’) ,
legend(’bruit’,’signal’)
SNR_th=((Pa_dbm−30)+k_db−(Pb_dbm−30))+10*log10(N)−10*log10(Nu); %RSBout=RSB*(N/Nu)
RSB=Pa*k/Pb;
%% c)Démodulateur
frame_x=reshape(x,[N+Ng,Nt]); %pour avoir une matrice
frame_y=zeros(C,Nt);
for i=1:Nt
x=frame_x(:,i);
x_g=x(Ng+1:length(x)); %enlever CP
y=fft(x_g);
y_n=y(ind_freq);
frame_y(:,i)=y_n;
end
frame_y=frame_y/(A*k); %trame recue
yn=frame_y(:);
scatterplot(yn),grid o n, title(’Symboles QAM reconstitués’); %constellation
[Num,Rat]=symerr(seq,seq_est);
1 2 / 3 / 2 1 1 0 : 2 5 P M /home/orimbato/TP_CNU_EXAM2020−2021/prog4.m 1/1
%% paramètres
N = 1 0 0 0 ; %FFT Size
C = 7 0 0 ; % Sous porteuses actives
Nu=C;
%Tu=(1/10^4);
Fs=10*10^6;
Ts=1/Fs;
l = 2 ; %indice après le DC
M = 1 6 ; % taille de la constellation
n=log2(M); %nombre de bit par symbole QAM
%Nt=7*20;
%% 0 Préliminaires
Tu=N*Ts;
delta_f=1/Tu;
Tg=Tu/10;
Ng=Tg/Ts;
N_ofdm=N+Ng;
%indice de fréquence
ind_freq=[l:round(C/2)+1 (N−(round(C/2)+1−l):N)];
Cn=fft(canal,N);
En=1./Cn;
En=transpose(En); %car tout est en vecteur ligne ici
Nt=length(r_tot)/(N+Ng); %nombre de symbole OFDM
%% démodulation
frame_r_tot=reshape(r_tot,[N+Ng,Nt]); %pour avoir une matrice
frame_y=zeros(C,Nt);
x=0;
for i=1:Nt
x=frame_r_tot(:,i);
x=x(Ng+1:length(x)); %enlever CP
y=fft(x);
y_n=z(ind_freq);
frame_y(:,i)=y_n;
end
yn=frame_y(:);
scatterplot(yn); %constellation
seq_est=qamdemod(yn,M); %matrice symbole reconstitué
%show_image(’image.jpg’,seq_est,M);