"Manifesto pikeun ngamimitian programer tina spesialis anu aya hubunganana" atanapi kumaha kuring dugi ka titik ieu dina kahirupan

Tulisan abdi dinten ayeuna mangrupikeun pikiran anu nyaring ti jalma anu nyandak jalur program ampir teu kahaja (sanaos sacara alami).

Sumuhun, abdi ngartos yen pangalaman abdi ngan pangalaman kuring, tapi sigana kuring nu fits ogé kana trend umum. Leuwih ti éta, pangalaman ditétélakeun di handap leuwih patali jeung widang aktivitas ilmiah, tapi naon sih teu bercanda - eta tiasa mangpaat di luar.

"Manifesto pikeun ngamimitian programer tina spesialis anu aya hubunganana" atanapi kumaha kuring dugi ka titik ieu dina kahirupan
sumber: https://xkcd.com/664/

Sacara umum, dedicated ka sadaya murid ayeuna ti urut murid!

Harepan

Nalika kuring réngsé gelar jajaka di Infocommunication Technologies and Communication Systems di 2014, kuring ampir teu terang ngeunaan dunya program. Leres, sapertos seueur anu sanés, kuring nyandak mata pelajaran "Élmu Komputer" dina taun munggaran kuring - tapi, Gusti, éta dina taun munggaran kuring! Geus kalanggengan!

Sacara umum, kuring henteu ngarepkeun naon waé anu béda-béda ti gelar sarjana, sareng nalika kuring asup kana program master. "Komunikasi sareng Pangolahan Sinyal" Institut Téknologi Anyar Jerman-Rusia.

Tapi sia-sia...

Kami ngan ukur asupan kadua, sareng lalaki ti mimiti masih ngarangkep kantongna ka Jerman anu jauh (magang nyandak genep bulan dina taun kadua gelar master). Dina basa sejen, teu saurang ogé ti bunderan saharita kungsi ngalaman serius ngeunaan métode atikan Éropa, sarta teu aya anu nanya ngeunaan rinci.

Dina taun kahiji urang, tangtosna, urang ngagaduhan rupa-rupa prakték, dimana urang biasana sacara demokratis nawiskeun pilihan antara nyerat skrip (utamina dina basa MATLAB) sareng nganggo sababaraha GUI anu khusus pisan (dina harti tanpa nyerat naskah - simulasi. lingkungan modeling).

"Manifesto pikeun ngamimitian programer tina spesialis anu aya hubunganana" atanapi kumaha kuring dugi ka titik ieu dina kahirupan

Gunana pikeun nyebutkeun, urang, Masters kahareup Élmu, kaluar tina kabodoan nonoman urang, dihindari nulis kode kawas seuneu. Ieu, contona, nyaéta Simulink ti MathWorks: di dieu aya blok, di dieu sambunganna, di dieu aya sagala jinis setélan sareng saklar.

Pandangan anu asli sareng kaharti ku jalma anu saacanna damel di desain sirkuit sareng rékayasa sistem!

"Manifesto pikeun ngamimitian programer tina spesialis anu aya hubunganana" atanapi kumaha kuring dugi ka titik ieu dina kahirupan
sumber: https://ch.mathworks.com/help/comm/examples/parallel-concatenated-convolutional-coding-turbo-codes.html

Jadi sigana urang ...

Kanyataanana

Salah sahiji karya praktis tina semester kahiji nya éta ngembangkeun hiji transceiver sinyal OFDM salaku bagian tina subjék "Metode pikeun Modeling na Optimasi". Gagasan éta suksés pisan: téknologi masih relevan sareng cukup populer kusabab panggunaanana, contona, dina jaringan Wi-Fi sareng LTE / LTE-A (dina bentuk OFDMA). Ieu mangrupikeun hal anu pangsaéna pikeun master pikeun ngalaksanakeun kaahlianna dina modél sistem telekomunikasi.

"Manifesto pikeun ngamimitian programer tina spesialis anu aya hubunganana" atanapi kumaha kuring dugi ka titik ieu dina kahirupan

