α’ααααααααααααα»αααααααα ααΊααΆααΆααα·ααααΆαααααΆααααΈααα»αααααααΆαααααααΆαααΎαααΎααααΌαααααΆαααααααααααα·ααΈααααΎααααααα ααααα (αααααΈααΆααααααΆαα·ααααα)α
ααΆα/α αΆα αααα»ααααααΆαααα·ααααααααααααα»αααααΆααααααΆαααα·ααααααααααααα»αααα»ααααα ααα»ααααααΆα αΆααααΌα ααΆαααα»αααΆααΆααααΉααα·ααααΆααΆαααΌαα α ααΎαααΈααααα ααα αααα·ααααααααααΆααα·αααααΆααΆααααααααΆααααααΉααα·ααααααααααΆααα·ααααΆααΆααααα ααα»ααααα’αααΈαααααααα·ααα·ααΆαααααα ααΆα’αΆα ααΆααααααααααα ααΆααααα α
ααααα:
ααΆααΌαα α§αααα·αααααα·ααααα αα α»ααααααααΆααα’ααααΈα’ααΈααα·ααα!
ααΆαααααΉααα»α
αα αααααααααα»αααΆααααα ααααααΆααααα·ααααΆααααααααααα αα αααα·ααααΆααααααΆα αα·αααααααααααααΆαααααααααα»αααααΆα 2014 αααα»αααααΎααααα·αααΉαα’αααΈααΆααα’ααα’αααΈαα·ααααααΆαααααααααααα·ααΈα ααΆα ααΌα α’αααααααααααααα αααα»αααΆααααα»ααα·ααααΆ "αα·ααααΆααΆααααααα»αααααΌααα" αααα»αααααΆαααααΌααααααααα»α - ααα»ααααααααα’ααα αΆαα ααΆααΆααααΆαααααΌααααααααα»α! ααΆααΆααΆαα’ααααααααΆαα·α αα !
ααΆααΌαα
αααα»ααα·αααααΉαααΆααΆαα’αααΈαααααααΈααα·ααααΆαααααα α αΎααα
ααααααα»αα
αΌαααααααααα·ααΈα’αα»ααααα·α
ααα»ααααα₯ααααααααα...
ααΎαααααΆααααααΆααΆαααα½αααΆαααΎαααΈ XNUMX α αΎααα»ααααΈααααΌααα ααααα ααααΆααΌααααααα½ααααααααΆααααααααα’αΆα‘αΊααααααααΆα (αααααα·ααααΆααααΌαα αααΆααααααααΆααα½ααααααα»αααααΆαααΈααΈαααααααΆααα’αα»ααααα·α) α αααααΆααα·αααα ααααΆαααααΆααααΆααααααΈααααααααααΆαα αα·αααΆααααΆααα½αααααααααΆααααααααααααΌααα·ααΈααΆαααααααααΆαα’αααααα α’αΊααα»ααα α‘αΎα α αΎαααααΆαααααΆααααΆααααααΌααα½αα’αααΈααααααΆααααα’α·ααααααα
ααΆααΆααα·αααΆαααα ααααΆαααααΌαααααααΎα ααΎαααΆαααΆαα’αα»ααααααΆα αααΎααααααα αααααΆααααααΆααΎαααααΌαααΆαααααααααααΎαααΆαααααααααΆαα·αααααααααΆαααΆααααααααααααΈα (ααΆα αααααα αααα»αααΆααΆ MATLAB) αα·αααΆαααααΎααααΆαα GUIs α―ααααααααααααααα (αααα»ααααααΆαααααααΆαααΆααααααααααααΈα - ααΆααααααααααΎα ααα·ααααΆαααααΌ)α
αα·αα αΆαααΆα ααα·ααΆααα ααΎααααααΆα’αα»ααααα·ααα·ααααΆααΆαααααααΆαααα’ααΆαα α ααααΈααΆαααααααααα αααααα»ααααααααααΎα ααΆαα ααααΆαααΆααααααααΌαααΌα ααααΎαα α§ααΆα ααααα ααΈαααααΊ Simulink ααΈ MathWorksα αααααΊααΆαααα»α αααααΊααΆααΆαααααΆαα αα ααΈααααααααααααααααααΆαααααα αα·ααα»αααΆααα
αα·αααααΆααααααΆαααΎαααααΎα αα·αα’αΆα αααααΆαα αααααα»αααααααααααΆααααααΎααΆααααα»αααΆααα ααΆααααααΈ αα·ααα·ααααααααααααααα!
ααααα:
ααΌα ααααααΆα αΆααααΌα ααΆααΎα ...
ααΆαααΆααααααα
ααΆαααΆαααΆααααααααα½ααααααΆαααΈ XNUMX ααΊααΆαα’αα·ααααααα§ααααααααααΌααααααΆ OFDM αααααΆααααααα½ααααααααΆααα "αα·ααΈααΆααααααααααΆααααααΌαα·αααΆααααααΎαααααα·αααααΆα" α αααα·ααααααΊααααααααααΆααααΆααα αα αα αααα·ααααΆαα ααααΆααααααα αα·αααααα·αααααααΆαααααΆαααααΎααααΆααααααααΆ α§ααΆα ααααα αααα»ααααααΆα Wi-Fi αα·α LTE/LTE-A (αααα»αααααααααΆ OFDMA)α αααβααΆβααΏαβααα’βαααα»αβαααααΆααβα α α αααΆαααΆαβαααα»αβααΆαβα’αα»ααααβααααΆαβααααβαα½αααβαααα»αβααΆαβαααααΎαβααααΌβααααααααβααΌαααααΆααααα
α αΎαα₯α‘αΌααααααΎαααααΌαααΆαααααααααααΎαααΆα αααΎααααααααααα αα αααααααΆαα½αααΉααααΆαααΆααααααααα»αααΆααααααα (ααΎααααΈαα»αα±ααααααααααααααααααΆααα ααΎα’ααΈαααΊαα·α) α αΎαααΎαααΆααα ααΎ Simulink αααααΆααααααΆαααα½α α αΎα... ααααΆααα·αα
- αααα»αααΈαα½ααααΊαααααααα ααααααΆαααΆααααααααααα·αααααΆααααΆα αααΎα ααααα½αα±ααααααΆα αααα»αααΆαααααΆααααααΌααα ααααααααΆαααα½αα
- α§ααΆαααααΆαα½ααααααααΌαααααΎ ααΆα αΆααααΌα ααΆααΆαααα ααα»ααααα’ααααα ααααααΌαα ααααΌαα ααααα ααααα αΆαα
- αααΆαααΈα Cathedral ααα α»ααα½αα±ααααααααααΆααααΈααΆαααααΎααααΆαα GUI ααααα·ααα½αα±ααααΏ ααΌααααΈαααα ααααΆααααΆαααααΆααα»αααααΆααααααΆααααααααα»ααααααΆαα
- ααΎααααΈαααα ααα’αααΈαα½ααα αααα α’αααααααΌαααΆα Simulink ααΌα ααααΆα α αΎαααΆαααΆααα·α ααααΆααααααΎααααααααα
αααα αΎα αα ααΈαααα αα ααΎααα·αααΆααΆααααα ααααααααααα ααα»ααααααΎαααΆααααα ααααΆαααααΆααααααα αΎαααααααΆαααΌαααααΎαα
αααααααΆααααααα»ααα ααααα αΎα ααΎααααααα ααααααΆααα’αα»ααααα·αααααΆαααΈα‘α ααα·ααΆααααα·α αα ααΆααααααααααααΎ GUIs ααΆαα αΆααααααΎαααααΆααα α»αααΆααααΆααΆαααααΆαα½αααΉαααΆαααΎαα‘αΎααααααΆααΆααααααα»ααα·ααααΆα’αΆααααΊαααα αααααΈααΆααΆαα·αααΆααααΆααααα ααα»α ααααΆαααααΆααααααΌαααααΌαααααα αα½αααΎαααΆα αααΎα αα½αααΆαααααα»αααααα αααααΆαααααααααΎααα ααααααααΉααααααΆααααααααΎααααα»αααΆαααΆαααα ααΆαααααΎααααΆαα Matlab ααΆααααα αααΎαα‘αΎααα αααα»ααααααααα·ααααΆααΆαααααααααααΎα (αααααΈααΆαααα»αααααααααΆαααα’ααα§αααααααααα) α αΎααα·ααααααΆ Simulink αααα αΆααααΌα ααΆααααΆααααααΆαααααααα
α ααα»α βαααβααΎαβααααααβααΊβααααΆβααααβαα·αααα·αβααααΆαβααΈβααΈαβααααΆαα (αα½αααβααΎαβααβαααα‘ααβαα βαα»αααααΈβαα·αβαα βαααβααα)α
- ααααα αααΆαα αα ααΆαααααααΆαααααααααααααααα·ααααΆα’αααΈ Similink, MathCad αα·α LabView αααααααα - αα ααΎαααα α’αααΈααααααααΆαααααΌαααΆαααααααα αααα»α MATLAB αααααααΎ MatLab αααα½αααΆααααΆαα α¬ "αααα" Octave α₯ααα·αααααααααααΆα
ααα ααααΈαααααααΆααααααααΆαααααΆααα ααΆααΆααα·ααα½ααααααα αα αααα»α Ilmenau ααααααααΎαααααΎαααα§ααααααααα·αααααΌαααΆααααααααΆαααΆαααααα»ααααα αα·α αααααΎαααΊααΆαα αααΎααααΆα MATLAB, Python αα·α C α
αα ααααααααααα αααα»αααααΌαααΆαααααα½ααααααααΆαααααΎαα α·αααααΈααααααΆαα·α ααΎαααα»ααα·ααα½ααααααααααααααααααα»αααααααΌα§ααααααααααΌα OFDM αα ααΆααααααααααααΈααα? ααααΆααβααβαααααΎα α
α αΎααααα»αααααΌααα ααααΎααΆαα
ααααβαα½αβααα αΆα
αααα½αα±ααααΆαααααΆααΆαααααΉααααΈ αααα»αααΉααααααααααα ααΏαααα
α’αααααααα’ααα αΆααα ααααΆα α’α α‘α‘ ααΈtgx αα·ααα ααΎααααΆααααααΆααααΆαααΆα LTE ααΆααααααΆα αΆαααMichel-Tila (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 αα½αα ααα½α αα·αααΆααα·αααΆαααααααα·α ααα·ααα·ααααΆα
ααΎβαααα»αβααΆαβααααα·ααααΆαβα’αααΈααααβαα αααβαααβ?
αααααΆααα:
- ααΆααααααααΌαααΊααΈαααΆα αα·αααααααααΉαααααΆααα!
- ααααααΈαααΊααΆαα·ααΈααΆαααααααααΆαααααΆαααααΆααααα½ααααα»ααααααΆαααα·αααααααΆαααααα αα·αααααΎαααΆααααααΆα
ααααααα:
- αα·αα αΆαααΆα αααΆααααααα αΆαααΈααΆαα»αααΆαααα (αα»αααααΆααααααα α’αααααααααααα·αααΆααΆαααααα): αααααααΎ Simulink ααΎαααΆααααααααΆααααα αΆααΆαααααα½ααααααααΎα§ααααααααα»αααααααΆαα
- GUI ααΊααα’ ααα»ααααααΆααααααΉαα’αααΈα’αααΈαααααΆα "αα ααααααααααΆαα" ααΊαααααΎαααΆαα
α αΎαβα₯α‘αΌαβαααβαα βααααΆαβααΈβααΆαβααααΎβααΆβαα·ααα αααα»αβα ααβαα·ααΆαβααΌα βααΆαβαααααβαα βααΆααβααααα’αΌαβαα·αααα·αα
- α ααΆα!
ααΆααααααααααααΌα αααααΈααΆαα·αααα’ααΆααααΈααααΌααααααα ααΆαα½αβααΉαβααΆαβαααααβαααααα·ααΈ ααΌα βααΉαβαααααααΆαβαααααβααα αααααβααβααααΆαβαααα»αβααΊβααΆαβα αΆααβααααΎαα α αΎαααΆααΆααΆααααααΎααααα»αααΆαα αΆααααααΎααα»ααααα ααααα·αααΎα’αααααΆα’ααααα·ααααΆααΆααααα α¬ααααΆααααααΆα’ααααα αα ααααα αα·αααΌααα·αααΆαα α’αααααΉαααααΌαααΆαααααΆααααα
- ααΆαααΆα!
ααΆαααΆααα·ααΈααΆαααααααΈαα ααααΎα αα·αα§αααααααΈααααΌ αα·αα’ααααααααααααα ααααα·αααΎαααα’αΆα αα αα½α αα·αααΆαα...
- αααααΎα!
ααΎααααααααΆααααααααα’ααΆααααα»αααΆααααα αΆαααααα ααΆααα’ααααααα’αααα αΆααααααΎαααααΌα ααααα·αααΎαα·ααααα·ααααα»αααααααααααααααααα·ααΈα’αααα? αααααΎα αα·ααααααΉαααααΆαααααα’ααα - ααααααα ααΆααααααΆααα’αααα αΆααααααΎα ααΆαααααααααΎαα
ααΌαααα’αααααααααααααα·ααΈααααΈααααααααααα αα½ααα½αααααΆ!
PS
ααΎααααΈαααααααΆααααΆααααααααααΆαααααααααα»αααΆαα½ααα·ααα αααα»αααΆαααααΆααααΌαααα’αα»ααααΆαααΈααααααΆα 2017 ααΆαα½αααΆαααα·ααααΆαα·ααΆαααΈαααΆααααΊ Peter Scharff (ααααΆα) αα·α Albert Kharisovich Gilmutdinov (ααααα)α
ααΆααααΉααααα αααααααα·ααΈαααΆαα αα ααΆαααααααΆαααααααααααΆααααΆααααα! (αα·ααΆαααα)
ααααα: www.habr.com