-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathofdm_receiver.m
More file actions
113 lines (90 loc) · 2.38 KB
/
ofdm_receiver.m
File metadata and controls
113 lines (90 loc) · 2.38 KB
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
clear all;
A = load('/home/taras/tpi/Malenchyk.mat');
rd = A.rfeDump;
rd_conj = conj(rd);
Nfft = 8192;%number of fft samples for one symbol ofdm
GI = Nfft/4; %guard interval
window_size = GI;
s = [];
c = ones(1,window_size);
for i = 1:(length(rd) - Nfft)
s(i) = rd_conj(i)*rd(i + Nfft);
end
y = conv(s,c);
figure(1)
plot(abs(y));
grid;
tr = zeros(1, GI+Nfft);
for t = 0:length(y)/(GI+Nfft)-1
tr = tr + y(t*(window_size+Nfft)+1:(t+1)*(window_size+Nfft));
end
figure(2)
plot(abs(tr));
grid;
[val, ind] = max(tr);
phi = atan2(imag(tr(ind)), real(tr(ind)));
S = [];
for k = 1:length(rd)
S(k) = rd(k)*exp(-1i*phi*k/(Nfft));
end
%% Check
S_conj = conj(S);
i = 1;
for i = 1:(length(S) - Nfft)
s_check(i) = S_conj(i)*S(i + Nfft);
end
y_check = conv(s_check,c);
tr_check = zeros(1, GI+Nfft);
for t = 0:length(y_check)/(GI+Nfft)-1
tr_check = tr_check + y_check(t*(window_size+Nfft)+1:(t+1)*(window_size+Nfft));
end
figure(3)
plot(abs(tr_check));
grid;
[val_check, ind_check] = max(tr_check);
phi_check = atan2(imag(tr_check(ind_check)), real(tr_check(ind_check)));
%% Post-FFT synchronization
symbols_vec = S(ind_check:end-5709);
symbols = [];
for i = 0:25
symbols(i+1,:) = symbols_vec(i*(Nfft+GI)+1:(i+1)*Nfft+i*GI);
end
%
% first_symbol = symbols_vec(1:Nfft);
%
fft_symbol = fft(symbols.', Nfft);
fft_symbol = fftshift(fft_symbol);
figure(4);
plot(abs(fft_symbol(:,1)));
grid;
H = comm.PNSequence('Polynomial', [11 2 0], ...
'SamplesPerFrame', 5616, ...
'InitialConditions', [1 1 1 1 1 1 1 1 1 1 1]);
ff = step(H);
h = -step(H)*2+1;
h = h';
mask = [1,0,0,0,0,0,0,0,0,0,0,0];
mask = repmat(mask,1,468);
mask1 = mask.*h;
m2 = [0,0,0,1,0,0,0,0,0,0,0,0];
m2 = repmat(m2,1,468);
mask2 = m2.*h;
m3 = [0,0,0,0,0,0,1,0,0,0,0,0];
m3 = repmat(m3,1,468);
mask3 = m3.*h;
m4 = [0,0,0,0,0,0,0,0,0,1,0,0];
m4 = repmat(m4,1,468);
mask4 = m4.*h;
mask1 = [zeros(1,1288) mask1 zeros(1,1288)];
mask2 = [zeros(1,1288) mask2 zeros(1,1288)];
mask3 = [zeros(1,1288) mask3 zeros(1,1288)];
mask4 = [zeros(1,1288) mask4 zeros(1,1288)];
r = zeros(8192,1);
M1 = (fft(mask1'));
M2 = (fft(mask2'));
M3 = (fft(mask3'));
M4 = (fft(mask4'));
for i = 4:4:26
r = r + abs((ifft((fft(fft_symbol(:,i))).*conj(M2))));
end
plot(r);