"Manifest għall-bidu programmaturi minn speċjalitajiet relatati" jew kif wasalt sa dan il-punt fil-ħajja

L-artiklu tiegħi llum huwa ħsibijiet b'leħen għoli minn persuna li ħadet it-triq tal-ipprogrammar kważi b'mod aċċidentali (għalkemm b'mod naturali).

Iva, nifhem li l-esperjenza tiegħi hija biss l-esperjenza tiegħi, imma jidhirli li tidħol sew fit-tendenza ġenerali. Barra minn hekk, l-esperjenza deskritta hawn taħt tirrelata aktar mal-qasam tal-attività xjentifika, iżda x'inhu ma jiċċajta - jista 'jkun utli barra.

"Manifest għall-bidu programmaturi minn speċjalitajiet relatati" jew kif wasalt sa dan il-punt fil-ħajja
Sors: https://xkcd.com/664/

B'mod ġenerali, iddedikat għall-istudenti kollha attwali minn student preċedenti!

Aspettattivi

Meta lestejt il-baċellerat tiegħi fit-Teknoloġiji tal-Infokomunikazzjoni u s-Sistemi tal-Komunikazzjoni fl-2014, ma kont naf kważi xejn dwar id-dinja tal-ipprogrammar. Iva, bħal ħafna oħrajn, ħadt is-suġġett "Xjenza tal-Kompjuter" fl-ewwel sena tiegħi - imma, Mulej, kien fl-ewwel sena tiegħi! Kienet eternità!

B'mod ġenerali, ma stennejt xejn partikolarment differenti minn grad ta 'baċellerat, u meta dħalt fil-programm tal-master "Komunikazzjoni u Ipproċessar tas-Sinjal" Istitut Ġermaniż-Russu tat-Teknoloġiji Ġodda.

Imma għalxejn...

Konna biss it-tieni teħid, u l-guys mill-ewwel kienu għadhom jippakkjaw il-basktijiet tagħhom għall-Ġermanja 'l bogħod (l-apprendistat jieħu sitt xhur fit-tieni sena ta' master's). Fi kliem ieħor, ħadd miċ-ċirku immedjat ma kien għadu ltaqa' bis-serjetà mal-metodi tal-edukazzjoni Ewropea, u ma kien hemm ħadd jistaqsi dwar id-dettalji.

Fl-ewwel sena tagħna, ovvjament, kellna diversi tipi ta’ prattiċi, li fihom ġeneralment konna offerti demokratikament għażla bejn il-kitba ta’ skripts (l-aktar fil-lingwa MATLAB) u l-użu ta’ diversi GUIs speċjalizzati ħafna (fis-sens li mingħajr ma niktbu skripts - simulazzjoni). ambjenti tal-immudellar).

"Manifest għall-bidu programmaturi minn speċjalitajiet relatati" jew kif wasalt sa dan il-punt fil-ħajja

M'għandniex xi ngħidu, aħna, il-Masters tax-Xjenza futuri, mill-istupidità żagħżugħa tagħna, evitajna li niktbu kodiċi bħan-nar. Hawn hu, pereżempju, Simulink minn MathWorks: hawn huma l-blokki, hawn huma l-konnessjonijiet, hawn kull tip ta 'settings u swiċċijiet.

Veduta li hija indiġena u li tinftiehem minn persuna li qabel ħadmet fid-disinn taċ-ċirkwiti u l-inġinerija tas-sistemi!

"Manifest għall-bidu programmaturi minn speċjalitajiet relatati" jew kif wasalt sa dan il-punt fil-ħajja
Sors: https://ch.mathworks.com/help/comm/examples/parallel-concatenated-convolutional-coding-turbo-codes.html

Allura deher lilna...

Realtà

Wieħed mix-xogħlijiet prattiċi tal-ewwel semestru kien l-iżvilupp ta 'transceiver tas-sinjal OFDM bħala parti mis-suġġett "Metodi għall-Immudellar u l-Ottimizzazzjoni". L-idea hija ta 'suċċess kbir: it-teknoloġija għadha rilevanti u pjuttost popolari minħabba l-użu tagħha, pereżempju, f'netwerks Wi-Fi u LTE/LTE-A (fil-forma ta' OFDMA). Din hija l-aħjar ħaġa għall-kaptani biex jipprattikaw il-ħiliet tagħhom fl-immudellar tas-sistemi tat-telekomunikazzjoni.

"Manifest għall-bidu programmaturi minn speċjalitajiet relatati" jew kif wasalt sa dan il-punt fil-ħajja

