"منشور سان لاڳاپيل خاصيتن کان پروگرامرز شروع ڪرڻ لاء" يا مون کي زندگي ۾ هن نقطي تي ڪيئن حاصل ڪيو

منهنجو آرٽيڪل اڄ هڪ شخص کان بلند آواز آهي جنهن تقريبن حادثي سان پروگرامنگ جو رستو ورتو (جڏهن ته قدرتي طور تي).

ها، مان سمجهان ٿو ته منهنجو تجربو صرف منهنجو تجربو آهي، پر اهو مون کي لڳي ٿو ته اهو عام رجحان سان چڱي طرح ٺهڪي اچي ٿو. ان کان علاوه، هيٺ بيان ڪيل تجربو سائنسي سرگرمين جي ميدان سان وڌيڪ تعلق رکي ٿو، پر اهو ڪهڙو مذاق نه آهي - اهو ٻاهران مفيد ٿي سگهي ٿو.

"منشور سان لاڳاپيل خاصيتن کان پروگرامرز شروع ڪرڻ لاء" يا مون کي زندگي ۾ هن نقطي تي ڪيئن حاصل ڪيو
جو ذريعو: 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 سگنل ٽرانسيور جي ترقي هئي موضوع جي حصي جي طور تي “ماڊلنگ ۽ اصلاح لاءِ طريقا”. اهو خيال تمام ڪامياب آهي: ٽيڪنالاجي اڃا تائين لاڳاپيل آهي ۽ ان جي استعمال جي ڪري ڪافي مشهور آهي، مثال طور، وائي فائي ۽ LTE/LTE-A نيٽ ورڪن ۾ (OFDMA جي صورت ۾). هي ماسٽرز لاءِ بهترين شيءِ آهي انهن جي صلاحيتن کي ماڊلنگ ٽيليڪ سسٽم ۾ مشق ڪرڻ لاءِ.

"منشور سان لاڳاپيل خاصيتن کان پروگرامرز شروع ڪرڻ لاء" يا مون کي زندگي ۾ هن نقطي تي ڪيئن حاصل ڪيو

۽ ھاڻي اسان کي ٽيڪنيڪل وضاحتن جا ڪيترائي اختيار ڏنا ويا آھن واضح طور تي غير عملي فريم پيرا ميٽرز سان (جيئن ته انٽرنيٽ تي ڪو حل نه ڳوليو)، ۽ اسان اڳ ۾ ئي ذڪر ڪيل Simulink تي ڇڪيون ٿا... حقيقت جي:

  • هر بلاڪ ڪيترن ئي اڻڄاتل پيٽرولن سان ڀريل آهي، جيڪي ٽوپي جي ڦوٽ تي تبديل ڪرڻ لاء خوفناڪ آهن.
  • انگن سان ٺاهه ڪرڻ جي ضرورت آهي، اهو لڳي ٿو، سادو، پر توهان کي اڃا تائين پريشان ڪرڻو پوندو، خدا نه ڪري.
  • ڪيٿڊرل مشينون خاص طور تي GUI جي استعمال کان سست ٿي وڃن ٿيون، جيتوڻيڪ دستياب بلاڪ جي لائبريرين ذريعي سرفنگ جي مرحلي ۾.
  • گهر ۾ ڪجهه ختم ڪرڻ لاء، توهان کي هڪ ئي Simulink جي ضرورت آهي. ۽، حقيقت ۾، ڪو متبادل ناهي.

ها، آخر ۾، اسان، يقينا، منصوبو مڪمل ڪيو، پر اسان ان کي مڪمل طور تي راحت جي بلند آواز سان مڪمل ڪيو.

