“Maniffesto ar gyfer rhaglenwyr dechreuol o arbenigeddau cysylltiedig” neu sut y cyrhaeddais y pwynt hwn mewn bywyd

Mae fy erthygl heddiw yn feddyliau yn uchel gan berson a gymerodd y llwybr o raglennu bron ar ddamwain (er yn naturiol).

Ydw, rwy'n deall mai fy mhrofiad yn unig yw fy mhrofiad, ond mae'n ymddangos i mi ei fod yn cyd-fynd yn dda â'r duedd gyffredinol. Ar ben hynny, mae'r profiad a ddisgrifir isod yn ymwneud yn fwy â maes gweithgaredd gwyddonol, ond yr hyn nad yw'r uffern yn ei dwyllo - gall fod yn ddefnyddiol y tu allan.

“Maniffesto ar gyfer rhaglenwyr dechreuol o arbenigeddau cysylltiedig” neu sut y cyrhaeddais y pwynt hwn mewn bywyd
Ffynhonnell: https://xkcd.com/664/

Yn gyffredinol, ymroddedig i holl fyfyrwyr presennol o gyn-fyfyriwr!

disgwyliadau

Pan gwblheais fy ngradd baglor mewn Technolegau Gwybodaeth a Systemau Cyfathrebu yn 2014, nid oeddwn yn gwybod bron dim am fyd rhaglennu. Do, fel llawer un arall, cymerais y pwnc “Cyfrifiadureg” yn fy mlwyddyn gyntaf – ond, Arglwydd, roedd yn fy mlwyddyn gyntaf! Mae wedi bod yn dragwyddoldeb!

Yn gyffredinol, nid oeddwn yn disgwyl unrhyw beth arbennig o wahanol i radd baglor, a phan ddechreuais ar y rhaglen meistr "Cyfathrebu a Phrosesu Signalau" Sefydliad Technolegau Newydd Almaeneg-Rwsia.

Ond yn ofer...

Dim ond yr ail gymeriad oeddem ni, ac roedd y bechgyn o'r cyntaf yn dal i bacio eu bagiau ar gyfer yr Almaen bell (mae'r interniaeth yn cymryd chwe mis yn ail flwyddyn gradd meistr). Mewn geiriau eraill, nid oedd neb o'r cylch agos eto wedi dod ar draws dulliau addysg Ewrop o ddifrif, ac nid oedd neb i ofyn am y manylion.

Yn ein blwyddyn gyntaf, wrth gwrs, roedd gennym wahanol fathau o arferion, lle'r oeddem fel arfer yn cael cynnig dewis yn ddemocrataidd rhwng ysgrifennu sgriptiau (yn yr iaith MATLAB yn bennaf) a defnyddio GUIs tra arbenigol amrywiol (yn yr ystyr bod heb ysgrifennu sgriptiau - efelychiad amgylcheddau modelu).

“Maniffesto ar gyfer rhaglenwyr dechreuol o arbenigeddau cysylltiedig” neu sut y cyrhaeddais y pwynt hwn mewn bywyd

Afraid dweud, fe wnaethom ni, y Meistri Gwyddoniaeth yn y dyfodol, allan o'n hurtrwydd ieuenctid, osgoi ysgrifennu cod fel tân. Yma, er enghraifft, mae Simulink o MathWorks: dyma'r blociau, dyma'r cysylltiadau, dyma bob math o osodiadau a switshis.

Golygfa sy'n frodorol ac yn ddealladwy i berson sydd wedi gweithio o'r blaen ym maes dylunio cylchedau a pheirianneg systemau!

“Maniffesto ar gyfer rhaglenwyr dechreuol o arbenigeddau cysylltiedig” neu sut y cyrhaeddais y pwynt hwn mewn bywyd
Ffynhonnell: https://ch.mathworks.com/help/comm/examples/parallel-concatenated-convolutional-coding-turbo-codes.html

Felly roedd yn ymddangos i ni ...

Realiti

Un o weithiau ymarferol y semester cyntaf oedd datblygu trosglwyddydd signal OFDM fel rhan o'r pwnc “Dulliau ar gyfer Modelu ac Optimeiddio”. Mae'r syniad yn llwyddiannus iawn: mae'r dechnoleg yn dal yn berthnasol ac yn eithaf poblogaidd oherwydd ei ddefnydd, er enghraifft, mewn rhwydweithiau Wi-Fi a LTE / LTE-A (ar ffurf OFDMA). Dyma'r peth gorau i feistri ymarfer eu sgiliau mewn modelu systemau telathrebu.

“Maniffesto ar gyfer rhaglenwyr dechreuol o arbenigeddau cysylltiedig” neu sut y cyrhaeddais y pwynt hwn mewn bywyd

