"متعلقہ خصوصیات سے پروگرامرز شروع کرنے کا منشور" یا میں زندگی میں اس مقام تک کیسے پہنچا

میرا آج کا مضمون ایک ایسے شخص کے خیالات ہیں جس نے تقریباً حادثاتی طور پر پروگرامنگ کا راستہ اختیار کیا (اگرچہ قدرتی طور پر)۔

جی ہاں، میں سمجھتا ہوں کہ میرا تجربہ صرف میرا تجربہ ہے، لیکن مجھے لگتا ہے کہ یہ عمومی رجحان میں بالکل فٹ بیٹھتا ہے۔ اس کے علاوہ، ذیل میں بیان کردہ تجربہ سائنسی سرگرمیوں کے میدان سے زیادہ تعلق رکھتا ہے، لیکن کیا مذاق نہیں ہے - یہ باہر مفید ہو سکتا ہے.

"متعلقہ خصوصیات سے پروگرامرز شروع کرنے کا منشور" یا میں زندگی میں اس مقام تک کیسے پہنچا
ماخذ: https://xkcd.com/664/

عام طور پر، سابق طالب علم سے تمام موجودہ طلباء کے لیے وقف!

توقعات

جب میں نے 2014 میں Infocommunication Technologies and Communication Systems میں بیچلر کی ڈگری حاصل کی تو میں پروگرامنگ کی دنیا کے بارے میں تقریباً کچھ نہیں جانتا تھا۔ ہاں، بہت سے دوسرے لوگوں کی طرح، میں نے اپنے پہلے سال میں "کمپیوٹر سائنس" کا مضمون لیا تھا - لیکن، رب، یہ میرے پہلے سال میں تھا! یہ ایک ابدیت رہا ہے!

عام طور پر، میں نے بیچلر ڈگری سے خاص طور پر مختلف کسی چیز کی توقع نہیں کی تھی، اور جب میں ماسٹر پروگرام میں داخل ہوا "مواصلات اور سگنل پروسیسنگ" جرمن-روسی انسٹی ٹیوٹ آف نیو ٹیکنالوجیز۔

لیکن بے سود...

ہم صرف دوسرا انٹیک تھے، اور پہلے کے لڑکے ابھی بھی دور جرمنی کے لیے اپنے بیگ پیک کر رہے تھے (ماسٹر کے پروگرام کے دوسرے سال میں انٹرن شپ میں چھ ماہ لگتے ہیں)۔ دوسرے لفظوں میں، قریبی حلقے میں سے کسی نے ابھی تک یورپی تعلیم کے طریقوں کا سنجیدگی سے سامنا نہیں کیا تھا، اور اس کی تفصیلات کے بارے میں پوچھنے والا کوئی نہیں تھا۔

ہمارے پہلے سال میں، یقیناً، ہمارے پاس مختلف قسم کے طرز عمل تھے، جن میں ہمیں عام طور پر جمہوری طور پر اسکرپٹ لکھنے (بنیادی طور پر MATLAB زبان میں) اور مختلف انتہائی مہارت والے GUIs کے استعمال کے درمیان انتخاب کی پیشکش کی جاتی تھی (اس لحاظ سے کہ اسکرپٹ لکھے بغیر - تخروپن ماڈلنگ ماحول)۔

"متعلقہ خصوصیات سے پروگرامرز شروع کرنے کا منشور" یا میں زندگی میں اس مقام تک کیسے پہنچا

یہ کہنے کی ضرورت نہیں کہ ہم سائنس کے مستقبل کے ماسٹرز نے اپنی جوانی کی حماقت سے آگ کی طرح کوڈ لکھنے سے گریز کیا۔ یہاں، مثال کے طور پر، MathWorks سے Simulink ہے: یہاں بلاکس ہیں، یہاں کنکشنز ہیں، یہاں ہر قسم کی سیٹنگز اور سوئچز ہیں۔

ایک ایسا نظریہ جو مقامی اور اس شخص کے لیے قابل فہم ہے جس نے پہلے سرکٹ ڈیزائن اور سسٹم انجینئرنگ میں کام کیا ہو!

"متعلقہ خصوصیات سے پروگرامرز شروع کرنے کا منشور" یا میں زندگی میں اس مقام تک کیسے پہنچا
ماخذ: https://ch.mathworks.com/help/comm/examples/parallel-concatenated-convolutional-coding-turbo-codes.html

