„Manifest fĂŒr angehende Programmierer aus verwandten Fachgebieten“ oder wie ich zu diesem Punkt im Leben gekommen bin

Mein heutiger Artikel enthĂ€lt laute Gedanken einer Person, die fast zufĂ€llig (wenn auch ganz natĂŒrlich) den Weg des Programmierens eingeschlagen hat.

Ja, ich verstehe, dass meine Erfahrung nur meine Erfahrung ist, aber es scheint mir, dass sie gut in den allgemeinen Trend passt. DarĂŒber hinaus beziehen sich die im Folgenden beschriebenen Erfahrungen eher auf den Bereich der wissenschaftlichen TĂ€tigkeit, aber was zum Teufel ist kein Scherz – sie können außerhalb nĂŒtzlich sein.

„Manifest fĂŒr angehende Programmierer aus verwandten Fachgebieten“ oder wie ich zu diesem Punkt im Leben gekommen bin
Source: https://xkcd.com/664/

Im Allgemeinen allen aktuellen Studenten eines ehemaligen Studenten gewidmet!

Erwartungen

Als ich 2014 meinen Bachelor in Infokommunikationstechnologien und Kommunikationssystemen abschloss, wusste ich fast nichts ĂŒber die Welt des Programmierens. Ja, wie viele andere habe ich das Fach „Informatik“ in meinem ersten Jahr belegt – aber, Herrgott, es war in meinem ersten Jahr! Es ist eine Ewigkeit her!

Generell habe ich von einem Bachelorstudium und dem Einstieg in das Masterstudium nichts Besonderes erwartet „Kommunikation und Signalverarbeitung“ Deutsch-Russisches Institut fĂŒr Neue Technologien.

Aber vergeblich...

Wir waren erst der zweite Studiengang und die Jungs vom ersten waren noch dabei, ihre Koffer fĂŒr das ferne Deutschland zu packen (das Praktikum dauert im zweiten Jahr des Masterstudiums sechs Monate). Mit anderen Worten: Niemand aus dem unmittelbaren Umfeld hatte sich bisher ernsthaft mit den Methoden der europĂ€ischen Bildung auseinandergesetzt, und es gab niemanden, der sich nach den Einzelheiten erkundigen konnte.

In unserem ersten Jahr hatten wir natĂŒrlich verschiedene Arten von Übungen, bei denen uns normalerweise demokratisch die Wahl zwischen dem Schreiben von Skripten (hauptsĂ€chlich in der MATLAB-Sprache) und der Verwendung verschiedener hochspezialisierter GUIs (im Sinne von Simulation ohne das Schreiben von Skripten) angeboten wurde Modellierungsumgebungen).

„Manifest fĂŒr angehende Programmierer aus verwandten Fachgebieten“ oder wie ich zu diesem Punkt im Leben gekommen bin

Unnötig zu erwĂ€hnen, dass wir, die zukĂŒnftigen Master of Science, es aufgrund unserer jugendlichen Dummheit vermieden haben, Code wie Feuer zu schreiben. Hier ist zum Beispiel Simulink von MathWorks: Hier sind die Blöcke, hier sind die Verbindungen, hier sind allerlei Einstellungen und Schalter.

Eine Sichtweise, die fĂŒr jemanden verstĂ€ndlich ist, der zuvor in den Bereichen Schaltungsdesign und Systemtechnik gearbeitet hat!

„Manifest fĂŒr angehende Programmierer aus verwandten Fachgebieten“ oder wie ich zu diesem Punkt im Leben gekommen bin
Source: https://ch.mathworks.com/help/comm/examples/parallel-concatenated-convolutional-coding-turbo-codes.html

So kam es uns vor...

RealitÀt

Eine der praktischen Arbeiten des ersten Semesters war die Entwicklung eines OFDM-Signaltransceivers im Rahmen des Fachs „Methoden zur Modellierung und Optimierung“. Die Idee ist sehr erfolgreich: Die Technologie ist nach wie vor relevant und aufgrund ihrer Verwendung beispielsweise in Wi-Fi- und LTE/LTE-A-Netzwerken (in Form von OFDMA) sehr beliebt. Dies ist die beste Möglichkeit fĂŒr Meister, ihre FĂ€higkeiten in der Modellierung von Telekommunikationssystemen zu ĂŒben.

„Manifest fĂŒr angehende Programmierer aus verwandten Fachgebieten“ oder wie ich zu diesem Punkt im Leben gekommen bin