ڪجهه وقت گذري ويو، ۽ اسان ماسٽر ڊگري جي پهرين سال جي پڄاڻي تي پهتاسين. GUIs استعمال ڪندي گھر جي ڪم جو مقدار جرمن مضمونن جي تناسب ۾ اضافو سان تناسب سان گھٽجڻ شروع ڪيو، جيتوڻيڪ اھو اڃا تائين ھڪڙو پيراڊم شفٽ جي نقطي تي نه پھتو آھي. اسان مان گھڻا، جن ۾ مون سميت، اسان جي وڏي پيماني تي قابو پائڻ، اسان جي سائنسي منصوبن ۾ (جيتوڻيڪ ٽول باڪس جي صورت ۾)، ۽ بظاهر واقف Simulink نه، وڌيڪ ۽ وڌيڪ استعمال ڪيو 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

"خوشي!" “ مون مطمئن ٿي سوچيو ۽ ليپ ٽاپ بند ڪيم. اهو سڀ ڪجهه ڪرڻ ۾ مون کي ٻه ڪلاڪ لڳا: ڪوڊ لکڻ، ڪجهه Matlab افعال سکڻ ۽ رياضياتي چالن ذريعي سوچڻ سميت.

پوءِ مون ڪهڙو نتيجو ڪڍيو؟

موضوعي:

  • لکڻ جو ڪوڊ خوشگوار ۽ شاعري وانگر آهي!
  • اسڪرپٽ ڪميونيڪيشن ۽ سگنل پروسيسنگ جي شعبي لاءِ سڀ کان وڌيڪ آسان تحقيقي طريقو آهي.

مقصد:

  • تپ مان اسپروز کي مارڻ جي ڪا ضرورت ناهي (جيستائين اهڙو تعليمي مقصد نه هجي، يقيناً، ان جي لائق آهي): Simulink استعمال ڪندي، اسان هڪ نفيس اوزار سان هڪ سادي مسئلو حل ڪيو.
  • GUI سٺو آهي، پر سمجھڻ ۾ ڇا آهي "هوڊ هيٺ" بهتر آهي.

۽ ھاڻي، شاگرد ٿيڻ کان پري رھي، مان شاگرد برادريءَ کي ھيٺيون ڳالھيون چوڻ چاھيان ٿو:

  • ان لاء وڃو

ڪوڊ لکڻ جي ڪوشش ڪريو، جيتوڻيڪ اهو پهريون ڀيرو خراب آهي. پروگرامنگ سان، جيئن ڪنهن ٻئي سرگرمي سان، سڀ کان ڏکيو حصو شروعات آهي. ۽ اهو بهتر آهي ته اڳ ۾ شروع ڪريو: جيڪڏهن توهان هڪ سائنسدان آهيو يا اڃا به صرف هڪ ٽيڪنالاجي، جلدي يا بعد ۾ توهان کي هن مهارت جي ضرورت پوندي.

  • مطالبو!

استادن ۽ نگرانن کان ترقي پسند طريقن ۽ اوزارن جو مطالبو. جيڪڏهن اهو ممڪن آهي، يقينا ...

  • ٺاهيو!

جيڪڏهن تعليمي پروگرام جي فريم ورڪ جي اندر نه هجي ته هڪ شروعاتي جي سڀني زخمن کي ختم ڪرڻ لاء ٻيو ڪٿي بهتر آهي؟ پنهنجون صلاحيتون ٺاهيو ۽ ان کي وڌايو - ٻيهر، جلدي توهان شروع ڪيو، بهتر.

سڀني ملڪن مان اميد رکندڙ پروگرامر، متحد!

پي ايس

شاگردن سان منهنجي سڌي تعلق کي رڪارڊ ڪرڻ لاءِ، مان 2017 جي هڪ يادگار تصوير ڳنڍي رهيو آهيان ٻن ريڪٽرن سان: پيٽر شارف (ساڄي) ۽ البرٽ خاريسووچ گلموتڊينوف (بائیں).

"منشور سان لاڳاپيل خاصيتن کان پروگرامرز شروع ڪرڻ لاء" يا مون کي زندگي ۾ هن نقطي تي ڪيئن حاصل ڪيو

اهو پروگرام ختم ڪرڻ جي قابل هو گهٽ ۾ گهٽ انهن ڪپڙن لاء! (مذاق)

جو ذريعو: www.habr.com

تبصرو شامل ڪريو