ProHoster > وبلاگ > اخبار اینترنتی > "مانیفست برای برنامه نویسان مبتدی از تخصص های مرتبط" یا اینکه چگونه به این نقطه از زندگی رسیدم
"مانیفست برای برنامه نویسان مبتدی از تخصص های مرتبط" یا اینکه چگونه به این نقطه از زندگی رسیدم
مقاله امروز من افکار بلند شخصی است که تقریباً به طور تصادفی (البته به طور طبیعی) مسیر برنامه نویسی را در پیش گرفته است.
بله، من درک می کنم که تجربه من فقط تجربه من است، اما به نظر من به خوبی با روند کلی مطابقت دارد. علاوه بر این، تجربه شرح داده شده در زیر بیشتر به زمینه فعالیت علمی مربوط می شود، اما آنچه که جهنم شوخی نیست - می تواند در خارج مفید باشد.
به طور کلی تقدیم به تمام دانش آموزان فعلی از یک دانشجوی سابق!
انتظارات
زمانی که در سال 2014 مدرک لیسانس خود را در زمینه فناوری اطلاعات و سیستم های ارتباطی به پایان رساندم، تقریباً هیچ چیز در مورد دنیای برنامه نویسی نمی دانستم. بله، مانند بسیاری دیگر، من در سال اول درس "علوم کامپیوتر" را خواندم - اما، پروردگارا، در سال اول من بود! این یک ابدیت بوده است!
به طور کلی، من هیچ چیز متفاوتی از لیسانس و زمانی که وارد برنامه کارشناسی ارشد شدم، انتظار نداشتم. "ارتباطات و پردازش سیگنال" مؤسسه فن آوری های جدید آلمان و روسیه.
اما بیهوده...
ما فقط پذیرش دوم بودیم و بچه های اولی هنوز در حال بستن چمدان هایشان برای آلمان دوردست بودند (کارآموزی در سال دوم کارشناسی ارشد شش ماه طول می کشد). به عبارت دیگر، هیچ کس از حلقه های نزدیک هنوز به طور جدی با روش های آموزش اروپایی برخورد نکرده بود و کسی نبود که در مورد جزئیات بپرسد.
البته در سال اول ما انواع مختلفی از شیوهها داشتیم که معمولاً به صورت دموکراتیک بین نوشتن اسکریپتها (عمدتاً به زبان متلب) و استفاده از رابطهای کاربری گرافیکی بسیار تخصصی مختلف (به این معنا که بدون نوشتن اسکریپت - شبیهسازی انتخاب میشد، انتخاب میشد. محیط های مدل سازی).
ناگفته نماند که ما استادان علوم آینده از روی حماقت جوانی از نوشتن رمز مانند آتش پرهیز کردیم. به عنوان مثال، Simulink از MathWorks: اینجا بلوک ها، اینجا اتصالات، اینجا انواع تنظیمات و سوئیچ ها هستند.
دیدگاهی که برای فردی که قبلا در زمینه طراحی مدار و مهندسی سیستم کار کرده است بومی و قابل درک است!
یکی از کارهای عملی ترم اول توسعه یک فرستنده سیگنال OFDM به عنوان بخشی از موضوع "روش های مدل سازی و بهینه سازی" بود. این ایده بسیار موفق است: این فناوری به دلیل استفاده از آن، به عنوان مثال، در شبکه های Wi-Fi و LTE/LTE-A (به شکل OFDMA) همچنان مرتبط و کاملاً محبوب است. این بهترین چیز برای استادان برای تمرین مهارت های خود در مدل سازی سیستم های مخابراتی است.
و اکنون چندین گزینه از مشخصات فنی با پارامترهای قاب آشکارا غیرعملی به ما داده می شود (برای اینکه به دنبال راه حل در اینترنت نباشیم) و ما به سیمولینک که قبلاً ذکر شد می کوبیم ... و با قوری به سرمان ضربه می زنیم. واقعیت:
هر بلوک مملو از بسیاری از پارامترهای ناشناخته است که تغییر آنها در زمان سقوط یک کلاه ترسناک است.
دستکاری با اعداد باید انجام شود، به نظر می رسد ساده است، اما شما هنوز هم باید سر و صدا کنید، خدای ناکرده.
ماشینهای کلیسای جامع حتی در مرحله گشت و گذار در کتابخانههای بلوکهای موجود، به طور قابل توجهی از استفاده دیوانهوار از رابط کاربری گرافیکی کند میشوند.
برای تمام کردن کاری در خانه، باید همان سیمولینک را داشته باشید. و در واقع هیچ جایگزینی وجود ندارد.
بله، در نهایت ما، البته، پروژه را به پایان رساندیم، اما آن را با دم بلندی از آرامش به پایان رساندیم.
مدتی گذشت و به پایان سال اول کارشناسی ارشد رسیدیم. میزان تکالیف با استفاده از رابط کاربری گرافیکی به تناسب با افزایش نسبت سوژه های آلمانی شروع به کاهش کرد، اگرچه هنوز به نقطه تغییر پارادایم نرسیده بود. بسیاری از ما، از جمله من، با غلبه بر دامنه قابل توجه خود برای ساختن، بیشتر و بیشتر از 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
اکنون شاخصهای نمادهای اطلاعاتی را تعیین میکنیم و این فرض را میپذیریم که سیگنالهای آزمایشی باید حتماً قبل و/یا بعد از صفر بروند:
بیایید شاخص های صفر را به این اضافه کنیم و مرتب کنیم:
%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);
حالا بیایید سیگنال های خلبان را درک کنیم.
ما یک الگو داریم (متغیر خلبانانو فرض کنید میخواهیم خلبانهایی از این الگو به صورت متوالی در کادر ما قرار داده شوند. البته این کار را می توان در یک حلقه انجام داد. یا می توانید با ماتریس ها کمی مشکل بازی کنید - خوشبختانه متلب به شما این امکان را می دهد که این کار را با راحتی کافی انجام دهید.
ابتدا، بیایید تعیین کنیم که چه تعداد از این الگوها به طور کامل در قاب قرار می گیرند:
pilots_len_psudo = floor(N_pil/length(pilots));
در مرحله بعد، یک برداری را تشکیل می دهیم که از الگوهای ما تشکیل شده است:
و ما یک بردار کوچک را تعریف می کنیم که فقط یک قطعه از الگو را شامل می شود - "دم" که کاملاً در قاب قرار نمی گیرد:
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
"سعادت!" - با رضایت فکر کردم و لپ تاپ رو بستم. چند ساعت طول کشید تا همه کارها را انجام دهم: از جمله نوشتن کد، یادگیری برخی از توابع Matlab و فکر کردن از طریق ترفندهای ریاضی.
آن موقع چه نتیجه ای گرفتم؟
ذهنی:
رمز نوشتن دلنشین و شبیه شعر است!
اسکریپت راحت ترین روش تحقیق برای حوزه ارتباطات و پردازش سیگنال است.
هدف، واقعگرایانه:
نیازی به شلیک گنجشک ها از توپ نیست (مگر اینکه چنین هدف آموزشی ارزشش را داشته باشد): با استفاده از Simulink، ما حل یک مشکل ساده را با یک ابزار پیچیده انجام دادیم.
رابط کاربری گرافیکی خوب است، اما درک آنچه در "زیر هود" موجود است بهتر است.
و حالا که دور از دانشجویی هستم، می خواهم این را به برادر دانشجویی بگویم:
جرات کن
سعی کنید کد بنویسید، حتی اگر در ابتدا بد باشد. با برنامه نویسی، مانند هر فعالیت دیگری، سخت ترین قسمت شروع کار است. و بهتر است زودتر شروع کنید: اگر یک دانشمند یا حتی یک متخصص فنی هستید، دیر یا زود به این مهارت نیاز خواهید داشت.
تقاضا!
رویکردها و ابزارهای مترقی را از معلمان و سرپرستان بخواهید. البته اگر این امکان وجود داشته باشد ...
ايجاد كردن!
اگر در چارچوب یک برنامه آموزشی نباشد، کجای دیگر بهتر است که همه زخم های یک مبتدی را پشت سر بگذاریم؟ مهارت های خود را ایجاد و تقویت کنید - دوباره، هر چه زودتر شروع کنید، بهتر است.
برنامه نویسان مشتاق از همه کشورها، متحد شوید!
PS
برای ثبت رابطه مستقیمم با دانشجویان، عکسی به یاد ماندنی از سال 2017 با دو ناظم پیتر شارف (راست) و آلبرت خاریسوویچ گیلموتدینوف (سمت چپ) ضمیمه می کنم.
لااقل برای این لباس ها ارزش تمام شدن برنامه را داشت! (شوخی کردن)