"Manifesto kanggo miwiti programer saka spesialisasi sing gegandhengan" utawa carane aku tekan titik iki ing urip

Artikelku dina iki yaiku pikirane saka wong sing njupuk dalan pemrograman meh ora sengaja (sanajan alamiah).

Ya, aku ngerti yen pengalamanku mung pengalamanku, nanging aku rumangsa cocog karo tren umum. Kajaba iku, pengalaman sing diterangake ing ngisor iki luwih ana gandhengane karo bidang kegiatan ilmiah, nanging sapa ngerti, bisa migunani ing njaba.

"Manifesto kanggo miwiti programer saka spesialisasi sing gegandhengan" utawa carane aku tekan titik iki ing urip
Source: https://xkcd.com/664/

UmumΓ©, darmabakti kanggo kabeh siswa saiki saka mantan mahasiswa!

Pengarepan

Nalika aku ngrampungake gelar sarjana ing Teknologi Infokomunikasi lan Sistem Komunikasi ing 2014, aku meh ora ngerti babagan jagad pemrograman. Ya, kaya akeh liyane, aku njupuk "Ilmu Komputer" ing taun pisanan - nanging, Gusti, iku ing taun pisanan! Iku wis kalanggengan!

UmumΓ©, aku ora ngarep-arep apa-apa sing beda karo gelar sarjana, lan nalika aku mlebu program master. "Komunikasi lan Pangolahan Sinyal" Institut Teknologi Anyar Jerman-Rusia.

Nanging muspra...

Kita mung intake kaloro, lan wong lanang saka pisanan isih ngemas tas kanggo Jerman adoh (internship njupuk nem sasi ing taun kapindho gelar master). Ing tembung liya, ora ana siji-sijia saka bunder langsung sing durung nemoni cara pendidikan Eropa, lan ora ana sing takon babagan rincian.

Ing taun pisanan kita, mesthi, kita duwe macem-macem praktik, ing ngendi kita biasane menehi pilihan kanthi demokratis ing antarane nulis skrip (utamane ing basa MATLAB) lan nggunakake macem-macem GUI sing khusus banget (ing artine tanpa nulis skrip - simulasi. lingkungan modeling).

"Manifesto kanggo miwiti programer saka spesialisasi sing gegandhengan" utawa carane aku tekan titik iki ing urip

Ora perlu dicritakake, kita, Master of Science ing mangsa ngarep, saka kabodhoan enom kita, nyingkiri nulis kode kaya geni. Ing kene, contone, Simulink saka MathWorks: kene blok, kene sambungan, kene kabeh jinis setelan lan switch.

Tampilan sing asli lan bisa dingerteni wong sing sadurunge kerja ing desain sirkuit lan teknik sistem!

"Manifesto kanggo miwiti programer saka spesialisasi sing gegandhengan" utawa carane aku tekan titik iki ing urip
Source: https://ch.mathworks.com/help/comm/examples/parallel-concatenated-convolutional-coding-turbo-codes.html

Dadi katon kanggo kita ...

Kasunyatan

Salah sawijining karya praktis ing semester pisanan yaiku pangembangan transceiver sinyal OFDM minangka bagΓ©an saka subyek "Metode Pemodelan lan Optimasi". Gagasan kasebut sukses banget: teknologi kasebut isih relevan lan cukup populer amarga panggunaane, contone, ing jaringan Wi-Fi lan LTE / LTE-A (ing wangun OFDMA). Iki minangka sing paling apik kanggo para master kanggo latihan katrampilan ing modeling sistem telekomunikasi.

"Manifesto kanggo miwiti programer saka spesialisasi sing gegandhengan" utawa carane aku tekan titik iki ing urip

Lan saiki kita diwenehi sawetara opsi spesifikasi teknis kanthi paramèter pigura sing jelas ora praktis (supaya ora golek solusi ing Internet), lan kita ngetutake Simulink sing wis kasebut ... Lan kita kena ing sirah nganggo teko. saka kasunyatan:

  • Saben pamblokiran punika fraught karo akΓ¨h paramΓ¨ter dingerteni, kang medeni kanggo ngganti ing gulung saka kupluk.
  • Manipulasi karo angka kudu ditindakake, misale jek, prasaja, nanging sampeyan isih kudu repot, Gusti Allah ngalang-alangi.
  • mesin Cathedral noticeably alon mudhun saka nggunakake frantic saka GUI, malah ing tataran surfing liwat perpustakaan pamblokiran kasedhiya.
  • Kanggo ngrampungake soko ing omah, sampeyan kudu duwe Simulink sing padha. Lan, nyatane, ora ana alternatif.

Ya, ing pungkasan kita, mesthine, ngrampungake proyek kasebut, nanging kita ngrampungake kanthi exhalation lega.

Sawetara wektu liwati, lan kita teka ing pungkasan taun pisanan gelar master. Jumlah peer sing nggunakake GUI wiwit mudhun kanthi proporsional kanthi nambah proporsi subjek Jerman, sanajan durung tekan titik owah-owahan paradigma. Akeh kita, kalebu kula, ngatasi amplitudo owahan kita kanggo mbangun munggah, liyane lan liyane digunakake Matlab ing proyèk ilmiah kita (sanajan ing wangun Toolboxes), lan dudu Simulink ketoke menowo.

Titik ing keraguan kita yaiku tembung saka salah sawijining siswa taun kapindho (dheweke lagi bali menyang Rusia nalika iku):

  • Lali, paling ora sajrone internship, babagan Similink, MathCad lan LabView liyane - ing ndhuwur bukit kabeh ditulis ing MATLAB, nggunakake MatLab dhewe utawa Octave "versi" gratis.

