ProHoster > блог > Навіны інтэрнэту > "Маніфест пачаткоўцаў праграмістаў з сумежных спецыяльнасцяў" ці як я дайшоў да жыцця такі
"Маніфест пачаткоўцаў праграмістаў з сумежных спецыяльнасцяў" ці як я дайшоў да жыцця такі
Сённяшні мой артыкул - гэта думкі ўслых ад чалавека, які стаў на шлях праграмавання амаль выпадкова (хоць і заканамерна).
Так, я разумею, што мой досвед — гэта толькі мой досвед, аднак ён, мне здаецца, добра трапляе ў агульную тэндэнцыю. Больш за тое, вопыт, апісаны ніжэй, больш адносіцца да сферы навуковай дзейнасці, аднак чым чорт не жартуе - можа спатрэбіцца і па-за.
Увогуле, усім сапраўдным студэнтам ад былога студэнта прысвячаецца!
чакання
Калі ў 2014 годзе я заканчваў бакалаўрыят па спецыяльнасці «Інфакамунікацыйныя тэхналогіі і сістэмы сувязі» я амаль нічога не ведаў пра свет праграмавання. Так, у мяне, як і ў многіх, быў на першым курсе прадмет "Інфарматыка" - але, божа, гэта ж было на першым курсе! Прайшла цэлая вечнасць!
Увогуле і цэлым, нічога асабліва выдатнага ад бакалаўрыяту я не чакаў, і паступаючы на магістарскую праграму "Communication and Signal Processing" Германа-Расійскага Інстытута Новых Тэхналогій.
А дарма…
Мы былі ўсяго другім наборам, і хлопцы з першага яшчэ толькі збіралі валізкі ў далёкую Нямеччыну (стажыроўка займае паўгода на другім курсе магістратуры). Інакш кажучы, ніхто з бліжэйшага кола яшчэ не сутыкаўся сур'ёзна з метадамі еўрапейскай адукацыі, і пытацца аб дэталях было асабліва няма ў каго.
Былі ў нас на першым курсе, вядома, рознага роду практыкі, на якіх звычайна нам дэмакратычна прапаноўваўся выбар паміж напісаннем скрыптоў (пераважна на мове MATLAB) і выкарыстаннем розных вузкаспецыялізаваных GUI (у тым сэнсе, што без напісання скрыптоў - асяроддзяў імітацыйнага мадэлявання).
Ці варта казаць, што мы, будучыя Masters of Science, па сваёй юнацкай дурасці, як агню, цураліся напісанні кода. Вось, ён, дапусцім, Simulink ад кампаніі MathWorks: вось яны блокі, вось яны сувязі, вось яны ўсякага роду налады і перамыкачы.
Родны і зразумелы для чалавека, які займаўся перш схематэхнікай і сістэматэхнікай, выгляд!
Адной з практычных работ першага семестра была распрацоўка прыёмаперадатчыка OFDM сігналу ў рамках прадмета "Methods for Modeling and Optimization". Ідэя вельмі ўдалая: тэхналогія і дагэтуль актуальная і даволі папулярная ў сілу выкарыстання, напрыклад, у сетках Wi-Fi і LTE/LTE-A (у выглядзе OFDMA). Самае тое для магістраў, каб патрэніраваць навыкі мадэлявання целікам сістэм.
І вось на рукі нам выдаюць некалькі варыянтаў ТЗ з загадзя непрактычнымі параметрамі кадра (каб не шукаць рашэнне ў Інтэрнэце), і мы накідваемся на ўжо згаданы Simulink… І атрымліваем імбрычкам рэчаіснасці па галаве:
Кожны блок тоіць у сабе процьму невядомых параметраў, змяняць якія з кондачка - страшнавата.
Маніпуляцыі з лікамі зрабіць трэба, накшталт, простыя, аднак гарадзіць даводзіцца ўсё роўна дай божа.
Кафедральныя машыны прыкметна падтармажваюць ад ліхаманкавага выкарыстанне GUI, нават на этапе серфінгу па бібліятэках даступных блокаў.
Каб дарабіць нешта дома, трэба мець такі ж Simulink. І ніякіх, уласна, альтэрнатыў.
Так, праект у выніку мы, вядома, дарабілі, але дарабілі з гучным выдыхам палягчэння.
Прайшоў некаторы час, і мы падышлі да заканчэння першага курса магістратуры. Колькасць хатніх прац з выкарыстаннем GUI стала прапарцыйна спадаць з павелічэннем дзелі нямецкіх прадметаў, хоць яшчэ і не дасягала кропкі змены парадыгмы. Шмат хто з нас, уключаючы мяне, пераадольваючы сваю немалую амплітуду на разварушванне, усё больш і больш выкарыстоўвалі ў сваіх навуковых праектах менавіта Matlab (хай і ў выглядзе Toolbox'ов), а не знаёмы, здавалася б, Simulink.
Пунктам у нашых сумневах стала фраза аднаго са студэнтаў другога курсу (яны як раз да таго часу вярнуліся ў Расею):
Забудзьцеся, прынамсі на час стажыроўкі, пра Similink, MathCad і іншы LabView – за грудом усё пішуць на мове MATLAB, выкарыстоўваючы ўласна сам MatLab або яго бясплатную «версію» Octave.
Заява аказалася дакладнай збольшага: у Ільменау спрэчка аб выбары інструментарыя таксама не была вырашана да канца. Праўда, выбар стаяў збольшага паміж мовамі MATLAB, Python і C.
У той жа дзень мяне ўзяў заканамерны азарт: а не ці перанесці сваю частку мадэлі OFDM перадатчыка ў скрыптовую форму? Just for fun.
"Такім чынам, - падумаў я, - паўторым, што ж мы будзем мадэляваць?"
Мадэляваць будзем генератар OFDM кадра (OFDM frame generator).
Што ён будзе ўключаць:
інфармацыйныя сімвалы
пілотныя сігналы
нулі (DC)
Ад чаго (прастаты дзеля) мы абстрагуемся:
ад мадэлявання цыклічнага прэфікса (пры веданні асноў, дадаць ён ужо не складзе працы)
Блок-схема разгляданай мадэлі. Спынімся мы да блока зваротнага БПФ (IFFT). Астатняе для паўнаты карціны кожны можа працягнуць сам - я абяцаў выкладчыкам з кафедры пакінуць нешта і для студэнтаў.
Вызначым для сябе тых. заданне:
фіксаваная колькасць паднясучых (sub-carriers);
фіксаваная даўжыня кадра;
мы павінны дадаць адзін нуль у сярэдзіну і па пары нулёў да пачатку і канцу кадра (разам, 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
Цяпер вызначым індэксы інфармацыйных сімвалаў, прыняўшы перадумову, што пілотныя сігналы павінны абавязкова ісці да і/або пасля нулёў:
%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));
Далей фармуем вектар, які складаецца з нашых шаблонаў:
І вызначаем невялікі вектар, які ўтрымоўвае толькі кавалак шаблону - "хвост", не які змясціўся цалкам у кадр:
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
"Кайф!" - падумаў я задаволена і зачыніў ноўтбук. Пайшло ў мяне на ўсё пра ўсё пару гадзін: уключаючы напісанне кода, вывучэнне некаторых матлабаўскіх функцый і прадумванне матэматычных трукаў.
Якія высновы я тады зрабіў
суб'ектыўныя:
Пісаць код прыемна і падобна паэзіі!
Напісанне скрыптоў - найболей зручны метад даследаванняў для вобласці Communication and Signal Processing.
аб'ектыўныя:
Не трэба паліць з гарматы па вераб'ях (калі такая навучальная мэта, вядома, не варта): выкарыстаўшы Simulink, мы ўзяліся за рашэнне простай задачы наварочанай прыладай.
GUI гэта добра, але разумець што ўтрымоўваецца пад капотам лепш.
І зараз, будучы ўжо далёка не студэнтам, я хачу сказаць студэнцкай браціі наступнае:
Адважвайцеся!
Спрабуйце пісаць код, няхай нават спачатку ён будзе дрэнным. З праграмаваннем як і з любой іншай дзейнасцю, ліха бяда - пачатак. А пачаць лепш раней: калі вы навуковец ці нават проста тэхнар - рана ці позна гэты навык вам спатрэбіцца.
Патрабуйце!
Патрабуйце ад выкладчыкаў і навуковых кіраўнікоў прагрэсіўных падыходаў і інструментаў. Калі гэта, вядома, колькі магчыма…
Тварыце!
Дзе ж яшчэ лепш за ўсё перахварэць усімі болькамі пачаткоўца, як не ў рамках адукацыйнай праграмы? Дзейце і навострывайце сваё майстэрства - ізноў жа чым раней пачаць, тым лепш.
Пачаткоўцы праграмісты ўсіх краін, аб'ядноўвайцеся!
PS
Каб запратакаляваць сваё прамое стаўленне да студэнцтва, прыкладаю памятнае фота 2017 года з двума рэктарамі: Петэрам Шарфам (справа) і Альбертам Харысовічам Гільмудзінавым (злева).
Каштавала скончыць праграму як мінімум дзеля такіх гарнітураў! (жартую)