"సంబంధిత ప్రత్యేకతల నుండి ప్రోగ్రామర్‌లను ప్రారంభించే మానిఫెస్టో" లేదా నేను జీవితంలో ఈ స్థాయికి ఎలా చేరుకున్నాను

ఈ రోజు నా వ్యాసం దాదాపు ప్రమాదవశాత్తు (సహజంగా అయినప్పటికీ) ప్రోగ్రామింగ్ మార్గాన్ని తీసుకున్న వ్యక్తి నుండి బిగ్గరగా ఆలోచనలు.

అవును, నా అనుభవం కేవలం నా అనుభవం మాత్రమేనని నేను అర్థం చేసుకున్నాను, కానీ అది సాధారణ ధోరణికి బాగా సరిపోతుందని నాకు అనిపిస్తోంది. అంతేకాకుండా, క్రింద వివరించిన అనుభవం శాస్త్రీయ కార్యకలాపాల రంగానికి సంబంధించినది, కానీ ఎవరికి తెలుసు, ఇది వెలుపల ఉపయోగకరంగా ఉంటుంది.

"సంబంధిత ప్రత్యేకతల నుండి ప్రోగ్రామర్‌లను ప్రారంభించే మానిఫెస్టో" లేదా నేను జీవితంలో ఈ స్థాయికి ఎలా చేరుకున్నాను
మూలం: https://xkcd.com/664/

సాధారణంగా, మాజీ విద్యార్థి నుండి ప్రస్తుత విద్యార్థులందరికీ అంకితం!

అంచనాలు

నేను 2014లో ఇన్ఫోకమ్యూనికేషన్ టెక్నాలజీస్ అండ్ కమ్యూనికేషన్ సిస్టమ్స్‌లో నా బ్యాచిలర్ డిగ్రీని పూర్తి చేసినప్పుడు, ప్రోగ్రామింగ్ ప్రపంచం గురించి నాకు దాదాపు ఏమీ తెలియదు. అవును, చాలా మందిలాగే, నేను నా మొదటి సంవత్సరంలో “కంప్యూటర్ సైన్స్” సబ్జెక్ట్ తీసుకున్నాను - కానీ, ప్రభూ, అది నా మొదటి సంవత్సరంలోనే! ఇది ఒక శాశ్వతత్వం!

సాధారణంగా, నేను బ్యాచిలర్ డిగ్రీకి భిన్నంగా ఏమీ ఆశించలేదు మరియు నేను మాస్టర్స్ ప్రోగ్రామ్‌లోకి ప్రవేశించినప్పుడు "కమ్యూనికేషన్ మరియు సిగ్నల్ ప్రాసెసింగ్" జర్మన్-రష్యన్ ఇన్స్టిట్యూట్ ఆఫ్ న్యూ టెక్నాలజీస్.

కానీ ఫలించలేదు...

మేము మాత్రమే రెండవ తీసుకోవడం, మరియు మొదటి నుండి అబ్బాయిలు ఇప్పటికీ సుదూర జర్మనీ (ఇంటర్న్‌షిప్ మాస్టర్స్ డిగ్రీ యొక్క రెండవ సంవత్సరంలో ఆరు నెలలు పడుతుంది) కోసం వారి బ్యాగ్‌లను ప్యాక్ చేస్తున్నారు. మరో మాటలో చెప్పాలంటే, తక్షణ సర్కిల్ నుండి ఎవరూ ఇంకా యూరోపియన్ విద్య యొక్క పద్ధతులను తీవ్రంగా ఎదుర్కోలేదు మరియు వివరాల గురించి అడగడానికి ఎవరూ లేరు.

మా మొదటి సంవత్సరంలో, వాస్తవానికి, మేము వివిధ రకాల అభ్యాసాలను కలిగి ఉన్నాము, దీనిలో మేము సాధారణంగా ప్రజాస్వామ్యబద్ధంగా స్క్రిప్ట్‌లను వ్రాయడం (ప్రధానంగా MATLAB భాషలో) మరియు వివిధ అత్యంత ప్రత్యేకమైన GUIలను ఉపయోగించడం మధ్య ఎంపికను అందిస్తాము (అంటే స్క్రిప్ట్‌లు రాయకుండా - అనుకరణ మోడలింగ్ పరిసరాలు).