Ac yn awr rydym yn cael sawl opsiwn o fanylebau technegol gyda pharamedrau ffrâm anymarferol amlwg (er mwyn peidio â chwilio am ateb ar y Rhyngrwyd), ac rydym yn neidio ar y Simulink a grybwyllwyd eisoes ... Ac rydym yn cael ein taro ar ein pen gyda thebot o realiti:

  • Mae pob bloc yn llawn llawer o baramedrau anhysbys, sy'n frawychus i'w newid wrth ddisgyn het.
  • Mae angen gwneud y manipulations gyda rhifau, mae'n ymddangos, yn syml, ond mae'n rhaid i chi ffwdanu o hyd, na ato Duw.
  • Mae peiriannau cadeirlan yn amlwg yn arafu o'r defnydd gwyllt o'r GUI, hyd yn oed ar y cam o syrffio trwy lyfrgelloedd y blociau sydd ar gael.
  • I orffen rhywbeth gartref, mae angen i chi gael yr un Simulink. Ac, mewn gwirionedd, dim dewisiadau eraill.

Do, yn y diwedd fe wnaethom ni, wrth gwrs, gwblhau'r prosiect, ond fe wnaethon ni ei gwblhau gydag allanadliad uchel o ryddhad.

Aeth peth amser heibio, a daethom i ddiwedd blwyddyn gyntaf y radd meistr. Dechreuodd maint y gwaith cartref a oedd yn defnyddio GUIs ostwng yn gymesur gyda'r cynnydd yng nghyfran y pynciau Almaeneg, er nad oedd eto wedi cyrraedd pwynt shifft patrwm. Mae llawer ohonom, gan gynnwys fi, yn goresgyn ein hosgled sylweddol i gronni, yn defnyddio Matlab fwyfwy yn ein prosiectau gwyddonol (er ar ffurf Pecynnau Offer), ac nid y Simulink sy'n ymddangos yn gyfarwydd.

Y pwynt yn ein hamheuon oedd ymadrodd un o fyfyrwyr yr ail flwyddyn (roedden nhw newydd ddychwelyd i Rwsia erbyn hynny):

  • Anghofiwch, o leiaf am gyfnod yr interniaeth, am Similink, MathCad a LabView eraill - dros y bryn mae popeth wedi'i ysgrifennu yn MATLAB, gan ddefnyddio MatLab ei hun neu ei “fersiwn” Octave am ddim.

Trodd y datganiad yn rhannol wir: yn Ilmenau, ni chafodd yr anghydfod ynghylch y dewis o offer ei ddatrys yn llwyr ychwaith. Yn wir, roedd y dewis yn bennaf rhwng MATLAB, Python a C.

Ar yr un diwrnod, cefais fy nghymryd gan gyffro naturiol: oni ddylwn drosglwyddo fy rhan o fodel trosglwyddydd OFDM i ffurf wedi'i sgriptio? Dim ond am hwyl.

Ac fe ges i weithio.

Cam wrth gam

Yn lle cyfrifiadau damcaniaethol, byddaf yn syml yn rhoi dolen i hyn erthygl ardderchog 2011 o tgx ac ar y sleidiau Haen gorfforol LTE athrawon Michel-Tila (TU Ilmenau). Rwy'n meddwl y bydd hyn yn ddigon.

“Felly,” meddyliais, “gadewch i ni ailadrodd, beth ydyn ni'n mynd i fodelu?”
Byddwn yn modelu Generadur ffrâm OFDM (generadur ffrâm OFDM).

Yr hyn y bydd yn ei gynnwys:

  • symbolau gwybodaeth
  • signalau peilot
  • sero (DC)

