"د اړوندو ځانګړتیاو څخه د پروګرام کونکو پیل کولو لپاره منشور" یا زه څنګه په ژوند کې دې مرحلې ته ورسیدم

زما نن ورځ مقاله د هغه چا څخه په لوړ غږ فکرونه دي چې د برنامه کولو لاره یې نږدې په ناڅاپي ډول اخیستې (که څه هم طبیعي وي).

هو، زه پوهیږم چې زما تجربه یوازې زما تجربه ده، مګر داسې ښکاري چې دا د عمومي رجحان سره ښه سمون لري. برسېره پردې، لاندې تشریح شوي تجربه د ساینسي فعالیتونو په ساحه کې ډیر تړاو لري، مګر هغه څه چې ټوکه نه ده - دا بهر ګټور کیدی شي.

"د اړوندو ځانګړتیاو څخه د پروګرام کونکو پیل کولو لپاره منشور" یا زه څنګه په ژوند کې دې مرحلې ته ورسیدم
سرچینه: https://xkcd.com/664/

په عموم کې ، د پخواني زده کونکي څخه ټولو اوسني زده کونکو ته وقف شوی!

توقعات

کله چې ما په 2014 کې د انفارمیشن ټیکنالوژۍ او مخابراتو سیسټمونو کې د لیسانس سند بشپړ کړ، زه د پروګرام کولو نړۍ په اړه نږدې هیڅ نه پوهیږم. هو، د ډیرو نورو په څیر، ما په خپل لومړي کال کې د "کمپیوټر ساینس" مضمون واخیست - مګر، رب، دا زما په لومړي کال کې و! دا یو ابدیت دی!

په عموم کې ، ما د لیسانس سند څخه په ځانګړي ډول د کوم څه تمه نه درلوده ، او کله چې زه د ماسټرۍ برنامې ته داخل شوم "د مخابراتو او سیګنال پروسس کول" د نوي ټیکنالوژۍ د آلمان - روسیې انسټیټیوټ.

خو بې ګټې...

موږ یوازې دویمه برخه اخیستې وه، او د لومړي څخه هلکان لاهم د لرې آلمان لپاره خپل کڅوړې بسته کوي (انټرنشپ د ماسټرۍ په دوهم کال کې شپږ میاشتې وخت نیسي). په بل عبارت، د نږدی حلقې څخه هیڅوک تر اوسه د اروپایی زده کړو طریقې سره په جدي توګه نه دي مخامخ شوي، او هیڅوک شتون نلري چې د توضیحاتو په اړه پوښتنه وکړي.

زموږ په لومړي کال کې، البته، موږ مختلف ډوله کړنې درلودې، په کوم کې چې موږ معمولا په دیموکراتیک ډول د لیکلو سکریپټونو (په عمده توګه د MATLAB په ژبه کې) او د مختلفو لوړ تخصصي GUIs کارولو (په دې معنی چې د سکریپټونو لیکلو پرته - سمولیشن) تر منځ انتخاب وړاندیز کاوه. د ماډلینګ چاپیریال).

"د اړوندو ځانګړتیاو څخه د پروګرام کونکو پیل کولو لپاره منشور" یا زه څنګه په ژوند کې دې مرحلې ته ورسیدم

اړتیا نشته چې ووایو ، موږ ، د ساینس راتلونکي ماسټران ، زموږ د ځوان حماقت څخه د اور په څیر د کوډ لیکلو څخه ډډه وکړه. دلته، د مثال په توګه، د MathWorks څخه سمولنک دی: دلته بلاکونه دي، دلته اړیکې دي، دلته هر ډول ترتیبات او سویچونه دي.

یو نظر چې د هغه چا لپاره اصلي او د پوهیدو وړ دی چې دمخه یې د سرکټ ډیزاین او سیسټم انجینرۍ کې کار کړی!

"د اړوندو ځانګړتیاو څخه د پروګرام کونکو پیل کولو لپاره منشور" یا زه څنګه په ژوند کې دې مرحلې ته ورسیدم
سرچینه: https://ch.mathworks.com/help/comm/examples/parallel-concatenated-convolutional-coding-turbo-codes.html

نو موږ ته داسې ښکاري ...

حقیقت

د لومړي سمستر یو له عملي کارونو څخه د "موډل کولو او اصلاح کولو میتودونو" موضوع برخې په توګه د OFDM سیګنال ټرانسیور پراختیا وه. نظر خورا بریالی دی: ټیکنالوژي لاهم د هغې د کارولو له امله اړونده او خورا مشهوره ده، د بیلګې په توګه، په Wi-Fi او LTE/LTE-A شبکو کې (د OFDMA په بڼه). دا د ماسټرانو لپاره غوره شی دی چې د مخابراتي سیسټمونو ماډل کولو کې خپل مهارتونه تمرین کړي.

"د اړوندو ځانګړتیاو څخه د پروګرام کونکو پیل کولو لپاره منشور" یا زه څنګه په ژوند کې دې مرحلې ته ورسیدم

