ProHoster > blog > internetnieuws > “Manifest voor beginnende programmeurs met aanverwante specialismen” of hoe ik op dit punt in mijn leven terechtkwam
“Manifest voor beginnende programmeurs met aanverwante specialismen” of hoe ik op dit punt in mijn leven terechtkwam
Mijn artikel van vandaag zijn hardop gedachten van een persoon die bijna per ongeluk (zij het natuurlijk) het pad van programmeren heeft ingeslagen.
Ja, ik begrijp dat mijn ervaring slechts mijn ervaring is, maar het lijkt mij dat deze goed in de algemene trend past. Bovendien heeft de hieronder beschreven ervaring meer betrekking op het gebied van wetenschappelijke activiteit, maar wat is in vredesnaam geen grapje: het kan buiten nuttig zijn.
Over het algemeen opgedragen aan alle huidige studenten van een oud-student!
Verwachtingen
Toen ik in 2014 mijn bachelor Infocommunicatietechnologieën en Communicatiesystemen afrondde, wist ik vrijwel niets van de wereld van programmeren. Ja, net als vele anderen heb ik het vak 'Informatica' in mijn eerste jaar gevolgd - maar, Heer, het was in mijn eerste jaar! Het is een eeuwigheid geleden!
Over het algemeen had ik niets bijzonders anders verwacht van een bachelordiploma en toen ik aan de masteropleiding begon "Communicatie en signaalverwerking" Duits-Russisch Instituut voor Nieuwe Technologieën.
Maar tevergeefs...
We waren pas de tweede lichting, en de jongens van de eerste waren nog steeds hun koffers aan het pakken voor het verre Duitsland (de stage duurt zes maanden in het tweede jaar van een masteropleiding). Met andere woorden: niemand uit de directe omgeving was nog serieus in aanraking gekomen met de methoden van het Europese onderwijs, en er was niemand die naar de details vroeg.
In ons eerste jaar hadden we natuurlijk verschillende soorten praktijken, waarin we meestal op democratische wijze de keuze kregen tussen het schrijven van scripts (voornamelijk in de MATLAB-taal) en het gebruik van verschillende zeer gespecialiseerde GUI’s (in de zin dat zonder het schrijven van scripts - simulatie modelleringsomgevingen).
Het is onnodig om te zeggen dat wij, de toekomstige Masters of Science, uit onze jeugdige domheid het schrijven van code als vuur vermeden. Hier staat bijvoorbeeld Simulink van MathWorks: hier staan de blokken, hier staan de aansluitingen, hier staan allerlei instellingen en schakelaars.
Een visie die eigen en begrijpelijk is voor iemand die eerder in circuitontwerp en systeemtechniek heeft gewerkt!
Eén van de praktische werkzaamheden van het eerste semester was de ontwikkeling van een OFDM-signaaltransceiver als onderdeel van het vak “Methoden voor modellering en optimalisatie”. Het idee is zeer succesvol: de technologie is nog steeds relevant en behoorlijk populair vanwege het gebruik ervan in bijvoorbeeld Wi-Fi en LTE/LTE-A-netwerken (in de vorm van OFDMA). Dit is het beste voor meesters om hun vaardigheden in het modelleren van telecomsystemen te oefenen.
En nu krijgen we verschillende opties voor technische specificaties met duidelijk onpraktische frameparameters (om niet op internet naar een oplossing te zoeken), en we springen op de reeds genoemde Simulink... En we worden met een theepot op ons hoofd geslagen van de werkelijkheid:
Elk blok is beladen met veel onbekende parameters, die eng zijn om in een mum van tijd te veranderen.
De manipulaties met cijfers moeten worden gedaan, zo lijkt het, eenvoudig, maar je moet je nog steeds druk maken, God verhoede het.
Kathedraalmachines vertragen merkbaar door het hectische gebruik van de GUI, zelfs tijdens het surfen door bibliotheken met beschikbare blokken.
Om thuis iets af te maken, heb je dezelfde Simulink nodig. En eigenlijk zijn er geen alternatieven.
Ja, uiteindelijk hebben we het project natuurlijk voltooid, maar we hebben het met een luide uitademing van opluchting voltooid.
Er ging enige tijd voorbij en we kwamen aan het einde van het eerste jaar van de masteropleiding. De hoeveelheid huiswerk met behulp van GUI's begon evenredig te dalen met de toename van het aandeel Duitse vakken, hoewel het punt van een paradigmaverschuiving nog niet was bereikt. Velen van ons, waaronder ikzelf, die onze aanzienlijke omvang om op te bouwen overwonnen, gebruikten steeds meer Matlab in onze wetenschappelijke projecten (zij het in de vorm van Toolboxes), en niet het ogenschijnlijk bekende Simulink.
Het punt van onze twijfel was de zin van een van de tweedejaarsstudenten (ze waren toen net teruggekeerd naar Rusland):
Vergeet, tenminste voor de duur van de stage, Similink, MathCad en andere LabView - alles is in MATLAB geschreven, met behulp van MatLab zelf of de gratis "versie" Octave.
De stelling bleek gedeeltelijk waar: in Ilmenau was het geschil over de keuze van de gereedschappen ook niet volledig opgelost. Toegegeven, de keuze ging vooral tussen MATLAB, Python en C.
Op dezelfde dag werd ik overvallen door een natuurlijke opwinding: zou ik mijn deel van het OFDM-zendermodel niet in een scriptvorm moeten omzetten? Voor de lol.
En ik ging aan het werk.
Stap voor stap
In plaats van theoretische berekeningen zal ik hier eenvoudigweg een link naar geven uitstekend artikel 2011 vanaf tgx en op de glijbanen LTE fysieke laag professoren Michel-Tila (TU Ilmenau). Ik denk dat dit genoeg zal zijn.
“Dus,” dacht ik, “laten we herhalen, wat gaan we modelleren?”
Wij zullen modelleren OFDM-framegenerator (OFDM-framegenerator).
Wat het zal omvatten:
informatie symbolen
piloot signalen
nullen (DC)
Waar we (voor de eenvoud) van abstraheren:
van het modelleren van een cyclisch voorvoegsel (als je de basis kent, zal het toevoegen ervan niet moeilijk zijn)
Blokdiagram van het beschouwde model. We stoppen bij het inverse FFT (IFFT) blok. Om het plaatje compleet te maken kan iedereen zelf verder met de rest - ik heb de docenten van de afdeling beloofd iets achter te laten voor de leerlingen.
Laten we die voor onszelf definiëren. oefening:
vast aantal subdragers;
vaste framelengte;
we moeten één nul in het midden en een paar nullen aan het begin en einde van het frame toevoegen (totaal, 5 stuks);
informatiesymbolen worden gemoduleerd met behulp van M-PSK of M-QAM, waarbij M de modulatievolgorde is.
Laten we beginnen met de code.
Het volledige script kan worden gedownload van link.
Laten we de invoerparameters definiëren:
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
Nu bepalen we de indices van informatiesymbolen, waarbij we het uitgangspunt aanvaarden dat pilootsignalen noodzakelijkerwijs vóór en/of na nullen moeten gaan:
Vervolgens kunnen de posities worden bepaald met behulp van de functie linspatie, waarbij de waarden worden teruggebracht tot de kleinste van de dichtstbijzijnde gehele getallen:
Laten we hier indexen van nullen aan toevoegen en sorteren:
%concatenation and ascending sorting
inf_and_nulls_idx = union(inf_ind, nulls_idx);
Dienovereenkomstig zijn de pilootsignaalindices al het 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);
Laten we nu de signalen van de piloten begrijpen.
We hebben een sjabloon (variabel piloten), en laten we zeggen dat we willen dat piloten uit deze sjabloon opeenvolgend in ons frame worden ingevoegd. Uiteraard kan dit in een lus worden gedaan. Of je kunt een beetje lastig spelen met matrices - gelukkig kun je dit met MATLAB met voldoende comfort doen.
Laten we eerst bepalen hoeveel van deze sjablonen volledig in het frame passen:
pilots_len_psudo = floor(N_pil/length(pilots));
Vervolgens vormen we een vector die bestaat uit onze sjablonen:
En we definiëren een kleine vector die slechts een deel van de sjabloon bevat - de "staart", die niet volledig in het frame past:
tail_len = fr_len - N_inf - length(nulls_idx) ...
- length(pilots)*pilots_len_psudo;
tail = pilots(1:tail_len); % "tail" of pilots vector
We krijgen pilootkarakters:
vec_pilots = [resh; tail]; % completed pilots vector that frame consists
Laten we verder gaan met de informatiesymbolen, namelijk: we zullen een boodschap vormen en deze moduleren:
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
"Gelukzaligheid!" — dacht ik tevreden en sloot de laptop. Het kostte me een paar uur om alles te doen: inclusief het schrijven van code, het leren van enkele Matlab-functies en het bedenken van wiskundige trucjes.
Welke conclusies heb ik toen getrokken?
Subjectief:
Code schrijven is prettig en lijkt op poëzie!
Scripting is de handigste onderzoeksmethode op het gebied van Communicatie en Signaalverwerking.
Objectief:
Het is niet nodig om mussen met een kanon af te schieten (tenzij een dergelijk educatief doel natuurlijk de moeite waard is): met behulp van Simulink hebben we een eenvoudig probleem opgelost met een geavanceerd hulpmiddel.
GUI is goed, maar begrijpen wat er “onder de motorkap” zit, is beter.
En nu ik nog lang geen student ben, wil ik het volgende tegen de studentenvereniging zeggen:
Goede moed!
Probeer code te schrijven, ook al is het in eerste instantie slecht. Bij programmeren is, net als bij elke andere activiteit, het begin het moeilijkste deel. En het is beter om eerder te beginnen: als je een wetenschapper bent of zelfs maar een techneut, zul je deze vaardigheid vroeg of laat nodig hebben.
Vraag naar!
Vraag progressieve benaderingen en hulpmiddelen van leraren en supervisors. Als dit mogelijk is natuurlijk...
Creëren!
Waar anders is het beter om alle zweren van een beginner te overwinnen, zo niet in het kader van een educatief programma? Creëer en verbeter uw vaardigheden - nogmaals, hoe eerder u begint, hoe beter.
Aspirant-programmeurs uit alle landen, verenigt u!
PS
Om mijn directe relatie met studenten vast te leggen, voeg ik een gedenkwaardige foto van 2017 toe met twee rectoren: Peter Scharff (rechts) en Albert Kharisovich Gilmutdinov (links).
Het was de moeite waard om het programma in ieder geval voor deze kostuums af te maken! (grapje)