"Manifesto programmer pemula dari spesialisasi terkait" atau bagaimana saya sampai pada kehidupan seperti itu

Artikel saya hari ini adalah pemikiran keras dari seseorang yang memulai jalur pemrograman hampir secara tidak sengaja (walaupun secara alami).


Ya, saya mengerti bahwa pengalaman saya hanya pengalaman saya, tetapi tampaknya bagi saya itu masuk ke tren umum. Selain itu, pengalaman yang dijelaskan di bawah ini lebih relevan dengan bidang kegiatan ilmiah, tapi apa yang tidak bercanda - itu bisa berguna di luar.



Sumber: https://xkcd.com/664/


Secara umum, ia didedikasikan untuk semua siswa asli dari mantan siswa!


Harapan


Ketika pada tahun 2014 saya menyelesaikan gelar sarjana saya di "Teknologi Informasi dan Komunikasi dan Sistem Komunikasi" Saya hampir tidak tahu apa-apa tentang dunia pemrograman. Ya, saya, seperti banyak orang, memiliki subjek ilmu komputer di tahun pertama - tetapi, Tuhan, itu di tahun pertama! Sudah berabad-abad!


Secara umum, saya tidak mengharapkan sesuatu yang sangat berbeda dari sarjana, dan mendaftar di program master "Komunikasi dan Pemrosesan Sinyal" dari Institut Teknologi Baru Jerman-Rusia.


Tapi sia-sia ...


Kami hanya set kedua, dan orang-orang dari yang pertama baru saja mengumpulkan tas mereka di Jerman yang jauh (magang membutuhkan enam bulan di tahun kedua program master). Dengan kata lain, belum ada satu pun dari lingkaran terdekat yang secara serius berurusan dengan metode pendidikan Eropa, dan tidak banyak bertanya tentang detail.


Pada tahun pertama kami, tentu saja, kami memiliki semua jenis praktik, di mana kami biasanya secara demokratis ditawari pilihan antara menulis skrip (terutama di MATLAB) dan menggunakan GUI yang sangat terspesialisasi (dalam arti bahwa tanpa menulis skrip - lingkungan simulasi).



Tidak perlu dikatakan lagi, kita, Masters of Science masa depan, dengan kebodohan muda kita, seperti api, menghindari penulisan kode. Di sini, misalnya, dia adalah Simulink dari MathWorks: di sini mereka adalah blok, di sini mereka adalah komunikasi, di sini mereka semua jenis pengaturan dan sakelar.


Asli dan mudah dipahami bagi orang yang sebelumnya terlibat dalam rekayasa sistem dan sirkuit, lihat!

Jadi sepertinya bagi kami ...


Realita


Salah satu pekerjaan praktis semester pertama adalah pengembangan transceiver sinyal OFDM dalam kerangka subjek "Metode untuk Pemodelan dan Optimasi". Idenya sangat sukses: teknologinya masih relevan dan cukup populer karena penggunaannya, misalnya, dalam jaringan Wi-Fi dan LTE / LTE-A (dalam bentuk OFDMA). Hal terpenting bagi master adalah melatih keterampilan mereka dalam memodelkan sistem telekomunikasi.



Dan sekarang kita diberikan beberapa opsi untuk spesifikasi teknis dengan parameter frame yang jelas tidak praktis (agar tidak mencari solusi di Internet), dan kita menyerang Simulink yang sudah disebutkan ... Dan kita mendapatkan teko realitas di kepala:


  • Setiap blok dipenuhi dengan banyak parameter yang tidak diketahui, yang menakutkan untuk diubah dari kondachka.
  • Manipulasi dengan angka-angka perlu dilakukan, tampaknya, sederhana, tetapi Tuhan melarang semua hal yang sama perlu dilakukan pagar.
  • Mobil-mobil Katedral terasa melambat karena kesibukan penggunaan GUI, bahkan pada tahap berselancar melalui perpustakaan dari blok-blok yang tersedia.
  • Untuk menyelesaikan sesuatu di rumah, Anda harus memiliki Simulink yang sama. Dan tidak, sebenarnya, alternatif.

Ya, pada akhirnya, tentu saja, kami menyelesaikan proyek, tetapi menyelesaikannya dengan napas lega.


Beberapa waktu berlalu, dan kami tiba di akhir tahun pertama program master. Jumlah pekerjaan rumah menggunakan GUI mulai menurun secara proporsional dengan peningkatan pangsa mata pelajaran Jerman, meskipun masih belum mencapai titik pergeseran paradigma. Banyak dari kita, termasuk saya, yang mengatasi amplitudo besar kita terhadap penumpukan, semakin banyak menggunakan Matlab (meskipun dalam bentuk Toolbox) dalam proyek ilmiah mereka, daripada Simulink yang tampaknya akrab.


Poin keraguan kami adalah ungkapan salah satu siswa tahun kedua (mereka baru saja kembali ke Rusia pada saat itu):


  • Lupakan, setidaknya selama magang Anda, tentang Similink, MathCad, dan LabView lainnya - di balik bukit semua orang menulis di MATLAB, menggunakan MatLab sendiri atau "versi" Octave gratisnya.

Pernyataan itu ternyata sebagian benar: di Ilmenau, perselisihan mengenai pilihan alat juga tidak diselesaikan sampai akhir. Benar, pilihannya sebagian besar antara bahasa MATLAB, Python dan C.


Pada hari yang sama, kegembiraan logis membawa saya: dapatkah saya mentransfer bagian saya dari model pemancar OFDM ke bentuk skrip? Hanya untuk bersenang-senang.