Pratelan kasebut dadi sebagian bener: ing Ilmenau, regejegan babagan pilihan alat uga ora rampung rampung. Bener, pilihan kasebut biasane antarane MATLAB, Python lan C.

Ing dina sing padha, aku kaget banget: apa aku ora ngirim bagean saka model pemancar OFDM menyang wangun skrip? Mung kanggo seneng-seneng.

Lan aku kudu kerja.

Langkah-langkah

Tinimbang kalkulasi teoretis, aku mung bakal menehi link kanggo iki artikel apik banget 2011 saka tgx lan ing minger Lapisan fisik LTE profesor Michel-Tila (TU Ilmenau). Aku iki bakal cukup.

"Dadi," pikirku, "ayo baleni, apa sing bakal kita model?"
Kita bakal model generator pigura OFDM (OFDM pigura generator).

Apa sing bakal kalebu:

  • simbol informasi
  • sinyal pilot
  • nul (DC)

Apa (kanggo kesederhanaan) kita abstrak saka:

  • saka modeling ater-ater siklik (yen sampeyan ngerti dhasar, nambah ora bakal angel)

"Manifesto kanggo miwiti programer saka spesialisasi sing gegandhengan" utawa carane aku tekan titik iki ing urip

Diagram blok model sing dianggep. Kita bakal mandheg ing blok FFT inverse (IFFT). Kanggo ngrampungake gambar kasebut, kabeh wong bisa nerusake liyane - aku janji marang guru saka departemen kanggo ninggalake soko kanggo siswa.

Ayo kita nemtokake kanggo awake dhewe. olahraga:

  • nomer tetep saka sub-carrier;
  • dawa pigura tetep;
  • kita kudu nambah siji nul ing tengah lan pasangan nul ing wiwitan lan pungkasan pigura (total, 5 bΓͺsik);
  • simbol informasi dimodulasi nggunakake M-PSK utawa M-QAM, ing ngendi M minangka urutan modulasi.

Ayo dadi miwiti karo kode.

Kabeh script bisa diundhuh saka link.

Ayo nemtokake 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

Saiki kita nemtokake indeks simbol informasi, nampa premis yen sinyal pilot kudu sadurunge lan / utawa sawise 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;

Banjur posisi bisa ditemtokake nggunakake fungsi kasebut linspace, ngurangi nilai dadi paling cilik saka integer paling cedhak:

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

Ayo nambah indeks nol menyang iki lan urutake:

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

Mulane, indeks sinyal pilot iku kabeh liya:

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

Saiki ayo ngerti sinyal pilot.

Kita duwe template (variabel pilot), lan kita pengin pilot saka cithakan iki bakal dilebokake menyang pigura kita sequentially. Mesthi, iki bisa rampung ing daur ulang. Utawa sampeyan bisa muter rada angel karo matriks - untunge MATLAB ngidini sampeyan nindakake iki kanthi kepenak.

Pisanan, ayo nemtokake jumlah cithakan iki sing cocog karo pigura:

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

Sabanjure, kita mbentuk vektor sing kasusun saka template kita:

% 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

Lan kita nemtokake vektor cilik sing mung ngemot potongan cithakan - "buntut", sing ora pas karo pigura:

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

Kita entuk karakter pilot:

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

Ayo pindhah menyang simbol informasi, yaiku, kita bakal nggawe pesen lan modulasi:

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 

Kabeh wis siyap! Ngrakit pigura:

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

Sampeyan kudu entuk kaya iki:

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!" β€” Aku mikir contentedly lan nutup laptop. Butuh sawetara jam kanggo nindakake kabeh: kalebu nulis kode, sinau sawetara fungsi Matlab lan mikir liwat trik matematika.

Apa kesimpulan aku banjur?

Subyektif:

  • Nulis kode iku nyenengake lan padha karo geguritan!
  • Scripting minangka cara riset sing paling trep kanggo bidang Komunikasi lan Pemrosesan Sinyal.

Tujuan:

  • Ora perlu njupuk sparrows saka mriem (kajaba goal pendidikan kuwi, mesthi, worth iku): nggunakake Simulink, kita njupuk ing mecahaken masalah prasaja karo alat canggih.
  • GUI apik, nanging ngerti apa sing ana ing "ing hood" luwih apik.

Lan saiki, amarga adoh saka dadi mahasiswa, aku arep ngomong ing ngisor iki kanggo persaudaraan mahasiswa:

  • Mupangat!

Coba nulis kode, sanajan wiwitane ala. Kanthi program, kaya kegiatan liyane, sing paling angel yaiku wiwitan. Lan luwih apik kanggo miwiti luwih awal: yen sampeyan ilmuwan utawa malah mung teknisi, cepet utawa mengko sampeyan bakal mbutuhake skill iki.

  • Panjaluk!

Nuntut pendekatan lan alat progresif saka guru lan pengawas. Yen iki bisa, mesthi ...

  • Nggawe!

Ing endi luwih apik kanggo ngatasi kabeh lara pemula, yen ora ana ing kerangka program pendidikan? Nggawe lan ngasah katrampilan sampeyan - maneh, luwih cepet sampeyan miwiti, luwih apik.

Calon programer saka kabeh negara, bersatu!

PS

Kanggo ngrekam hubungan langsung karo siswa, aku masang foto sing ora bisa dilalekake ing taun 2017 karo rong rektor: Peter Scharff (tengen) lan Albert Kharisovich Gilmutdinov (kiwa).

"Manifesto kanggo miwiti programer saka spesialisasi sing gegandhengan" utawa carane aku tekan titik iki ing urip

Iku worth rampung program ing paling rasukan iki! (ngakak)

Source: www.habr.com

Add a comment