"సంబంధిత ప్రత్యేకతల నుండి ప్రోగ్రామర్‌లను ప్రారంభించే మానిఫెస్టో" లేదా నేను జీవితంలో ఈ స్థాయికి ఎలా చేరుకున్నాను

కాబోయే సైన్స్ మాస్టర్స్ అయిన మేము, మా యవ్వన మూర్ఖత్వం కారణంగా, నిప్పులాంటి కోడ్ రాయడం మానుకున్నాము అని ప్రత్యేకంగా చెప్పనవసరం లేదు. ఇక్కడ, ఉదాహరణకు, MathWorks నుండి సిములింక్: ఇక్కడ బ్లాక్‌లు ఉన్నాయి, ఇక్కడ కనెక్షన్‌లు ఉన్నాయి, ఇక్కడ అన్ని రకాల సెట్టింగ్‌లు మరియు స్విచ్‌లు ఉన్నాయి.

గతంలో సర్క్యూట్ డిజైన్ మరియు సిస్టమ్స్ ఇంజనీరింగ్‌లో పనిచేసిన వ్యక్తికి స్థానికంగా మరియు అర్థమయ్యే వీక్షణ!

"సంబంధిత ప్రత్యేకతల నుండి ప్రోగ్రామర్‌లను ప్రారంభించే మానిఫెస్టో" లేదా నేను జీవితంలో ఈ స్థాయికి ఎలా చేరుకున్నాను
మూలం: https://ch.mathworks.com/help/comm/examples/parallel-concatenated-convolutional-coding-turbo-codes.html

కాబట్టి అది మాకు అనిపించింది ...

రియాలిటీ

మొదటి సెమిస్టర్ యొక్క ఆచరణాత్మక పనులలో ఒకటి "మోడలింగ్ మరియు ఆప్టిమైజేషన్ కోసం పద్ధతులు" అనే అంశంలో భాగంగా OFDM సిగ్నల్ ట్రాన్స్‌సీవర్‌ను అభివృద్ధి చేయడం. ఆలోచన చాలా విజయవంతమైంది: సాంకేతికత ఇప్పటికీ సంబంధితంగా ఉంది మరియు దాని ఉపయోగం కారణంగా చాలా ప్రజాదరణ పొందింది, ఉదాహరణకు, Wi-Fi మరియు LTE/LTE-A నెట్‌వర్క్‌లలో (OFDMA రూపంలో). టెలికాం సిస్టమ్‌లను మోడలింగ్ చేయడంలో మాస్టర్స్ తమ నైపుణ్యాలను సాధన చేయడానికి ఇది ఉత్తమమైన విషయం.

"సంబంధిత ప్రత్యేకతల నుండి ప్రోగ్రామర్‌లను ప్రారంభించే మానిఫెస్టో" లేదా నేను జీవితంలో ఈ స్థాయికి ఎలా చేరుకున్నాను

మరియు ఇప్పుడు మనకు స్పష్టంగా అసాధ్యమైన ఫ్రేమ్ పారామితులతో (ఇంటర్నెట్‌లో పరిష్కారం కోసం వెతకకుండా) సాంకేతిక వివరణల యొక్క అనేక ఎంపికలు ఇవ్వబడ్డాయి మరియు మేము ఇప్పటికే పేర్కొన్న సిములింక్‌పై దూకుతాము... మరియు మేము టీపాట్‌తో తలపై కొట్టుకుంటాము. వాస్తవికత:

  • ప్రతి బ్లాక్ చాలా తెలియని పారామితులతో నిండి ఉంది, ఇది టోపీని తగ్గించడానికి భయానకంగా ఉంటుంది.
  • సంఖ్యలతో అవకతవకలు చేయవలసి ఉంది, ఇది సరళంగా అనిపిస్తుంది, కానీ మీరు ఇంకా రచ్చ చేయవలసి ఉంటుంది, దేవుడు నిషేధించాడు.
  • అందుబాటులో ఉన్న బ్లాక్‌ల లైబ్రరీల ద్వారా సర్ఫింగ్ చేసే దశలో కూడా, కేథడ్రల్ యంత్రాలు GUI యొక్క వెర్రి ఉపయోగం నుండి గణనీయంగా నెమ్మదించాయి.
  • ఇంట్లో ఏదైనా పూర్తి చేయడానికి, మీరు అదే సిములింక్ కలిగి ఉండాలి. మరియు, నిజానికి, ప్రత్యామ్నాయాలు లేవు.