O beth (er mwyn symlrwydd) rydym yn tynnu:

  • o fodelu rhagddodiad cylchol (os ydych chi'n gwybod y pethau sylfaenol, ni fydd yn anodd ei ychwanegu)

“Maniffesto ar gyfer rhaglenwyr dechreuol o arbenigeddau cysylltiedig” neu sut y cyrhaeddais y pwynt hwn mewn bywyd

Diagram bloc o'r model dan ystyriaeth. Byddwn yn stopio wrth y bloc FFT gwrthdro (IFFT). I gwblhau'r llun, gall pawb barhau â'r gweddill eu hunain - addewais i'r athrawon o'r adran adael rhywbeth i'r myfyrwyr.

Gadewch i ni ddiffinio'r rheini i ni ein hunain. ymarfer corff:

  • nifer sefydlog o is-gludwyr;
  • hyd ffrâm sefydlog;
  • rhaid ychwanegu un sero yn y canol a phâr o sero ar ddechrau a diwedd y ffrâm (cyfanswm, 5 darn);
  • mae symbolau gwybodaeth yn cael eu modiwleiddio gan ddefnyddio M-PSK neu M-QAM, lle mai M yw'r gorchymyn modiwleiddio.

Gadewch i ni ddechrau gyda'r cod.

Gellir lawrlwytho'r sgript gyfan o cyswllt.

Gadewch i ni ddiffinio'r paramedrau mewnbwn:

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

Nawr rydym yn pennu mynegeion symbolau gwybodaeth, gan dderbyn y rhagosodiad bod yn rhaid i signalau peilot fynd cyn a/neu ar ôl sero o reidrwydd:

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

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

Yna gellir pennu'r safleoedd gan ddefnyddio'r swyddogaeth linspace, gan leihau'r gwerthoedd i'r lleiaf o'r cyfanrifau agosaf:

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

Gadewch i ni ychwanegu mynegeion o sero at hyn a didoli:

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

Yn unol â hynny, mae'r mynegeion signal peilot yn bopeth arall:

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

Nawr gadewch i ni ddeall signalau peilot.

Mae gennym ni dempled (amrywiol cynlluniau peilot), a gadewch i ni ddweud ein bod am i beilotiaid o'r templed hwn gael eu mewnosod yn ein ffrâm yn olynol. Wrth gwrs, gellir gwneud hyn mewn dolen. Neu gallwch chi chwarae ychydig yn anodd gyda matricsau - yn ffodus mae MATLAB yn caniatáu ichi wneud hyn gyda digon o gysur.

Yn gyntaf, gadewch i ni benderfynu faint o'r templedi hyn sy'n ffitio'n gyfan gwbl i'r ffrâm:

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

Nesaf, rydym yn ffurfio fector sy'n cynnwys ein templedi:

% 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

Ac rydyn ni'n diffinio fector bach sy'n cynnwys darn o'r templed yn unig - y "gynffon", nad yw'n ffitio'n llwyr i'r ffrâm:

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

Rydyn ni'n cael cymeriadau peilot:

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

Symudwn ymlaen at symbolau gwybodaeth, sef, byddwn yn ffurfio neges ac yn ei modiwleiddio:

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 

Mae'r cyfan yn barod! Cydosod y ffrâm:

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

Dylech gael rhywbeth fel hyn:

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!" - Meddyliais yn fodlon a chau'r gliniadur. Cymerodd ychydig oriau i mi wneud popeth: gan gynnwys ysgrifennu cod, dysgu rhai swyddogaethau Matlab a meddwl trwy driciau mathemategol.

Pa gasgliadau y deuthum iddynt bryd hynny?

Goddrychol:

  • Mae ysgrifennu cod yn ddymunol ac yn debyg i farddoniaeth!
  • Sgriptio yw'r dull ymchwil mwyaf cyfleus ar gyfer y maes Cyfathrebu a Phrosesu Arwyddion.

Amcan:

  • Nid oes angen saethu adar y to o ganon (oni bai bod nod addysgol o'r fath, wrth gwrs, yn werth chweil): gan ddefnyddio Simulink, fe wnaethom ddechrau datrys problem syml gydag offeryn soffistigedig.
  • Mae GUI yn dda, ond mae deall yr hyn sydd wedi'i gynnwys “o dan y cwfl” yn well.

Ac yn awr, a minnau ymhell o fod yn fyfyriwr, rwyf am ddweud y canlynol wrth frawdoliaeth y myfyrwyr:

  • Ewch amdani!

Ceisiwch ysgrifennu cod, hyd yn oed os yw'n ddrwg ar y dechrau. Gyda rhaglennu, fel gydag unrhyw weithgaredd arall, y rhan anoddaf yw'r dechrau. Ac mae'n well dechrau'n gynharach: os ydych chi'n wyddonydd neu hyd yn oed yn techie, yn hwyr neu'n hwyrach bydd angen y sgil hon arnoch chi.

  • Galw!

Mynnu dulliau ac offer blaengar gan athrawon a goruchwylwyr. Os yw hyn yn bosibl, wrth gwrs...

  • Creu!

Ble arall y mae'n well goresgyn holl ddoluriau dechreuwr, os nad o fewn fframwaith rhaglen addysgol? Creu a mireinio'ch sgiliau - eto, gorau po gyntaf y byddwch chi'n dechrau.

Rhaglenwyr uchelgeisiol o bob gwlad, unwch!

PS

Er mwyn cofnodi fy mherthynas uniongyrchol â'r myfyrwyr, rwy'n atodi llun cofiadwy o 2017 gyda dau reithor: Peter Scharff (dde) ac Albert Kharisovich Gilmutdinov (chwith).

“Maniffesto ar gyfer rhaglenwyr dechreuol o arbenigeddau cysylltiedig” neu sut y cyrhaeddais y pwynt hwn mewn bywyd

Roedd yn werth gorffen y rhaglen o leiaf ar gyfer y gwisgoedd hyn! (kiding)

Ffynhonnell: hab.com

Ychwanegu sylw