අද මගේ ලිපිය අහම්බෙන් (ස්වාභාවිකව වුවද) ක්රමලේඛන මාවතට පිවිසි පුද්ගලයෙකුගේ සිතුවිලි උච්චාරණය කරයි.
ඔව්, මගේ අත්දැකීම මගේ අත්දැකීම පමණක් බව මට වැටහෙනවා, නමුත් එය සාමාන්ය ප්රවණතාවයට හොඳින් ගැලපෙන බව මට පෙනේ. එපමණක් නොව, පහත විස්තර කර ඇති අත්දැකීම් විද්යාත්මක ක්රියාකාරකම් ක්ෂේත්රයට වඩා සම්බන්ධ වේ, නමුත් අපාය විහිළු නොකරන දේ - එය පිටතින් ප්රයෝජනවත් විය හැකිය.
මූලාශ්රය:
පොදුවේ ගත් කල, හිටපු ශිෂ්යයෙකුගේ සිට වර්තමාන සියලුම සිසුන් සඳහා කැපවී ඇත!
අපේක්ෂාවන්
මම 2014 දී තොරතුරු සන්නිවේදන තාක්ෂණ සහ සන්නිවේදන පද්ධති පිළිබඳ මගේ උපාධිය සම්පූර්ණ කරන විට, මම ක්රමලේඛන ලෝකය ගැන කිසිවක් දැන සිටියේ නැත. ඔව්, අනෙක් බොහෝ අය මෙන්, මම මගේ පළමු වසරේ “පරිගණක විද්යාව” විෂයය ගත්තෙමි - නමුත්, ස්වාමීනි, එය මගේ පළමු වසරේ විය! එය සදාකාලිකයි!
පොදුවේ ගත් කල, මම උපාධියකට වඩා වෙනස් දෙයක් බලාපොරොත්තු නොවූ අතර, මම ශාස්ත්රපති වැඩසටහනට ඇතුළු වූ විට
නමුත් නිෂ්ඵල ...
අපි දෙවන බඳවා ගැනීම පමණක් වූ අතර, පළමුවැන්නා තවමත් දුර බැහැර ජර්මනිය සඳහා ඔවුන්ගේ බෑග් අසුරමින් සිටියේය (සීමාවාසික පුහුණුව සඳහා ශාස්ත්රපති උපාධියේ දෙවන වසරේ මාස හයක් ගත වේ). වෙනත් වචන වලින් කිවහොත්, සමීප කවයේ කිසිවෙකු තවමත් යුරෝපීය අධ්යාපනයේ ක්රම බරපතල ලෙස මුණගැසී නොතිබූ අතර විස්තර ගැන විමසීමට කිසිවෙකු සිටියේ නැත.
අපගේ පළමු වසර තුළ, ඇත්ත වශයෙන්ම, අපට විවිධ ආකාරයේ භාවිතයන් තිබුණි, සාමාන්යයෙන් අපට ප්රජාතන්ත්රවාදීව ස්ක්රිප්ට් ලිවීම (ප්රධාන වශයෙන් MATLAB භාෂාවෙන්) සහ විවිධ ඉහළ විශේෂිත GUI භාවිතා කිරීම අතර තේරීමක් ලබා දෙන ලදී (අර්ථයෙන් - scripts ලිවීමෙන් තොරව - simulation ආකෘති පරිසරයන්).
අනාගත විද්යා ශාස්තෘවරුන් වන අපි අපේ තරුණ වියේ මෝඩකම නිසා ගින්දර මෙන් කේත ලිවීමෙන් වැළකී සිටි බව අමුතුවෙන් කිව යුතු නැත. මෙන්න, උදාහරණයක් ලෙස, MathWorks වෙතින් Simulink වේ: මෙන්න බ්ලොක්, මෙන්න සම්බන්ධතා, මෙන්න සියලු වර්ගවල සිටුවම් සහ ස්විච.
මීට පෙර පරිපථ සැලසුම් සහ පද්ධති ඉංජිනේරු විද්යාවේ සේවය කර ඇති පුද්ගලයෙකුට දේශීය සහ තේරුම් ගත හැකි දසුනක්!
ඉතින් ඒක අපිට පෙනුනා...
යථාර්ථය
පළමු අධ්යයන වාරයේ එක් ප්රායෝගික කාර්යයක් වූයේ "ආකෘතිකරණය සහ ප්රශස්තකරණය සඳහා ක්රම" යන විෂයයේ කොටසක් ලෙස OFDM සංඥා සම්ප්රේෂකයක් සංවර්ධනය කිරීමයි. අදහස ඉතා සාර්ථකයි: තාක්ෂණය තවමත් අදාළ වන අතර එහි භාවිතය හේතුවෙන් තරමක් ජනප්රියයි, උදාහරණයක් ලෙස, Wi-Fi සහ LTE / LTE-A ජාල වල (OFDMA ආකාරයෙන්). ටෙලිකොම් පද්ධති ආකෘති නිර්මාණය කිරීමේදී ස්වාමිවරුන්ට ඔවුන්ගේ කුසලතා පුහුණු කිරීමට හොඳම දේ මෙයයි.
දැන් අපට පැහැදිලිවම ප්රායෝගික නොවන රාමු පරාමිතීන් සහිත තාක්ෂණික පිරිවිතර විකල්ප කිහිපයක් ලබා දී ඇත (අන්තර්ජාලයේ විසඳුමක් නොසොයන ලෙස), අපි දැනටමත් සඳහන් කර ඇති Simulink මතට පහර දෙමු ... තවද අපි තේ පෝච්චියකින් හිසට පහර දෙමු. යථාර්ථය:
- සෑම බ්ලොක් එකක්ම නොදන්නා පරාමිති රාශියකින් පිරී ඇති අතර ඒවා තොප්පියකින් වෙනස් වීමට බිය වේ.
- අංක සමඟ හැසිරවීම සිදු කළ යුතුය, එය සරල බව පෙනේ, නමුත් ඔබට තවමත් කලබල විය යුතුය, දෙවියන් වහන්සේ තහනම් කරයි.
- ආසන දෙව්මැදුර යන්ත්ර, පවතින කුට්ටිවල පුස්තකාල හරහා සැරිසැරීමේ අවධියේදී පවා, GUI හි උමතු භාවිතය හේතුවෙන් සැලකිය යුතු ලෙස මන්දගාමී වේ.
- නිවසේ යමක් අවසන් කිරීමට, ඔබට එකම Simulink තිබිය යුතුය. තවද, ඇත්ත වශයෙන්ම, විකල්ප නොමැත.
ඔව්, අවසානයේ අපි, ඇත්ත වශයෙන්ම, ව්යාපෘතිය සම්පූර්ණ කළෙමු, නමුත් අපි එය විශාල සහනයක් පිට කර අවසන් කළෙමු.
ටික දවසක් ගියා, අපි ශාස්ත්රපති උපාධියේ පළමු වසරේ අවසානයට ආවා. GUI භාවිතා කරන ගෙදර වැඩ ප්රමාණය සමානුපාතිකව පහත වැටීමට පටන් ගත්තේ ජර්මානු විෂයයන් අනුපාතය වැඩිවීමත් සමඟ, එය තවමත් සුසමාදර්ශී වෙනසක් කරා ළඟා වී නොතිබුණද ය. මා ඇතුළු අපගෙන් බොහෝ දෙනෙක්, ගොඩ නැගීම සඳහා අපගේ සැලකිය යුතු විස්තාරය අභිබවා යමින්, අපගේ විද්යාත්මක ව්යාපෘතිවල (මෙවලම් පෙට්ටි ආකාරයෙන් වුවද) වැඩි වැඩියෙන් භාවිතා කළේ Matlab මිස, පෙනෙන පරිදි හුරුපුරුදු Simulink නොවේ.
අපගේ සැකයට තුඩු දුන් කරුණ වූයේ දෙවන වසරේ සිසුවෙකුගේ වාක්ය ඛණ්ඩයයි (ඔවුන් ඒ වන විට නැවත රුසියාවට පැමිණ තිබුණි):
- අවම වශයෙන් සීමාවාසික කාලය සඳහා, Similink, MathCad සහ වෙනත් LabView ගැන අමතක කරන්න - කන්දට ඉහළින්, සෑම දෙයක්ම MATLAB හි ලියා ඇත, MatLab හෝ එහි නොමිලේ “අනුවාදය” Octave භාවිතා කරයි.
ප්රකාශය අර්ධ වශයෙන් සත්ය විය: ඉල්මෙනෝ හි, මෙවලම් තේරීම පිළිබඳ ආරවුල ද සම්පූර්ණයෙන්ම විසඳී නොමැත. ඇත්ත, තේරීම බොහෝ දුරට MATLAB, Python සහ C අතර විය.
එදිනම, මම ස්වභාවික උද්දීපනයකින් ගෙන ගියෙමි: මම OFDM සම්ප්රේෂක ආකෘතියේ මගේ කොටස ස්ක්රිප්ටඩ් ආකෘතියකට මාරු නොකළ යුතුද? හුදෙක් විනෝදය සඳහා පමණි.
ඒ වගේම මට වැඩ කරන්න ලැබුණා.
පියවරෙන් පියවර
න්යායික ගණනය කිරීම් වෙනුවට මම මේකට ලින්ක් එකක් දෙන්නම්
විශිෂ්ට ලිපියක් 2011 සිටtgx සහ විනිවිදක මතLTE භෞතික ස්ථරය මහාචාර්යවරුමයිකල්-ටිලා (TU ඉල්මෙනෝ). මම හිතන්නේ මෙය ප්රමාණවත් වනු ඇත.
"ඉතින්," මම හිතුවා, "අපි නැවත කියමු, අපි මොඩල් කරන්න යන්නේ කුමක්ද?"
අපි ආකෘති කරන්නෙමු 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);
දැන් අපි නියමු සංඥා තේරුම් ගනිමු.
අපට අච්චුවක් ඇත (විචල්ය ගුවන් නියමුවන්), සහ අපි කියමු මෙම සැකිල්ලෙන් නියමුවන් අනුපිළිවෙලින් අපගේ රාමුවට ඇතුළු කිරීමට අපට අවශ්ය බව. ඇත්ත වශයෙන්ම, මෙය ලූපයකින් කළ හැකිය. නැතහොත් ඔබට matrices සමඟ ටිකක් උපක්රමශීලීව ක්රීඩා කළ හැකිය - වාසනාවකට මෙන් 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 භාවිතා කරමින්, අපි නවීන මෙවලමක් සමඟ සරල ගැටළුවක් විසඳීමට කටයුතු කළෙමු.
- GUI හොඳයි, නමුත් "හුඩ් යට" අඩංගු දේ තේරුම් ගැනීම වඩා හොඳය.
දැන්, ශිෂ්යයෙකුගෙන් ඈත්ව සිටින මට ශිෂ්ය සහෝදරත්වයට පහත සඳහන් දේ පැවසීමට අවශ්යය.
- එය කරන්න!
මුලදී එය නරක වුවත්, කේතය ලිවීමට උත්සාහ කරන්න. ක්රමලේඛනය සමඟ, වෙනත් ඕනෑම ක්රියාකාරකමක් මෙන්, අමාරුම කොටස ආරම්භයයි. කලින් ආරම්භ කිරීම වඩා හොඳය: ඔබ විද්යාඥයෙකු හෝ තාක්ෂණික ශිල්පියෙකු නම්, ඉක්මනින් හෝ පසුව ඔබට මෙම කුසලතාව අවශ්ය වනු ඇත.
- ඉල්ලුම!
ගුරුවරුන් සහ අධීක්ෂකවරුන්ගෙන් ප්රගතිශීලී ප්රවේශයන් සහ මෙවලම් ඉල්ලා සිටින්න. මෙය හැකි නම්, ඇත්ත වශයෙන්ම ...
- නිර්මාණය කරන්න!
අධ්යාපනික වැඩසටහනක රාමුව තුළ නොවේ නම්, ආරම්භකයකුගේ සියලු තුවාලවලින් මිදීමට වඩා හොඳ කොහෙද? ඔබේ කුසලතා නිර්මාණය කර ඔප් නංවන්න - නැවතත්, ඔබ ඉක්මනින් ආරම්භ කරන තරමට වඩා හොඳය.
සියලුම රටවල අපේක්ෂා කරන වැඩසටහන්කරුවන්, එක්වන්න!
ප්රාදේශීය සභා
සිසුන් සමඟ මගේ සෘජු සම්බන්ධතාවය වාර්තා කිරීම සඳහා, මම රෙක්ටර්වරුන් දෙදෙනෙකු සමඟ 2017 අමතක නොවන ඡායාරූපයක් අමුණමි: පීටර් ෂාෆ් (දකුණ) සහ ඇල්බට් කරිසොවිච් ගිල්මුට්ඩිනොව් (වමේ).
අවම වශයෙන් මෙම ඇඳුම් සඳහා වැඩසටහන අවසන් කිරීම වටී! (විහිළුවක්)
මූලාශ්රය: www.habr.com