ä»æ¥ã®ç§ã®èšäºã¯ãã»ãŒå¶ç¶ïŒåœç¶ã§ã¯ãããŸããïŒããããã°ã©ãã³ã°ã®éã«é²ãã 人éã倧声ã§èããããšã§ãã
ã¯ããç§ã®çµéšãåãªãç§ã®çµéšã§ããããšã¯ç解ããŠããŸãããäžè¬çãªåŸåã«ããåœãŠã¯ãŸã£ãŠããããã«æããŸãã ããã«ã以äžã«èª¬æããçµéšã¯ç§åŠæŽ»åã®åéã«é¢é£ããŠããŸãããåè«ã§ã¯ãªããå€ã§ã圹ç«ã€å¯èœæ§ããããŸãã
åºæïŒ
äžè¬çã«ãå åŠçãããã¹ãŠã®çŸåœ¹åŠçã«æ§ããŸãã
æåŸ
2014 幎ã«æ å ±éä¿¡æè¡ãšéä¿¡ã·ã¹ãã ã®åŠå£«å·ãååŸãããšããç§ã¯ããã°ã©ãã³ã°ã®äžçã«ã€ããŠã»ãšãã©äœãç¥ããŸããã§ããã ã¯ããä»ã®å€ãã®äººãšåãããã«ãç§ã XNUMX 幎ç®ã«ãã³ã³ãã¥ãŒã¿ãŒ ãµã€ãšã³ã¹ãç§ç®ãåè¬ããŸãããããããäž»ãããã㯠XNUMX 幎ç®ã®ããšã§ããã ããã¯æ°žé ã§ããïŒ
åºæ¬çã«ã¯åŠå£«èª²çšãšç¹ã«éãããšã¯æåŸ
ããŠããŸããã§ãããã修士課çšã«å
¥åŠãããšãã¯ã
ã§ãç¡é§ã«âŠ
ç§ãã¡ã¯ãŸã XNUMX çªç®ã®å ¥åŠè ã§ãæåã®å ¥åŠè ãã¡ã¯ãŸã é ããã€ãã«åããŠè·ç©ããŸãšããŠããŸãã (ã€ã³ã¿ãŒã³ã·ããã¯ä¿®å£«èª²çš XNUMX 幎ç®ã« XNUMX ãæããããŸã)ã ã€ãŸãããšãŒãããã®æè²æ¹æ³ã«ãŸã çå£ã«æ¥ããŠãã人ã¯åšå²ã«èª°ããããã詳ããèã人ãããªãã£ãã®ã ã
ãã¡ãããæåã®å¹Žã«ã¯ããŸããŸãªçš®é¡ã®å®ç¿ããããããã§ã¯éåžžãã¹ã¯ãªãã (䞻㫠MATLAB èšèªã§) ãæžãããé«åºŠã«å°éåãããããŸããŸãª GUI ã䜿çšãããã®éžæãæ°äž»çã«äžããããŸãã (ã¹ã¯ãªãããæžããã«ã·ãã¥ã¬ãŒã·ã§ã³ãè¡ããšããæå³ã§)ã¢ããªã³ã°ç°å¢)ã
èšããŸã§ããªããå°æ¥ã®çåŠä¿®å£«ã§ããç§ãã¡ã¯ãè¥ãé ã®æãããããç«ã®ããã«ã³ãŒããæžãããšãé¿ããŠããŸããã ããšãã°ãããã« MathWorks ã® Simulink ããããŸããããã«ãããã¯ãããã«æ¥ç¶ãããã«ããããçš®é¡ã®èšå®ãšã¹ã€ããããããŸãã
ãããŸã§åè·¯èšèšãã·ã¹ãã ãšã³ãžãã¢ãªã³ã°ã«æºãã£ã人ã«ãšã£ãŠã¯ããã€ãã£ãã§ç解ã§ãããã¥ãŒã§ãã
ããã§ç§ãã¡ã«ã¯ããèŠããŸãã...
çŸå®
åæã®å®ç¿ã®äžã€ã¯ãã¢ããªã³ã°ãšæé©åã®ææ³ããšããç§ç®ã®äžç°ãšããŠOFDMä¿¡å·éåä¿¡æ©ã®éçºã§ããã ãã®ã¢ã€ãã¢ã¯éåžžã«æåããŠããŸãããã®æè¡ã¯ãWi-Fi ã LTE/LTE-A ãããã¯ãŒã¯ (OFDMA ã®åœ¢åŒ) ãªã©ã§äœ¿çšãããŠãããããä»ã§ãé¢é£æ§ããããéåžžã«äººæ°ããããŸãã ããã¯ããã¹ã¿ãŒãéä¿¡ã·ã¹ãã ã®ã¢ããªã³ã°ã®ã¹ãã«ãç·Žç¿ããã®ã«æé©ãªæ¹æ³ã§ãã
ãããŠä»ãæããã«éå®çšçãªãã¬ãŒã ãã©ã¡ãŒã¿ãæã€æè¡ä»æ§ã®ããã€ãã®ãªãã·ã§ã³ãäžãããïŒã€ã³ã¿ãŒãããã§è§£æ±ºçãæ¢ããªãããã«ããããïŒãç§ãã¡ã¯ãã§ã«è¿°ã¹ãSimulinkã«é£ã³ã€ããŸã...ãããŠç§ãã¡ã¯ãã£ãŒãããã§é ã殎ãããŸããçŸå®ã®:
- åãããã¯ã«ã¯æªç¥ã®ãã©ã¡ãŒã¿ãå€æ°å«ãŸããŠããããããªãå€æŽããã®ã¯æããããã®ã§ãã
- æ°åã䜿ã£ãæäœã¯ç°¡åããã«èŠããŸãããããã§ã倧éšãããå¿ èŠããããŸãããæ³åºŠã§ãã
- Cathedral ãã·ã³ã¯ãå©çšå¯èœãªãããã¯ã®ã©ã€ãã©ãªããµãŒãã£ã³ããŠãã段éã§ããGUI ãå¿ æ»ã«äœ¿çšãããšèããé床ãäœäžããŸãã
- èªå® ã§äœããä»äžããã«ã¯ãåã Simulink ãå¿ èŠã§ãã ãããŠå®éã代æ¿æ段ã¯ãããŸããã
ã¯ããæçµçã«ã¯ãã¡ãããããžã§ã¯ããå®äºããŸãããã倧ããªå®å µã®æ¯ãåããªããå®äºããŸããã
æãçµã¡ã修士XNUMX幎ç®ãçµãããŸããã GUI ã䜿çšãã宿é¡ã®éã¯ããŸã ãã©ãã€ã ã·ãããŸã§ã«ã¯è³ã£ãŠããŸãããããã€ãèªç§ç®ã®å²åã®å¢å ã«æ¯äŸããŠæžå°ãå§ããŸããã ç§ãå«ãç§ãã¡ã®å€ãã¯ãèç©ã®ããªãã®å¹ ãä¹ãè¶ããŠãç§åŠãããžã§ã¯ã㧠(ããŒã«ããã¯ã¹ã®åœ¢åŒã§ã¯ããã) äžèŠéŠŽæã¿ã®ãã Simulink ã§ã¯ãªããMatlab ããŸããŸã䜿çšããããã«ãªããŸããã
ç§ãã¡ãçåã«æã£ãã®ã¯ãXNUMX幎çã®äžäººïŒãã®æ圌ãã¯ãã·ã¢ã«åž°åœããã°ããã ã£ãïŒã®æ¬¡ã®ãããªèšèã ã£ãã
- å°ãªããšãã€ã³ã¿ãŒã³ã·ããã®éã¯ãSimilinkãMathCadããã®ä»ã® LabView ã®ããšã¯å¿ããŠãã ããããã¹ãŠã¯ãMatLab èªäœãŸãã¯ãã®ç¡æã®ãããŒãžã§ã³ãOctave ã䜿çšããŠãMATLAB ã§æžãããŠããŸãã
ãã®çºèšã¯éšåçã«ã¯çå®ã§ããããšãå€æããŸãããã€ã«ã¡ããŠã§ã¯ãããŒã«ã®éžæããããè«äºãå®å šã«ã¯è§£æ±ºãããŠããŸããã§ããã 確ãã«ãéžæã®ã»ãšãã©ã¯ MATLABãPythonãC ã®éã§ããã
åãæ¥ãç§ã¯èªç¶ãªè奮ã«é§ãããŸãããOFDM éä¿¡æ©ã¢ãã«ã®èªåã®éšåãã¹ã¯ãªããåããã圢åŒã«ç§»ãã¹ãã§ã¯ãªãã? ãã ã®æ¥œãã¿ã®ããã§ãã
ãããŠä»äºã«åãæãããŸããã
å°ããã€
çè«çãªèšç®ã®ä»£ããã«ãåçŽã«ãããžã®ãªã³ã¯ã瀺ããŸãã
çŽ æŽãããèšäº 2011幎ããtgx ãããŠã¹ã©ã€ãäžã§LTEç©çå±€ ææãã·ã§ã«ã»ãã£ã© ïŒTUã€ã«ã¡ããŠïŒã ããã§ååã ãšæããŸãã
ãããã§ã¯ãç¹°ãè¿ããŸãããäœãã¢ãã«ã«ããã®ã§ãããã?ããšç§ã¯æããŸããã
ã¢ãã«ããããŠããã ããŸã OFDMãã¬ãŒã çæåš (OFDM ãã¬ãŒã ãžã§ãã¬ãŒã¿ãŒ)ã
å«ãŸãããã®:
- æ å ±èšå·
- ãã€ãããä¿¡å·
- ãŒã (DC)
(ããããããããããã«) 以äžããæç²ããŸãã
- ãµã€ã¯ãªãã¯ãã¬ãã£ãã¯ã¹ã®ã¢ããªã³ã°ãã (åºæ¬ãç¥ã£ãŠããã°ãè¿œå ã¯é£ãããããŸãã)
æ€èšäžã®ã¢ãã«ã®ãããã¯å³ã é FFT (IFFT) ãããã¯ã§åæ¢ããŸãã çµµãå®æãããããã«ã誰ããèªåã§æ®ããç¶ããããšãã§ããŸã - ç§ã¯åŠéšã®æåž«ã«çåŸãã¡ã«äœããæ®ãããšãçŽæããŸããã
ããããèªåã§å®çŸ©ããŸãããã ãšã¯ãµãµã€ãºïŒ
- åºå®æ°ã®å¯æ¬éæ³¢ã
- åºå®ãã¬ãŒã é·ã
- äžå€®ã« 5 ã€ã®ãŒããè¿œå ãããã¬ãŒã ã®æåãšæåŸã« XNUMX çµã®ãŒããè¿œå ããå¿ èŠããããŸã (åèš XNUMX å)ã
- æ å ±ã·ã³ãã«ã¯ 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幎ã®æãåºã«æ®ãåçãæ·»ä»ãââãŸãã
ãã®è¡£è£ ã ãã§ãããã°ã©ã ãçµããç²æããããŸããïŒ ïŒåè«ïŒ
åºæïŒ habr.com