„Manifesta fyrir byrjandi forritara úr skyldum sérgreinum“ eða hvernig ég komst á þennan stað í lífinu

Greinin mín í dag er hugsanir upphátt frá einstaklingi sem fór næstum því óvart (að vísu eðlilega).

Já, ég skil að mín reynsla er bara mín reynsla, en mér sýnist hún falla vel að almennri þróun. Þar að auki, reynslan sem lýst er hér að neðan tengist meira sviði vísindastarfsemi, en hvað í fjandanum er ekki að grínast - það getur verið gagnlegt úti.

„Manifesta fyrir byrjandi forritara úr skyldum sérgreinum“ eða hvernig ég komst á þennan stað í lífinu
Heimild: https://xkcd.com/664/

Almennt tileinkað öllum núverandi nemendum frá fyrrverandi nemanda!

Væntingar

Þegar ég lauk BA gráðu í upplýsingatækni og samskiptakerfum árið 2014 vissi ég nánast ekkert um forritunarheiminn. Já, eins og margir aðrir, tók ég „Tölvunarfræði“ fagið á fyrsta ári - en, Drottinn, það var á fyrsta ári! Það er heil eilífð!

Almennt séð bjóst ég ekki við neinu sérstaklega öðruvísi en BA gráðu og þegar ég fór í meistaranámið "Samskipti og merkjavinnsla" Þýska-rússneska stofnunin um nýja tækni.

En til einskis...

Við vorum aðeins önnur inntaka og strákarnir frá þeim fyrri voru enn að pakka töskunum sínum fyrir fjarlæga Þýskaland (starfsnámið tekur sex mánuði á öðru ári í meistaranámi). Með öðrum orðum, enginn úr nánasta hópi hafði enn kynnst aðferðum evrópskrar menntunar í alvörunni og það var enginn að spyrja um smáatriðin.

Á fyrsta ári vorum við auðvitað með ýmis konar vinnubrögð, þar sem okkur var yfirleitt lýðræðislega boðið að velja á milli þess að skrifa handrit (aðallega á MATLAB tungumálinu) og að nota ýmis mjög sérhæfð GUI (í þeim skilningi að án þess að skrifa handrit - uppgerð líkanaumhverfi).

„Manifesta fyrir byrjandi forritara úr skyldum sérgreinum“ eða hvernig ég komst á þennan stað í lífinu

Það þarf varla að taka það fram að við, framtíðarmeistarar í raunvísindum, forðuðumst af æskuheimsku að skrifa kóða eins og eld. Hér er til dæmis Simulink frá MathWorks: hér eru kubbar, hér eru tengingar, hér eru alls kyns stillingar og rofar.

Skoðun sem er innfædd og skiljanleg fyrir einstakling sem hefur áður starfað við hringrásarhönnun og kerfisfræði!

„Manifesta fyrir byrjandi forritara úr skyldum sérgreinum“ eða hvernig ég komst á þennan stað í lífinu
Heimild: https://ch.mathworks.com/help/comm/examples/parallel-concatenated-convolutional-coding-turbo-codes.html

Svo fannst okkur...

Reality

Eitt af verklegum verkum fyrstu önn var þróun OFDM merki senditækis sem hluti af viðfangsefninu „Aðferðir til líkanagerðar og hagræðingar“. Hugmyndin er mjög farsæl: tæknin er enn viðeigandi og nokkuð vinsæl vegna notkunar hennar, til dæmis í Wi-Fi og LTE/LTE-A netum (í formi OFDMA). Þetta er það besta fyrir meistara til að æfa færni sína í að móta fjarskiptakerfi.

„Manifesta fyrir byrjandi forritara úr skyldum sérgreinum“ eða hvernig ég komst á þennan stað í lífinu

Og nú erum við gefnir nokkrir möguleikar á tækniforskriftum með augljóslega óhagkvæmum rammabreytum (til að leita ekki að lausn á netinu), og við tökum á Simulink sem þegar hefur verið nefnt ... Og við fáum högg á höfuðið með tekatli raunveruleikans:

  • Hver blokk er full af mörgum óþekktum breytum, sem er skelfilegt að breytast á örskotsstundu.
  • Það þarf að gera meðhöndlunina með tölum, að því er virðist, einfalt, en þú verður samt að tuða, guð forði það.
  • Dómkirkjuvélar hægja á sér áberandi frá ofsafenginni notkun GUI, jafnvel á því stigi að vafra um bókasöfn með tiltækum blokkum.
  • Til að klára eitthvað heima þarftu að hafa sama Simulink. Og reyndar engir kostir.