تو ایسا لگتا تھا ہمیں...

حقیقت

پہلے سمسٹر کے عملی کاموں میں سے ایک OFDM سگنل ٹرانسیور کو "ماڈلنگ اینڈ آپٹیمائزیشن" کے موضوع کے حصے کے طور پر تیار کرنا تھا۔ یہ خیال بہت کامیاب ہے: ٹیکنالوجی اب بھی متعلقہ ہے اور اس کے استعمال کی وجہ سے کافی مقبول ہے، مثال کے طور پر، Wi-Fi اور LTE/LTE-A نیٹ ورکس میں (OFDMA کی شکل میں)۔ ماسٹرز کے لیے ٹیلی کام سسٹمز کی ماڈلنگ میں اپنی مہارتوں پر عمل کرنے کے لیے یہ بہترین چیز ہے۔

"متعلقہ خصوصیات سے پروگرامرز شروع کرنے کا منشور" یا میں زندگی میں اس مقام تک کیسے پہنچا

اور اب ہمیں واضح طور پر ناقابل عمل فریم پیرامیٹرز کے ساتھ تکنیکی خصوصیات کے کئی اختیارات دیئے گئے ہیں (تاکہ انٹرنیٹ پر کوئی حل تلاش نہ کیا جائے)، اور ہم پہلے ہی ذکر کردہ Simulink پر جھپٹتے ہیں... اور ہمارے سر پر چائے کا برتن مارا جاتا ہے۔ حقیقت کا:

  • ہر بلاک بہت سے نامعلوم پیرامیٹرز سے بھرا ہوا ہے، جو ٹوپی کے قطرے پر تبدیل ہونا خوفناک ہے۔
  • نمبروں کے ساتھ ہیرا پھیری کرنے کی ضرورت ہے، ایسا لگتا ہے، آسان ہے، لیکن پھر بھی آپ کو الجھنا پڑے گا، خدا نہ کرے۔
  • دستیاب بلاکس کی لائبریریوں کے ذریعے سرفنگ کے مرحلے پر بھی، کیتھیڈرل مشینیں GUI کے بے ہودہ استعمال سے نمایاں طور پر سست ہوجاتی ہیں۔
  • گھر پر کچھ ختم کرنے کے لیے، آپ کے پاس وہی Simulink ہونا ضروری ہے۔ اور، حقیقت میں، کوئی متبادل نہیں.

ہاں، آخر کار ہم نے اس منصوبے کو مکمل کیا، لیکن ہم نے اسے راحت کی بلند سانس کے ساتھ مکمل کیا۔

کچھ وقت گزرا اور ہم ماسٹر ڈگری کے پہلے سال کے اختتام پر آگئے۔ GUIs کا استعمال کرتے ہوئے ہوم ورک کی مقدار جرمن مضامین کے تناسب میں اضافے کے ساتھ متناسب طور پر گرنا شروع ہو گئی، حالانکہ یہ ابھی تک پیراڈائم شفٹ کے مقام تک نہیں پہنچا تھا۔ ہم میں سے بہت سے، جن میں مجھ سمیت، اپنی تعمیر کے لیے کافی وسعت پر قابو پاتے ہوئے، ہمارے سائنسی پروجیکٹس میں Matlab کو زیادہ سے زیادہ استعمال کیا جاتا ہے (اگرچہ ٹول باکس کی شکل میں ہو)، اور بظاہر مانوس سمولنک نہیں۔

ہمارے شکوک و شبہات کا نقطہ دوسرے سال کے طالب علموں میں سے ایک کا جملہ تھا (وہ اس وقت تک روس واپس آئے تھے):

  • بھول جائیں، کم از کم انٹرنشپ کی مدت کے لیے، Similink، MathCad اور دیگر LabView کے بارے میں - سب کچھ MATLAB میں لکھا جاتا ہے، MatLab یا اس کے مفت "ورژن" Octave کا استعمال کرتے ہوئے۔

بیان جزوی طور پر درست نکلا: Ilmenau میں، آلات کے انتخاب پر تنازعہ بھی مکمل طور پر حل نہیں ہوا تھا۔ سچ ہے، انتخاب زیادہ تر MATLAB، Python اور C کے درمیان تھا۔

