"Manifest fir Ufänger Programméierer aus Zesummenhang Spezialitéiten" oder wéi ech op dësem Punkt am Liewen komm

Mäin Artikel haut ass haart Gedanken vun enger Persoun déi de Wee vun der Programméierung bal zoufälleg gemaach huet (och wann natierlech).

Jo, ech verstinn datt meng Erfahrung just meng Erfahrung ass, awer et schéngt mir datt et gutt an den allgemengen Trend passt. Ausserdeem bezitt d'Erfahrung hei ënnen beschriwwen méi op d'Beräich vun der wëssenschaftlecher Aktivitéit, awer wat d'Häll net de Geck mécht - et kann dobausse nëtzlech sinn.

"Manifest fir Ufänger Programméierer aus Zesummenhang Spezialitéiten" oder wéi ech op dësem Punkt am Liewen komm
Source: https://xkcd.com/664/

Am Allgemengen, gewidmet fir all aktuell Studenten aus engem fréiere Student!

Erwaardungen

Wéi ech mäi Bachelorstudium an Infocommunication Technologies a Kommunikatiounssystemer am Joer 2014 ofgeschloss hunn, wousst ech bal näischt iwwer d'Welt vun der Programméierung. Jo, wéi vill anerer, hunn ech a mengem éischte Joer de Fach "Informatik" gemaach - awer Här, et war a mengem éischte Joer! Et ass eng Éiwegkeet!

Am Allgemengen, hunn ech näischt besonnesch anescht erwaart vun engem Bachelorstudium, a wann ech an de Masterprogramm koumen "Kommunikatioun a Signalveraarbechtung" Däitsch-Russesch Institut fir Nei Technologien.

Awer ëmsoss ...

Mir waren nëmmen déi zweet Intake, an d'Jongen aus der éischter hunn nach ëmmer hir Poschen fir wäit Däitschland gepackt (de Stage dauert sechs Méint am zweete Joer vum Masterprogramm). Dat heescht, nach keen aus dem direkten Krees hat d'Methoden vun der europäescher Erzéiung eescht begéint, an et war kee méi no de Detailer ze froen.

An eisem éischte Joer hate mir natierlech verschidden Aarte vu Praktiken, an deenen mir normalerweis demokratesch de Choix ugebuede kruten tëscht Scripten ze schreiwen (haaptsächlech an der MATLAB Sprooch) a verschidde héich spezialiséiert GUIen ze benotzen (am Sënn datt ouni Scripten ze schreiwen - Simulatioun Modeller Ëmfeld).

"Manifest fir Ufänger Programméierer aus Zesummenhang Spezialitéiten" oder wéi ech op dësem Punkt am Liewen komm

Net néideg ze soen, mir, déi zukünfteg Masters of Science, aus eiser jugendlecher Dommheet, hu verhënnert Code wéi Feier ze schreiwen. Hei ass zum Beispill Simulink vu MathWorks: hei sinn d'Blöcke, hei sinn d'Verbindungen, hei sinn all Zort vun Astellungen a Schalter.

Eng Vue déi gebierteg a verständlech ass fir eng Persoun déi virdru am Circuitdesign a Systemtechnik geschafft huet!

"Manifest fir Ufänger Programméierer aus Zesummenhang Spezialitéiten" oder wéi ech op dësem Punkt am Liewen komm
Source: https://ch.mathworks.com/help/comm/examples/parallel-concatenated-convolutional-coding-turbo-codes.html

Also huet et eis geschéngt ...

Reality

Ee vun de praktesche Wierker vum éischte Semester war d'Entwécklung vun engem OFDM Signal Transceiver am Kader vum Thema "Methoden fir Modeller an Optimiséierung". D'Iddi ass ganz erfollegräich: d'Technologie ass nach ëmmer relevant an zimlech populär wéinst senger Notzung, zum Beispill an Wi-Fi an LTE / LTE-A Netzwierker (a Form vun OFDMA). Dëst ass déi bescht Saach fir Meeschteren hir Fäegkeeten ze üben beim Modelléiere vun Telekomsystemer.

"Manifest fir Ufänger Programméierer aus Zesummenhang Spezialitéiten" oder wéi ech op dësem Punkt am Liewen komm