అవును, చివరికి మేము ప్రాజెక్ట్‌ను పూర్తి చేసాము, కాని మేము దానిని బిగ్గరగా ఉపశమనంతో పూర్తి చేసాము.

కొంత సమయం గడిచింది, మరియు మేము మాస్టర్స్ డిగ్రీ మొదటి సంవత్సరం ముగింపుకు వచ్చాము. GUIలను ఉపయోగించే హోమ్‌వర్క్ మొత్తం జర్మన్ సబ్జెక్ట్‌ల నిష్పత్తి పెరుగుదలతో దామాషా ప్రకారం తగ్గడం ప్రారంభమైంది, అయినప్పటికీ ఇది ఇంకా నమూనా మార్పు స్థాయికి చేరుకోలేదు. నాతో సహా మనలో చాలా మంది, మా గణనీయ వ్యాప్తిని అధిగమించి, మా శాస్త్రోక్త ప్రాజెక్టులలో (టూల్‌బాక్స్‌ల రూపంలో ఉన్నప్పటికీ) మాట్‌లాబ్‌ను ఎక్కువగా ఉపయోగించారు మరియు అకారణంగా తెలిసిన Simulink కాదు.

మా సందేహాలలో విషయం ఏమిటంటే, రెండవ సంవత్సరం విద్యార్థులలో ఒకరి వాక్యం (వారు అప్పటికి రష్యాకు తిరిగి వచ్చారు):

  • కనీసం ఇంటర్న్‌షిప్ వ్యవధి కోసం, Similink, MathCad మరియు ఇతర ల్యాబ్‌వ్యూ గురించి మరచిపోండి - కొండపై ఉన్న ప్రతిదీ MatLab లేదా దాని ఉచిత “వెర్షన్” ఆక్టేవ్‌ని ఉపయోగించి MATLABలో వ్రాయబడింది.

ప్రకటన పాక్షికంగా నిజమని తేలింది: ఇల్మెనౌలో, సాధనాల ఎంపికపై వివాదం కూడా పూర్తిగా పరిష్కరించబడలేదు. నిజమే, ఎంపిక ఎక్కువగా MATLAB, Python మరియు C మధ్య ఉండేది.

అదే రోజున, నేను సహజమైన ఉత్సాహంతో తీసుకున్నాను: నేను OFDM ట్రాన్స్‌మిటర్ మోడల్‌లో నా భాగాన్ని స్క్రిప్ట్ రూపంలోకి బదిలీ చేయకూడదా? సరదా కోసం.

మరియు నేను పనికి వచ్చాను.

స్టెప్ బై స్టెప్

సైద్ధాంతిక లెక్కలకు బదులుగా, నేను దీనికి లింక్ ఇస్తాను అద్భుతమైన వ్యాసం 2011 నుండి tgx మరియు స్లయిడ్‌లపై LTE భౌతిక పొర ఆచార్యులు మిచెల్-టిలా (TU ఇల్మెనౌ). ఇది సరిపోతుందని నేను భావిస్తున్నాను.

"కాబట్టి," నేను అనుకున్నాను, "మనం పునరావృతం చేద్దాం, మనం ఏమి మోడల్ చేయబోతున్నాం?"
మేము మోడల్ చేస్తాము OFDM ఫ్రేమ్ జనరేటర్ (OFDM ఫ్రేమ్ జనరేటర్).

ఇది ఏమి కలిగి ఉంటుంది:

  • సమాచార చిహ్నాలు
  • పైలట్ సంకేతాలు
  • సున్నాలు (DC)

(సరళత కొరకు) మనం దేని నుండి సంగ్రహిస్తాము:

  • చక్రీయ ఉపసర్గను మోడలింగ్ చేయడం నుండి (మీకు ప్రాథమిక అంశాలు తెలిస్తే, దానిని జోడించడం కష్టం కాదు)

"సంబంధిత ప్రత్యేకతల నుండి ప్రోగ్రామర్‌లను ప్రారంభించే మానిఫెస్టో" లేదా నేను జీవితంలో ఈ స్థాయికి ఎలా చేరుకున్నాను