Sareng ayeuna kami dipasihkeun sababaraha pilihan spésifikasi téknis kalayan parameter pigura anu écés teu praktis (supaya henteu milarian solusi dina Internét), sareng kami ngantunkeun Simulink anu parantos disebatkeun ... Sareng kami pencét sirah ku teapot. kanyataanana:

  • Unggal blok téh fraught kalawan loba parameter kanyahoan, nu pikasieuneun robah dina serelek tina topi.
  • Manipulasi kalawan angka kudu dipigawé, sigana, basajan, tapi anjeun masih kudu fuss, Allah nyaram.
  • Mesin katedral noticeably ngalambatkeun turun tina pamakéan frantic tina GUI, malah dina tahap surfing ngaliwatan perpustakaan blok sadia.
  • Pikeun ngabéréskeun hiji hal di bumi, anjeun kedah gaduh Simulink anu sami. Jeung, kanyataanna, euweuh alternatif.

Sumuhun, tungtungna urang, tangtosna, réngsé proyék, tapi urang réngsé éta kalayan exhalation nyaring lega.

Sababaraha waktu kaliwat, sarta kami sumping ka ahir taun mimiti gelar master. Jumlah PR maké GUIs mimiti turun proporsional jeung kanaékan proporsi mata pelajaran Jerman, sanajan teu acan ngahontal titik shift paradigma. Loba urang, kaasup kuring, overcoming amplitudo considerable kami pikeun ngawangun up, beuki loba dipaké Matlab dina proyék-proyék ilmiah urang (sanajan dina bentuk Toolboxes), sarta teu sigana akrab jeung Simulink.

Titik dina mamang urang éta frase salah sahiji murid taun kadua (aranjeunna kakara balik ka Rusia dina waktu éta):

  • Tong hilap, sahenteuna salami magang, ngeunaan Similink, MathCad sareng LabView anu sanés - dina pasir sadayana ditulis dina MATLAB, nganggo MatLab nyalira atanapi oktaf "versi" gratis na.

Pernyataan éta tétéla sabagéan leres: di Ilmenau, sengketa ngeunaan pilihan alat ogé henteu lengkep direngsekeun. Leres, pilihanna biasana antara MATLAB, Python sareng C.

Dina dinten anu sami, kuring dicandak ku pikagumbiraeun alami: naha kuring henteu kedah nransfer bagian kuring tina modél pamancar OFDM kana bentuk skrip? Ngan keur senang.

Sareng kuring kedah damel.

Léngkah ku léngkah

Gantina itungan teoritis, kuring ngan saukur bakal masihan link ka ieu artikel alus teuing 2011 ti tgx sarta dina slides Lapisan fisik LTE profesor Michel-Tila (TU Ilmenau). Jigana ieu bakal cukup.

"Jadi," pikir kuring, "hayu urang ulang, naon anu bakal urang modelkeun?"
Urang bakal model OFDM pigura generator (OFDM pigura generator).

Naon anu bakal kalebet:

  • simbol informasi
  • sinyal pilot
  • nol (DC)

Naon (demi kesederhanaan) urang abstrak tina:

  • tina modeling awalan siklik (upami anjeun terang dasarna, nambihanana moal sesah)

"Manifesto pikeun ngamimitian programer tina spesialis anu aya hubunganana" atanapi kumaha kuring dugi ka titik ieu dina kahirupan

Diagram blok model anu ditalungtik. Urang bakal eureun di inverse FFT (IFFT) blok. Pikeun ngalengkepan gambar, sadayana tiasa neraskeun sésana sorangan - kuring jangji ka guru-guru ti jurusan pikeun ngantunkeun hiji hal pikeun murid.

Hayu urang ngartikeun éta pikeun diri urang sorangan. latihan:

  • jumlah tetep sub-carrier;
  • panjang pigura tetep;
  • urang kudu nambahan hiji enol di tengah jeung sapasang enol di awal jeung ahir pigura (total, 5 lembar);
  • simbol informasi dimodulasi maké M-PSK atawa M-QAM, dimana M nyaéta urutan modulasi.

Hayu urang mimitian ku kode.

Sakabéh naskah tiasa diunduh tina link.

