"Manifesto for beginners programmers from specialties" ama sida aan ku gaadhay heerkan nolosha

Maqaalkaygu maanta waa fikrado aad u qaylo-dhaan ah oo ka yimid qof qaatay dariiqa barnaamijka ku dhawaad ​​shil (inkastoo si dabiici ah).

Haa, waan fahamsanahay in waayo-aragnimadayda ay tahay kaliya waayo-aragnimadayda, laakiin waxay iila muuqataa inay si fiican ugu habboon tahay isbeddellada guud. Waxaa intaa dheer, waayo-aragnimada hoos lagu sharraxay waxay la xiriirtaa wax badan oo ku saabsan berrinka dhaqdhaqaaqa sayniska, laakiin waxa cadaabta ma aha kaftan - waxay noqon kartaa mid faa'iido leh oo ka baxsan.

"Manifesto for beginners programmers from specialties" ama sida aan ku gaadhay heerkan nolosha
Source: https://xkcd.com/664/

Guud ahaan, u heellan dhammaan ardayda hadda ee arday hore!

filashooyinka

Markii aan dhammeeyay shahaadada koowaad ee jaamacadda ee Teknolojiyadda Isgaarsiinta iyo Nidaamyada Isgaarsiinta 2014, wax ku dhow maan ogeyn adduunka barnaamijka. Haa, sida kuwa kale oo badan, waxaan qaatay maadada "Sayniska Computerka" sanadkaygii ugu horeeyay - laakiin, Sayidow, waxay ahayd sanadkaygii ugu horeeyay! Waxay ahayd daa'in!

Guud ahaan, ma aanan fileyn wax gaar ah oo ka duwan shahaadada koowaad ee jaamacadda, iyo markii aan galay barnaamijka mastarka "Isgaarsiinta iyo Habaynta Ishaarka" Jarmalka-Ruushka Machadka Teknolojiyadda Cusub.

Laakiin micne la'aan...

Waxaan ahayn oo kaliya qaadashada labaad, iyo guys ka hore ayaa weli xirxiran boorsooyinkooda Germany fog (tababarka qaadataa lix bilood ah sanadka labaad ee shahaadada mastarka). Si kale haddii loo dhigo, ma jiro qof ka socda goobada dhow oo aan weli si dhab ah ula kulmin hababka waxbarashada Yurub, mana jirin cid wax ka weydiisa faahfaahinta.

Sannadkii ugu horreeyay, dabcan, waxaan haysanay noocyo kala duwan oo dhaqammo ah, kuwaas oo inta badan si dimuqraadi ah naloo soo bandhigo ikhtiyaar u dhexeeya qorista qoraallada (inta badan luqadda MATLAB) iyo adeegsiga GUI-yada gaarka ah ee kala duwan (macnaha iyada oo aan la qorin qoraallo - jilid deegaanka qaabaynta).

"Manifesto for beginners programmers from specialties" ama sida aan ku gaadhay heerkan nolosha

Baahnayn in la yiraahdo, annaga, Masters-ka mustaqbalka ee Sayniska, oo ka baxsan nacasnimadayada dhallinyaranimada, waxaan ka fogaannay qorista koodka sida dabka. Waa kan, tusaale ahaan, Simulink oo ka socda MathWorks: waa kuwan baloogyadii, waa kuwan isku xirka, halkan waxaa yaal dhammaan noocyada dejinta iyo furayaasha.

Aragti u dhalatay oo la fahmi karo qofka hore uga soo shaqeeyay naqshadaynta wareegyada iyo injineernimada nidaamka!

"Manifesto for beginners programmers from specialties" ama sida aan ku gaadhay heerkan nolosha
Source: https://ch.mathworks.com/help/comm/examples/parallel-concatenated-convolutional-coding-turbo-codes.html

Markaa waxay noogu muuqatay...

Xaqiiqda

Mid ka mid ah shaqooyinka la taaban karo ee semesterkii ugu horreeyay ayaa ahaa horumarinta calaamad-qaade OFDM oo qayb ka ah mawduuca "Habab loogu talagalay Modeling and Optimization". Fikradda aad bay u guulaysataa: tignoolajiyada ayaa weli ku habboon oo aad caan u ah isticmaalkeeda, tusaale ahaan, shabakadaha Wi-Fi iyo LTE/LTE-A (qaabka OFDMA). Tani waa waxa ugu fiican ee sayidyadu ku tababaraan xirfadahooda qaabaynta nidaamyada isgaarsiinta.

"Manifesto for beginners programmers from specialties" ama sida aan ku gaadhay heerkan nolosha

