📄 ofdm.m
字号:
%-------------------------------------------------------
% TP de Communications Num閞iques : transmission OFDM
%-------------------------------------------------------
clear all;
close all;
N = 2^15;
M = 4;
Ns = N/M;
Np = 256;
L = 64;
Ntirage = 1;
s = zeros(1, Ns);
sest = zeros(1, Ns);
aEst = zeros(1,N);
x = zeros(1,Ns + L*Ns/Np);
r = zeros(1,Ns);
Teb = zeros(1,10);
% Filtre mod閘isant le canal
%---------------------------
h = [1 -0.7];
H = fft(h,Np) /sqrt(Np); % DFT de h pour Zero Forcing
% Chaine de communication
%------------------------
for EbN0db = 0:9
%data = fopen('data.txt','a');
for k = 1:Ntirage
% G閚閞ation d'une trame binaire uniform閙ent distribu閑
a = round(rand(1,N));
% Mise sur constellation : modulation 16-QAM
for j = 1:Ns
word = a(1+(j-1)*4:j*4);
s(j) = MQAM(word);
end
sigmas2 = var(s);
Es = sigmas2;
sigmab2 = Es/log2(2^M) * 10^(-EbN0db /10);
%-----------------------------------------------
% Emetteur OFDM
j = 1:Np;
index = 1:Np+L;
while j(end) <= Ns
ofdmSymb = s(j); % S/P
xk = sqrt(Np)*ifft(ofdmSymb,Np); % IDFT
prefix = xk(end-L+1:end); % pr閒ixe cyclique
x(index) = [prefix xk]; % P/S
j = j+Np;
index = index +Np+L;
end
%----------------------------------------------
% Passage dans le canal
xf = canal(x, h);
% Ajout de Bruit blanc gaussien complexe
b = bcgaussien (sigmab2, length(xf));
y = xf + b;
%----------------------------------------------
% R閏epteur OFDM
j = 1:Np;
p = 1:Np+L;
while j(end) <= Ns
yk = y(p); % S/P
yk = yk(L+1:end); % suppression du pr閒ixe
rk = fft(yk,Np) /sqrt(Np); % DFT
rkt = rk ./ H; % ZF
r(j) = rkt; % P/S
j = j+Np;
p = p+Np+L;
end
%-----------------------------------------------
% D閏ision
for j=1:Ns
sest(j) = seuil(r(j));
end
% Demapping
for j = 1:Ns
word = unmapping(sest(j));
aEst(1+(j-1)*4:j*4) = word;
end
% Calcul des erreurs bit
diff = mod(aEst - a, 2);
Teb(EbN0db +1) = Teb(EbN0db +1) + sum(diff);
end
% Teb moyen
Teb(EbN0db +1) = Teb(EbN0db +1) / (Ntirage * N);
EbN0db
Teb(EbN0db +1)
% 閏riture des Teb dans un fichier
%fprintf(data,'%i %f\n',EbN0db,Teb(EbN0db +1));
%fclose(data);
end
semilogy([0:9],Teb);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -