ืืืืืจ ืฉืื ืืืื ืืื ืืืฉืืืช ืืงืื ืจื ืฉื ืืื ืฉืขืฉื ืืช ืืจื ืืชืื ืืช ืืืขื ืืืงืจื (ืื ืื ืืืืคื ืืืขื).
ืื, ืื ื ืืืื ืฉืื ืืกืืื ืฉืื ืืื ืจืง ืืืืืื ืฉืื, ืืื ื ืจืื ืื ืฉืืื ืืฉืชืื ืืืื ืืืืื ืืืืืืช. ืืชืจื ืืื, ืื ืืกืืื ืืืชืืืจ ืืืื ืืชืืืืก ืืืชืจ ืืชืืื ืืคืขืืืืช ืืืืขืืช, ืืื ืื ืืขืืืื ืื ืฆืืืง - ืื ืืืื ืืืืืช ืฉืืืืฉื ืืืืฅ.
ืืงืืจ:
ืืืืคื ืืืื, ืืืงืืฉ ืืื ืืชืืืืืื ืืืืื ืืชืืืื ืืฉืขืืจ!
ืฆืืคืืืช
ืืฉืกืืืืชื ืืช ืืชืืืจ ืืจืืฉืื ืฉืื ืืืื ืืืืืืืช ืืืืข ืืืขืจืืืช ืชืงืฉืืจืช ื-2014, ืื ืืืขืชื ืืืขื ืืืื ืขื ืขืืื ืืชืื ืืช. ืื, ืืื ืจืืื ืืืจืื, ืืงืืชื ืืช ืื ืืฉื "ืืืขื ืืืืฉื" ืืฉื ื ืืจืืฉืื ื ืฉืื - ืืื, ืืืืืื, ืื ืืื ืืฉื ื ืืจืืฉืื ื ืฉืื! ืื ืืื ื ืฆื!
ืืืืคื ืืืื, ืื ืฆืืคืืชื ืืืฉืื ืฉืื ื ืืืืืื ืืชืืืจ ืจืืฉืื, ืืืฉื ืื ืกืชื ืืชืื ืืช ืืชืืืจ ืฉื ื
ืื ืืฉืืื...
ืืืื ื ืจืง ืืงืืืื ืืฉื ืืื, ืืืืืจ'ื ืืืจืืฉืื ืขืืืื ืืจืื ืืืืืืืช ืืืจืื ืื ืืจืืืงื (ืืืชืืืืช ื ืืฉืืช ืฉืืฉื ืืืืฉืื ืืฉื ื ืืฉื ืืื ืืชืืืจ ืฉื ื). ืืืืืื ืืืจืืช, ืืืฉ ืืืืขืื ืืงืจืื ืขืื ืื ื ืชืงื ืืจืฆืื ืืช ืืฉืืืืช ืืืื ืื ืืืืจืืคื, ืืื ืืื ืื ืืฉืืื ืขื ืืคืจืืื.
ืืฉื ื ืืจืืฉืื ื ืฉืื ื, ืืืืื, ืืื ืื ื ืกืืืื ืฉืื ืื ืฉื ืคืจืงืืืงืืช, ืฉืืื ืืืจื ืืื ืืฆืืขื ืื ื ืืืืคื ืืืืงืจืื ืืืืจื ืืื ืืชืืืช ืกืงืจืืคืืื (ืืขืืงืจ ืืฉืคืช MATLAB) ืืืื ืฉืืืืฉ ืืืืฉืงื GUI ืฉืื ืื ืืืื ืืืืืืื (ืืืืื ืฉืืื ืืชืืืช ืกืงืจืืคืืื - ืกืืืืืฆืื ืกืืืืืช ืืืืื ืืช).
ืืืืชืจ ืืฆืืื ืฉืื ืื ื, ืืืืกืืจืื ืืขืชืืืืื ืืืืขืื, ืืชืื ืืืคืฉืืช ืื ืขืืจืื ืฉืื ื, ื ืื ืขื ื ืืืืชืื ืงืื ืืื ืืฉ. ืื ื, ืืืฉื, Simulink ื- MathWorks: ืื ื ืืืืืงืื, ืื ื ืืืืืืจืื, ืื ื ืื ืืื ื ืืืืจืืช ืืืชืืื.
ืืฉืงืคื ืืงืืจืืช ืืืืื ืช ืืืื ืฉืขืื ืืขืืจ ืืชืื ืื ืืขืืืื ืืื ืืกืช ืืขืจืืืช!
ืื ืื ื ืจืื ืื ื...
ืืืฆืืืืช
ืืืช ืืขืืืืืช ืืืขืฉืืืช ืฉื ืืกืืกืืจ ืืจืืฉืื ืืืืชื ืคืืชืื ืืฉืืจ ืืืชืืช OFDM ืืืกืืจืช ืื ืืฉื "ืฉืืืืช ืืืืื ืืืืคืืืืืืฆืื". ืืจืขืืื ืืืฆืื ืืืื: ืืืื ืืืืืื ืขืืืื ืจืืืื ืืืช ืืื ืคืืคืืืจืืช ืืฉื ืืฉืืืืฉ ืื, ืืืฉื, ืืจืฉืชืืช Wi-Fi ื-LTE/LTE-A (ืืฆืืจืช OFDMA). ืื ืืืืจ ืืืื ืืืืชืจ ืขืืืจ ืืืกืืจืื ืืชืจืื ืืช ืืืฉืืจืืื ืืขืืฆืื ืืขืจืืืช ืืืงืื.
ืืขืืฉืื ื ืืชื ืืช ืื ื ืืื ืืคืฉืจืืืืช ืฉื ืืคืจื ืืื ื ืขื ืคืจืืืจื ืืกืืจืช ืืืชื ืืขืฉืืื ืืขืืื (ืืื ืื ืืืคืฉ ืคืชืจืื ืืืื ืืจื ื), ืืื ืื ื ืืชื ืคืืื ืขื ืืกืืืืื ืง ืฉืืืจ ืืืืืจ... ืืื ืื ื ืืงืืืื ืืื ืืจืืฉ ืขื ืงืืืงืื ืชื ืฉื ืืืฆืืืืช:
- ืื ืืืืง ืจืฆืืฃ ืืืจืื ืคืจืืืจืื ืื ืืืืขืื, ืฉืืคืืื ืืฉื ืืช ืืืชื ืืืฃ ืจืื.
- ืืื ืืคืืืฆืืืช ืขื ืืืกืคืจืื ืฆืจืืืืช ืืืืขืฉืืช, ืื ื ืจืื, ืคืฉืืืืช, ืืื ืขืืืื ืฆืจืื ืืืชืขืกืง ืืืืื.
- ืืืื ืืช ืงืชืืจืื ืืืืืช ืืืืคื ื ืืืจ ืืืฉืืืืฉ ืืชืืืืชื ื-GUI, ืืคืืื ืืฉืื ืืืืืฉื ืืกืคืจืืืช ืฉื ืืืืงืื ืืืื ืื.
- ืืื ืืกืืื ืืฉืื ืืืืช, ืืชื ืฆืจืื ืืช ืืืชื Simulink. ืืืืขืฉื, ืืื ืืืืคืืช.
ืื, ืืกืืคื ืฉื ืืืจ, ืืืืื, ืกืืืื ื ืืช ืืคืจืืืงื, ืืื ืืฉืืื ื ืืืชื ืื ืฉืืคื ืจืืขืฉืช ืฉื ืืงืื.
ืขืืจ ืืื ืื, ืืืืขื ื ืืกืืฃ ืืฉื ื ืืจืืฉืื ื ืฉื ืืชืืืจ ืืฉื ื. ืืืืช ืฉืืขืืจื ืืืืช ืืืืฆืขืืช GUI ืืืื ืืจืืช ืืืืคื ืืืกื ืขื ืืขืืืื ืืฉืืขืืจ ืืืงืฆืืขืืช ืืืจืื ืืื, ืืืจืืช ืฉืขืืืื ืื ืืืืขื ืื ืงืืืช ืฉืื ืื ืคืจืืืืื. ืจืืื ืืืืชื ื, ืืืื ืื ื, ืฉืืชืืืจื ืขื ืืืฉืจืขืช ืื ืืืจืช ืฉืื ื ืืื ืืช, ืืฉืชืืฉื ืืืชืจ ืืืืชืจ ื-Matlab ืืคืจืืืงืืื ืืืืขืืื ืฉืื ื (ืื ืื ืืฆืืจื ืฉื ืืืื), ืืื ื-Simulink ืืืืืจ ืืืืืจื.
ืื ืงืืื ืืกืคืงืืช ืฉืื ื ืืืืชื ืืืฉืคื ืฉื ืืื ืืชืืืืื ืฉื ื ื' (ืื ืืืืืง ืืืจื ืืจืืกืื ืขื ืื):
- ืชืฉืืื, ืืคืืืช ืืืฉื ืืืชืืืืช, ื-Similink, MathCad ืืขืื LabView - ืืขื ืืืืขื ืืื ืืชืื ื-MATLAB, ืชืื ืฉืืืืฉ ื-MatLab ืขืฆืื ืื ื"ืืจืกืช" ื-Octave ืืืื ืืืช ืฉืื.
ืืืืืจื ืืชืืจืจื ืื ืืื ื ืืืืงื: ืืืืืื ืื ืื ืืืืืืงืช ืขื ืืืืจืช ืืืืื ืื ื ืคืชืจื ืืืืืืื. ื ืืื, ืืืืืจื ืืืืชื ืืขืืงืจ ืืื MATLAB, Python ื-C.
ืืืืชื ืืื ืืชืจืืฉืชื ืืืชืจืืฉืืช ืืืขืืช: ืืื ืื ืืืื ืื ืืืขืืืจ ืืช ืืืืง ืฉืื ืืืืื ืืฉืืจ ื-OFDM ืืฆืืจืช ืกืงืจืืคื? ืกืชื ืืฉืืื ืืืืฃ.
ืืืชืืืชื ืืขืืื.
ืฆืขื ืืืจ ืฆืขื
ืืืงืื ืืืฉืืืื ืชืืืืจืืืื, ืื ื ืคืฉืื ืืชื ืงืืฉืืจ ืืื
ืืืืจ ืืฆืืื 2011 ืtgx ืืขื ืืืืืฉืืชืฉืืื ืคืืืืช LTE ืคืจืืคืกืืจืืืืืฉื-ืืืื (TU Ilmenau). ืื ื ืืืฉื ืฉืื ืืกืคืืง.
"ืื," ืืฉืืชื, "ืืื ื ืืืืจ, ืื ืื ืื ื ืืืืืื ืืืืื?"
ืื ืื ื ื ืืืื ืืืืื ืืกืืจืืช OFDM (ืืืืื ืืกืืจืืช OFDM).
ืื ืื ืืืืื:
- ืกืืื ืืืืข
- ืืืชืืช ืืืืก
- ืืคืกืื (DC)
ืืื (ืืืขื ืืคืฉืืืช) ืื ื ืืืคืฉืืื:
- ืืืืืืื ืฉื ืงืืืืืช ืืืืืจืืช (ืื ืืชื ืืืืข ืืช ืืืกืืืืช, ืืืกืคื ืื ืชืืื ืงืฉื)
ืืืืืจืืช ืืืืงืื ืฉื ืืืืื ืื ืืืง. ื ืขืฆืืจ ืืืืืง FFT (IFFT) ืืคืื. ืืืฉืืืช ืืชืืื ื ืื ืืื ืืืื ืืืืฉืื ืืช ืืฉืืจ ืืขืฆืื - ืืืืืชื ืืืืจืื ืืืืืืงื ืืืฉืืืจ ืืฉืื ืืชืืืืืื.
ืืืื ื ืืืืจ ืืืชื ืืขืฆืื ื. ืชืจืืื:
- ืืกืคืจ ืงืืืข ืฉื ืกืคืงื ืืฉื ื;
- ืืืจื ืืกืืจืช ืงืืืข;
- ืขืืื ื ืืืืกืืฃ ืืคืก ืืื ืืืืฆืข ืืืื ืืคืกืื ืืชืืืืช ืืืกืืฃ ืืคืจืืื (ืกื"ื, 5 ืืืงืื);
- ืกืืื ืืืืข ืืืืคื ืื ืืืืฆืขืืช M-PSK ืื M-QAM, ืืืฉืจ M ืืื ืกืืจ ืืืคื ืื.
ื ืชืืื ืขื ืืงืื.
ืืช ืืชืกืจืื ืืืื ื ืืชื ืืืืจืื ื
ืงืฉืจ .
ืืืื ื ืืืืจ ืืช ืคืจืืืจื ืืงืื:
clear all; close all; clc
M = 4; % e.g. QPSK
N_inf = 16; % number of subcarriers (information symbols, actually) in the frame
fr_len = 32; % the length of our OFDM frame
N_pil = fr_len - N_inf - 5; % number of pilots in the frame
pilots = [1; j; -1; -j]; % pilots (QPSK, in fact)
nulls_idx = [1, 2, fr_len/2, fr_len-1, fr_len]; % indexes of nulls
ืืขืช ืื ื ืงืืืขืื ืืช ืืืืืื ืฉื ืกืืื ืืืืข, ืืืงืืืื ืืช ืืื ืื ืฉืืืชืืช ืืืืก ืืืืืื ืืืืจื ืืืืช ืืคื ื ื/ืื ืืืจื ืืคืกืื:
idx_1_start = 4;
idx_1_end = fr_len/2 - 2;
idx_2_start = fr_len/2 + 2;
idx_2_end = fr_len - 3;
ืืืืจ ืืื ื ืืชื ืืงืืืข ืืช ืืืืงืืืื ืืืืฆืขืืช ืืคืื ืงืฆืื
inf_idx_1 = (floor(linspace(idx_1_start, idx_1_end, N_inf/2))).';
inf_idx_2 = (floor(linspace(idx_2_start, idx_2_end, N_inf/2))).';
inf_ind = [inf_idx_1; inf_idx_2]; % simple concatenation
ืืืื ื ืืกืืฃ ืืื ืืื ืืงืกืื ืฉื ืืคืกืื ืื ืืืื:
%concatenation and ascending sorting
inf_and_nulls_idx = union(inf_ind, nulls_idx);
ืืืชืื ืืื, ืืืื ืืืชืืช ืืืืืก ืื ืื ืืฉืืจ:
%numbers in range from 1 to frame length
% that don't overlape with inf_and_nulls_idx vector
pilot_idx = setdiff(1:fr_len, inf_and_nulls_idx);
ืขืืฉืื ืืืื ื ืืื ืืช ืืืชืืช ืืืืืก.
ืืฉ ืื ื ืชืื ืืช (ืืฉืชื ื ืืืืกืื), ืื ื ืื ืฉืื ืื ื ืจืืฆืื ืคืืืืืืื ืืืชืื ืืช ืืื ืืืื ืกื ืืืกืืจืช ืฉืื ื ืืจืฆืฃ. ืืืืื ืฉื ืืชื ืืขืฉืืช ืืืช ืืืืืื. ืื ืฉืืชื ืืืื ืืฉืืง ืงืฆืช ืืกืืื ืขื ืืืจืืฆืืช - ืืืจืื ืืืื MATLAB ืืืคืฉืจ ืื ืืขืฉืืช ืืืช ืื ืืืืช ืืกืคืงืช.
ืจืืฉืืช, ืืืื ื ืงืืข ืืื ืืืชืื ืืืช ืืืื ืืชืืืืื ืืืืืืื ืืืกืืจืช:
pilots_len_psudo = floor(N_pil/length(pilots));
ืืืืจ ืืื, ืื ื ืืืฆืจืื ืืงืืืจ ืืืืจืื ืืืชืื ืืืช ืฉืื ื:
% linear algebra tricks:
mat_1 = pilots*ones(1, pilots_len_psudo); % rank-one matrix
resh = reshape(mat_1, pilots_len_psudo*length(pilots),1); % vectorization
ืืื ืื ื ืืืืืจืื ืืงืืืจ ืงืื ืฉืืืื ืจืง ืืืง ืืืชืื ืืช - ื"ืื ื", ืฉืืื ื ืืชืืื ืืืืืืื ืืืกืืจืช:
tail_len = fr_len - N_inf - length(nulls_idx) ...
- length(pilots)*pilots_len_psudo;
tail = pilots(1:tail_len); % "tail" of pilots vector
ืื ืื ื ืืงืืืื ืืืืืืช ืคืืืืื:
vec_pilots = [resh; tail]; % completed pilots vector that frame consists
ืืื ื ืขืืืจ ืืกืืื ืืืืข, ืืืืืจ, ื ืืฆืืจ ืืกืจ ืื ืฉื ื ืืืชื:
message = randi([0 M-1], N_inf, 1); % decimal information symbols
if M >= 16
info_symbols = qammod(message, M, pi/4);
else
info_symbols = pskmod(message, M, pi/4);
end
ืืื ืืืื! ืืจืืืช ืืืกืืจืช:
%% Frame construction
frame = zeros(fr_len,1);
frame(pilot_idx) = vec_pilots;
frame(inf_ind) = info_symbols
ืืชื ืืืืจ ืืงืื ืืฉืื ืืื:
frame =
0.00000 + 0.00000i
0.00000 + 0.00000i
1.00000 + 0.00000i
-0.70711 - 0.70711i
-0.70711 - 0.70711i
0.70711 + 0.70711i
0.00000 + 1.00000i
-0.70711 + 0.70711i
-0.70711 + 0.70711i
-1.00000 + 0.00000i
-0.70711 + 0.70711i
-0.70711 - 0.70711i
0.00000 - 1.00000i
0.70711 + 0.70711i
1.00000 + 0.00000i
0.00000 + 0.00000i
0.00000 + 1.00000i
0.70711 - 0.70711i
-0.70711 + 0.70711i
-1.00000 + 0.00000i
-0.70711 + 0.70711i
0.70711 + 0.70711i
0.00000 - 1.00000i
-0.70711 - 0.70711i
0.70711 + 0.70711i
1.00000 + 0.00000i
0.70711 - 0.70711i
0.00000 + 1.00000i
0.70711 - 0.70711i
-1.00000 + 0.00000i
0.00000 + 0.00000i
0.00000 + 0.00000i
"ืืืฉืจ!" โ ืืฉืืชื ืืฉืืืขืืช ืจืฆืื ืืกืืจืชื ืืช ืืืืฉื ืื ืืื. ืืงื ืื ืืื ืฉืขืืช ืืขืฉืืช ืืื: ืืืื ืืชืืืช ืงืื, ืืืืื ืืื ืคืื ืงืฆืืืช ืฉื Matlab ืืืฉืืื ืืจื ืืจืืงืื ืืชืืืืื.
ืืืื ืืกืงื ืืช ืืกืงืชื ืื?
ืกืืืืืงืืืื:
- ืืชืืืช ืงืื ื ืขืืื ืืืืื ืืฉืืจื!
- Scripting ืืื ืฉืืืช ืืืืงืจ ืื ืืื ืืืืชืจ ืืชืืื ืืชืงืฉืืจืช ืืขืืืื ืืืชืืช.
ืึทืึธืจึธื:
- ืืื ืฆืืจื ืืืจืืช ืืจืืจืื ืืชืืชื (ืืื ืื ืื ืืืจื ืืื ืืืืช ืืื ืืื, ืืืืื, ืฉืืื ืืช ืื): ืืืืฆืขืืช Simulink, ืืงืื ื ืขื ืขืฆืื ื ืืคืชืืจ ืืขืื ืคืฉืืื ืขื ืืื ืืชืืืื.
- ืืืฉืง ืืืฉืชืืฉ ืืื ืืื, ืืื ืืื ืืืชืจ ืืืืื ืื ืืืื "ืืชืืช ืืืืกื ืืื ืืข".
ืืขืืฉืื, ืืืืืชื ืจืืืง ืืืืืืช ืกืืืื ื, ืื ื ืจืืฆื ืืืืจ ืืช ืืืืจืื ืืืืื ืืืืืืช ืืกืืืื ืืื:
- ืื ืขื ืื!
ื ืกื ืืืชืื ืงืื, ืื ืื ืืื ืืจืืข ืืืชืืื. ืืชืื ืืช, ืืื ืืื ืคืขืืืืช ืืืจืช, ืืืืง ืืงืฉื ืืืืชืจ ืืื ืืืชืืื. ืืขืืืฃ ืืืชืืื ืืืงืื ืืืชืจ: ืื ืืชื ืืืขื ืื ืืคืืื ืจืง ืืื ืื, ืืืืงืื ืื ืืืืืืจ ืชืฆืืจื ืืช ืืืืืื ืืช ืืื.
- ืืจืฉ!
ืืจืฉื ืืืืืจืื ืืืืคืงืืื ืืืฉืืช ืืืืื ืืชืงืืืื. ืื ืื ืืคืฉืจื ืืืืื...
- ืึดืืฆืึนืจ!
ืืืคื ืขืื ืขืืืฃ ืืืชืืืจ ืขื ืื ืืคืฆืขืื ืฉื ืืชืืื, ืื ืื ืืืกืืจืช ืชืื ืืช ืืื ืืืืช? ืฆืืจ ืืฉืืื ืืช ืืืืฉืืจืื ืฉืื - ืฉืื, ืืื ืฉืชืชืืื ืืืงืื ืืืชืจ, ืื ืืืื.
ืืชืื ืชืื ืฉืืืคืื ืืื ืืืืื ืืช, ืืชืืืื!
ื .ื.
ืขื ืื ืช ืืชืขื ืืช ืืงืฉืจ ืืืฉืืจ ืฉืื ืขื ืืชืืืืืื, ืื ื ืืฆืจืฃ ืชืืื ื ืืืชื ื ืฉืืืช ืืฉื ืช 2017 ืขื ืฉื ื ืจืงืืืจืื: ืคืืืจ ืฉืจืฃ (ืืืืื) ืืืืืจื ืืจืืกืืืืฅ' ืืืืืืืื ืื (ืืฉืืื).
ืืื ืฉืืื ืืกืืื ืืช ืืชืืื ืืช ืืคืืืช ืืฉืืื ืืชืืคืืฉืืช ืืืื! (ืฆืืืง)
ืืงืืจ: www.habr.com