-
Notifications
You must be signed in to change notification settings - Fork 0
/
ofdma.m
98 lines (69 loc) · 2 KB
/
ofdma.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
clear; clc; close all;
fe=400e3;% fréquence d'échantillonnage
dt=1/fe;%Pas d'échantillonnage
Nb=256; % nombre de donnée binaires
Ns=12; %nombre de symboles
NIG= 32; % nombre de bit de l'intervalle de garde
D=5e3;% Débit binaire
fp=20e3;% fréquence de la porteuse
T=1/D;%durée d'un moment
N=T/dt;%taux d'échantillonnage
Nc=20;% facteur d'étalement
Ne= round(N/Nc); % taux d'échantillonnage étalé
t= 0 : dt : Nb*T-dt;%axe de temps
c=Nb-NIG+1; % nombre de bits non inclus dans l'intervalle de garde
%1) ----------Géneration des données ------
data1 = rand(Ns,Nb)>0.5;
symbole1= 2*data1-1;
data2 = rand(Ns,Nb)>0.5;
symbole2= 2*data2-1;
symbole3 = symbole1 + j*symbole2;
symboles = symbole3/square(2);
% Série/Parallèle
symbolest= symboles.'; %transposé
% Transformée de fourier inverse
TF = ifft(symbolest);
% Parallèle / Série
TFt = TF.';
% L'intervalle de garde
x1 = TFt(:,c:Nb); % concaténation
IG = [x1,TFt]; % intervalle de garde
IGV = reshape(IG, 1, Ns*(NIG+Nb)); % vecteur 3456 elements
% canal awgn
y = awgn(IGV,20); % canal bruité
%y = IGV;
y1= reshape(y, 12, NIG+Nb);
% supression de l'intervalle de garde
SIG = y1(:,33:288); % suppression de l'intervalle de garde
SIGt= SIG.'; % série parallèle
z= fft(SIGt);
%
constelations=[1+j,1-j,-1+j,-1-j];
for i=1:Nb
for j=1:Ns
for k=1:4
vector=constelations-z (i,j);
[d,indice]= min(abs(vector));
tableau(i,j)=constelations(indice);
end
end
end ;
% comparaison : errors count
counterror=0;
for i=1:Nb
for j=1:Ns
if abs((tableau(i,j)-symbolest(i,j))>0)
counterror=counterror+1;
end
end
end
%applyfading
yfading =ApplyFading(IGV,2,6);
%ajout de bruit
yfadingnoise=awgn(yfading,40);
%reception
SIG = yfadingnoise(:,33:288); % suppression de l'intervalle de garde
SIGt= SIG.'; % série parallèle
z= fft(SIGt);
yegaliser=z*conj(y);
stem(real(yegaliser)); grid on; xlim([0 10]);