పరిశీలనలో ఉన్న మోడల్ యొక్క బ్లాక్ రేఖాచిత్రం. మేము విలోమ FFT (IFFT) బ్లాక్ వద్ద ఆపివేస్తాము. చిత్రాన్ని పూర్తి చేయడానికి, ప్రతి ఒక్కరూ మిగిలిన వాటిని కొనసాగించవచ్చు - నేను విద్యార్థుల కోసం ఏదైనా వదిలివేయమని డిపార్ట్‌మెంట్ నుండి ఉపాధ్యాయులకు వాగ్దానం చేసాను.

వాటిని మనమే నిర్వచించుకుందాం. వ్యాయామం:

  • ఉప-వాహకాల యొక్క స్థిర సంఖ్య;
  • స్థిర ఫ్రేమ్ పొడవు;
  • మేము మధ్యలో ఒక సున్నా మరియు ఫ్రేమ్ ప్రారంభంలో మరియు చివరిలో ఒక జత సున్నాలను జోడించాలి (మొత్తం, 5 ముక్కలు);
  • సమాచార చిహ్నాలు M-PSK లేదా M-QAM ఉపయోగించి మాడ్యులేట్ చేయబడతాయి, ఇక్కడ M అనేది మాడ్యులేషన్ ఆర్డర్.

కోడ్‌తో ప్రారంభిద్దాం.

స్క్రిప్ట్ మొత్తం డౌన్‌లోడ్ చేసుకోవచ్చు లింక్.

ఇన్‌పుట్ పారామితులను నిర్వచిద్దాం:

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

ఇప్పుడు మేము సమాచార చిహ్నాల సూచికలను నిర్ణయిస్తాము, పైలట్ సిగ్నల్‌లు తప్పనిసరిగా సున్నాలకు ముందు మరియు/లేదా తర్వాత వెళ్లాలి అనే ఆవరణను అంగీకరిస్తాము:

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

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

అప్పుడు విధులను ఉపయోగించి స్థానాలను నిర్ణయించవచ్చు లిన్‌స్పేస్, విలువలను సమీప పూర్ణాంకాలలో అతి చిన్నదానికి తగ్గించడం:

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

దీనికి సున్నాల సూచికలను జోడించి, క్రమబద్ధీకరించుదాం:

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

దీని ప్రకారం, పైలట్ సిగ్నల్ సూచికలు మిగతావన్నీ:

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

ఇప్పుడు పైలట్ సంకేతాలను అర్థం చేసుకుందాం.

మాకు ఒక టెంప్లేట్ ఉంది (వేరియబుల్ పైలట్లు), మరియు ఈ టెంప్లేట్ నుండి పైలట్‌లను మన ఫ్రేమ్‌లో వరుసగా చొప్పించాలని మేము కోరుకుంటున్నాము. వాస్తవానికి, ఇది లూప్‌లో చేయవచ్చు. లేదా మీరు మాత్రికలతో కొంచెం గమ్మత్తుగా ఆడవచ్చు - అదృష్టవశాత్తూ MATLAB దీన్ని తగినంత సౌకర్యంతో చేయడానికి మిమ్మల్ని అనుమతిస్తుంది.

ముందుగా, వీటిలో ఎన్ని టెంప్లేట్‌లు ఫ్రేమ్‌కి పూర్తిగా సరిపోతాయో తెలుసుకుందాం:

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

తరువాత, మేము మా టెంప్లేట్‌లను కలిగి ఉన్న వెక్టర్‌ను ఏర్పరుస్తాము:

% 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

మరియు మేము టెంప్లేట్ యొక్క భాగాన్ని మాత్రమే కలిగి ఉన్న చిన్న వెక్టర్‌ను నిర్వచించాము - “తోక”, ఇది ఫ్రేమ్‌లోకి పూర్తిగా సరిపోదు:

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

మేము పైలట్ పాత్రలను పొందుతాము:

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

సమాచార చిహ్నాలకు వెళ్దాం, అనగా, మేము సందేశాన్ని ఏర్పరుస్తాము మరియు దానిని మాడ్యులేట్ చేస్తాము:

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 