An elo kréie mir verschidde Méiglechkeete vun technesche Spezifikatioune mat offensichtlech onpraktesche Frameparameter (fir net no enger Léisung um Internet ze sichen), a mir sprangen op de scho genannte Simulink ... A mir ginn op de Kapp mat engem Teapot geschloen vun der Realitéit:

  • All Block ass voll mat vill onbekannte Parameteren, déi grujeleg sinn ze änneren mat engem Hutt.
  • D'Manipulatioune mat Zuele musse gemaach ginn, et schéngt, einfach, awer Dir musst nach ëmmer räissen, Gott verbidd.
  • Kathedral Maschinnen verlangsamen merkbar vun der frantic Notzung vun der GUI, och op der Bühn vum Surfen duerch Bibliothéike vu verfügbare Blocken.
  • Fir eppes doheem fäerdeg ze maachen, musst Dir dee selwechte Simulink hunn. An tatsächlech keng Alternativen.

Jo, zum Schluss hu mir natierlech de Projet ofgeschloss, awer mir hunn et mat engem haart Ausatmung vun der Erliichterung ofgeschloss.

Eng Zäit ass vergaang, a mir sinn um Enn vum éischte Joer vum Masterstudium komm. D'Quantitéit vun Hausaufgaben benotzt GUI ugefaang proportional mat der Erhéijung vun der Undeel vun däitschen Fächer erofgoen, obwuel et nach net de Punkt vun engem Paradigmewiessel erreecht haten. Vill vun eis, inklusiv mir, iwwerwannen eis bedeitend Amplitude fir opzebauen, méi a méi benotzt Matlab an eise wëssenschaftleche Projeten (och wann a Form vun Toolboxen), an net de scheinbar vertraute Simulink.

De Punkt an eisen Zweifel war den Ausdrock vun engem vun den zweete Joer Studenten (si ware just zu Russland zréckkomm):

  • Vergiesst, op d'mannst fir d'Dauer vum Stage, iwwer Similink, MathCad an aner LabView - iwwer den Hiwwel ass alles an MATLAB geschriwwen, mat MatLab selwer oder seng gratis "Versioun" Oktave.

D'Ausso huet sech zum Deel richteg erausgestallt: Zu Ilmenau war de Sträit iwwert d'Wiel vun den Tools och net ganz geléist. Richteg, de Choix war meeschtens tëscht MATLAB, Python an C.

Am selwechten Dag gouf ech vun enger natierlecher Opreegung geholl: Soll ech net mäin Deel vum OFDM Sendermodell an eng scripted Form transferéieren? Just fir Spaass.

An ech muss schaffen.

Schrëtt fir Schrëtt

Amplaz vun theoreteschen Berechnungen, ginn ech einfach e Link op dës excellenten Artikel 2011 vun tgx an op de Rutschen LTE kierperlech Layer Proffen Michel-Tila (TU Ilmenau). Ech mengen dat wäert duergoen.

"Also," hunn ech geduecht, "loosst eis widderhuelen, wat wäerte mir modelléieren?"
Mir wäerte Modell OFDM Frame Generator (OFDM Frame Generator).

Wat et wäert enthalen:

  • Informatiounen Symboler
  • Pilot Signaler
  • Nullen (DC)