Und jetzt werden uns mehrere Optionen technischer Spezifikationen mit offensichtlich unpraktischen Rahmenparametern angezeigt (um nicht im Internet nach einer Lösung zu suchen), und wir stĂŒrzen uns auf das bereits erwĂ€hnte Simulink ... Und wir werden mit einer Teekanne auf den Kopf geschlagen der RealitĂ€t:

  • Jeder Block ist mit vielen unbekannten Parametern behaftet, deren Änderung im Handumdrehen beĂ€ngstigend ist.
  • Die Manipulationen mit Zahlen mĂŒssen scheinbar einfach durchgefĂŒhrt werden, aber man muss trotzdem viel Aufhebens machen, Gott bewahre es.
  • Cathedral-Maschinen werden durch die hektische Nutzung der GUI merklich langsamer, selbst beim Surfen durch Bibliotheken verfĂŒgbarer Blöcke.
  • Um etwas zu Hause fertigzustellen, benötigen Sie dasselbe Simulink. Und tatsĂ€chlich: keine Alternativen.

Ja, am Ende haben wir das Projekt natĂŒrlich abgeschlossen, aber wir haben es mit einem lauten Ausatmen der Erleichterung abgeschlossen.

Es verging einige Zeit und wir waren am Ende des ersten Jahres des Masterstudiums angelangt. Mit dem Anstieg des Anteils deutscher FĂ€cher begann der Umfang der Hausaufgaben mittels GUI proportional abzunehmen, obwohl noch kein Paradigmenwechsel eingetreten war. Viele von uns, darunter auch ich, nutzten in unseren wissenschaftlichen Projekten zunehmend Matlab (wenn auch in Form von Toolboxen) und nicht das scheinbar vertraute Simulink, nachdem wir unseren betrĂ€chtlichen Entwicklungsspielraum ĂŒberwunden hatten.

Der Punkt, an dem wir zweifelten, war der Satz eines der Studenten im zweiten Jahr (sie waren zu diesem Zeitpunkt gerade nach Russland zurĂŒckgekehrt):

  • Vergessen Sie, zumindest fĂŒr die Dauer des Praktikums, Similink, MathCad und anderes LabView – auf der anderen Seite ist alles in MATLAB geschrieben, mit MatLab selbst oder seiner kostenlosen „Version“ Octave.

Die Aussage erwies sich teilweise als richtig: Auch in Ilmenau wurde der Streit um die Wahl der Werkzeuge nicht vollstÀndig beigelegt. Die Wahl fiel zwar hauptsÀchlich zwischen MATLAB, Python und C.

Am selben Tag ĂŒberkam mich eine natĂŒrliche Aufregung: Sollte ich meinen Teil des OFDM-Sendermodells nicht in eine Skriptform ĂŒbertragen? Nur zum Spaß.

Und ich machte mich an die Arbeit.

Schritt fĂŒr Schritt

Anstelle theoretischer Berechnungen gebe ich einfach einen Link dazu ausgezeichneter Artikel 2011 von tgx und auf den Folien Physikalische LTE-Schicht Professoren Michel-Tila (TU Ilmenau). Ich denke, das wird ausreichen.

„Also“, dachte ich, „lasst uns wiederholen: Was werden wir modellieren?“
Wir werden modellieren OFDM-Framegenerator (OFDM-Rahmengenerator).

Was es beinhalten wird:

  • Informationssymbole
  • Pilotsignale
  • Nullen (DC)

Wovon wir (der Einfachheit halber) abstrahieren:

  • von der Modellierung eines zyklischen PrĂ€fixes (wenn Sie die Grundlagen kennen, wird das HinzufĂŒgen nicht schwierig sein)

„Manifest fĂŒr angehende Programmierer aus verwandten Fachgebieten“ oder wie ich zu diesem Punkt im Leben gekommen bin

Blockdiagramm des betrachteten Modells. Wir werden beim inversen FFT-Block (IFFT) anhalten. Um das Bild abzurunden, kann jeder den Rest selbst weitermachen – ich habe den Lehrern des Fachbereichs versprochen, den SchĂŒlern etwas zu hinterlassen.

Definieren wir diese fĂŒr uns. Übung:

  • feste Anzahl von UntertrĂ€gern;
  • feste RahmenlĂ€nge;
  • wir mĂŒssen eine Null in der Mitte und ein Paar Nullen am Anfang und Ende des Rahmens hinzufĂŒgen (insgesamt 5 StĂŒck);
  • Informationssymbole werden mit M-PSK oder M-QAM moduliert, wobei M die Modulationsreihenfolge ist.

Beginnen wir mit dem Code.

Das gesamte Skript kann hier heruntergeladen werden Link.

Definieren wir die Eingabeparameter:

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