U issa ningħataw diversi għażliet ta 'speċifikazzjonijiet tekniċi b'parametri ta' qafas ovvjament mhux prattiċi (sabiex ma nfittxux soluzzjoni fuq l-Internet), u nibdew fuq is-Simulink diġà msemmi... U nilqgħu fuq ir-ras b'teapot tar-realtà:

  • Kull blokka hija mimlija b'ħafna parametri mhux magħrufa, li huma tal-biża' li jinbidlu mal-qatra ta' kappell.
  • Il-manipulazzjonijiet bin-numri jeħtieġ li jsiru, jidher, sempliċi, imma xorta trid tħawwad, Alla ħares.
  • Magni tal-Katidral jonqsu b'mod notevoli mill-użu frantic tal-GUI, anke fl-istadju ta 'surfing permezz ta' libreriji ta 'blokki disponibbli.
  • Biex tispiċċa xi ħaġa fid-dar, jeħtieġ li jkollok l-istess Simulink. U, fil-fatt, l-ebda alternattiva.

Iva, fl-aħħar aħna, ovvjament, lestejna l-proġett, imma lestejna b'exhalation qawwija ta 'eżenzjoni.

Għadda xi żmien, u wasalna għall-aħħar tal-ewwel sena tal-masters. L-ammont ta 'homework bl-użu ta' GUIs beda jonqos proporzjonalment maż-żieda fil-proporzjon ta 'suġġetti Ġermaniżi, għalkemm kien għadu ma laħaqx il-punt ta' bidla fil-paradigma. Ħafna minna, inkluż jien, negħlbu l-amplitudni konsiderevoli tagħna biex nibnu, aktar u aktar użaw Matlab fil-proġetti xjentifiċi tagħna (għalkemm fil-forma ta 'Kaxxi tal-Għodda), u mhux il-Simulink apparentement familjari.

Il-punt fid-dubji tagħna kien il-frażi ta’ wieħed mill-istudenti tat-tieni sena (sa dak iż-żmien kienu għadhom kif irritornaw ir-Russja):

  • Tinsa, għall-inqas għal kemm idum l-apprendistat, dwar Similink, MathCad u LabView oħra - fuq l-għoljiet kollox huwa miktub f'MATLAB, bl-użu tal-MatLab innifsu jew il-“verżjoni” Octave b'xejn tiegħu.

L-istqarrija rriżulta li kienet parzjalment vera: f'Ilmenau, it-tilwima dwar l-għażla tal-għodod lanqas ma ġiet solvuta kompletament. Veru, l-għażla kienet l-aktar bejn MATLAB, Python u C.

Fl-istess jum, ħadt minn eċċitament naturali: m'għandix nittrasferixxi l-parti tiegħi tal-mudell tat-trasmettitur OFDM f'forma b'kitba? Biss għall-gost.

U sirt naħdem.

Pass pass

Minflok kalkoli teoretiċi, se nagħti sempliċiment link għal dan artiklu eċċellenti 2011 minn tgx u fuq il-pjastri Saff fiżiku LTE professuri Michel-Tila (TU Ilmenau). Naħseb li dan se jkun biżżejjed.

"Allura," ħsibt, "ejja nirrepetu, x'se nimudellaw?"
Aħna se jimmudellaw Ġeneratur tal-qafas OFDM (ġeneratur tal-qafas OFDM).

X'se jinkludi:

  • simboli ta' informazzjoni
  • sinjali pilota
  • żerijiet (DC)

Liema (għall-fini tas-sempliċità) aħna nastratt minn:

  • mill-immudellar ta' prefiss ċikliku (jekk taf l-affarijiet bażiċi, iżid mhux se jkun diffiċli)

"Manifest għall-bidu programmaturi minn speċjalitajiet relatati" jew kif wasalt sa dan il-punt fil-ħajja

Dijagramma blokk tal-mudell li qed jiġi kkunsidrat. Aħna se nieqfu fil-blokk FFT invers (IFFT). Biex tlesti l-istampa, kulħadd jista’ jkompli l-bqija huwa stess – wegħedt lill-għalliema mid-dipartiment li jħallu xi ħaġa għall-istudenti.

Ejja niddefinixxu dawk għalina nfusna. eżerċizzju:

  • numru fiss ta' sub-trasportaturi;
  • tul tal-qafas fiss;
  • irridu nżidu żero wieħed fin-nofs u par żerijiet fil-bidu u fit-tmiem tal-qafas (total, 5 biċċiet);
  • simboli ta 'informazzjoni huma modulati bl-użu M-PSK jew M-QAM, fejn M hija l-ordni ta' modulazzjoni.

Nibdew bil-kodiċi.

L-iskript kollu jista 'jitniżżel minn rabta.

Ejja niddefinixxu l-parametri tad-dħul:

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

Issa niddeterminaw l-indiċi tas-simboli tal-informazzjoni, naċċettaw il-premessa li s-sinjali tal-pilota jridu bilfors imorru qabel u/jew wara ż-żeri:

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

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

Imbagħad il-pożizzjonijiet jistgħu jiġu determinati bl-użu tal-funzjoni linspace, tnaqqas il-valuri għall-iżgħar fost l-eqreb interi:

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

Ejja nżidu indiċi ta' żerijiet ma' dan u issortja:

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

Għaldaqstant, l-indiċi tas-sinjal pilota huma kull ħaġa oħra:

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

Issa ejja nifhmu sinjali pilota.

Għandna mudell (varjabbli piloti), u ejja ngħidu li rridu li l-piloti minn dan il-mudell jiddaħħlu fil-qafas tagħna b'mod sekwenzjali. Naturalment, dan jista 'jsir f'linja. Jew tista 'tilgħab ftit delikata bil-matriċi - fortunatament MATLAB jippermettilek tagħmel dan b'kumdità suffiċjenti.

L-ewwel, ejja niddeterminaw kemm minn dawn il-mudelli jidħlu kompletament fil-qafas:

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

Sussegwentement, aħna niffurmaw vettur li jikkonsisti mill-mudelli tagħna:

% 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

U aħna niddefinixxu vettur żgħir li fih biss biċċa tal-mudell - "denb", li ma jidħolx kompletament fil-qafas:

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

Ikollna karattri pilota:

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

Ejja ngħaddu għal simboli ta 'informazzjoni, jiġifieri, aħna niffurmaw messaġġ u nimodulawh:

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 

Kollox lest! Armar tal-qafas:

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

Għandek tikseb xi ħaġa bħal din:

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

"Bliss!" — Ħsibt kuntent u għalaqt il-laptop. Domni ftit sigħat biex nagħmel minn kollox: inkluż nikteb kodiċi, nitgħallem xi funzjonijiet ta’ Matlab u naħseb permezz ta’ tricks matematiċi.

X’konklużjonijiet għamilt imbagħad?

Suġġettiv:

  • Il-kitba tal-kodiċi hija pjaċevoli u tixbah lill-poeżija!
  • Scripting huwa l-aktar metodu ta 'riċerka konvenjenti għall-qasam tal-Komunikazzjoni u l-Ipproċessar tas-Sinjal.

Għan:

  • M'hemm l-ebda ħtieġa li jisparaw għasafar minn kanun (sakemm għan edukattiv bħal dan ma jkunx, ovvjament, worth it): bl-użu ta 'Simulink, ħadna nsolvu problema sempliċi b'għodda sofistikata.
  • GUI hija tajba, iżda li tifhem dak li jinsab "taħt il-barnuża" huwa aħjar.

U issa, peress li ’l bogħod milli nkun student, irrid ngħid dan li ġej lill-fratellanza studenteska:

  • Dare!

Ipprova tikteb il-kodiċi, anki jekk għall-ewwel huwa ħażin. Bl-ipprogrammar, bħal kull attività oħra, l-aktar parti diffiċli hija l-bidu. U huwa aħjar li tibda qabel: jekk int xjenzat jew saħansitra sempliċiment techie, illum jew għada jkollok bżonn din il-ħila.

  • Domanda!

Itlob approċċi u għodod progressivi mill-għalliema u s-superviżuri. Jekk dan huwa possibbli, ovvjament...

  • Oħloq!

Fejn inkella huwa aħjar li tgħaddi mill-feriti kollha ta 'Bidu, jekk mhux fil-qafas ta' programm edukattiv? Oħloq u perfezzjona l-ħiliet tiegħek - għal darb'oħra, aktar ma tibda malajr, aħjar.

Programmaturi li qed jaspiraw mill-pajjiżi kollha, ingħaqdu!

PS

Sabiex nirreġistra r-relazzjoni diretta tiegħi mal-istudenti, qed nehmeż ritratt memorabbli tal-2017 ma’ żewġ retturi: Peter Scharff (fuq il-lemin) u Albert Kharisovich Gilmutdinov (fuq ix-xellug).

"Manifest għall-bidu programmaturi minn speċjalitajiet relatati" jew kif wasalt sa dan il-punt fil-ħajja

Kien ta’ min jispiċċa l-programm għall-inqas għal dawn il-kostumi! (niċċajta)

Sors: www.habr.com

Żid kumment