Wat (fir d'Simplicitéit) mir abstrakt aus:

  • vum Modelléiere vun engem zyklesche Präfix (wann Dir d'Basis kennt, addéiere wäert et net schwéier sinn)

"Manifest fir Ufänger Programméierer aus Zesummenhang Spezialitéiten" oder wéi ech op dësem Punkt am Liewen komm

Blockdiagramm vum Modell ënnersicht. Mir stoppen um inverse FFT (IFFT) Block. Fir d'Bild komplett ze maachen, kann jidderee selwer de Rescht weiderféieren - ech hunn den Enseignanten aus dem Departement versprach eppes fir d'Schüler ze loossen.

Loosst eis déi fir eis definéieren. Übung:

  • fix Zuel vun Ënner-Carrière;
  • fix Frame Längt;
  • mir mussen eng Null an der Mëtt an e Paar Nullen am Ufank an Enn vum Frame addéieren (total, 5 Stécker);
  • Informatiounssymboler ginn mat M-PSK oder M-QAM moduléiert, wou M d'Moduléierungsuerdnung ass.

Loosst eis mam Code ufänken.

De ganze Skript kann erofgeluede ginn Link.

Loosst eis d'Inputparameter definéieren:

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

Elo bestëmmen mir den Indizes vun Informatiounssymboler, akzeptéieren d'Viraussetzung datt Pilotsignaler onbedéngt virun an / oder no Nullen goen:

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

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

Da kënnen d'Positioune mat der Funktioun bestëmmt ginn linspace, reduzéiert d'Wäerter op déi klengst vun de nooste ganz Zuelen:

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

Loosst eis Indexe vun Nullen derbäi addéieren a sortéieren:

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

Deementspriechend sinn d'Pilotsignal Indizes alles anescht:

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

Loosst eis elo Pilot Signaler verstoen.

Mir hunn eng Schabloun (Variabel Piloten), a loosst eis soen, mir wëllen datt Pilote vun dëser Schabloun sequenziell an eise Frame agebaut ginn. Natierlech kann dat an enger Loop gemaach ginn. Oder Dir kënnt e bësse komplizéiert mat Matrizen spillen - glécklecherweis erlaabt MATLAB Iech dat mat genuch Komfort ze maachen.

Als éischt, loosst eis bestëmmen wéi vill vun dëse Templates komplett an de Frame passen:

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

Als nächst bilden mir e Vektor deen aus eise Schabloune besteet:

% 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

A mir definéieren e klenge Vektor deen nëmmen e Stéck vun der Schabloun enthält - de "Schwanz", deen net komplett an de Frame passt:

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

Mir kréien Pilot Charaktere:

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

Loosst eis op Informatiounssymboler weidergoen, nämlech wäerte mir e Message bilden an et moduléieren:

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 

Alles ass prett! Montage vum Frame:

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

Dir sollt esou eppes kréien:

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!" — Ech hunn zefridde geduecht an de Laptop zougemaach. Et huet mech e puer Stonnen gedauert fir alles ze maachen: Code schreiwen, e puer Matlab Funktiounen léieren an duerch mathematesch Tricken denken.

Wéi eng Conclusiounen hunn ech dann gezunn?

Subjektiv:

  • Code schreiwen ass agreabel an ähnlech wéi Poesie!
  • Scripting ass déi bequemste Fuerschungsmethod fir d'Beräich vu Kommunikatioun a Signalveraarbechtung.

Objektiv:

  • Et ass kee Besoin fir Spatzen aus enger Kanoun ze schéissen (ausser sou e pädagogescht Zil ass selbstverständlech et wäert): mat Simulink hu mir en einfache Problem mat engem raffinéierte Tool geléist.
  • GUI ass gutt, awer ze verstoen wat "ënnert der Hood" enthält ass besser.

An elo, well ech wäit net e Student sinn, wëll ech der Studentefraternitéit folgendes soen:

  • Gitt Iech

Probéiert de Code ze schreiwen, och wann et am Ufank schlecht ass. Mat Programméiere, wéi mat all aner Aktivitéit, ass den haardsten Deel den Ufank. An et ass besser fréi unzefänken: wann Dir e Wëssenschaftler sidd oder souguer en Technie, fréier oder spéider braucht Dir dës Fäegkeet.

  • Demande!

Fuerdert progressiv Approchen an Tools vun Enseignanten a Supervisoren. Wann dat méiglech ass, natierlech ...

  • Schafen!

Wou soss ass et besser, all d'Schwieregkeeten vun engem Ufänger ze iwwerwannen, wann net am Kader vun engem Bildungsprogramm? Erstellt a schärft Är Fäegkeeten - erëm, wat méi fréi Dir ufänkt, wat besser.

Aspirant Programméierer aus alle Länner, vereente!

PS

Fir meng direkt Relatioun mat de Studenten opzeschreiwen, befestegt ech eng onvergiesslech Foto vun 2017 mat zwee Rektoren: Peter Scharff (riets) an Albert Kharisovich Gilmutdinov (lénks).

"Manifest fir Ufänger Programméierer aus Zesummenhang Spezialitéiten" oder wéi ech op dësem Punkt am Liewen komm

Et war derwäert op d'mannst fir dës Kostümer de Programm fäerdeg ze maachen! (Geck)

Source: will.com

Setzt e Commentaire