Já, á endanum kláruðum við verkefnið að sjálfsögðu, en við kláruðum það með mikilli útöndun af létti.

Nokkur tími leið og við komum að fyrsta ári í meistaranámi. Magn heimanáms með GUI byrjaði að lækka hlutfallslega með aukningu á hlutfalli þýskra námsgreina, þó að það væri ekki enn komið á það stig að hugmyndafræðibreyting hefði orðið. Mörg okkar, þar á meðal ég, sem sigruðum töluvert umfang okkar til að byggja upp, notuðu Matlab meira og meira í vísindaverkefnum okkar (þó í formi verkfærakassa), en ekki Simulink sem virðist kunnugleg.

Aðalatriðið í efasemdum okkar var setning eins nemenda á öðru ári (þeir voru nýkomnir aftur til Rússlands á þeim tíma):

  • Gleymdu, að minnsta kosti meðan starfsnámið stendur, um Similink, MathCad og annað LabView - yfir hæðina er allt skrifað í MATLAB, með MatLab sjálfu eða ókeypis "útgáfu" Octave þess.

Fullyrðingin reyndist að hluta til sönn: í Ilmenau var ágreiningurinn um val á verkfærum heldur ekki leystur að fullu. Að vísu stóð valið aðallega á milli MATLAB, Python og C.

Sama dag varð ég hrifinn af eðlilegri spennu: ætti ég ekki að flytja hluta minn af OFDM sendilíkaninu yfir á handritsform? Bara til gamans.

Og ég fór að vinna.

Skref fyrir skref

Í staðinn fyrir fræðilega útreikninga mun ég einfaldlega gefa hlekk á þetta frábær grein 2011 frá tgx og á rennibrautunum LTE líkamlegt lag prófessorar Michel-Tila (TU Ilmenau). Ég held að þetta verði nóg.

"Svo," hugsaði ég, "við skulum endurtaka, hvað ætlum við að gera fyrirmynd?"
Við munum fyrirmynd OFDM ramma rafall (OFDM ramma rafall).

Hvað mun það innihalda:

  • upplýsingatákn
  • flugmannsmerki
  • núll (DC)

Hvað (til einföldunar) við afdráttum frá:

  • frá því að búa til hringlaga forskeyti (ef þú veist grunnatriðin, þá verður það ekki erfitt að bæta því við)

„Manifesta fyrir byrjandi forritara úr skyldum sérgreinum“ eða hvernig ég komst á þennan stað í lífinu

Reiturmynd af líkaninu sem er til skoðunar. Við munum stoppa við öfuga FFT (IFFT) reitinn. Til að fullkomna myndina geta allir haldið restinni áfram sjálfur - ég lofaði kennurum deildarinnar að skilja eftir eitthvað handa nemendum.

Við skulum skilgreina þær fyrir okkur sjálf. æfing:

  • fastur fjöldi undirflytjenda;
  • föst rammalengd;
  • við verðum að bæta við einu núlli í miðjunni og pari af núllum í upphafi og lok rammans (samtals, 5 stykki);
  • upplýsingatákn eru mótuð með M-PSK eða M-QAM, þar sem M er mótunarröð.

Byrjum á kóðanum.

Allt handritið er hægt að hlaða niður frá tengill.

Við skulum skilgreina inntaksfæribreytur:

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

Nú ákveðum við vísitölur upplýsingatákna og viðurkennum þá forsendu að flugmannsmerki verði endilega að fara á undan og/eða á eftir núllum:

idx_1_start = 4;
idx_1_end = fr_len/2 - 2;

idx_2_start = fr_len/2 + 2;
idx_2_end =  fr_len - 3;

Þá er hægt að ákvarða stöðurnar með aðgerðinni linspace, minnkar gildin í minnstu af næstu heiltölum:

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