اسی دن، مجھے ایک فطری جوش و خروش کا سامنا کرنا پڑا: کیا مجھے OFDM ٹرانسمیٹر ماڈل کے اپنے حصے کو اسکرپٹڈ شکل میں منتقل نہیں کرنا چاہئے؟ صرف تفریح ​​کے لئے.

اور مجھے کام کرنا پڑا۔

قدم بہ قدم

نظریاتی حسابات کے بجائے، میں صرف اس کا لنک دے دوں گا۔ بہترین مضمون 2011 سے tgx اور سلائیڈوں پر LTE جسمانی پرت پروفیسرز مشیل ٹیلا (TU Ilmenau)۔ میرے خیال میں یہ کافی ہوگا۔

"تو،" میں نے سوچا، "آئیے دہرائیں، ہم کیا ماڈل بنانے جا رہے ہیں؟"
ہم ماڈل بنائیں گے۔ 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;

پھر فنکشن کا استعمال کرتے ہوئے پوزیشنز کا تعین کیا جا سکتا ہے۔ linspace, قدروں کو قریب ترین انٹیجرز میں سے سب سے چھوٹے تک کم کرنا:

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

"نعمتوں!" میں نے اطمینان سے سوچا اور لیپ ٹاپ بند کر دیا۔ مجھے سب کچھ کرنے میں چند گھنٹے لگے: بشمول کوڈ لکھنا، متلاب کے کچھ افعال سیکھنا اور ریاضی کی چالوں کے ذریعے سوچنا۔

پھر میں نے کیا نتیجہ اخذ کیا؟

موضوعی۔:

  • تحریری کوڈ خوشگوار اور شاعری کے مترادف ہے!
  • اسکرپٹنگ مواصلات اور سگنل پروسیسنگ کے میدان کے لئے سب سے آسان تحقیقی طریقہ ہے۔

مقصد:

  • توپ سے چڑیوں کو گولی مارنے کی ضرورت نہیں ہے (جب تک کہ اس طرح کا تربیتی مقصد یقیناً اس کے قابل نہ ہو): Simulink کا استعمال کرتے ہوئے، ہم نے ایک جدید ترین آلے کے ذریعے ایک سادہ مسئلہ کو حل کرنا شروع کیا۔
  • GUI اچھا ہے، لیکن "ہڈ کے نیچے" کیا ہے اسے سمجھنا بہتر ہے۔

اور اب، طالب علم ہونے سے دور ہونے کے ناطے، میں طلبہ برادری سے درج ذیل کہنا چاہتا ہوں:

  • ہمت!

کوڈ لکھنے کی کوشش کریں، چاہے وہ پہلے ہی خراب ہو۔ پروگرامنگ کے ساتھ، کسی بھی دوسری سرگرمی کی طرح، سب سے مشکل حصہ آغاز ہے۔ اور یہ پہلے سے شروع کرنا بہتر ہے: اگر آپ سائنس دان ہیں یا یہاں تک کہ صرف ایک تکنیکی، جلد یا بدیر آپ کو اس مہارت کی ضرورت ہوگی۔

  • مطالبہ!

اساتذہ اور سپروائزرز سے ترقی پسند طریقوں اور آلات کا مطالبہ کریں۔ اگر یہ ممکن ہے تو یقیناً...

  • بنانا!

تعلیمی پروگرام کے فریم ورک کے اندر نہیں تو، ایک ابتدائی کے تمام زخموں پر قابو پانا اور کہاں بہتر ہے؟ اپنی صلاحیتیں بنائیں اور ان کو بہتر بنائیں - دوبارہ، جتنی جلدی آپ شروع کریں، اتنا ہی بہتر ہے۔

تمام ممالک کے خواہشمند پروگرامرز، متحد ہو جائیں!

PS

طلباء کے ساتھ اپنے براہ راست تعلق کو ریکارڈ کرنے کے لیے، میں دو ریکٹروں کے ساتھ 2017 کی ایک یادگار تصویر منسلک کر رہا ہوں: پیٹر شارف (دائیں) اور البرٹ کھریسووچ گلمٹڈینوف (بائیں)۔

"متعلقہ خصوصیات سے پروگرامرز شروع کرنے کا منشور" یا میں زندگی میں اس مقام تک کیسے پہنچا

کم از کم ان ملبوسات کے لیے یہ پروگرام ختم کرنے کے قابل تھا! (مذاق)

ماخذ: www.habr.com

نیا تبصرہ شامل کریں