Oo hadda waxaa nala siiyey dhowr fursadood oo farsamooyin farsamo oo leh cabbirro qaabeysan oo muuqda (si aan xal loogu raadinin internetka), waxaanan ku dhufaneynaa Simulink-kii hore loo sheegay ... xaqiiqada:

  • Qayb kasta oo ka mid ah waxaa ka buuxa waxyaabo badan oo aan la garanayn, kuwaas oo ka baqaya in ay isbeddelaan marka ay koofiyaddu hoos u dhacdo.
  • Wax-is-daba-marinta tirooyinku waxay u baahan yihiin in la sameeyo, waxay u muuqataa, mid fudud, laakiin weli waa inaad buuqdaa, Ilaahay ha daayee.
  • Mashiinnada Cathedral waxay si muuqata uga gaabiyaan isticmaalka xamaasadda leh ee GUI, xitaa marxaladda ay ku dhex wareegayaan maktabadaha baloogyada la heli karo.
  • Si aad wax ugu dhameysato guriga, waxaad u baahan tahay inaad haysato Simulink la mid ah. Iyo, dhab ahaantii, ma jiraan wax beddel ah.

Haa, aakhirkii, dabcan, waanu dhamaystirnay mashruucii, laakiin waxaanu ku dhamaynay neef dheer oo nafis ah.

Muddo ayaa ka soo wareegtay, waxaana soo dhammaatay sannadkii ugu horreeyay ee shahaadada mastarka. Qadarka shaqada-guri ee la isticmaalayo GUI-yadu waxay bilaabeen inay hoos u dhacaan si saami ah iyadoo korodhka saamiga maaddooyinka Jarmalka, in kasta oo aysan weli gaarin heerka isbeddelka. Qaar badan oo naga mid ah, oo aan ku jiro,, oo ka gudubnay baaxaddayada baaxadda leh si aan u dhisno, ayaa aad iyo aad ugu isticmaalnay Matlab mashruucyadeenna cilmiyeed (in kasta oo ay yihiin qaabka Qalabka Qalabka), oo aan u muuqan Simulink-ga la yaqaan.

Qodobka shakiyadeenu wuxuu ahaa weedha mid ka mid ah ardayda fasalka labaad (waxay ku soo noqdeen Ruushka wakhtigaas):

  • Iska ilow, ugu yaraan inta lagu jiro muddada tababarka, ku saabsan Similink, MathCad iyo LabView kale - buurta dusheeda, wax walba waxay ku qoran yihiin MATLAB, iyadoo la adeegsanayo MatLab lafteeda ama "nooca" Octave ee bilaashka ah.

Hadalku wuxuu noqday qayb run ah: Ilmenau, muranka xulashada aaladaha sidoo kale si buuxda looma xallin. Run, doorashadu waxay inta badan u dhaxaysay MATLAB, Python iyo C.

Isla maalintaas, waxaa i qabtay xamaasad dabiici ah: miyaanan qaybtayda qaabka gudbinta OFDM ku wareejin qaab qoraal ah? Kaliya madadaalo.

Oo waxaan helay shaqada.

Talaabo talaabo

Halkii xisaabinta aragtida, waxaan si fudud u siin doonaa xiriirinta tan article aad u fiican 2011 ka tgx iyo duleelyada lakabka jirka ee LTE macalimiin Michel-Tila (TU Ilmenau). Waxaan filayaa in tani ay ku filnaan doonto.

"Marka," waxaan u maleeyay, "aan ku celino, maxaan ku daydaa?"
Waanu samayn doonaa Soosaaraha qaab-dhismeedka OFDM (Feem dhaliyaha OFDM).

Waxa ka mid noqon doona:

  • calaamadaha macluumaadka
  • calaamadaha duuliyaha
  • eber (DC)

Maxaa (fududnimada awgeed) aynu ka soo qaadanay:

  • laga bilaabo qaabaynta horgale meerto ah (haddii aad taqaanid aasaaska, ku darista ma adkaan doonto)

"Manifesto for beginners programmers from specialties" ama sida aan ku gaadhay heerkan nolosha

Block jaantuska qaabka la tixgelinayo. Waxaan ku istaagi doonaa barxada FFT (IFFT). Si loo dhamaystiro sawirka, qof kastaa wuu sii wadi karaa inta ka hartay laftiisa - Waxaan u ballan qaaday macallimiinta waaxda inay wax uga tagaan ardayda.

Aan u qeexno kuwa nafteena. jimicsi:

  • tirada go'an ee sidayaal-hoosaadka;
  • dhererka qaabka go'an;
  • waa in aan ku darnaa hal eber oo dhexda ah iyo labo eber ah bilowga iyo dhammaadka jirridda (wadarta, 5 qaybood);
  • Calaamadaha macluumaadka waxaa lagu habeeyey iyadoo la isticmaalayo M-PSK ama M-QAM, halkaas oo M uu yahay habka habaynta.

Aan ku bilowno koodka.

Qoraalka oo dhan waa laga soo dejisan karaa link.