Við skulum bæta núllvísitölum við þetta og flokka:

%concatenation and ascending sorting
inf_and_nulls_idx = union(inf_ind, nulls_idx); 

Samkvæmt því eru flugmerkjavísitölurnar allt annað:

%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); 

Nú skulum við skilja flugmannsmerki.

Við höfum sniðmát (breytu flugmenn), og segjum að við viljum að flugmenn úr þessu sniðmáti verði sett inn í rammann okkar í röð. Auðvitað er hægt að gera þetta í lykkju. Eða þú getur spilað svolítið erfiður með fylki - sem betur fer gerir MATLAB þér kleift að gera þetta með nægilegum þægindum.

Fyrst skulum við ákvarða hversu mörg af þessum sniðmátum passa alveg inn í rammann:

pilots_len_psudo = floor(N_pil/length(pilots));

Næst myndum við vektor sem samanstendur af sniðmátunum okkar:

% 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

Og við skilgreinum lítinn vektor sem inniheldur aðeins hluta af sniðmátinu - "halann", sem passar ekki alveg inn í rammann:

tail_len = fr_len  - N_inf - length(nulls_idx) ...
                - length(pilots)*pilots_len_psudo; 
tail = pilots(1:tail_len); % "tail" of pilots vector

Við fáum flugmannspersónur:

vec_pilots = [resh; tail]; % completed pilots vector that frame consists

Við skulum halda áfram að upplýsingatáknum, nefnilega, við munum mynda skilaboð og móta þau:

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 

Allt er tilbúið! Að setja saman rammann:

%% Frame construction
frame = zeros(fr_len,1);
frame(pilot_idx) = vec_pilots;
frame(inf_ind) = info_symbols

Þú ættir að fá eitthvað eins og þetta:

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

"Sæla!" — Ég hugsaði sáttur og lokaði fartölvunni. Það tók mig nokkra klukkutíma að gera allt: þar á meðal að skrifa kóða, læra nokkrar Matlab-aðgerðir og hugsa í gegnum stærðfræðibrellur.

Hvaða ályktanir dró ég þá?

Huglægt:

  • Að skrifa kóða er notalegt og í ætt við ljóð!
  • Scripting er þægilegasta rannsóknaraðferðin á sviði samskipta og merkjavinnslu.

Hlutlæg:

  • Það er engin þörf á að skjóta spörva úr fallbyssu (nema slíkt fræðslumarkmið sé auðvitað þess virði): með Simulink tókum við að okkur að leysa einfalt vandamál með háþróuðu tóli.
  • GUI er gott, en að skilja hvað er að finna „undir hettunni“ er betra.

Og nú, þar sem ég er langt frá því að vera nemandi, vil ég segja eftirfarandi við stúdentabræðralagið:

  • Þora!

Prófaðu að skrifa kóða, jafnvel þótt hann sé slæmur í fyrstu. Með forritun, eins og með hverja aðra starfsemi, er erfiðasti hlutinn byrjunin. Og það er betra að byrja fyrr: ef þú ert vísindamaður eða jafnvel bara tæknimaður, fyrr eða síðar muntu þurfa þessa kunnáttu.

  • Heimta!

Krefjast framsækinna aðferða og verkfæra frá kennurum og leiðbeinendum. Ef þetta er hægt, auðvitað...

  • Búðu til!

Hvar er annars betra að komast yfir öll sár byrjenda, ef ekki innan ramma fræðsluáætlunar? Búðu til og bættu færni þína - aftur, því fyrr sem þú byrjar, því betra.

Upprennandi forritarar frá öllum löndum, sameinist!

PS

Til þess að skrá beint samband mitt við nemendur læt ég fylgja eftirminnilega mynd frá 2017 með tveimur rektorum: Peter Scharff (til hægri) og Albert Kharisovich Gilmutdinov (til vinstri).

„Manifesta fyrir byrjandi forritara úr skyldum sérgreinum“ eða hvernig ég komst á þennan stað í lífinu

Það var þess virði að klára prógrammið að minnsta kosti fyrir þessa búninga! (að grínast)

Heimild: www.habr.com

Bæta við athugasemd