แฉแแแ แแฆแแแแแแแแ แกแขแแขแแ แแ แแก แฎแแแแแฆแแแ แแแ แแแ แแแแแแแแแกแแแ, แ แแแแแแแช แแ แแแ แแแแ แแแแก แแแ แแแแฅแแแก แจแแแแฎแแแแแ (แแฃแแชแ แแฃแแแแ แแแแ) แแแฆแ.
แแแแฎ, แแแกแแแก, แ แแ แฉแแแ แแแแแชแแแแแแ แแฎแแแแ แฉแแแ แแแแแชแแแแแแแ, แแแแ แแ แแแฉแแแแแแ, แ แแ แแก แแแ แแแ แฏแแแแ แแแแแ แขแแแแแแชแแแจแ. แฃแคแ แ แแแขแแช, แฅแแแแแ แแฆแฌแแ แแแ แแแแแชแแแแแแ แฃแคแ แ แแแขแแ แแฎแแแ แกแแแแชแแแแ แ แแแฆแแแฌแแแแแก แกแคแแ แแก, แแแแ แแ แ แ แฏแแแแแแ แแ แฎแฃแแ แแแก - แแก แจแแแซแแแแ แกแแกแแ แแแแแ แแงแแก แแแ แแ.
แฌแงแแ แ:
แแแแแแแ, แแซแฆแแแแแ แงแแแแ แแแแแแแแแแ แกแขแฃแแแแขแก แงแแคแแแ แกแขแฃแแแแขแแแแ!
แแแแแแแแแแ
แ แแแแกแแช 2014 แฌแแแก แแแแแแแแแ แ แแแแแแแแ แแก แฎแแ แแกแฎแ แกแแแแคแแ แแแชแแ แกแแแแแฃแแแแแชแแ แขแแฅแแแแแแแแแแกแ แแ แกแแแแแฃแแแแแชแแ แกแแกแขแแแแแแก แแแแแ แแฃแแแแแ, แแแแฅแแแก แแ แแคแแ แ แแแชแแแ แแ แแแ แแแแ แแแแก แกแแแงแแ แแก แจแแกแแฎแแ. แแแแฎ, แแกแแแ แ แแแแ แช แแแแ แ แกแฎแแ, แแแ แแแ แแฃแ แกแแ แฉแแแแแแ แ "แแแแแแฃแขแแ แฃแแ แแแชแแแแ แแแ" - แแแแ แแ, แฃแคแแแ, แแก แแงแ แฉแแแก แแแ แแแ แแฃแ แกแแ! แแก แแงแ แแแ แแแแกแแแ!
แกแแแ แแแ แแ แแแแแแ แแแแกแแแฃแแ แแแฃแแแ แแแแกแฎแแแแแแฃแแก แแแแแแแแ แแแขแแกแแแ แแ แแแแแกแขแ แแขแฃแ แแจแ แ แแ แฉแแแแแแ แ
แแแแ แแ แแแแแ...
แฉแแแ แแฎแแแแ แแแแ แ แแฃแ แกแแแแแแแ แแแฃแแแแ แแแงแแแแ แแ แแแญแแแ แแแ แแแแแแแ แฏแแ แแแแแ แแฌแงแแแแแแ แฉแแแแแแก แจแแ แแฃแ แแแ แแแแแแจแ (แกแขแแแแ แแแแก แแฅแแกแ แแแ แกแญแแ แแแแ แแแแแกแขแ แแขแฃแ แแจแ แแแแ แ แแฃแ แกแแ). แแแฃ แแแ แแแฃแแ แแแแแแแแแแก แแแแแแแแก แฃแแฎแแแแกแ แฌแ แแแแ แฏแแ แกแแ แแแแฃแแแ แแ แแแแ แจแแฎแแแแ แแ แแ แแแขแแแแแแก แจแแกแแฎแแ แแ แแแแ แฐแแแแฎแ.
แฉแแแแก แแแ แแแ แฌแแแก, แ แ แแฅแแ แฃแแแ, แแแฅแแแแ แกแฎแแแแแกแฎแแ แกแแฎแแก แแ แแฅแขแแแ, แ แแแแแจแแช แฉแแแฃแแแแ แแ แแแแแแ แแขแแฃแแแ แแแแแแแแแแแแแ แแ แฉแแแแแก แกแแ แแแขแแแแก แแแฌแแ แแก แจแแ แแก (แซแแ แแแแแแ MATLAB แแแแแ) แแ แกแฎแแแแแกแฎแแ แแแฆแแ แกแแแชแแแแแแแแฃแแ GUI-แแแแก แแแแแงแแแแแแก แจแแ แแก (แแ แแแแแแแ, แ แแ แกแแ แแแขแแแแก แแแฌแแ แแก แแแ แแจแ - แกแแแฃแแแชแแ. แแแแแแแ แแแแก แแแ แแแ).
แแแแแแขแแ แแแแก แแฅแแ, แ แแ แฉแแแ, แแแแแแแแแ แแแชแแแแ แแแแแ แแแแแกแขแ แแแแ, แแฎแแแแแแ แแฃแแ แกแแกแฃแแแแแแแแก แแแแ, แชแแชแฎแแแแแ แแแแแก แฌแแ แแก แแแ แแแแแแแแ. แแ, แแแแแแแแแ, Simulink MathWorks-แแแ: แแฅ แแ แแก แแแแแแแ, แแฅ แแ แแก แแแแจแแ แแแ, แแฅ แแ แแก แงแแแแ แกแแฎแแก แแแ แแแแขแ แ แแ แแแแแแ แแแแแ.
แจแแฎแแแฃแแแแ, แ แแแแแแช แแ แแก แแจแแแแแฃแ แ แแ แแแกแแแแแ แแแแแแแแแกแแแแก, แ แแแแแแช แแแ แ แแฃแจแแแแแ แแแแ แแกแฅแแแแก แแแแแแแกแ แแ แกแแกแขแแแแแแก แแแแแแแ แแแจแ!
แฌแงแแ แ:
แแกแ แแแแฉแแแแ...
แ แแแแแแ
แแแ แแแแ แกแแแแกแขแ แแก แแ แ-แแ แแ แแ แแฅแขแแแฃแแ แกแแแฃแจแแ แแงแ OFDM แกแแแแแแแก แแแแแแชแแแแก แจแแแฃแจแแแแแ แกแแแแแก โแแแแแแแ แแแแกแ แแ แแแขแแแแแแชแแแก แแแแแแแแโ แคแแ แแแแแจแ. แแแแ แซแแแแแ แฌแแ แแแขแแแฃแแแ: แขแแฅแแแแแแแ แแแแแ แแฅแขแฃแแแฃแ แ แแ แกแแแแแแ แแแแฃแแแ แฃแแแ แแแกแ แแแแแงแแแแแแก แแแแ, แแแแแแแแแ, Wi-Fi แแ LTE/LTE-A แฅแกแแแแแจแ (OFDMA-แก แกแแฎแแ). แแก แกแแฃแแแแแกแ แกแแจแฃแแแแแแ แแกแขแแขแแแแกแแแแก, แ แแ แแแแแแงแแแแ แแแแแแแแ แฃแแแ แแแ แขแแแแแแแแก แกแแกแขแแแแแแก แแแแแแแ แแแแจแ.
แแฎแแ แแ แแแแซแแแแแ แขแแฅแแแแฃแ แ แแแฎแแกแแแแแแแแแแก แ แแแแแแแแ แแแ แแแแขแก แแจแแแ แแ แแ แแแ แแฅแขแแแฃแแ แฉแแ แฉแแก แแแ แแแแขแ แแแแ (แ แแแ แแ แแแซแแแ แแแแแกแแแแแ แแแขแแ แแแขแจแ) แแ แแแฎแแแแ แฃแแแ แแฆแแแจแแฃแ Simulink-แก... แแ แแแแแ แแแชแแแแ แฉแแแแแแก. แ แแแแแแแก:
- แแแแแแฃแแ แแแแแ แกแแแกแแ แฃแแแ แแแ แฃแชแแแแ แแแ แแแแขแ แแ, แ แแแแแแ แจแแชแแแแช แกแแจแแแแแแ แฅแฃแแแก แแแชแแแแ.
- แ แแชแฎแแแแแ แแแแแแฃแแแชแแแแ แฃแแแ แแแแแแแแก, แ แแแแ แช แฉแแแก, แแแ แขแแแแ, แแแแ แแ แแแแแช แฃแแแ แแฃแ แแแฃแ แ, แฆแแแ แแแ แฅแแแก.
- แกแแแแแแแ แ แแแแ แแขแแแ แจแแกแแแฉแแแแแ แแแแแแแก GUI-แก แกแแกแขแแแ แแแแแงแแแแแแกแแแ, แแฃแแแแช แฎแแแแแกแแฌแแแแแ แแแแแแแแก แแแแแแแแแแแแจแ แกแแ แคแแแแแก แแขแแแแ.
- แกแแฎแแจแ แ แแฆแแชแแก แแแกแแกแ แฃแแแแแแ, แแฅแแแ แฃแแแ แแฅแแแแแ แแแแแ Simulink. แแ, แคแแฅแขแแแ แแแแ, แแแขแแ แแแขแแแ แแ แแ แแก.
แแแแฎ, แกแแแแแแแ, แฉแแแ, แ แ แแฅแแ แฃแแแ, แแแแแกแ แฃแแแ แแ แแแฅแขแ, แแแแ แแ แแแแแกแ แฃแแแ แแแ แ แแแแแคแแก แฎแแแแแฆแแแ แแแแกแฃแแแฅแแแ.
แแแแแแ แแแ แแแแฃแแ แแ แ แแ แแแแแแแ แแแแแกแขแ แแขแฃแ แแก แแแ แแแ แแฃแ แกแแ. GUI-แแแแก แแแแแงแแแแแแ แกแแจแแแแ แแแแแแแแแก แ แแแแแแแแแ แแ แแแแ แชแแฃแแแ แแแแฌแงแ แแแแแ แแแ แแแแฃแแ แกแแแแแแแก แแ แแแแ แชแแแก แแแขแแแแกแแแ แแ แแแ, แแฃแแชแ แแก แฏแแ แแแแแ แแ แแงแ แแแฆแฌแแฃแแ แแแ แแแแแแแก แชแแแแแแ. แแแแ แ แฉแแแแแแแ, แแแ แจแแ แแก แแ, แแแแแแแฎแแแก แฉแแแแก แแแแจแแแแแแแแ แแแแแแขแฃแแแก, แ แแแ แแแแจแแแแ, แฃแคแ แ แแ แฃแคแ แ แแแขแแ แแแงแแแแแ Matlab-แก แฉแแแแก แกแแแแชแแแแ แ แแ แแแฅแขแแแจแ (แแฃแแชแ Toolboxes-แแก แกแแฎแแ), แแ แแ แ แแ แแ แจแแฎแแแแแ แแแชแแแแ 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-แแก แ แแแแแแแแ แคแฃแแฅแชแแแก แกแฌแแแแ แแ แแแแแแแขแแแฃแ แ แฎแ แแแแแแก แกแแจแฃแแแแแแ แคแแฅแ แ.
แ แ แแแกแแแแแแ แแแแแแแขแแแ แแแจแแ?
แกแฃแแแแฅแขแฃแ แ:
- แแแแแก แฌแแ แ แกแแกแแแแแแแแ แแ แแแแแแแก แฐแแแแก!
- แกแแ แแแขแแ แแแ แแ แแก แงแแแแแแ แแแกแแฎแแ แฎแแแแแ แแแแแแแก แแแแแแ แแแแฃแแแแแชแแแกแ แแ แกแแแแแแแก แแแแฃแจแแแแแแก แกแคแแ แแกแแแแก.
แแแแแฅแขแฃแ แ:
- แแ แแ แแก แกแแญแแ แ แฅแแแแแฎแแแแ แแแฆแฃแ แแแแก แกแ แแแ (แแฃ แแกแแแ แกแแแแแแแแแแแแแแ แแแแแแ, แ แ แแฅแแ แฃแแแ, แแ แฆแแ แก): Simulink-แแก แแแแแงแแแแแแ, แฉแแแ แแแแแฌแงแแ แแแ แขแแแ แแ แแแแแแแก แแแแแญแ แ แแแฎแแแฌแแแ แฎแแแกแแฌแงแแแ.
- GUI แแแ แแแ, แแแแ แแ แแแแก แแแแแแ, แแฃ แ แ แจแแแชแแแก "แฅแฃแแแก" แฃแแแแแกแแ.
แแฎแแ แแ, แกแขแฃแแแแขแแแแกแแแ แจแแ แก, แแแแแ แจแแแแแแ แแฃแแฎแ แ แกแขแฃแแแแขแฃแ แกแแซแแแก:
- แแแแแแ!
แกแชแแแแ แแแแแก แแแฌแแ แ, แแฃแแแแช แแแแแแแ แชแฃแแ แแงแแก. แแ แแแ แแแแ แแแแจแ, แแกแแแ แ แแแแ แช แแแแแกแแแแ แกแฎแแ แกแแฅแแแแแแแแจแ, แงแแแแแแ แ แแฃแแ แแแฌแแแแ แแแกแแฌแงแแกแ. แแ แฃแแฏแแแแกแแ แแแแฌแงแแ แแแ แ: แแฃ แแฅแแแ แฎแแ แ แแแชแแแแ แ แแ แแฃแแแแช แแฎแแแแ แขแแฅแแแแฃแ แ, แแแ แ แแฃ แแแแแ แแแแญแแ แแแแแ แแก แฃแแแ แ.
- แแแแฎแแแแ!
แแแแแฎแแแแ แแ แแแ แแกแฃแแ แแแแแแแแแ แแ แแแกแขแ แฃแแแแขแแแ แแแกแฌแแแแแแแแแแกแ แแ แฎแแแแซแฆแแแแแแแแแกแแแ. แแฃ แแก แจแแกแแซแแแแแแแ, แ แ แแฅแแ แฃแแแ...
- แฒจแแฅแแแ!
แกแฎแแแแแ แกแแ แฏแแแแ แแแแฌแงแแแแก แงแแแแ แฌแงแแฃแแแก แแแแแแแฎแแ, แแฃ แแ แ แกแแแแแแแแแแแแแแ แแ แแแ แแแแก แคแแ แแแแแจแ? แจแแฅแแแแแ แแ แแแฎแแแฌแแ แแฅแแแแ แฃแแแ แแแ - แแแแแ แแ แแฎแแ, แ แแช แฃแคแ แ แแแ แ แแแแฌแงแแแ, แแแ แฃแแแแแกแ.
แแแแฌแงแแแ แแ แแแ แแแแกแขแแแ แงแแแแ แฅแแแงแแแแแ, แแแแ แแแแแแแ!
PS
แกแขแฃแแแแขแแแแแ แฉแแแ แฃแจแฃแแแ แฃแ แแแแ แแแแแก แแแกแแคแแฅแกแแ แแแแแ, แแแแแแ แแ 2017 แฌแแแก แกแแแแฎแกแแแ แ แคแแขแแก แแ แ แแฅแขแแ แแแ: แแแขแแ แจแแ แคแแแ (แแแ แฏแแแแ) แแ แแแแแ แข แฎแแ แแกแแแแฉ แแแแแฃแขแแแแแแแแ (แแแ แชแฎแแแ).
แแ แแแกแขแแฃแแแแแกแแแแก แแแแแช แฆแแ แแ แแ แแแ แแแแก แแแกแ แฃแแแแ! (แฎแฃแแ แแแก)
แฌแงแแ แ: www.habr.com