Dan saya mulai bekerja.


Langkah demi langkah


Alih-alih perhitungan teoritis, saya hanya akan memberikan tautan ke artikel bagus 2011 ini dari tgx dan ke slide pada tingkat fisik LTE oleh Profesor Michel-Thiel (TU Ilmenau). Saya pikir itu sudah cukup.

"Jadi," pikirku, "mari kita ulangi apa yang akan kita modelkan?"
Kami akan mensimulasikan generator bingkai OFDM.


Termasuk apa:


  • simbol informasi
  • sinyal pilot
  • nol (DC)

Dari apa (demi kesederhanaan) kami abstrak:


  • dari memodelkan awalan siklik (jika Anda tahu dasar-dasarnya, menambahkannya tidak akan sulit)


Diagram blok dari model yang dipertimbangkan. Kami akan berhenti di blok pengembalian FFT (IFFT). Semua orang dapat melanjutkan sisanya untuk menyelesaikan gambar sendiri - saya berjanji kepada para guru dari departemen untuk meninggalkan sesuatu untuk para siswa.


Kami mendefinisikan untuk diri kita sendiri itu. tugas:


  • jumlah tetap dari sub-operator;
  • panjang bingkai tetap;
  • kita harus menambahkan satu nol ke tengah dan sepasang nol ke awal dan akhir bingkai (total, 5 buah);
  • simbol informasi dimodulasi menggunakan M-PSK atau M-QAM, di mana M adalah urutan modulasi.

Mendapatkan kode.


Seluruh skrip dapat diunduh di sini .

Tentukan parameter input:


clear all; close all; clc M = 4; % eg 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 

Sekarang kita mendefinisikan indeks simbol informasi, dengan asumsi premis bahwa sinyal pilot harus pergi sebelum dan / atau setelah 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; 

Kemudian posisi dapat ditentukan menggunakan fungsi linspace , mengonversi nilai ke terkecil dari bilangan bulat terdekat:


 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 

Tambahkan nol indeks untuk ini dan urutkan:


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

Dengan demikian, indeks sinyal pilot adalah segalanya:


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

Sekarang mari kita berurusan dengan sinyal pilot.


Kami memiliki template (variabel pilot ), dan katakanlah kami ingin pilot dimasukkan dari template ini secara berurutan ke dalam bingkai kami. Ini tentu saja dapat dilakukan dalam satu lingkaran. Dan Anda bisa sedikit lebih bijaksana dengan matriks - manfaat dari MATLAB memungkinkan Anda melakukan ini dengan kenyamanan yang cukup.


Pertama, tentukan berapa banyak pola yang pas dalam bingkai sepenuhnya:


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

Selanjutnya, kami membentuk vektor, yang terdiri dari templat kami:


 % 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 

Dan kami mendefinisikan vektor kecil yang hanya berisi sepotong templat - "ekor", yang tidak sepenuhnya masuk ke dalam bingkai:


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

Kami mendapatkan simbol pilot:


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

Kami beralih ke simbol informasi, yaitu, kami akan membentuk pesan dan memodulasi:


 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 

Semuanya sudah siap! Menyatukan frame:


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

Seharusnya menghasilkan sesuatu seperti ini:


 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 

"Buzz!" - Saya pikir cukup dan menutup laptop. Saya butuh beberapa jam untuk melakukan semuanya: termasuk menulis kode, mempelajari beberapa fungsi Matlab, dan memikirkan trik-trik matematika.


Kesimpulan apa yang saya buat saat itu


Subyektif :


  • Menulis kode itu bagus dan mirip dengan puisi!
  • Scripting adalah metode penelitian yang paling nyaman untuk bidang Komunikasi dan Pemrosesan Sinyal.

Tujuan :


  • Tidak perlu menembak burung pipit dari meriam (jika tujuan pendidikan seperti itu, tentu saja, tidak sepadan): menggunakan Simulink, kami mulai memecahkan tugas sederhana dengan alat canggih.
  • GUI itu bagus, tetapi memahami apa yang ada di balik tudung itu lebih baik.

Dan sekarang, karena jauh dari seorang siswa, saya ingin mengatakan yang berikut kepada persaudaraan siswa:


  • Lakukan itu!

Cobalah menulis kode, meskipun pada awalnya akan buruk. Dengan pemrograman seperti halnya aktivitas lain, masalah gagah adalah awal. Dan lebih baik untuk memulai lebih awal: jika Anda seorang ilmuwan atau bahkan hanya seorang teknisi, cepat atau lambat Anda akan membutuhkan keterampilan ini.


  • Permintaan!

Menuntut pendekatan dan alat inovatif dari pendidik dan penyelia. Jika ya, tentu saja, sebanyak mungkin ...


  • Lakukan itu!

Di mana lebih baik sakit dengan luka pemula, jika tidak sebagai bagian dari program pendidikan? Ciptakan dan asah keterampilan Anda - lagi, semakin cepat Anda mulai, semakin baik.


Pemrogram pemula dari semua negara, bersatu!


PS


Untuk merekam hubungan langsung saya dengan siswa, saya lampirkan foto kenangan tahun 2017 dengan dua rektor: Peter Sharff (kanan) dan Albert Harisovich Gilmutdinov (kiri).


gambar


Itu layak menyelesaikan program setidaknya untuk kostum semacam itu! (hanya bercanda)

Source: https://habr.com/ru/post/id464479/


All Articles