Jetzt bestimmen wir die Indizes von Informationssymbolen und akzeptieren die PrĂ€misse, dass Pilotsignale notwendigerweise vor und/oder nach Nullen stehen mĂŒssen:

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

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

Anschließend können mit der Funktion die Positionen ermittelt werden Linspace, Reduzieren der Werte auf die kleinste der nĂ€chsten ganzen Zahlen:

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

FĂŒgen wir hier Indizes von Nullen hinzu und sortieren:

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

Dementsprechend sind die Pilotsignalindizes alles andere:

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

Lassen Sie uns nun die Pilotsignale verstehen.

Wir haben eine Vorlage (variabel Piloten), und nehmen wir an, wir möchten, dass Piloten aus dieser Vorlage nacheinander in unseren Frame eingefĂŒgt werden. Dies kann natĂŒrlich auch in einer Schleife erfolgen. Oder Sie spielen ein wenig knifflig mit Matrizen – glĂŒcklicherweise ermöglicht Ihnen MATLAB dies mit ausreichend Komfort.

Ermitteln wir zunÀchst, wie viele dieser Vorlagen vollstÀndig in den Rahmen passen:

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

Als nÀchstes bilden wir einen Vektor, der aus unseren Vorlagen besteht:

% 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

Und wir definieren einen kleinen Vektor, der nur einen Teil der Vorlage enthĂ€lt – den „Schwanz“, der nicht vollstĂ€ndig in den Rahmen passt:

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

Wir bekommen Pilotcharaktere:

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

Kommen wir zu den Informationssymbolen, wir bilden nÀmlich eine Nachricht und modulieren sie:

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 ist fertig! Zusammenbau des Rahmens:

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

Sie sollten so etwas erhalten:

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

"Wonne!" – dachte ich zufrieden und klappte den Laptop zu. Ich habe ein paar Stunden gebraucht, um alles zu erledigen: einschließlich dem Schreiben von Code, dem Erlernen einiger Matlab-Funktionen und dem Durchdenken mathematischer Tricks.

Welche Schlussfolgerungen habe ich dann gezogen?

Subjektiv:

  • Code zu schreiben ist angenehm und Ă€hnelt der Poesie!
  • Scripting ist die bequemste Forschungsmethode fĂŒr den Bereich Kommunikation und Signalverarbeitung.

Zielsetzung:

  • Es besteht keine Notwendigkeit, Spatzen aus einer Kanone abzuschießen (es sei denn, ein solches pĂ€dagogisches Ziel lohnt sich natĂŒrlich): Mithilfe von Simulink haben wir es uns zur Aufgabe gemacht, ein einfaches Problem mit einem hochentwickelten Tool zu lösen.
  • Die grafische BenutzeroberflĂ€che ist gut, aber zu verstehen, was „unter der Haube“ steckt, ist besser.

Und jetzt, da ich noch lange kein Student bin, möchte ich der Studentenverbindung Folgendes sagen:

  • Seid guten Mutes!

Versuchen Sie, Code zu schreiben, auch wenn er zunĂ€chst schlecht ist. Beim Programmieren ist, wie bei jeder anderen AktivitĂ€t auch, der Anfang der schwierigste Teil. Und es ist besser, frĂŒher anzufangen: Wenn Sie Wissenschaftler oder auch nur ein Technikfreak sind, werden Sie diese FĂ€higkeit frĂŒher oder spĂ€ter brauchen.

  • Nachfrage!

Fordern Sie fortschrittliche AnsĂ€tze und Werkzeuge von Lehrern und Vorgesetzten. Wenn das möglich ist, natĂŒrlich...

  • Seien Sie kreativ!

Wo sonst kann man die Wehwehchen eines AnfĂ€ngers besser ĂŒberwinden, wenn nicht im Rahmen eines Bildungsprogramms? Erweitern und verfeinern Sie Ihre FĂ€higkeiten – auch hier gilt: Je frĂŒher Sie beginnen, desto besser.

Angehende Programmierer aus allen LĂ€ndern, vereinigt euch!

PS

Um meine direkte Beziehung zu den Studierenden festzuhalten, fĂŒge ich ein unvergessliches Foto von 2017 mit zwei Rektoren bei: Peter Scharff (rechts) und Albert Kharisovich Gilmutdinov (links).

„Manifest fĂŒr angehende Programmierer aus verwandten Fachgebieten“ oder wie ich zu diesem Punkt im Leben gekommen bin

Zumindest fĂŒr diese KostĂŒme hat es sich gelohnt, das Programm zu beenden! (scherzhaft)

Source: habr.com

Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz und VPS-VDS-Servern đŸ”„ Kaufen Sie zuverlĂ€ssiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server | ProHoster