Hayu urang nangtukeun parameter input:

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

Ayeuna urang nangtukeun indéks simbol informasi, narima premis yén sinyal pilot merta kudu indit saméméh jeung / atawa sanggeus nol:

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

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

Lajeng posisi bisa ditangtukeun ngagunakeun fungsi linspace, ngurangan nilai ka pangleutikna tina integer pangcaketna:

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

Hayu urang tambahkeun indéks nol kana ieu sareng nyortir:

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

Sasuai, indéks sinyal pilot téh sagalana sejenna:

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

Ayeuna hayu urang ngartos sinyal pilot.

Simkuring gaduh template (variabel pilots), sarta hayu urang nyebutkeun urang hoyong pilots tina citakan ieu diselapkeun kana pigura urang sequentially. Tangtu, ieu bisa dipigawé dina loop a. Atawa anjeun bisa maénkeun saeutik tricky kalawan matrices - untungna MATLAB ngidinan Anjeun pikeun ngalakukeun ieu kalawan kanyamanan cukup.

Kahiji, hayu urang nangtukeun sabaraha témplat ieu pas lengkep kana pigura:

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

Salajengna, urang ngabentuk vektor anu diwangun ku témplat urang:

% 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

Sareng kami netepkeun vektor leutik anu ngan ukur sapotong template - "buntut", anu henteu pas kana pigura:

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

Urang meunang karakter pilot:

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

Hayu urang ngaléngkah ka simbol inpormasi, nyaéta, urang bakal ngabentuk pesen sareng modulasina:

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 

Kabéh geus siap! Ngumpulkeun pigura:

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

Anjeun kedah kéngingkeun sapertos kieu:

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!" - Teu sangka contentedly sarta nutup laptop. Butuh waktu sababaraha jam pikeun ngalakukeun sagalana: kaasup nulis kode, diajar sababaraha fungsi Matlab jeung pamikiran ngaliwatan trik matematik.

Naon kacindekan anu kuring tarik harita?

Subjéktif:

  • Nulis kode téh pikaresepeun tur sarupa jeung puisi!
  • Scripting mangrupikeun metode panalungtikan anu paling merenah pikeun widang Komunikasi sareng Pangolahan Sinyal.

Tujuan:

  • Teu perlu némbak sparrows tina mariem (iwal tujuan atikan misalna, tangtosna, patut eta): ngagunakeun Simulink, urang nyandak kana ngarengsekeun masalah basajan kalawan alat canggih.
  • GUI téh alus, tapi ngartos naon anu dikandung "handapeun tiung" hadé.

Sareng ayeuna, jauh tina janten mahasiswa, kuring hoyong nyarios kieu ka fraternity mahasiswa:

  • Udag!

Coba nulis kode, sanajan mimitina goréng. Kalayan pemrograman, sapertos kagiatan anu sanés, bagian anu paling hese nyaéta awal. Sareng langkung saé pikeun ngamimitian langkung awal: upami anjeun élmuwan atanapi ngan ukur teknisi, engké atanapi engké anjeun peryogi kaahlian ieu.

  • Paménta!

Paménta pendekatan sareng alat progresif ti guru sareng pengawas. Upami ieu mungkin, tangtosna ...

  • Jieun!

Dimana deui anu langkung saé pikeun ngaleungitkeun sagala panyawat pamula, upami henteu dina kerangka program pendidikan? Jieun sareng asah kaahlian anjeun - deui, langkung gancang anjeun ngamimitian, langkung saé.

Calon programer ti sadaya nagara, ngahiji!

PS

Dina raraga ngarekam hubungan langsung kuring jeung siswa, kuring ngalampirkeun poto memorable 2017 jeung dua rektor: Peter Scharff (katuhu) jeung Albert Kharisovich Gilmutdinov (kénca).

"Manifesto pikeun ngamimitian programer tina spesialis anu aya hubunganana" atanapi kumaha kuring dugi ka titik ieu dina kahirupan

Éta patut ngabéréskeun program sahenteuna pikeun kostum ieu! (bercanda)

sumber: www.habr.com

Tambahkeun komentar