او اوس موږ ته د تخنیکي مشخصاتو ډیری اختیارونه د څرګند غیر عملي چوکاټ پیرامیټرو سره راکړل شوي (تر څو په انټرنیټ کې د حل په لټه کې نه شو) ، او موږ دمخه ذکر شوي سمولینک باندې ګوزار کوو ... او موږ په سر باندې د چای پاټ سره ووهلو. په حقیقت کې:

  • هر بلاک د ډیری نامعلوم پیرامیټونو څخه ډک دی، کوم چې د خولۍ په څنډه کې د بدلون لپاره ویره لري.
  • د شمیرو سره لاسوهنه باید ترسره شي، داسې ښکاري، ساده، مګر تاسو لاهم باید ګډوډ کړئ، خدای مه کړه.
  • د کاتډرل ماشینونه د GUI د سخت کارونې څخه د پام وړ سست شوي ، حتی د موجود بلاکونو کتابتونونو له لارې د سرف کولو په مرحله کې.
  • په کور کې د یو څه پای ته رسولو لپاره، تاسو اړتیا لرئ چې ورته سمولنک ولرئ. او، په حقیقت کې، هیڅ بدیل.

هو، په پای کې موږ، البته، پروژه بشپړه کړه، مګر موږ دا د راحت په لوړ تنفس سره بشپړه کړه.

یو څه وخت تېر شو، او موږ د ماسټرۍ د لومړي کال پای ته ورسیدو. د GUIs په کارولو سره د کور کار کولو مقدار د آلمان د مضامینو د تناسب په زیاتوالي سره په متناسب ډول راټیټ شو، که څه هم دا لاهم د تمثیل بدلون ته نه و رسیدلی. زموږ څخه ډیری، زما په شمول، د جوړولو لپاره زموږ د پام وړ پراخوالی باندې بریالي شوي، زموږ په ساینسي پروژو کې (که څه هم د وسیلې بکسونو په بڼه کې)، او داسې ښکاري چې پیژندل شوي سمولنک نه کارول کیږي.

زموږ د شکونو نقطه د دوهم کال د زده کونکو څخه یوه جمله وه (دوی پدې وخت کې روسیې ته راستانه شوي وو):

  • هېر کړئ، لږترلږه د انټرنشپ مودې لپاره، د سمیلنک، MathCad او نورو LabView په اړه - د غونډۍ په اوږدو کې هرڅه په MATLAB کې لیکل شوي، پخپله MatLab یا د هغې وړیا "نسخه" Octave په کارولو سره.

بیان یو څه ریښتیا وګرځید: په ایلمیناو کې، د وسایلو د انتخاب په اړه شخړه هم په بشپړه توګه حل نه شوه. ریښتیا، انتخاب اکثرا د 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

"خوشحاله!" - ما په اطمینان سره فکر وکړ او لپ ټاپ مې بند کړ. ما د هر څه کولو لپاره څو ساعته وخت ونیو: د کوډ لیکلو په شمول، د متلاب ځینې دندې زده کول او د ریاضيیک چلونو له لارې فکر کول.

بیا ما کومې پایلې ترلاسه کړې؟

فرعي:

  • د لیکلو کوډ خوندور او د شعر سره ورته دی!
  • سکریپټینګ د مخابراتو او سیګنال پروسس کولو ساحې لپاره ترټولو اسانه څیړنې میتود دی.

هدف:

  • د تپ څخه د مرغیو ډزې کولو ته اړتیا نشته (مګر دا ډول تعلیمي هدف البته د ارزښت وړ وي): د سمولنک په کارولو سره ، موږ د پیچلي وسیلې سره د ساده ستونزې حل کولو ته غاړه کیښوده.
  • GUI ښه دی، مګر په دې پوهیدل چې "د هود لاندې" څه دي ښه دي.

او اوس، د زده کونکي څخه لرې، زه غواړم چې د زده کونکو ټولنې ته لاندې ووایم:

  • د دې لپاره لاړ شه!

د کوډ لیکلو هڅه وکړئ، حتی که دا په لومړي سر کې خراب وي. د پروګرام کولو سره، د نورو فعالیتونو په څیر، ترټولو سخته برخه پیل دی. او دا غوره ده چې دمخه پیل کړئ: که تاسو ساینس پوه یاست یا حتی یوازې تخنیکي یاست ، ژر یا وروسته به تاسو دې مهارت ته اړتیا ولرئ.

  • غوښتنه!

د ښوونکو او څارونکو څخه د پرمختللو طریقو او وسایلو غوښتنه وکړئ. که دا ممکنه وي، البته ...

  • جوړ کړئ!

که چیرې د تعلیمي برنامې په چوکاټ کې نه وي ، نو بل چیرې دا غوره ده چې د پیل کونکي ټول زخمونه لرې کړئ؟ خپل مهارتونه جوړ او ښه کړئ - یو ځل بیا، څومره ژر چې تاسو پیل کړئ، ښه.

د ټولو هیوادونو لیوالتیا لرونکي پروګرام کونکي، متحد شئ!

PS

د زده کونکو سره زما د مستقیم اړیکو د ثبتولو لپاره، زه د 2017 یو یادګار عکس د دوو ریکټرانو سره ضمیمه کوم: پیټر شارف (ښي خوا ته) او البرټ خیروسوویچ ګیلمتدینوف (کیڼ اړخ ته).

"د اړوندو ځانګړتیاو څخه د پروګرام کونکو پیل کولو لپاره منشور" یا زه څنګه په ژوند کې دې مرحلې ته ورسیدم

لږترلږه د دې جامو لپاره دا د برنامه پای ته رسولو ارزښت درلود! (ټوکې)

سرچینه: www.habr.com

Add a comment