ProHoster > Dienoraštis > interneto naujienos > „Manifestas pradedantiesiems programuotojams iš susijusių specialybių“ arba kaip aš atsidūriau iki šio gyvenimo taško
„Manifestas pradedantiesiems programuotojams iš susijusių specialybių“ arba kaip aš atsidūriau iki šio gyvenimo taško
Mano šiandieninis straipsnis yra garsiai išreikštos mintys iš žmogaus, kuris programavimo keliu pasuko beveik atsitiktinai (nors ir natūraliai).
Taip, aš suprantu, kad mano patirtis yra tik mano patirtis, bet man atrodo, kad ji puikiai dera į bendrą tendenciją. Be to, toliau aprašyta patirtis labiau susijusi su mokslinės veiklos sritimi, bet ko velnių, nejuokaujame – ji gali būti naudinga ir už jos ribų.
Apskritai, skirta visiems dabartiniams studentams iš buvusio studento!
Lūkesčiai
Kai 2014 m. baigiau Infokomunikacijų technologijų ir ryšių sistemų bakalauro studijas, beveik nieko nežinojau apie programavimo pasaulį. Taip, kaip ir daugelis kitų, aš mokiausi „Kompiuterijos“ dalyką pirmaisiais metais, bet, Viešpatie, tai buvo mano pirmaisiais metais! Tai praėjo amžinybė!
Apskritai nieko ypatingo nesitikėjau iš bakalauro, o įstojau į magistrantūrą "Ryšis ir signalų apdorojimas" Vokietijos ir Rusijos naujųjų technologijų institutas.
Bet veltui...
Mes buvome tik antrasis, o vaikinai iš pirmos vis dar kraunasi lagaminus į tolimąją Vokietiją (antraisiais magistrantūros metais praktika trunka šešis mėnesius). Kitaip tariant, niekas iš artimiausių ratų dar nebuvo rimtai susidūręs su europietiško ugdymo metodais, nebuvo kam pasiteirauti smulkmenų.
Žinoma, pirmaisiais metais turėjome įvairių praktikų, kuriose dažniausiai demokratiškai buvo siūloma rinktis tarp scenarijų rašymo (daugiausia MATLAB kalba) ir įvairių labai specializuotų GUI (ta prasme, kad be scenarijų rašymo – modeliavimas). modeliavimo aplinkas).
Savaime suprantama, mes, būsimieji mokslų magistrai, iš savo jaunatviško kvailumo vengėme kodą rašyti kaip ugnies. Štai, pavyzdžiui, Simulink iš MathWorks: čia yra blokai, čia yra jungtys, čia yra visokie nustatymai ir jungikliai.
Vaizdas, kuris yra gimtasis ir suprantamas žmogui, kuris anksčiau dirbo grandinių projektavimo ir sistemų inžinerijos srityje!
Vienas iš pirmojo semestro praktinių darbų buvo OFDM signalo siųstuvo-imtuvo sukūrimas pagal dalyką „Modeliavimo ir optimizavimo metodai“. Idėja labai sėkminga: technologija vis dar aktuali ir gana populiari dėl jos naudojimo, pavyzdžiui, Wi-Fi ir LTE/LTE-A tinkluose (OFDMA pavidalu). Tai geriausia meistrams praktikuoti savo telekomunikacijų sistemų modeliavimo įgūdžius.
O dabar mums pateikiami keli techninių specifikacijų variantai su akivaizdžiai nepraktiškais rėmo parametrais (kad neieškotume sprendimo internete), o mes puolame į jau minėtą Simulink... Ir mums trenkia į galvą arbatinuku. tikrovės:
Kiekvienas blokas yra kupinas daug nežinomų parametrų, kuriuos baisu pakeisti vos nuleidus skrybėlę.
Manipuliacijas su skaičiais reikia daryti, rodos, paprastos, bet vis tiek reikia papurtyti, neduok Dieve.
Katedros mašinos pastebimai sulėtėja dėl pašėlusio GUI naudojimo net naršant po turimų blokų bibliotekas.
Norint ką nors baigti namuose, reikia turėti tą patį Simulink. Ir, tiesą sakant, alternatyvų nėra.
Taip, galiausiai mes, žinoma, užbaigėme projektą, bet užbaigėme jį garsiai iškvėpdami palengvėjimą.
Praėjo šiek tiek laiko, ir priėjome pirmųjų magistrantūros metų pabaigą. Namų darbų, naudojant GUI, kiekis ėmė mažėti proporcingai didėjant vokiečių mokinių daliai, nors jis dar nebuvo pasiekęs paradigmos poslinkio. Daugelis iš mūsų, įskaitant mane, įveikę didelę kūrimo amplitudę, vis dažniau savo moksliniuose projektuose naudojome Matlab (nors ir įrankių dėžių pavidalu), o ne iš pažiūros pažįstamą Simulink.
Mūsų abejonių taškas buvo vieno iš antro kurso studentų (tuo metu jie buvo ką tik grįžę į Rusiją) frazė:
Pamirškite bent jau stažuotės metu apie Similink, MathCad ir kitus LabView - už kalno viskas parašyta MATLAB, naudojant patį MatLab arba jo nemokamą „versiją“ Octave.
Teiginys iš dalies pasitvirtino: Ilmenau ginčas dėl įrankių pasirinkimo taip pat nebuvo iki galo išspręstas. Tiesa, dažniausiai buvo pasirinkta tarp MATLAB, Python ir C.
Tą pačią dieną mane apėmė natūralus jaudulys: ar neturėčiau savo OFDM siųstuvo modelio dalies perkelti į scenarijų? Dėl linksmumo.
„Taigi, – pagalvojau, – pakartokime, ką modeliuosime?
Mes modeliuosime OFDM rėmo generatorius (OFDM rėmo generatorius).
Kas bus įtraukta:
informaciniai simboliai
piloto signalai
nuliai (DC)
Iš ko (paprastumo dėlei) abstrahuojame:
nuo ciklinio priešdėlio modeliavimo (jei žinote pagrindus, jį pridėti nebus sunku)
Nagrinėjamo modelio blokinė schema. Sustosime ties atvirkštiniu FFT (IFFT) bloku. Kad paveikslas būtų užbaigtas, poilsį kiekvienas gali tęsti pats – katedros dėstytojams pažadėjau ką nors palikti mokiniams.
Apibrėžkime juos patys. pratimas:
fiksuotas antrinių nešėjų skaičius;
fiksuotas rėmo ilgis;
turime pridėti vieną nulį viduryje ir porą nulių rėmelio pradžioje ir pabaigoje (iš viso, 5 vnt.);
informacijos simboliai moduliuojami naudojant M-PSK arba M-QAM, kur M yra moduliavimo tvarka.
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
Dabar nustatome informacinių simbolių indeksus, priimdami prielaidą, kad pilotiniai signalai būtinai turi būti prieš ir (arba) po nulių:
%concatenation and ascending sorting
inf_and_nulls_idx = union(inf_ind, nulls_idx);
Atitinkamai, bandomojo signalo indeksai yra visa kita:
%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);
Dabar supraskime piloto signalus.
Turime šabloną (kintamąjį pilotai), ir tarkime, kad norime, kad šio šablono pilotai būtų įterpti į mūsų kadrą nuosekliai. Žinoma, tai gali būti padaryta kilpoje. Arba galite šiek tiek pažaisti su matricomis – laimei, MATLAB leidžia tai padaryti pakankamai patogiai.
Pirmiausia nustatykime, kiek iš šių šablonų visiškai telpa į rėmelį:
pilots_len_psudo = floor(N_pil/length(pilots));
Tada sudarome vektorių, kurį sudaro mūsų šablonai:
Ir mes apibrėžiame nedidelį vektorių, kuriame yra tik šablono dalis - „uodega“, kuri visiškai netelpa į kadrą:
tail_len = fr_len - N_inf - length(nulls_idx) ...
- length(pilots)*pilots_len_psudo;
tail = pilots(1:tail_len); % "tail" of pilots vector
Gauname bandomuosius personažus:
vec_pilots = [resh; tail]; % completed pilots vector that frame consists
Pereikime prie informacinių simbolių, būtent, suformuosime pranešimą ir jį moduliuosime:
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
— Palaima! – patenkintas pagalvojau ir uždariau nešiojamąjį kompiuterį. Man prireikė poros valandų, kol padariau viską: įskaitant kodo rašymą, kai kurių Matlab funkcijų išmokimą ir matematinių gudrybių apmąstymą.
Kokias išvadas tada padariau?
Subjektyvus:
Rašyti kodą malonu ir panašu į poeziją!
Scenarijų sudarymas yra patogiausias tyrimo metodas komunikacijos ir signalų apdorojimo srityje.
Tikslas:
Nereikia šaudyti į žvirblius iš patrankos (nebent toks edukacinis tikslas, žinoma, to vertas): naudodamiesi Simulink ėmėmės paprastos problemos sprendimo sudėtingu įrankiu.
GUI yra gera, tačiau geriau suprasti, kas yra „po gaubtu“.
Ir dabar, būdamas toli gražu ne studentas, studentų brolijai noriu pasakyti štai ką:
Būk drąsus!
Pabandykite parašyti kodą, net jei iš pradžių jis blogas. Programuojant, kaip ir bet kurioje kitoje veikloje, sunkiausia yra pradžia. Ir geriau pradėti anksčiau: jei esate mokslininkas ar net tiesiog technikos specialistas, anksčiau ar vėliau jums prireiks šio įgūdžio.
Paklausa!
Reikalaukite pažangių metodų ir priemonių iš mokytojų ir vadovų. Jei tai įmanoma, žinoma...
Sukurti!
Kur dar geriau įveikti visas pradedančiojo nuoskaudas, jei ne edukacinės programos rėmuose? Kurkite ir tobulinkite savo įgūdžius – vėlgi, kuo anksčiau pradėsite, tuo geriau.
Trokštantys programuotojai iš visų šalių, vienykitės!
PS
Siekdamas užfiksuoti savo tiesioginį ryšį su studentais, pridedu įsimintiną 2017 metų nuotrauką su dviem rektoriais: Peteriu Scharffu (dešinėje) ir Albertu Kharisovičiumi Gilmutdinovu (kairėje).
Verta baigti programą bent jau dėl šių kostiumų! (juokauju)