Aynu qeexno cabirrada wax-gelinta:

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

Hadda waxaanu go'aaminaynaa tusmooyinka calaamadaha macluumaadka, anagoo aqbalnayna fikradda ah in calaamadaha duuliyuhu ay qasab tahay inay ka hor ama/ama ka dambeeyaan eber:

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

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

Markaa boosaska waxaa lagu go'aamin karaa iyadoo la adeegsanayo shaqada linspace, hoos u dhigista qiyamka ilaa inta ugu yar ee isugeynta ugu dhow:

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

Aan ku darno tusmooyinka eber tan oo aan kala saarno:

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

Sidaa darteed, calaamadaha calaamadaha tijaabada ah waa wax kasta oo kale:

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

Hadda aynu fahanno calaamadaha duuliyaha.

Waxaan haynaa template (variable duuliyeyaasha), oo aynu nidhaahno waxaan rabnaa duuliyayaasha template-ka in qaabkeena si isdaba joog ah loo geliyo. Dabcan, tan waxaa lagu samayn karaa loop. Ama waxaad ku ciyaari kartaa wax yar oo khiyaano leh matrix - nasiib wanaag MATLAB waxay kuu ogolaaneysaa inaad tan ku sameyso raaxo kugu filan.

Marka hore, aan go'aaminno inta ka mid ah moodooyinkan ayaa si buuxda ugu habboon qaab-dhismeedka:

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

Marka xigta, waxaan sameyneynaa vector ka kooban qaab-dhismeedkayada:

% 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

Oo waxaan qeexaynaa vector yar oo ka kooban kaliya qayb ka mid ah template - "dabada", taas oo aan si buuxda ugu habboonayn qaabka:

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

Waxaan helnaa jilayaasha tijaabada:

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

Aan u gudubno calaamadaha macluumaadka, kuwaas oo ah, waxaan samayn doonaa fariin oo aan habeyno:

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 

Dhammaan waa diyaar! Isku xirka jir

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

Waa inaad heshaa wax sidan oo kale ah:

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

"Nabad!" - Anigoo ku qanacsan ayaan u fakaray oo xidhay laptop-kii. Waxay igu qaadatay dhowr saacadood inaan sameeyo wax walba: oo ay ku jiraan kood qorista, barashada qaar ka mid ah shaqooyinka Matlab iyo ka fikirida khiyaamada xisaabta.

Maxa soo gunaanaday markaas?

Ujeedo:

  • Xeerka qorista waa mid lagu farxo oo la mid ah gabayada!
  • Qoraalku waa habka ugu habboon ee cilmi-baadhiseed ee dhinaca Isgaadhsiinta iyo Farsamaynta Calaamadaha.

Ujeedo:

  • Looma baahna in shimbiraha laga toogto madfac (haddii aysan hadafka waxbarashadu ahayn, dabcan, u qalma): annaga oo adeegsanayna Simulink, waxaan ku xallinnay dhibaato fudud qalab casri ah.
  • GUI waa fiican tahay, laakiin fahamka waxa ku jira "hoosta daboolka" ayaa ka wanaagsan.

Haddaba, anigoo ka fog ardaynimada, waxaan rabaa in aan walaaltinimada ardayda ku idhaahdo sidan soo socota:

  • Bal u bax!

Isku day inaad qorto koodka, xitaa haddii ay xun tahay marka hore. Barnaamijyada, sida hawl kasta oo kale, qaybta ugu adag waa bilowga. Oo way fiicantahay inaad hore u bilowdo: haddii aad tahay saynisyahan ama xitaa kaliya tikniyoolajiyada, mar dhow ama dambe waxaad u baahan doontaa xirfaddan.

  • Dalbashada!

Codso habab horumarineed iyo qalabyada macalimiinta iyo kormeerayaasha. Haddii ay taasi suurtogal tahay, dabcan...

  • Abuur!

Xaggee kale ayay ka fiican tahay in laga gudbo dhammaan nabarrada bilowga, haddii aysan ku jirin qaabka barnaamijka waxbarashada? Abuur oo xooji xirfadahaaga - mar labaad, sida ugu dhakhsaha badan ee aad u bilowdo, way fiicnaan doontaa.

Barmaamijiyeyaasha hammiga ah ee ka socda waddamada oo dhan, midow!

PS

Si aan u duubo xiriirka tooska ah ee aan la leeyahay ardayda, waxaan ku lifaaqayaa sawir xusuus leh oo 2017 ah oo leh laba agaasime: Peter Scharff (midig) iyo Albert Kharisovich Gilmutdinov (bidixda).

"Manifesto for beginners programmers from specialties" ama sida aan ku gaadhay heerkan nolosha

Waxay ahayd mid u qalanta in la dhammeeyo barnaamijka ugu yaraan dharkan! (kaftan)

Source: www.habr.com

Add a comment