అంతా సిద్ధంగా ఉంది! ఫ్రేమ్ అసెంబ్లింగ్:

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

మీరు ఇలాంటివి పొందాలి:

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

"ఆనందం!" — నేను తృప్తిగా ఆలోచించి ల్యాప్‌టాప్ మూసేసాను. కోడ్ రాయడం, కొన్ని మ్యాట్‌లాబ్ ఫంక్షన్‌లను నేర్చుకోవడం మరియు గణిత ట్రిక్స్ ద్వారా ఆలోచించడం వంటివన్నీ చేయడానికి నాకు రెండు గంటల సమయం పట్టింది.

అప్పుడు నేను ఎలాంటి తీర్మానాలు చేసాను?

సబ్జెక్టివ్:

  • కోడ్ రాయడం ఆహ్లాదకరంగా ఉంటుంది మరియు కవిత్వానికి సమానంగా ఉంటుంది!
  • కమ్యూనికేషన్ మరియు సిగ్నల్ ప్రాసెసింగ్ రంగానికి స్క్రిప్టింగ్ అత్యంత అనుకూలమైన పరిశోధనా పద్ధతి.

లక్ష్యం:

  • ఫిరంగి నుండి పిచ్చుకలను కాల్చడం అవసరం లేదు (అటువంటి విద్యా లక్ష్యం తప్ప, అది విలువైనది): సిములింక్ ఉపయోగించి, మేము అధునాతన సాధనంతో ఒక సాధారణ సమస్యను పరిష్కరించాము.
  • GUI మంచిది, కానీ “అండర్ ది హుడ్” ఏమి ఉందో అర్థం చేసుకోవడం మంచిది.

ఇప్పుడు, విద్యార్థికి దూరంగా ఉన్నందున, నేను విద్యార్థి సోదరులకు ఈ క్రింది వాటిని చెప్పాలనుకుంటున్నాను:

  • దాని కోసం వెళ్ళు!

కోడ్ రాయడానికి ప్రయత్నించండి, అది మొదట చెడ్డది అయినప్పటికీ. ప్రోగ్రామింగ్‌తో, ఇతర కార్యకలాపాల మాదిరిగానే, కష్టతరమైన భాగం ప్రారంభం. మరియు ముందుగానే ప్రారంభించడం మంచిది: మీరు శాస్త్రవేత్త అయితే లేదా టెక్కీ అయినా, త్వరగా లేదా తరువాత మీకు ఈ నైపుణ్యం అవసరం.

  • డిమాండ్!

ఉపాధ్యాయులు మరియు పర్యవేక్షకుల నుండి ప్రగతిశీల విధానాలు మరియు సాధనాలను డిమాండ్ చేయండి. ఇది సాధ్యమైతే, ఖచ్చితంగా ...

  • సృష్టించు!

విద్యా కార్యక్రమం యొక్క చట్రంలో కాకపోతే, ఒక అనుభవశూన్యుడు యొక్క అన్ని పుండ్లను అధిగమించడం ఎక్కడ మంచిది? మీ నైపుణ్యాలను సృష్టించండి మరియు మెరుగుపరచండి - మళ్ళీ, మీరు ఎంత త్వరగా ప్రారంభిస్తే అంత మంచిది.

అన్ని దేశాల నుండి ఔత్సాహిక ప్రోగ్రామర్లు, ఏకం!

PS

విద్యార్థులతో నా ప్రత్యక్ష సంబంధాన్ని రికార్డ్ చేయడానికి, నేను ఇద్దరు రెక్టార్‌లతో 2017 యొక్క చిరస్మరణీయ ఫోటోను జత చేస్తున్నాను: పీటర్ షార్ఫ్ (కుడి) మరియు ఆల్బర్ట్ ఖరిసోవిచ్ గిల్ముట్డినోవ్ (ఎడమ).

"సంబంధిత ప్రత్యేకతల నుండి ప్రోగ్రామర్‌లను ప్రారంభించే మానిఫెస్టో" లేదా నేను జీవితంలో ఈ స్థాయికి ఎలా చేరుకున్నాను

కనీసం ఈ కాస్ట్యూమ్‌ల కోసం ప్రోగ్రామ్‌ను పూర్తి చేయడం విలువైనదే! (తమాషా)

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి