دانشگاه صنعتی شریف
دانشکده مهندسی برق
پایان نامه کارشناسی
گرایش الکترونیک
عنوان:
پیاده سازی شبیه ساز برای سیستم شبکه
چند کاربره نوری بی سیم CDMA
نگارش:
فرشید فرحت
استاد راهنما:
آقای دکتر پاکروان
تابستان 1384
دانشگاه صنعتی شریف
دانشکده مهندسی برق
پایان نامه کارشناسی
گرایش الکترونیک
عنوان:
پیاده سازی شبیه ساز برای سیستم شبکه
چند کاربره نوری بی سیم CDMA
نگارش:
فرشید فرحت
استاد راهنما:
آقای دکتر پاکروان
تابستان 1384
تقدیم به
پدر و مادر عزیزم که بعد از خداوند بزرگ (که تمام هستی از اوست)، راهنما و همراه همیشگی من در عرصه های زندگی بوده و هستند، همچنین خواهر مهربانم که مرا در تکمیل این مهم کمک کرد.
با تشکر و سپاسگذاری از
آقای دکتر پاکروان، استاد راهنمای اینجانب، به خاطر بهره مندی از تجربیات و راهنماییهایشان، آقای مهندس غفاری به دلیل استفاده از آگاهیهایشان در زمینه شبکه های بی سیم نوری، آقای مهندس امین زاده به عنوان همکار و راهنما و دیگر دوستانی که مرا در تکمیل این مهم یاری کردند.
چکیده
سیستم شبکه چندکاربره بی سیم CDMAی نوری از یک تعداد فرستنده و گیرنده تشکیل شده است. در این شبکه به هر کاربر (فرستنده یا گیرنده) یک کد متعامد نوری به عنوان یک کد منحصر به فرد خاص تخصیص داده می شود که به وسیله آن می تواند با کاربر (گیرنده یا فرستنده) هم کد خود مرتبط شده و اطلاعات خود را به آن ارسال یا از آن دریافت نماید. در این پروژه به طراحی و پیاده سازی یک شبیه ساز شبکه چندکاربره بی سیم CDMAی نوری پرداخته شده است. این شبیه ساز شبکه بسیاری از محدودیتهایی که در عمل با آن روبرو می شویم مانند تعداد کاربران را از میان برداشته است. از نظر تئوری این پروژه، محدودیتی که روی تعداد کاربران است با توجه به تعداد کدهای متعامد نوری تولید شده می باشد. مدلهای مختلفی از این شبکه ها را می توان با استفاده از این پروژه شبیه سازی نمود و پارامترهای مهم شبکه ای را با آن تجزیه و تحلیل نمود. به دلیل استفاده از تکنیک CDMA نرخ ارسال و دریافت کاربران همگی باید به یک نسبت باشد لذا کلاک تمام اجزای سیستم همزمان جلو می رود.
کلمات کلیدی
Optical CDMA Network Simulator (OCNS)
Optical Orthogonal Code (OOC)
Fiber-Optic CDMA
Auto-Correlation
Cross-Correlation
Up-Link
Down-Link
Acquisition
Simple Serial Search
Matched Filter
Tracking
FIR Filter
Simulation, Transmitter, Receiver, and Medium Profile
فهرست مطالب
فصل 0 مقدمه 4
فصل 1 معرفی سیستم شبکه CDMAی نوری 6
بخش 1-1 سیستم مخابراتی CDMAی نوری 6
بخش 1-2 سنكرونسازي در سيستمهاي OPTICAL CDMA 10
فصل 2 توضیح در مورد طرز کار با نرم افزار OCNS 18
فصل 3 معرفی و توضیح اجمالی کلاسهای تعریف شده در پروژه 43
فصل 4 توضیح جزئی تر در رابطه با متغیرها و توابع مهم برخی کلاسها 58
فصل 5 جمع بندی و پیشنهادات 59
فهرست شکلها
شکل 1 1 یک سیستم مخابرات نوری با یک ENCODER و DECODER نوری [1] 7
شکل 1 2 بیان یک شبکه CDMA نوری با N کاربر [1] 7
شکل 1 3 شمای کلی UPLINK 9
شکل 1 4 شمای کلی DOWNLINK 10
شکل 1 5 سيستم سنكرون ساز جستجوي سري 13
شکل 1 6 شاخة متصل كنندة گرة I به گرة 1+I 14
شکل 1 7 مدل زنجير ماركوف 15
شکل 2 1 پنجره اصلی برنامه در محیط WINDOWS 19
شکل 2 9 دیدن PROFILEی اجزای سیستم از طریق TABی PROFILE 23
شکل 2 10 دیدن PROFILEی اجزای سیستم از طریق کلیک BUTTONاش 23
شکل 2 11 نمونه یک SIMULATION PROFILE DIALOGی شماره گذاری شده 24
شکل 2 12 نمونه یک SIMULATION PROFILE DIALOGی پرشده 26
شکل 2 13 نمونه یک TRANSMITTER PROFILE DIALOGی شماره گذاری شده 27
شکل 2 14 نمونه یک TRANSMITTER PROFILE DIALOGی پرشده 30
شکل 2 15 نمونه یک RECEIVER PROFILE DIALOGی شماره گذاری شده 31
شکل 2 16 نمونه یک TRANSMITTER PROFILE DIALOGی پرشده 34
شکل 2 17 نمونه یک DATA DEFINITION DIALOGی شماره گذاری شده 35
شکل 2 23 نمونه یک دیالوگ MEDIUM PROFILEی شماره گذاری شده 37
شکل 2 24 شمای کلی از طریقه پرکردن یک دیالوگ MEDIUM PROFILE 38
شکل 2 25 نمونه یک FIR PROFILEی شماره گذاری شده 39
شکل 2 27 نمونه یک دیالوگ SIMSHOWی شماره گذاری شده 40
شکل 2 28 نمونه یک دیالوگ SIMSHOWی در حین عمل شبیه سازی 42
فهرست فرمولها
فرمول 1 1 7
فرمول 1 2 8
فرمول 1 3 8
فرمول 1 4 11
فرمول 1 5 11
فرمول 1 6 11
فرمول 1 7 11
فرمول 1 8 12
فرمول 1 9 14
فرمول 1 10 15
فرمول 1 11 15
فرمول 1 12 15
فرمول 1 13 16
فرمول 1 14 16
فصل 0 مقدمه
انسان همواره به دنبال توسعه و پیشرفت در تمام شاخه های علوم بوده است. در قدیم اختراعات و اکتشافات توسط انسانهای هوشمند و نابغه به تنهایی صورت می گرفت در نتیجه نرخ رشد علمی بشر و ترویج آن به کندی صورت می گرفت. ولی چنانچه گفته می شود علم بشر در چند دهه اخیر به موهبت سهولت ارتباطات و کار گروهی چند برابر شده است. اما ایده ها و خلاقیت های علمی هنوز هم جایگاه ویژه ای در میان دانش آموختگان دارد و ممالک پیشرفته خواهان و طلبه اصلی آنها هستند.
گفته می شود که هر ایده علمی همزمان در 25 جای کره زمین به فکر افراد خطور می کند، چنانکه ایرانیان نیز در این میان سهم عمده ای دارند، ولی تنها آن تفکری سریعتر به نتیجه کامل می رسد که گروهی که روی آن کار می کنند از امکانات کافی تر و پیشرفته تری برخوردار باشند، چنانچه ایرانیان از این حیث سهم بسیار کمی دارند!
در راستای همین پیشرفتها می توان به پروژه ای که تحت عنوان Optical CDMA Network توسط گروهی با نظارت آقای دکتر صالحی انجام گرفته است، اشاره کرد. بعد از اتمام پروژه Optical CDMA Network برای معرفی و شبیه سازی روند عملکرد آن پروژه ای تحت عنوان Optical CDMA Network Simulator یا همان شبیه ساز سیستم شبکه CDMAی نوری توسط آقای دکتر پاکروان، استاد راهنمای بنده، تعریف شد و برای پیاده سازی به عنوان پروژه کارشناسی به بنده پیشنهاد شد.
تحقیقات تئوریک این پروژه از ابتدای سال تحصیلی 83-84 به صورت گسسته توسط آقای امین زاده و بنده انجام می گرفت و در نهایت بر حسب ضرورت و صلاحدید استاد راهنما بعد از عید سال 1384 به صورت انفرادی شاخه ای از کار با عنوان OCNS بر عهده من گذاشته شد.
هدف از انجام این پروژه طراحی و پیاده سازی و معرفی یک نرم افزار شبیه ساز سیستم شبکه Optical CDMA میباشد که قادر است یک سیستم شبکه چند کاربره نوری CDMA را شبیه سازی کرده و پارامترهای مهم شبکه ای آن را تجزیه و تحلیل نماید.
پروژه با زبان برنامه نویسی Visual C++ در محیط Windows نوشته شده است که تمامی فایلها و source code در CDی ضمیمه پروژه موجود می باشد. این پروژه بر مبنای نحوه کارکرد سیستم شبکه CDMAی نوری پایه ریزی شده است ولی برای ارتقای آن می توان پیشنهادات ارائه شده در رابطه با آن را در آینده عملی ساخت.
پروژه به دو صورت Soft-Copy که شامل source code و فایل .exeی نرم افزار برنامه و commentهای آن می باشد، و Hard-Copy که همین متن و توضیحات مربوط به نرم افزار می باشد، در اختیار خوانندگان قرار گرفته است.
امید است که مورد عنایت و بهره وری شما خواننده عزیز قرار بگیرد.
فرشید فرحت
تابستان 1384
فصل 1 معرفی سیستم شبکه CDMA ی نوری
با توجه به پیشرفت چشمگیری که در طراحی و تولید فیبرهای نوری تک مد طی چند دهه اخیر انجام گرفته است، صنعت مخابرات به یک محیط انتقال بسیار پرظرفیت جهت انتقال اطلاعات مجهز شده است. با علم به مزایایی که سیستم های دسترسی چندگانه در فضای کد در شبکه های مخابراتی در اختیار ما قرار می دهند که از آن جمله می توان به سادگی پیاده سازی و عدم نیاز به همزمانی کاربران مختلف در شبکه یا مدیریت زمانی که در شبکه های متداول مورد نیاز است، اشاره کرد و همچنین در کنار پیدایش تکنولوژی فیبر نوری، تکنیک هایی برای استفاده مناسب از پهنای باند بسیار زیاد این محیط انتقال ارائه گردید که از آن جمله معرفی کدهای متعامد نوری در سال 1989 برای استفاده در سیستم های دسترسی چندگانه فیبر نوری در فضای کد می باشد[1].
این روش، اطلاعات با نرخ پایین تولید شده توسط منابع الکترونیک را به دنباله پالس های نوری با نرخ بسیار زیاد تبدیل می کند و به این ترتیب سیگنال بیت های اطلاعات که پهنای باند نسبتا کمی دارد به یک سیگنال با پهنای باند بسیار زیاد تبدیل می شود ولی در عوض به این وسیله به یک شبکه با دسترسی تصادفی و آسنکرون از کانال توسط کاربران می رسیم.
چون فیبر نوری پهنای باند بسیار زیادی دارد، در صورتی که بتوان encoderها و decoderها که به ترتیب در فرستنده وگیرنده وظیفه نگاشت بیت های داده به کدهای OOC را بر عهده دارند به صورت نوری پیاده سازی کرد، روش فوق برای دسترسی چندگانه بسیار کارآمد خواهد بود.
بخش 1-1 سیستم مخابراتی CDMAی نوری
یک سیستم مخابراتی FO-CDMA مطابق شکل (1-1) شامل یک منبع اطلاعات الکترونیکی یا نوری است که یک لیزر یا LED را مدوله می کند. قبل از آن یک بلوک encoder نوری بیت های منبع را به دنباله کدهای با نرخ بسیار بالا تبدیل می کند. خروجی لیزر که با کدهای متعامد نوری مدوله شده و نرخ بسیار بالایی دارد وارد فیبر نوری شده و در آن سوی فیبر در گیرنده یک decoder نوری با دریافت سیگنال نوری و با علم به دنباله کد فرستنده، همبستگی سیگنال دریافتی را با کد فرستنده محاسبه کرده و به Data Recovery برای تشخیص یک یا صفر بودن بیتها تحویل می دهد.
شکل 1 1 یک سیستم مخابرات نوری با یک encoder و decoder نوری [1]
در یک سیستم مخابراتی FO-CDMA مطابق با آنچه در شکل (1-2) نمایش داده شده است N کاربر به صورت آسنکرون و همزمان می خواهند از کانال استفاده کنند. چنانچه کاربر k ام بخواهد برای کاربر j ام اطلاعات را ارسال کند، با دانستن کد کاربر j ام اطلاعات مربوطه را با نگاشت به آن کد بر کانال مشترک بین کاربران ارسال می کند. به این ترتیب برای برقراری یک ارتباط سالم در حضور کاربران دیگر شبکه، کدهای استفاده شده در این شبکه باید دو خاصیت ویژه هر سیستم CDMA که همان خاصیت خودهمبستگی و وابستگی بین کدها است را برقرار کنند.
شکل 1 2بیان یک شبکه CDMA نوری با N کاربر [1]
برای هر دو کد به طول F در این شبکه و سیگنال های زمانی و را به صورت زیر تعریف می کنیم: [1]
فرمول 1 1
پارامتر n در مجموع های بالا به صورت mod(F) اضافه می شود و به این ترتیب سیگنالهای و پریودیک با پریود خواهند شد.
خاصیت خودهمبستگی (Auto correlation Property):
این خاصیت بیان می دارد که هر کد باید بر شیفت یافته های خود عمود باشد. عمود بودن به صورت زیر تعریف می شود. [1]
فرمول 1 2
همانگونه که خواهیم دید، این خاصیت در سنکرون سازی مفید خواهد بود.
خاصیت وابستگی (Cross correlation Property):
این خاصیت بیان می دارد که هر کد باید بر کد های کاربران دیگر و همچنین بر شیفت یافته های آنها عمود باشد. عمود بودن به صورت زیر تعریف می شود. [1]
فرمول 1 3
این خاصیت در آشکارسازی و جدا نمودن سیگنال کاربر دلخواه از سیگنال تداخلی بسیار مفید خواهد بود که در ادامه با آن برخورد خواهیم داشت.
چنانچه و را صفر انتخاب کنیم عمود بودن به صورت کامل و دقیق برقرار می گردد. این امر در سیستم های CDMA غیر نوری (رادیویی) می تواند برقرار شود چرا که سیگنالهای موجود در کانال می توانند منفی باشند و به این دلیل از دنباله های و به عنوان کد می توان استفاده کرد. در سیستم های نوری همانگونه که قبلا بیان شد سیگنالها شدت نور خروجی لیزر یا LED را مدوله می کنند و به این ترتیب سیگنال های کانال نوری نمی توانند منفی باشند. این موضوع یک محدودیت بسیار بزرگ در انتخاب کدهای سیستم های CDMA نوری می گذارد و باعث می شود که حاصل خودهمبستگی و وابستگی کدها به هیچ وجه صفر نشود و مقداری مثبت بگیرد. به این ترتیب در این کدها متعامد بودن با و که مثبت هستند معنی پیدا می کند.
یک مجموعه C از دنباله های صفر و یک (به هر یک از اعضای صفر یا یک در دنباله یک chip گفته می شود.) با پارامترهای ، کد متعامد نوری (OOC) نامیده می شود، چنانچه اعضای آن دنباله هائی به طول F و وزن k و محدودیت خودهمبستگی و وابستگی با پارامترهای و باشند (k تعداد یک های هر دنباله در مجموعه C است).
نکته ای که باید به آن توجه کرد این است که کدهای متعامد نوری مطابق با آنچه که شرح آن گذشت برای سیستم های فیبر نوری طراحی شدند ولی میتوان از آنها در سیستم های بی سیم نوری هم استفاده کرد، با این تفاوت که در شکل (1-2) به جای آن که سیگنال کاربران مختلف از طریق یک Star-Coupler با هم مخلوط شوند در حوزه فضا با هم جمع می شوند. در پروژه حاضر نیز از تکنیک CDMAی نوری براساس کدهای متعامد نوری جهت طراحی یک شبیه ساز شبکه محلی بی سیم نوری استفاده شده است.
شکل (1-3) شمای کلی uplink را در این شبکه نشان می دهد. بیت های اطلاعاتی هر یک از کاربران وارد مدار فرستنده ميشود. مدار فرستنده كه بصورت ديجيتال روي يك بُرد FPGA پيادهسازي ميگردد، اطلاعات دريافتي را در كد مربوطه ضرب كرده، پس از اضافه كردن بيتهاي سربار (بمنظور سنكرونسازي) ديتاي كد شده را به مدار درايور LED اعمال ميكند. اطلاعات مذكور توسط LED به سطح گيرنده ایستگاه مرکزی تابانده ميشود. سيگنالي كه توسط گيرنده ایستگاه مرکزی دريافت ميشود شامل اطلاعات تمامي فرستندهها است. حال گيرنده براي بازيابي اطلاعات مربوط به يك فرستنده خاص، ديتاي دريافتي را در كد مربوط به آن فرستنده ضرب ميكند. بدليل تعامد كدها، اطلاعات مربوط به ساير كاربران حذف شده و ديتاي مورد نظر آشكارسازي ميگردد.
شکل 1 3 شمای کلی uplink
شکل (1-4) شمای کلی downlink را نشان می دهد. بیت های اطلاعاتی که قرار است از ایستگاه مرکزی به هر یک از کاربران ارسال شود وارد مدار فرستنده ایستگاه مرکزی شده و پس از اضافه کردن بیت های سربار به هر یک از آنها، و ضرب کردن هر یک در کدهای متعامد نوری مربوطه وارد مدار درایور LED شده تا توان کافی برای مدولاسیون LED را کسب کنند، گیرنده هر یک از کاربران مجموع این سیگنال ها را دریافت کرده، آنها را در کد مخصوص خود ضرب می کنند و با توجه به خاصیت تعامد کدها، اطلاعات کاربران دیگر حذف شده و اطلاعات مربوط به خود را آشکارسازی می کند.
شکل 1 4 شمای کلی Downlink
بخش 1-2 سنكرونسازي در سيستمهاي Optical CDMA
در سيستم های مخابراتی جهت آشکار سازی صحيح سيگنال دريافتی، می بايست کلاک فرستنده و گيرنده همزمان باشند. به بيان ساده تر دانستن لحظات مهم در سيگنال مدوله شده، نقطه آغاز و پايان هر چيپ، در عمل آشکار سازی حياتی است. اين همزمانی در سيستم های چندگانه با تقسيم کد، با به حداقل رساندن اختلاف فاز کد ارسال شده توسط فرستنده و مدل شيفت يافته کد ارسال شده در گيرنده حاصل می شود. به اين فرآيند همزمان سازی گيرنده و فرستنده می گويند.
عمل همزمان سازی به دو قسمت عمده تقسيم می شود که در اين گزارش به بررسی يک الگوريتم در هريک از دو قسمت می پردازيم. مرحله اول همزمان سازی ره يابی است که در اين قسمت اختلاف فاز دو سيگنال به مقداری کمتر از نصف يک چيپ ميرسد. کد دريافت شده در گيرنده شامل F چيپ می باشد که حداکثر اختلاف فاز دو سيگنال در لحظه اول F-1 است. در قسمت دوم اين اختلاف فاز به حداقل مقدار ممکن با توجه به دقت مدار کاهش می يابد. اين قسمت رد گيری نام دارد. در گيرنده مدار رهياب در لحظه اول فعال شده و سپس بعد از انجام فعاليت خود از مدار خارج می شود اما مدار ردياب برای حذف تغييرات جزيی اختلاف فاز همواره در گيرنده فعال است. در صورت افزايش اختلاف فاز از مقدار نصف يک چيپ و در نتيجه عدم توانايی مدار ردياب در کاهش اختلاف فاز (به عبارت ديگر عدم تجاوز مقدار همبستگی از حد آستانه موجود در مدار ردياب) مدار رهياب دوباره وارد عمل می شود تا اين اختلاف فاز را به نصف يک چيپ کاهش دهد. در ادامه به بررسی اجمالی دو مرحله فوق می پردازيم.
١) رهيابي توسط جستجوي سري (Serial Search Acquisition)
- مدل سيستم:
ساختار سيستم دستيابي چندگانه با تقسيم كد با استفاده از كدهاي OOC در نمودار شكل 1 نشان داده شده است. در اين شكل (r(t سيگنال دريافتي دستيابي چندگانة نوري است:
فرمول 1 4
تعداد كل كاربران فعال، N، در سيستم و تاخير وابسته به كاربر k ام و T طول بيت ميباشد. (t) سيگنال كاربر k ام است كه به صورت زير نشان داده مي شود:
فرمول 1 5
براي مدولاسيون OOK ، i امين بيت كاربر K ام است و كد OOC اين كاربر است كه بصورت زير تعريف مي شود:
فرمول 1 6
طول چيپ مي باشد يعني ، يك پالس مستطيلي است كه بدين صورت نشان داده مي شود:
فرمول 1 7
با هر كد نمونه OOC كاربر K ام است. كدهاي OOC با طول F، وزن K، و مقادير خودهمبستگي و دگرهمبستگي با مقدار ماكزيمم يك يعني (1= ,1= ) در نظر گرفته مي شود. تأخير هر كاربر يعني مي تواند بصورت ديگري با عدد صحيح كه تعداد چيپها و باقيماندة حقيقي است نشان داده شوند، كه بدين صورت تعريف مي شوند:
فرمول 1 8
;
در اين رابطه طول چيپ را نشان مي دهد.
- الگوريتم سنكرون سازي در جستجوي سري:
در شکل (131-5)، الگوريتم سنكرون ساز جستجوي سري نشان داده شده است. در ابتدا قبل از انتقال اطلاعات بين فرستنده و گيرندة kام دنبالة آموزشي كاربر مورد نظر به گيرندة كاربر k ام فرستاده ميشود تا عمل همزمان سازي صورت گيرد و سپس اطلاعات اصلي فرستاده مي شود. وظيفة سيستم سنكرون ساز گيرنده ابتدا تطابق بين دنبالة آموزشي با كد OOC محلي مي باشد كه تأخير بين اين دو به صورت تعريف مي شود.
اگر تداخل دستيابي چندگانه وجود نداشته باشد با توجه به خاصيت دگرهمبستگي كدهاي OOC خروجي انتگرالگير (همبستگي نگار) مي تواند مقداري بين صفر تا K پالس داشته باشد. زمانيكه كد OOC مولد محلي با كد OOC دريافتي منطبق نشود ( )، خروجي سيستم همبستگي نگار مقداري بين صفر تا حداكثر يك پالس است و سيستم سنكرون ساز گيرنده بايد به جستجو ادامه دهد. اما اگر تفاوت زماني بين كد OOC دريافتي و كد مولد محلي نصف طول چيپ باشد دو كد بر هم منطبق شده ( ) و در خروجي همبستگي نگار 2/K تا حداكثر K پالس وجود خواهد داشت. براي جلوگيري از ناپديد شدن شيفت صحيح، سطح آستانه ميتواند بين يك تا 2/K پالس انتخاب شود اما اگر تداخل دستيابي چندگانه وجود داشته باشد مطالب فوق ديگر صحيح نيست.
براي يك شيفت انتخاب شده، خروجي انتگرالگير با يك سطح آستانة از پيش تعيين شده مقايسه مي شود. اگر خروجي بزرگتر از مقدار آستانه باشد پس سيستم سنكرون ساز به مود تحت بررسي خواهد رفت (مود تحت بررسي نمونه كد OOCی محلي را شيفت نمي دهد) وگرنه نمونه كد OOCی محلي به مقدار يك چيپ شيفت داده شده و دوباره خروجي چك مي شود.
زمان لازم براي چك كردن حالت درست يا نادرست هر كدام از شيفتها زمان اقامت ناميده مي شود. به خاطر خاصيت خودهمبستگي كدهاي OOC زمان اقامت سيستم T، بايد حداقل يك بيت يا چندين طول بيت باشد، .
تداخل دستيابي چندگانه ممكن است باعث شود كه خروجي براي برخي از شيفتهاي زماني اشتباه، از سطح آستانه بيشتر شود اين حالت اعلام اشتباه ناميده مي شود. آشكار سازي اعلام اشتباهات (FA) از حالت شيفت صحيح وظيفة مود تحت بررسي در سيستمهاي سنكرون ساز است. مقدار L تعداد بيتهائي است كه سيستم نياز دارد تا يك اعلام اشتباه را تشخيص داده و مجدداً به حلقة جستجو باز گردد. اين زمان، زمان جريمه ناميده مي شود. بنابراين هرگاه اعلام اشتباه وجود داشته باشد، به مقدار LT زمان براي جبران اعلام اشتباه و برگشتن به ادامة جستجو نياز داريم.
شکل 1 5 سيستم سنكرون ساز جستجوي سري
اگر تأخير كاربر مورد نظر ( ) در نظر گرفته شود، هنگامي كه در روش جستجو كدهاي OOC مولد محلي با بيتهاي آموزشي شيفت داده شده بر هم منطبق شوند و تأخير موجود بين آن دو بصورت باشد و نيز ، بنابراين كدهاي در يافتي و كدهاي OOC مولد محلي بر هم منطبق خواهند شد. بدترين حالت زماني است كه باشد. يعني براي هر خروجي به خاطر كاربر مورد نظر، نصف وزن كد مي شود، ( پالس).
به منظور سادگي محاسبات رياضي، آشكار سازي چيپ براي تداخل همة كاربران بررسي ميشود. تأخيرهاي ناشي از تداخل چندين كاربر كه داراي عدد صحيح براي طول چيپ و بدون باقيمانده يعني : باشند بدين صورت نشان داده مي شوند. . كه نه تنها از نظر محاسبات رياضي ساده تر ميشوند، بلكه زمانيكه با يك مدل سنكرون سازي چيپ كه به واقعيت نزديكتر است مقايسه شوند، كرانه بالا روي كيفيت كدهاي OOC در سيستم دستيابي چندگانه نوري با تقسيم كد نشان داده مي شود.
- مدل زنجيرة ماركوف:
در اينجا فرآيند سنكرون سازي توسط زنجيرة ماركوف بررسي مي شود. در اين مدل هر گره، چيپ زماني شيفت داده شده كد مولد محلي تصور مي شود و گره ها توسط شاخه ها بهم متصل ميشوند. نمونة يك شاخة اتصال گره هاي i وi+1 را مي توان همانند شكل (1-6) نشان داد.
شکل 1 6 شاخة متصل كنندة گرة i به گرة 1+i
از اين شكل مشاهده مي شود كه با احتمال ، گرة i بطور مستقيم به گرة i+1 و با احتمال به گرة اعلام اشتباه (FA) متصل شده است. توان z تأخير سيستم را در گذر از يك گره به گرة ديگر نشان مي دهد. اگر شاخة بين گرة i و 1+i ساده شود، معادله بدين صورت خواهد شد:
فرمول 1 9
شكل (1-7)، نمودار الگوريتم جستجوي سري را نشان مي دهد. در اينجا F گره براي F حالت شيفت مختلف كه بصورت حلقة بسته ميباشد، خواهيم داشت. فرض شده كه حالت شيفت صحيح در F امين گره باشد. معمولا هيچ اطلاع قبلي در مورد شيفت صحيح نداريم، بنابراين ميتوان فرض كرد كه دياگرام حالت در هر گره با احتمال مساوي مي باشد و احتمال وجود داشتن شيفت صحيح در هر گره مساوي فرض مي شود.
شکل 1 7 مدل زنجير ماركوف
رابطة ورودي/ خروجي (خروجي گرة ACQ است كه نشان مي دهد جستجو با موفقيت انجام شده)، بصورت زير قابل محاسبه است [1]:
فرمول 1 10
اين معادله نشان مي دهد كه U(z)، تابع مشخصه (يا تابع مولد گشتاور (MGF) ) متغير تصادفي ، مي باشد.
فرمول 1 11
با استفاده از تابع مشخصه، ميانگين زمان سنكرون سازي بصورت زير محاسبه مي شود:
فرمول 1 12
و در حالت بعد جستجو از گرة يك شروع مي شود و همة گره ها تا رسيدن به گرة ACQ چك ميشوند كه اين حالت را بدترين حالت مي گويند.
فرمول 1 13
و ميانگين زمان سنكرون سازي بدين صورت محاسبه مي شود:
فرمول 1 14
اگر فرض شود كه در حالت ايده آل احتمال اعلام اشتباه مساوي با صفر و احتمال آشكارسازي مساوي با يك باشد بنابراين فرمولهاي (10) و (12) به فرمهاي ساده اي كه بترتيب و ميباشند كاهش مي يابند. از فرمهاي سادة بالا حالت مطلوب ايده آل (بدون اعلام اشتباه و آشكارسازي كامل) بدست مي آيد كه مي تواند كرانة پائين روي كيفيت الگوريتم جستجوي سري محسوب شود.
2) رد گيري (Tracking):
همانطور كه ذكر شده فرآيند همزمانسازي به دو قسمت عمده و تا حدودي مستقل تقسيم ميشود. قسمت اول، رهيابي، در فصل پيش مورد بررسي قرار گرفت. در اين فصل با توجه به اينكه اختلاف فاز بين سيگنال دريافتي و سيگنال محلي پس از گذر از مرحله رهيافت كمتر از نصف عرض چسب رسيد ميخواهيم اين اختلاف فاز را به حداقل برسانيم. اين مقدار حداقل به دقت وسايل مورد استفاده مربوط است اينكه اين عمليات (ردگيري) بصورت آنالوگ يا ديجيتال صورت پذيرد روي ميزان حداقل اختلاف فاز قابل دسترسي تأثير دارد. بطور مثال اگر اين عمليات بصورت ديجيتال و با استفاده از FPGA انجام شده اين مقدار به حداكثر فركانس موجود در FPGA وابسته است. بدين ترتيب كه با توجه به ركانس بالاي موجود در چيپ FPGA ميتوان زمان (دوره يك چيپ) را به قطعات كوچكتر تقسيم كرده و با جابجايي (Shift) هاي كوچك اختلاف فاز در سيگنال را به حداقل رساند. اين قطعات هر چه كوچكتر باشد يا به عبارت ديگر قدرت تفكيك بالاتر باشد. عمليات ردگيري با دقت بيشتري صورت ميگيرد.
الگوريتمهاي مختلفي براي اين عمليات وجود دارد. اين الگوريتمها كاملاً مشابه به آنچه در رهيابي ديدم، با توجه به سادگي مدار و زمان مورد نياز براي ردگيري طبقهبندي ميشوند. با توجه به حداكثر زمان موجود براي عمليات همزماني يكي از اين الگوريتمها انتخاب ميشود. يكي از روشهاي موجود كه بدليل سادگي مدار بسيار مورد توجه ميباشد الگوريتم Early-late است.
در اين الگوريتم يك چيپ به قطعات كوچكتري به نام Sub-Chip تقسيم ميشود سپس همانطور كه از اسم آن بر ميآيد با يك شيفت به عقب و يك شيفت به جلد جهتي را كه به سمت كاهش اختلاف فاز موجود بين دو سيگنال ميباشد را مييابيم. در واقع همبستگي در يكي از جهت بيشتر خواهد بود كه اين و مقايسه آمدند.
خود نشان دهنده جهت صحيح ميباشد سپس در همان جهت به مقايسه دو شيفت بعدي ميپردازيم. اين حركت تا جايي اوليه پيدا ميكند دو عدد بدست آمده اختلافي غير قابل تفكيك داشته باشند در اين صورت دو سيگنال بهكمترين اختلاف فاز قابل دستيابي رسيدهاند. دليل استفاده از اين روش مدار آني است چون در مقايسه با ساير روشها زمان طولانيتري براي روگيري مورد نياز است. الگوريتم شرح داده شده بصورت بلوك دياگرام در شكل فوق رسم شده است.
فصل 2 توضیح در مورد طرز کار با نرم افزار OCNS
نرم افزار حاضر (Optical CDMA Network Simulator) یا به اختصار لاتین OCNS یک نرم افزار آموزشی و علمی-کاربردی می باشد که با استفاده از نرم افزار Visual C++ 6.0 طراحی شده است. در فصل قبلی با قابلیتهای علمی- کاربردی این نرم افزار آشنا شدید، در ادامه کار در این فصل با نحوه کار با این نرم افزار آشنا می شوید.
این نرم افزار تنها بر روی تمام Platformهای Windows قابل اجرا و راه اندازی می باشد. نرم افزار به دو صورت Executable و Source Code بر روی CDی ضمیمه پایان نامه موجود می باشد و کاربران با مراجعه به آن و اجرای فایل OCNS.EXE و یا Compile کردن Source Code می توانند برنامه را اجرا کنند. حداقل سیستم مورد نیاز این نرم افزار (Minimum System Requirements) به شرح زیر است:
Pentium CPU (Higher than 1GHz Recommended)
16MB RAM (Higher than 128MB Recommended)
All Windows Platforms
30MB Hard Disk
نرم افزار فوق نیاز به نصب شدن ندارد (No Installation Required) و لیسانس آن آزاد می باشد (License Free) یعنی استفاده از آن برای همگان آزاد می باشد و هر گونه استفاده تجاری از آن غیر قانونی می باشد. استفاده از این نرم افزار تنها در محدوده آموزشی (Educational) می باشد و امید است که در زمینه های علمی- کاربردی مفید و موثر واقع شود.
از آنجاییکه نرم افزار فوق الذکر یک نرم افزار شبیه سازی و ارزیابی برای سیستم شبکه CDMAی نوری می باشد لذا هر قدر از Processorهای با Clock Pulseی سریعتر استفاده شود سرعت شبیه سازی نیز سریعتر خواهد بود و این نکته در هنگام استفاده از نرم افزار کاملا ملموس و مشهود است.
برای مثال در یک شماتیک شامل یک فرستنده، یک گیرنده و یک فضای 1*1 از درجه اول با واحد زمانی معادل 0.25ی یک Chip (در ادامه فصل با این مفاهیم آشنا خواهید شد) با استفاده از یک CPUی 2MHzی، شبیه سازی سیستم با حداکثر سرعت 5Bps معادل 40bps انجام خواهد شد که این سرعت در عمل بسیار بیشتر است به این دلیل که نرم افزار فوق در واقع Taskی تمام اجزای سیستم (شامل فرستنده ها، گیرنده ها، فضا و...) را به تنهایی انجام می دهد در حالی که در یک سیستم شبکه CDMAی نوری هر جزئی با CPUی خود مستقلا در شبکه کار می کند.
برنامه به صورت MDI (Multiple Document Interface) می باشد و تمام DLLهای (Dynamic Link Library) لازم MFC (Microsoft Foundation Class Library) به آن ضمیمه شده است لذا فایل OCNS.EXE به تنهایی بر روی Windows قابل اجراست.
با اجرای برنامه با یکی از دو روش بالا (اجرای فایل OCNS.EXE و یا Compile کردن Source Code) پنجره ای به صورت زیر بر روی صفحه ظاهر می شود.
شکل 2 1 پنجره اصلی برنامه در محیط Windows
به صورت پیش فرض یک Document بر روی ِDesktopی برنامه وجود دارد که می توان با Tabی File->New نیز Documentی جدیدی به برنامه اضافه کرد. با افزودن Documentی جدید در Menu Barی نرم افزار گزینه های File، Edit، View، Simulation، Insert، Debug، Profile، Window و Help را مشاهده می کنید.
علاوه بر Menu Bar، برای سرعت بیشتر در کار Toolbarای در زیر Menu Bar مشاهده می شود که به ترتیب از چپ به راست کارهای New، Open، Save در Tabی File و Cut، Copy، Paste در Tabی Edit و Print در Tabی File و About و Help در Tabی Help را مستقیما انجام می دهند.
در پایین هم Status Bar به صورت پیش فرض فعال است و وضعیت فعلی و یا برخی راهنماییها را به صورت Text در سمت چپ نمایش می دهد و در سمت راست نیز وضعیت کلیدهای Num Lock، Caps Lock و Scroll Lock را نشان می دهد. می توان Toolbar و Status Bar را در Tabی View فعال و یا غیر فعال کرد.
در ادامه به توضیح مختصری در رابطه با گزینه های Menu Bar می پردازم.
فایل File:
در Tabی File می توان یک Documentی را که قبلا ساخته شده است Open کرد و یا Documentی را که در حال حاضر ایجاد شده Save نمود. قابلیتهای Print و Sendی Document نیز به صورت Default بر روی MFC Appها وجود دارد.
ویرایش Edit:
این Tab شامل قسمتهای Undo (Ctrl+z)، Cut (Ctrl+x)، Copy (Ctrl+c) و Paste (Ctrl+v) می باشد که در بیشتر نرم افزارها موجودند و کابران با قابلیت و کارایی آنها آشنایند.
دید View:
در این گزینه می توان Toolbar و Status Bar را فعال و یا غیر فعال کرد.
شبیه سازی Simulation:
این Tab شامل قسمت هایی برای ایجاد Simulationی جدید (New) و ویرایش آن (Edit) و همچنین ذخیره کردن Simulationی فعلی (Save) و یا ذخیره آن بر روی فایلی جدید (Save as) و یا باز کردن یک Simulationی قبلا ذخیره شده (Open) می باشد.
پنجره Window:
در این قسمت می توان بر روی Documentهای باز شده تغییراتی ایجاد کرد و شکل قرار گرفتن پنجره آنها را تغییر داد. ترتیب قرار گرفتن پنجره Documentها به صورت Cascade و یا Tile می تواند باشد. می توان پنجره جدیدی از همان پنجره فعلی (Current Window) نیز ایجاد کرد و یا پنجره ها را در کنار یکدیگر مرتب کرد. همچنین می توان لیست تمام Documentهای باز شده را در پایین Tab مشاهده کرده و به دلخواه هر کدام را فعال نمود.
کمک Help:
این گزینه شامل دو قسمت Help Topics و About OCNS می باشد که اولی مربوط به Helpی نرم افزار می باشد و دومی حاوی اطلاعاتی مربوط به خود پروژه می باشد.
- پیاده سازی یک شبکه برای شبیه سازی
1. در اولین گام یک Documentی جدید را چنانچه گفته شد باز می کنیم.
2. سپس از Tabی Simulation گزینه New را انتخاب می کنیم.
3. پس از تنظیم مقادیر به صورت دلخواه (که در ادامه توضیح داده خواهد شد) Profileی مربوطه را OK می کنیم.
• در این لحظه بر اساس مقادیری که تنظیم کرده اید شماتیکی از سیستم شبکه بر روی صفحه Document ظاهر می شود که تمام فرستنده ها و گیرنده ها و Medium یا Objectی فضای سیستم را نشان می دهد.
4. در ادامه کار برای انجام عمل شبیه سازی می توان در Tabی Debug گزینه RUN را انتخاب کرد. با این کار پنجره ای باز می شود که در آن می توانید مقادیری را برای
تنظیم اتفاقات حین شبیه سازی دست کاری کنید. (که در ادامه توضیح داده خواهد شد)
5. برای دیدن دوباره Profileی فرستنده ها و یا گیرنده ها و یا Profileی محیط حائل سیستم می توانید به Tabی Profile مراجعه کنید و یا در همان صفحه Document بر روی Objectها Click کنید.
شکل 2 9 دیدن Profileی اجزای سیستم از طریق Tabی Profile
شکل 2 10 دیدن Profileی اجزای سیستم از طریق کلیک Buttonاش
در این قسمت به توضیح چگونگی تنظیم مقادیر برخی از دیالوگها می پردازم.
دیالوگ Simulation Profile:
نمونه یک دیالوگ Simulation Profile را که فیلدهای مختلف آن شماره گذاری شده است، در زیر مشاهده می کنید.
شکل 2 11 نمونه یک Simulation Profile Dialogی شماره گذاری شده
همانطور که در شکل دیده می شود این دیالوگ شامل 34 قسمت می باشد. این دیالوگ مانند بسیاری از دیالوگها شامل Static Text، Edit Box، Button و یک List Box می باشد. شماره ها نشان دهنده Tab Orderی Controlها (منظور همین Static Text، Edit Box، Button و List Boxها می باشد) است.
با باز شدن دیالوگ از Tabی Simulation->New در Menu Bar، به صورت پیش فرض Cursor بر روی Itemی شماره 3 چشمک می زند و با زدن کلید Tab بر روی Edit Boxها و Buttonها به ترتیب می رود. در ابتدای کار برخی از Buttonها غیر فعال هستند ولی در ادامه با تولید کردن کدهای متعامد نوری فعال می شوند. (که در ادامه کار به توضیح آن می پردازم)
در Edit Boxی شماره 3 تعداد فرستنده های سیستم را وارد کنید. سپس در Edit Boxی شماره 6 تعداد گیرنده ها را وارد کنید. آنگاه در Group Boxی Code Generation مقادیر طول کد OOC (Optical Orthogonal Code) و وزن آن و پارامترهای تصادم (Collision) را به ترتیب در Edit Boxهای شماره 12، 14، 17 و 19 وارد کنید. سپس دکمه شماره 20 (Generate Codes) را کلیک کنید تا کدهای OOC بر اساس پارامترهای دلخواهتان تولید شوند.
کدهای ساخته شده در List Boxی شماره 25 نمایش داده می شوند و همزمان با آن Buttonهای شماره 21، 22 و 23 فعال می شوند و همچنین Edit Boxهای شماره 3 و 6 غیر فعال می شوند و اگر چنانچه تعداد فرستنده ها و یا گیرنده ها را بیشتر از تعداد کدها وارد کرده باشید مقادیر این Edit Boxها برابر با مقدار حداکثر که همان تعداد کدهاست، می شود.
در Edit Boxی شماره 9 می توانید مقدار کالیبراسیون سیستم را بر اساس سطح سیگنال موجود در ورودی گیرنده ها که در تنظیمات Medium مفصلا توضیح داده می شود، تعیین و وارد کنید. (این قسمت کاملا بستگی به درک و شناخت شما از یک شبکه نوری با مدلسازی Medium آن با فیلترهای FIR دارد که تخصصی می باشد و وارد کردن مقادیر نا معقول باعث نتایج غیر منطقی در شبیه سازی سیستم می شود)
در Edit Boxی شماره 27 می توانید شروع عمل شبیه سازی را بر واحد Byte وارد کنید. اگر مقدار آن را بر روی پیش فرض صفر نگه دارید شبیه سازی از ابتدای شروع به کار فرستنده ها و گیرنده ها آغاز می شود و اگر مقدار دیگری قرار دهید شبیه سازی سیستم پس از گذشت آن تعداد Byte از شروع به کار اولین فرستنده آغاز می شود.
چنانچه در Edit Boxی شماره 29 مقدار Defaultی صفر را نگه دارید شبیه سازی سیستم تا بینهایت ادامه خواهد داشت و چنانچه مقدار دیگری را لحاظ کنید، شبیه سازی تا انتهای Byteی مذکور ادامه می یابد و سپس قطع می شود.
در Edit Boxی شماره 32 نیز می توانید مقدار SubChipPerChipی سیستم یا همان کوچکترین واحد زمانی سیستم که از کنار هم قرار گرفتن این تعداد از آن یک Chipی سیستم شکل می گیرد را وارد کنید. توجه کنید که مقدار SubChipPerChip با سرعت شبیه سازی سیستم در رابطه عکس است و هر آنقدر که مقدار آن را افزایش دهید مقدار سرعت عمل شبیه سازی نرم افزار در عکس آن ضرب می شود. لذا در انتخاب آن دقت فرمایید!
در ادامه کار می توانید Buttonهای شماره 21، 22 و 23 را به ترتیب برای پرکردن دیالوگهای فرستنده(ها)، گیرنده(ها) و Medium کلیک کنید و در نهایت دکمه شماره 33 را به عنوان تایید مقادیر تنظیم شده در Profileی سیستم بفشارید! نمونه یک Simulation Profileی تکمیل شده بدون شماره گذاری را می توانید در ادامه مشاهده نمایید.
شکل 2 12 نمونه یک Simulation Profile Dialogی پرشده
دیالوگ Transmitter Profile:
بعد از وارد کردن پارامترهای Group Boxی Code Generation در Simulation Profile و تولید کردن کدهای CDMAی نوری، Buttonهای مربوط به Initializationی فرستنده ها و گیرنده ها و Medium فعال می شوند. حال با فشردن دکمه Initialize Transmitter(s) پنجره ای مشابه پنجره ای که در ادامه می بینید باز می شود که برای سهولت دادن توضیحات قسمتهای مختلف آن شماره گذاری شده است.
شکل 2 13 نمونه یک Transmitter Profile Dialogی شماره گذاری شده
نرم افزار در Edit Box ی شماره ی3 که به صورت read-only می باشد مقدار شناسه مربوطه به فرستنده جاری را مشخص می کند. برای سادگی شماره شناسه ها از صفر به صورت صعودی بر اساس تعداد فرستنده ها توسط نرم افزار تنظیم می شود و تا آخر نیز همین شناسه ها برای فرستنده ها در تمام مراحل باقی می ماند.
درEdit Boxی شماره 5 می توانید مقدار اندازه بافر فرستنده را تغییر دهید و بر حسب اینکه می خواهید که چه اندازه اطلاعات را با آن فرستنده انتقال دهید آن را تنظیم کنید. در Edit Boxی شماره ی 7 نیز می توانید اندازه پنجره ی بافر فرستنده (Window Size) را که در انتقالات Go Back N و Selective Repeat در لایه Data Link استفاده می شود تنظیم کنید
.
توجه کنید که Window Size در نسخه فعلی نرم افزار مورد استفاده قرار نمی گیرد و برای استفاده در نسخه های آتی قرار داده شده است.
درBoxی شماره 9 می توانید مقدار تاخیر عملیاتی فرستنده را که معمولا بین دو فریم متوالی در نظر گرفته می شود را تنظیم کنید و یا با انتخاب Radio Buttonی "on" در قسمت Randomize (شماره 15) مقدار آن را به صورت Random واگذارید.
با فشردن دکمه شماره 10 (Load File)، 11 (Load Binary File) و 12 (Load Data) می توانید بافر فرستنده را از اطلاعات مورد نظر خود به ترتیب از یک فایل به صورت کاراکتر به کاراکتر، از یک فایل به صورت باینری صفر و یک و یا مستقیما با وارد کردن کاراکتر و یا صفر و یک در دیالوگ Data Definition پر کنید.
در Box ی شماره ی 17 مقدار فضایی از بافر فرستنده که توسط اطلاعات مورد نظر اشغال شده به نمایش در می آید، و با زدن دکمه Show Buffer (شماره ی 37) می توانید محتوای بافر فرستنده را نیز مشاهده کنید.
در قسمت Group Box ی Transmission Configuration پارامترهای مربوطه به frameبندی اطلاعات ذخیره شده در بافر از شما خواسته شده است، که در فیلدهای شماره ی 22، 24 و 26 می توانید به ترتیب مقادیر اندازه Header، اندازه Pay-Load واندازه CRCی Frameی تولیدی توسط فرستنده را مشخص کنید.
توجه کنید که فیلد شماره 20 که به صورت read-only می با شد، با توجه به فیلدهای قبلش (22، 24 و26) برابر با مقادیر مجموع آنها اتوماتیک ست می شود.
در Combo Box ی شماره ی 28 می توانید روی OOCهای قبلا تولید شده توسط کلاس CSim عمل Scroll را انجام دهید و در صورتی که کد انتخابی شما قبلا توسط فرستنده ای انتخاب نشده باشد می توانید کد قبلی را با کد جدید جایگزین کنید در نتیجه مقدار Edit boxی شماره 29 نیز به نشانه شماره و index کد انتخابی جدید تغییر می کند.
توجه کنید که نرم افزار به صورت هوشمند برای هر فرستنده به صورت پیش فرض OOC ای را که قبلا انتخاب نشده انتخاب می کند و کاربر می تواند آن را تنها در صورت پیدا کردن کدی که به فرستنده ای تعلق ندارد، تغییر دهد.
در فیلد شماره ی 33 می توانید زمان شروع ارسال فرسنتده را تنظیم کنید و در صورت تمایل می توانید با انتخاب Radio-Buttonی شماره ی 36 آن را به صورت Randomize در آورید تا زمان ارسال آن به صورت Random و تصادفی آغاز شود.
توجه کنید که به صورت پیش فرض مقادیر فرستنده به صورت غیر تصادفی و ثابت تنظیم شده است و کاربر به سلیقه خود می تواند آنها را تغییر دهد.
در ادامه نمونه یک Transmitter Profile ی پر شده بدون شماره گذاری را مشاهده می کنید که بافر آن از یک فایل 1527 بایتی پر شده است و زمان تاخیر عملیاتی و شروع ارسال آن تصادفی در نظر گرفته شده است.
در پایان هنگامی که تمامی مقادیر را تنظیم کردید و بافر فرستنده را از اطلاعات دلخواه برای ارسال پرنمودید، می توانید فرستنده را برای ارسال آماده کنید و دکمه شماره 30 را کلیک کنید و یا با کلیک دکمه ی شماره ی 31 آن را به حالت خاموش تا اطلاع ثانوی نگه دارید.
شکل 2 14 نمونه یک Transmitter Profile Dialogی پرشده
دیالوگ Receiver Profile:
مانند آنچه در مورد دیالوگ فرستنده گفته شد در مورد گیرنده ها نیز پس پایان عمل تولید OOCها، می توان دکمه Initialize Receiver(s) را برای تنظیم مقادیر و پارامترهای گیرنده فشرد. برای سهولت و خوانایی بیشتر، فیلدهای کنترلی دیالوگ گیرنده در ادامه آمده است و می توانید همراه با خواندن متن به آن مراجعه کنید.
شکل 2 15 نمونه یک Receiver Profile Dialogی شماره گذاری شده
در Edit Boxی شماره ی 3 که به صورت read-only می باشد شناسه گیرنده مشخص می شود که به صورت یک عدد از صفر تا مقدار ماکزیممم آن که برابر یک واحد کمتر از تعداد گیرنده ها است، می باشد. در قسمت Group boxی Receiver Configuration مانند مشابه آن در فرستنده، Edit Boxهای شماره 5،7 و 9 به ترتیب به مقادیر اندازه بافر، اندازه پنجره و مقدار تاخیر عملیاتی مربوط می باشند و همان توضیحات بخش قبل که مربوط به فرستنده بود، در اینجا نیز صادق است، با این تفاوت که تاخیر عملیاتی (Process Delay) در مورد گیرنده ها در حال حاضر مصداق عملی ندارد و پیش بینی می شود که در آینده بتوان برای آن مصداقی پیدا کرد. چون در واقع گیرنده ها همواره در حال پروسس (Listening) می باشند. در ضمن Process Delay را همانند فرستنده ها در اینجا نیز می توان به صورت تصادفی و یا ثابت با تغییر Radio- Buttonهای شماره ی 12 و 13 تنظیم کرد.
در ابتدای کار، قبل از عمل شبیه سازی و یا همان به کار افتادن سیستم شبکه Optical CDMA، بافر گیرنده ها خالی از اطلاعات است لذا Edit Boxی شماره ی 15 عدد صفر را نشان می دهد و با فشردن دکمه ی Show Button (شماره 38) بافر خالی را مشاهده می کنید. ولی بعد از انجام عمل شبیه سازی می توانید برای مشاهده بافر پرشده گیرنده ها به Tabی Profileی Menu Bar مراجعه کنید و یا مستقیما Objectی گیرنده ها را از صفحه Document کلیک کنید و در نهایت دکمه ی Show Buffer را کلیک کنید.
برای ذخیره ی بافر پرشده گیرنده (بعد از اتمام عمل شبیه سازی) می توانید دکمه ی Save Data را کلیک کنید و محتوای بافر را در یک فایل ای که خود نام آن را تعیین می کنید ذخیره نمایید.
در قسمت Reception Configuration (Boxهای شماره 20، 22 و 24) می توانید پارامترهای مربوط به frameبندی سیستم را تنظیم کنید. (Box شماره 18 فقط خواندنی است مانند قسمت فرستنده)
توجه کنید که پارامترهای frame بندی گیرنده را مشابه همان پارامترهای frame بندی فرستنده تعیین کنید چون در غیر این صورت اطلاعات فرستنده مورد نظر به درستی در گیرنده هم OOC آن دریافت نمی شود. لذا در تنظیم مشابه پارامترهای دریافت با تنظیمات ارسال دقت فرمایید.
با کلیک Buttonی شماره 39 (Setup Header Format) در حال حاضر اتفاقی نمی افتد ولی در آینده می توان از آن به عنوان یک الگوریتم frameبندی سیستم دریافت در گیرنده استفاده کرد و برای یاد آوری، تنها دکمه آن به نمایش در آمده است.
در Combo Box ی شماره 26 می توانید OOC مورد نظر خود را انتخاب کنید. نرم افزار به صورت هوشمند برای شما از قبل یک OOC در نظر می گیرد ولی شما می توانید به دلخواه آن را به OOC دیگری که قبلا توسط گیرنده های قبلی انتخاب نشده باشد تغییر دهید. به محض انتخاب OOCی مورد نظر، در Edit Box ی شماره 27 که فقط خواندنی می باشد شماره OOC انتخاب شده را مشاهده می کنید.
در قسمت Group Boxی Limiter Type می توانید برای سیستم گیرنده خود یکی از سه نوع بدون محدود کننده ، محدود کننده سخت و محدود کننده نرم ، تنها به عنوان نامی تصنعی که در آینده بتوان تدابیری برای آن لحاظ کرد، را انتخاب کنید.
آخرین Group Box (شماره 32) مربوط به استفاده از یکی از دو روش معمول در سنکرون سازی گیرنده با فرستنده هم OOCاش می باشد که کاربر می تواند با انتخاب یکی از Radio- Button های شماره 33 ویا 34 به ترتیب روش Simple Serial Search ویا Matched Filter را برای Acquisitionی سیستم دریافت در گیرنده مورد استفاده قرار دهد.
در انتها با کلیک دکمه شماره 28 می توانید گیرنده را در حال آماده برای دریافت (Full Listening) و یا با کلیک دکمه شماره 29 در حالت خاموش قرار دهید.
نمونه یک فرم پر شده از Receiver Profile را می توانید در ادامه مشاهده کنید.
شکل 2 16 نمونه یک Transmitter Profile Dialogی پرشده
دیالوگ Data Definition:
همانطور که در پیش توضیح داده شد، این دیالوگ در دل دیالوگ Transmitter Profile نهفته است و هنگامی که کاربر بخواهد اطلاعات را مستقیما وارد بافر فرستنده کند می تواند با کلیک دکمه Load Data در صفحه Transmitter Profile دیالوگ Data Definition را به صورتی که در زیر آمده است باز کند و اطلاعات مورد نظر را بر حسب کاراکتر ویا باینری وارد کند.
شکل 2 17 نمونه یک Data Definition Dialogی شماره گذاری شده
در قسمت Data Type شما می توانید نوع Dataی ورودی را تعیین کنید. که به دو صورت باینری (یعنی در قسمت Edit Box صفر و یک وارد می کنید و نرم افزار داده های ورودی شما را به صورت بیت در نظر می گیرد) شماره 3 و کاراکتر (یعنی در قسمت Edit Box هر چه وارد کنید به صورت کاراکتر در نظر گرفته می شود و معادل یک کد 8 بیتی اسکی است) شماره 4 می باشد.
حال در قسمت Edit Boxی شماره یک می توانید داده مورد نظر خود را که نوع آن را قبلا تعیین کرده اید وارد نمایید. با زدن دکمه OK تنظیمات تایید و بافر فرستنده از اطلاعات وارد شده پر می شود.
نمونه یک دیالوگ Data Definitionی پر شده را در روبرو می توانید مشاهده نمایید. داده از نوع کاراکتر می باشد و در قسمت Edit Box جمله ای شامل کاراکترهای اسکی استاندارد تایپ شده است.
دیالوگ Show Buffer:
این دیالوگ در دل دیالوگهای Transmitter Profile و Receiver Profile موجود می باشد و برای دیدن محتوای بافر فرستنده ها و گیرنده ها به صورت کاراکترهای اسکی (char) به کار می رود.
محتوای بافر در Edit Boxی شماره یک به صورتی که در شکل روبرو می بینید به نمایش در می آید.
دیالوگ Enter Your Number:
این دیالوگ در بطن دیالوگ FIR Profile می باشد و برای وارد کردن و یا اصلاح مقادیر ضرایب فیلتر FIRی که دیالوگ آن به صورت یک FIR Profile باز شده است به کار می رود.
مقدار ضریب را می توانید در قسمت Edit Boxی شماره یک به صورت اعشاری (double) از نوع کاراکتر وارد کنید و نرم افزار به صورت هوشمند آن را به صورت اعشاری (double) به ضرایب فیلتر FIR شما اضافه می کند.
نمونه یک عدد اعشاری وارد شده را در شکل روبرو مشاهده می کنید. مقدار ضریب می تواند به صورتهای زیر هم وارد شود.
1001, 10.01, .003, 0.0005, or 1.03e-4
دیالوگ Medium Profile:
بعد از به وجود آمدن OOCها در دیالوگ Simulation Profile می توان دکمه Initialize Medium را برای تعریف Mediumی پروژه کلیک کرد و در این صورت دیالوگی مانند دیالوگ زیر باز می شود.
شکل 2 23 نمونه یک دیالوگ Medium Profileی شماره گذاری شده
در Edit Boxی شماره 2 و 4 به ترتیب تعداد فرستنده ها و تعداد گیرنده ها به صورت فقط خواندنی به نمایش در می آید. در Flex Gridی شماره 8 یک ماتریس NumTx * NumRx با درایه هایی به شکل H[i,j] به نمایش در می آید.
کاربر می تواند با دو بار کلیک کردن درایه های ماتریس، فیلتر FIRی مربوط به هر کدام را به دلخواه اصلاح نماید. با باز شدن FIR Profileی فیلتر FIR درایه متناظر آن به صورت H[i,j] پررنگ در می آید.
برای Reset کردن تمام فیلترهای ماتریس می توان دکمه New (Reset)ی شماره 5 را فشرد و دوباره از نوع فیلترهای درایه ها را اصلاح کرد. بعد از اصلاح تمام درایه ها (تنظیم ضرایب فیلترهای FIR) می توان با کلیک دکمه شماره 7 (Export H[i,j]) ماتریس فیلترها را در فایلی که خود نام آن را انتخاب می کنید ذخیره نمایید.
همچنین می توان با کلیک دکمه شماره 6 (Import H[i,j]) یک ماتریس از فیلترهای FIR هم بعد با ماتریس اخیر را از طریق فایل مربوطه اش که قبلا از طریق Export ذخیره شده است Import کرده و دیگر نیازی به تنظیم تک تک درایه ها نیست!
بعد از انجام تنظیمات دکمه OK را کلیک کنید.
نمونه های ساده ماتریس 1*1 و 2*2 با فیلترهای درجه یک FIR با اندازه یک را می توانید در Folderی Samplesی در مسیر اصلی source codeی پروژه بر روی CD بیابید.
نمونه ای از یک Medium Profileی که یکی از ضرایب فیلتر FIRی درایه H[1,0] آن در حال تصحیح است را در ادامه مشاهده می کنید.
شکل 2 24 شمای کلی از طریقه پرکردن یک دیالوگ Medium Profile
دیالوگ FIR Profile:
همانطور که گفته شد در Medium Profile با کلیک کردن هر کدام از درایه های ماتریس فیلترهای FIR یک FIR Profileی مربوط به همان درایه یا فیلتر به صورتی که در ادامه می بینید باز می شود.
شکل 2 25 نمونه یک FIR Profileی شماره گذاری شده
برحسب آنکه کاربر چه مقداری را به عنوان درجه فیلتر در Edit Boxی شماره 1 وارد کند، به همان تعداد (=درجه فیلتر) در Flex Gridی شماره 3، مستطیل سفید که در ابتدا حاوی عدد صفرند، به وجود خواهد آمد که با کلیک هر کدام از این مستطیلهای سفید می توان با استفاده از دیالوگ Enter Your Number مقدار عددی داخل آنها را تغییر داد.
بعد از اصلاح ضرایب فیلتر FIR دکمه OK را به نشانه تایید کلیک کنید.
برای نمونه می توانید یک FIR Profileی پر شده را در شکل روبرو مشاهده کنید. فیلتر از درجه 13 است و مقادیر ضرایب به صورت کاملا دلخواه پر شده است.
دیالوگ SimShow (Simulation Show):
این دیالوگ از طریق Tabی Debug با انتخاب گزینه RUN باز می شود. توجه کنید که برای باز کردن این دیالوگ که مربوط به اجرای عمل شبیه سازی و مشاهده برخی از رویدادها در حین این عمل می باشد، بایستی تمام قسمتهای Simulation Profile را که مربوط به کدهای عمود نوری و فرستنده ها و گیرنده ها و فضا (Medium) می شود را به طور صحیح چنانچه گفته شد پر کرده باشید وگرنه صفحه این دیالوگ به نشانه ناقص بودن پروژه باز نخواهد شد.
نمونه شماره گذاری شده دیالوگ SimShow را می توانید در ادامه ببینید. برای سهولت توضیح قسمتهای مختلف آن از این شماره ها به همراه اسمها استفاده شده است.
شکل 2 27 نمونه یک دیالوگ SimShowی شماره گذاری شده
در Group Boxی شماره 1 می توانید حالت فعلی سیستم را در هر لحظه از عمل شبیه سازی مشاهده کنید، به این معنی که حالت سیستم در Edit Boxهای شماره 4، 6، 8 و10 بر حسب آنکه پالس کلاک سیستم به ترتیب در چه بایت ، بیت ، چیپ و ساب-چیپ است به نمایش در می آید.
همچنین در همین Group Box (State of System) می توانید حالت فعلی یک فرستنده دلخواه و حالت فعلی یک گیرنده دلخواه را نیز مشاهده کنید. به این صورت که ابتدا در فیلد شماره 13 شناسه فرستنده مورد نظر خود و در فیلد شماره 20 شناسه گیرنده مورد نظر خود را وارد کنید و سپس با فعال کردن فیلدهای شماره 17 و 24 با انتخاب Radio-Buttonهای شماره 15 و 22 حالت فعلی فرستنده و گیرنده مورد نظر خود را در Edit Boxهای شماره 17 و 24 مشاهده نمایید.
در Group Boxی شماره 25 می توانید سرعت عمل شبیه سازی سیستم را تنظیم کنید. به این صورت که با تغییر Sliderها (که شبیه به Volume-bar هستند) می توانید سرعت را تغییر دهید. به صورت پیش فرض سرعت سیستم روی مینیمم مقدار تنظیم شده است.
با تغییر Sliderی شماره 27 می توانید سرعت اصلی عمل شبیه سازی سیستم را با تغییر زمان Interruptی Timerی سیستم عوض کنید. به صورت Default مقدار این زمان Interrupt برابر 100ms می باشد و با کشیدن آن به سمت چپ می توانید آن را تا 1ms کاهش دهید.
Sliderهای شماره 29 و 30 به صورت حاصلضربی کار می کنند، به این معنا که به اندازه حاصلضرب مقدار عددی این دو Slider، هر بار که Timerی سیستم Interrupt می دهد، روال Clock()ی فرستنده ها و گیرنده ها اجراء می شود و این عمل به افزایش سرعت شبیه سازی سیستم کمک می کند. (مقدار عددی Sliderها عددی مابین 1 تا 100 می باشد که به صورت صعودی از چپ به راست است.)
در قسمت Group Boxی شماره 31 می توانید رویدادهایی چون Acquisition و Trackingی گیرنده ها را در حین عمل شبیه سازی سیستم مشاهده کنید. در این قسمت Event Viewer چند فیلد به صورت Combo Box (به شماره های 32، 33، 34، 35 و 36) موجود می باشد که در حال حاضر خالی می باشد ولی می توان در آینده برای گسترش نمایش رویدادهای مهم حین عمل شبیه سازی آنها را به صورت فیلدهای تصمیم گیری در نظر گرفت. با انتخاب Radio-Buttonی شماره 38 می توان List Boxی شماره 39 را برای نمایش رویدادها فعال نمود. توجه کنید که تمام Radio-Buttonها به صورت پیش فرض off می باشند.
دکمه شماره 40 (Resume/Pause Button) برای شروع و یا توقف عمل شبیه سازی در هر مرحله از عمل شبیه سازی سیستم به کار می رود و با کلیک بر روی آن، برچسب آن از Resume به Pause و یا از Pause به Resume تغییر می یابد. دکمه شماره 41 (Reset Time) نیز برای Resetکردن عمل شبیه سازی از ابتدای کار به کار می رود.
دکمه شماره 42 (Reset Transmitters) در حال حاضر کاری انجام نمی دهد ولی می توان در اینده از آن به عنوان Restart کردن فرستنده ها برای بازارسال بافرشان و یا... استفاده کرد. دکمه های شماره 43 و 44 (STOP! و Cancel) به ترتیب برای پایان دادن عمل شبیه سازی و کنسل کردن و بستن دیالوگ SimShow به کار می روند. در ادامه می توانید نمونه ای از یک شبیه سازی در حال اجرا در صفحه دیالوگ SimShow را مشاهده کنید.
شکل 2 28 نمونه یک دیالوگ SimShowی در حین عمل شبیه سازی
فصل 3 معرفی و توضیح اجمالی کلاسهای تعریف شده در پروژه
کلاس CAboutDlg
این کلاس در حقیقت به صورت زیر کلاسی در کلاس COCNSApp تعریف شده است و جزء کلاسهای پیش فرض MFC (Microsoft Foundation Class) می باشد که به صورت Default به هنگام تعریف خصوصیات پروژه ساخته می شود.
کلاس اخیر با دیالوگ About OCNS که شناسه آن IDD_ABOUTBOX می باشد کار می کند و تنها برای نمایش آیکون و شماره نسخه و زمان ساخت پروژه به اضافه اطلاعاتی در رابطه با نویسنده و طراح آن به کار می آید که کاربران می توانند با انتخاب گزینه About OCNS در Tabی Helpی Menu Barی نرم افزار به دیالوگ آن دسترسی یافته و اطلاعات یاد شده را در آن مشاهده کنند.
کلاس CBit
این کلاس برای تعریف Objectی Bit در این پروژه به کار می رود.
از آنجا که هر بیت در سیستم شبکه CDMA نوری تلفیقی از چند چیپ می باشد و هر چیپ نیز تلفیقی از چند ساب-چیپ می باشد لذا برای خصوصیات این کلاس از آرایه ای از Chipها استفاده شده است که اجزای داخلی یک بیت را تشکیل می دهند.
این کلاس در کلاس CRx به عنوان بیت دریافتی یک گیرنده تعریف می شود و اجزای داخلی آن (Chipها و Sub-Chipها) مرحله به مرحله طی عمل شبیه سازی در روال Clock() گیرنده شناسایی و تعیین می شوند و در نهایت پس از دریافت یک بیت کامل objectی CBit* bit تحت بررسی و آنالیز گیرنده قرار می گیرد. لذا این object (CBit) مهمترین عضو سازنده در اطلاعات خروجی فرستنده ها و ورودی گیرنده ها می باشد.
سازنده (Constructor)ی این object دو مقدار ChipSize و SubChipSize را می گیرد تا برای ساختن آرایه Chipها که هر Chip نیز آرایه ای از SubChip هاست حافظه مناسب را تخصیص دهد. از آن طرف نیز پاک کننده (Destructor)ی کلاس تمام این حافظه تخصیص داده شده را از RAM پاک (Delete) می کند تا وقتی objectی بیت پاک شد تمام متغیرهای مربوط به آن (Chipها و SubChipها) نیز پاک گردند.
متغیرهای تعریف شده در این کلاس، همانطور که گفته شد، شامل آرایه ای از Chipها (که به صورت اشاره گر CChip* تعریف شده است و به محض ساخت بیت باید اندازه آرایه نیز به همراه آن تعریف شود تا به اندازه آن حافظه به آرایه تخصیص داده شود)، اندازه آرایه که همان تعداد Chipهای استفاده شونده به ازای هر بیت است و مقدار بیت (که می تواند بیت یک یا صفر باشد) میباشد.
توابع و روالهای این کلاس شامل ChipRotate، SubChipRotate و WriteChip می باشند و همانطور که از نامشان پیداست به ترتیب وظایف زیر را به عهده دارند.
ChipRotate(int shift) آرایه Chipها را به اندازه مقدار عددی shift به سمت راست می چرخاند یعنی شیفت چرخشی می دهد به گونه ای که Chipی اول و آخر را پشت سر هم در نظر می گیرد.
SubChipRotate(int shift) آرایه Chipها را با توجه به SubChipهای داخل هرکدام به اندازه shift به سمت راست می چرخاند یعنی به صورت چرخشی شیفت می دهد.
تابع WriteChip(int index, int shift) برای نوشتن chipای در فاصله ذکر شده (shift) از chip مورد نظر در شماره index است. این تابع به صورت بازگشتی جالبی عمل می کند و در نهایت با تمام Chipها این کار را انجام می دهد و بدینسان تمام Chipها به اندازه shift می چرخند. این روال به صورت یک روال کمکی در تابع ChipRotate() استفاده می شود و در نهایت برای تکمیل عملیات در تابع ChipRotate() آخرین Chipی آرایه در اولین Chipی آرایه ریخته می شود.
کلاس CBuffer
این کلاس در حال حاضر مورد استفاده این پروژه قرار نگرفته است ولی در آینده می توان از آن به عنوان کلاسی که تمام مشخصات بافر فرستنده ها و گیرنده ها را در بر دارد استفاده کرد. در حال حاضر بافر و دیگر اجزای آن در کلاس CTx و CRx به طور کامل تعریف شده است. ولی با تعریف این کلاس می توان برای فرستنده ها و گیرنده ها به طور نامحدود بافر تعریف کرد. همچنین فرستنده ها را برای ارسال آنها و گیرنده ها را برای دریافت آنها برنامه ریزی کرد.
به عنوان خصوصیاتی از این کلاس می توان به تعریف متغیری از نوع char به صورت آرایه ای و متغیری از نوع int به عنوان اندازه و طول آن اشاره کرد. همچنین می توان دیلوگی مانند CDataDialog ترتیب داد که کاربر از طریق آن بتواند این اطلاعات را وارد کند. همچنین برای شناسایی بافرها باید متغیر یا متغیرهایی تعریف کرد که نشان دهند هر بافر به کدام فرستنده یا گیرنده تعلق دارد و چندمین بافر ساخته شده در پروژه می باشد.
کلاس CChildFrame
از کلاسهای پیش تعریف MFC می باشد که به هنگام باز کردن پروژه به صورت اتوماتیک در Work Spaceی پروژه ایجاد می شود. این کلاس مربوط به پروژه های از نوع MDI (Multiple Document Interface) می باشد و Handleی بچه فریم های موجود در صفحه Documentی اصلی را بدست می گیرد و باز و بسته شدن آنها را با اعمال برخی تنظیمات کنترل می کند.
کلاس CChip
برای تعریف objectی Chip از این کلاس استفاده می شود.
چیپ واحد ساختمانی بیت در شبکه CDMAی نوری می باشد بطوریکه ارسال یا دریافت رشته ای از چیپها به اندازه طول یک OOC معادل ارسال یا دریافت یک بیت است. همچنین واحد ساختمانی هر چیپ یک ساب-چیپ است. لذا آرایه ای از Sub-Chipها از نوع بایت به عنوان متغیری از این کلاس تعریف شده است. همچنین خصوصیاتی چون طول آرایه که برابر SubChipPerChip معمولا قرار داده می شود و مقدار این object که می تواند صفر و یا یک و یک به بالا از نوع صحیح باشد، به متغیرها اضافه شده است.
از این object در کلاس CBit به عنوان واحد سازنده بیت استفاده می شود. هنگامی که یک objectی بیت تعریف می شود برای تک تک چیپهای آن سازنده (constructor)ی CChip فراخوانی می شود و برای آرایه Sub-Chipها حافظه مورد نیاز تخصیص داده می شود. برای Sub-Chipها دیگر نیازی به تعریف کلاس نبوده است زیرا آنها به عنوان کوچکترین واحد زمانی سیستم و واحد ساختمانی چیپها در این کلاس از نوع BYTE تعریف شدند و از 0 تا 255 می توانند مقدار بپذیرند. از آن جهت که سیگنالهای نوری هیچگاه منفی نمی شوند و وقتی با هم تداخل می کنند با هم به نوعی جمع می شوند لذا در نظر گرفتن یک پالس نوری در کوچکترین واحد زمانی از نوع BYTE بسیار مناسب است.
کلاس CCode
تمام خصوصیات کدهای متعامد نوری در این کلاس تعریف شده است. برای این کلاس خصوصیات زیر به صورت متغیر در نظر گرفته شده است که برخی از آنها ذاتی اند و برخی دیگر بالقوه که بعد از تولید این کدها تنظیم و یا اصلاح می شوند.
شناسه یا همان IDی کد OOC که نمایانگر شماره indexی کد در میان همه کدهای تولید شده در پروژه می باشد. دو متغیر tx و rx که از نوع Boolean هستند و نشان می دهند که کد حاضر به فرستنده یا گیرنده ای تخصیص داده شده است یا خیر. متغیر str که از نوع آرایه ای از کاراکترهای صفر و یک میباشد و OOCی اخیر را به صورت رشته ای در بر دارد. این مشخصات به نوعی مشخصات بالقوه این کلاسند که پس از تولید کدها و اختصاص آنها به فرستنده ها و گیرنده ها تنظیم می شوند.
خصوصیات ذاتی کدها که در تولید آنها هم مورد استفاده قرار می گیرد عبارتند از:
متغیر F که نشاندهنده طول کد بر حسب تعداد چیپ به کار رفته در آن است.
متغیر w که نشاندهنده وزن کد بر حسب چیپ است یعنی تعداد یک-چیپهای موجود در کد.
متغیر ccc که نشاندهنده همان قید تشابه ضربدری یا دوناهمجنس هر دو کد با هم می باشد.
متغیر acc که نشاندهنده همان قید خودمتشابهی هر کدی با خودش می باشد و
متغیر k که ماکزیمم پارامتر تداخل یا تصادم را نشان می دهد و برابر همان دو متغیر acc و ccc می باشد وقتی که آندو با هم برابرند.
کلاس CCounter
برای ارسال و یا دریافت اطلاعات، فرستنده ها و گیرنده ها از شمارنده ها استفاده می کنند و چون اطلاعات در هر پالس کلاک به صورت یک Sub-Chip که کوچکترین واحد زمانی سیستم است می باشد، ارسال و دریافت می شوند. ولی ذخیره کردن Sub-Chipها بر روی حافظه کاری بس عبث و بیهوده است چون به ازای هر Sub-Chip حداقل یک بایت خرج می شود در صورتی که اگر Sub-Chipها کنار هم قرار گیرند Chipها درست می شوند و اگر Chipها کنار هم قرار گیرند Bitها درست شده و تازه از کنار هم قرار گرفتن هشت بیت یک بایت ساخته می شود! لذا پسندیده تر آنست که ما ابتدا آنقدر صبر کنیم که یک بایت کامل را دریافت کنیم و بعد آن را در حافظه ذخیره نماییم.
برای دستیابی به این مهم احتیاج به شمارنده ای برای شمارش Sub-Chipهایی که یک Chip را می سازند و شمارنده ای برای شمارش Chipهایی که یک Bit را می سازند و شمارنده ای برای شمارش بیتهایی که یک بایت را درست می کنند، است. در ضمن از کنار هم قرار گرفتن بایتها نیز Packetها یا Frameها به وجود می آیند که می توان برای آنها هم شمارنده ای در نظر گرفت.
این کلاس جزو آن دسته از کلاسهایی است که می توان در آینده بر روی آن مانور داد و دسته شمارنده که شامل شمارنده بایت ، شمارنده بیت ، شمارنده چیپ و شمارنده ساب-چیپ است را برای فرستنده ها و گیرنده ها در آن در نظر گرفت. این طرز فکر نه تنها به خوانایی بیشتر برنامه کمک می کند بلکه ساختار مفهومی پروژه را نیز تقویت می کند و مفاهیم پنهان موجود در پروژه را برای خوانندگان و کاربران روشن تر می کند زیرا برخی از خواص کلاسهای پیچیده ای چون CTx که مربوط به فرستنده است و CRx که مربوط به گیرنده است، را در کلاسهای ساده تری چون این کلاس بیان می کند.
در ضمن هنگامی که از کلاس CBuffer در این پروژه استفاده شود و برای فرستنده ها و گیرنده ها مفاهیمی چون Multiple-Buffer Managing پیش آید، نیاز به چنین کلاسی ضروری می باشد زیرا هر objectی CBufferای باید برای خود objectی CCounterی جداگانه ای داشته باشد که بتوان اطلاعات ارسالی و یا دریافتی را با آن کنترل کرد.
کلاس CCRC
از کلاسهای مشتق شده، بچه کلاس ، از کلاس CFrame می باشد که وظیفه ساخت و ذخیره CRC مربوط به یک فریم را با توجه به الگوریتم از پیش تعریف شده بر عهده دارد. البته به دلیل آنکه این پروژه در حال حاضر تنها بر روی لایه فیزیکی شبکه کار می کند نیازی به اضافه کردن Error Detection احساس نمی شد ولی در آینده می توان به عنوان یکی از سرویسهای لایه پیوند داده ها از آن استفاده کرد.
متغیرهای این کلاس شامل متغیر str به عنوان آرایه ای از کاراکترهاست که نشاندهنده CRC به صورت اسکی کد می باشد و متغیر size که اندازه و تعداد کاراکترهای این آرایه را نشان می دهد، میباشد.
کلاس CData
برای تعریف اطلاعات و داده می توان از این کلاس استفاده کرد. واحد ساختمانی داده ها از نوع بیت از کلاس CBit است که هنگام تعریف دیتا می توان تعداد بیتها ی به کار رفته در آرایه بیتها در متغیر bit را مشخص نمود. به علاوه تعداد چیپها ی به کار رفته در هر بیت و تعداد Sub-Chipها ی به کار رفته در هر چیپ را نیز می توان تعیین کرد تا بر اساس آنها مقدار حافظه مورد نیاز در constructorی کلاس برای بیتها و چیپهای بیتها و Sub-Chipهای چیپها اختصاص داده شود.
این کلاس به عنوان واحد اطلاعاتی در کلاسهای CTx و CRx مورد استفاده قرار می گیرد و پس از پرشدن یک واحد از آن پردازشهای لازم در کلاسهای فرستنده و گیرنده بر روی آن صورت می گیرد.
کلاس CDataDialog
این کلاس به صورت یک کلاس دیالوگی است که با دیالوگ Data Definition با شناسه IDD_DataDialog کار می کند و برای گرفتن اطلاعات در دو نوع باینری و کاراکتری (اسکی کد) به صورت مستقیم از کاربر قرار داده شده است.
نوع اطلاعات توسط Radio-Buttonها در صفحه دیالوگ تعیین شده و به صورت یک عدد صحیح در متغیر DataType ریخته می شود. همچنین بر حسب آنکه نوع اطلاعات را چه چیزی قرار دهید در نهایت داده ها به صورت رشته ای از کاراکترها در متغیر strdataی کلاس ریخته می شود و در نهایت در اختیار کلاس CTxDialog برای پردازش و پر کردن بافر فرستنده از داده ورودی قرار می گیرد.
کلاس CFIR
این کلاس برای تعریف یک فیلتر FIR به کار می رود. متغیرهای به کار رفته در آن شامل FilterDegree و hn می باشند که به ترتیب نشاندهنده درجه فیلتر FIRی مرد نظر و آرایه ای از اعداد اعشاری از نوع double می باشند. ضرایب فیلتر در آرایه hn از طریق دیالوگ FIR Profile قرار داده می شوند.
این کلاس دارای تابعی به نام SetFilterDegree(int FD=0) می باشد که با آن می توان درجه فیلتر را تغییر داد و در نتیجه همانند constructorی کلاس، این تابع برای درجه جدید مقدار مورد نیاز حافظه را برای متغیر hn اختصاص می دهد و تمام حافظه تخصیصی قبلی را آزاد می کند.
کلاس CFIRDialog
از این کلاس برای وارد کردن درجه و ضرایب فیلترهای FIRی موجود در objectی mediumی شبکه استفاده می شود. این کلاس با دیالوگ FIR Profile با شناسه IDD_DFIRDialog کار می کند. بر اساس درجه ورودی کاربر تعداد فیلدهای مناسب در objectی CMSFlexGrid قرار می دهد تا به اندازه درجه فیلتر فیلد برای وارد کردن ضرایب در Flex Grid داشته باشیم.
کلاس CFrame
برای تعریف Frameها در این پروژه می توان از کلاس اخیر استفاده کرد. یک objectی CFrame حاوی تمامی مشخصات یک Frame می باشد.
متغیر header که حاوی اطلاعات مربوط به هدر فریم می باشد و از نوع کلاس CHeader تعریف شده است. متغیر payload که تنها آرایه ای از کاراکترهاست و از نوع CString می باشد. متغیر crc که حاوی Cyclic Redundancy Checkی کل فریم می باشد و از نوع کلاس CCRC می باشد. متغیر str از نوع CString که کل کاراکترهای فریم را در بر دارد و هر بار با تابع Update() می توان محتویات آن را بر اساس header و crc جدید نوسازی کرد.
کلاس CGetNumDialog
این کلاس برای گرفتن عددی اعشاری از کاربر طراحی شده است. این کلاس با دیالوگ Enter Your Number با شناسه IDD_Ddouble کار می کند و جزو زیر دیالوگ کلاس CFIRDialog محسوب می شود که عدد دریافتی را به ضرایب فیلتر FIRی دیالوگ CFIRDialog اضافه یا تصحیح می کند. تنها متغیر کلاس number است که عددی از نوع double می باشد و پارامتر تنها Edit Boxی این دیالوگ کلاس می باشد.
کلاس CHeader
از کلاسهای مشتق شده از CFrame می باشد که محتوی اطلاعات مربوط به هدر فریمها می باشد و می توان بر اساس حالتهای مختلف کنترلی و سنکرون شدن کاراکترهای آن را تغییر داد. این کلاس تنها از دو متغیر str که آرایه کاراکترهای هدر را نشان می دهد و size که طول این آرایه را نشان می دهد، استفاده می کند.
کلاس CMainFrame
از کلاسهای پیش ساخته MFC می باشد که VC++ برای کار با پنجره اصلی پروژه آن را به خدمت می گیرد. برای استفاده از Status Bar و Tool Barی پروژه از این کلاس استفاده می شود ولی متغیرها و توابع آن در روند اصلی کار پروژه هیچ دخالت یا تاثیری ندارند.
کلاس CMedium
کلاس CMedium برای تعریف Medium یا فضای حایل بین فرتنده ها و گیرنده ها به کار می رود. این کلاس در واقع تمام اطلاعات مربوط به فضای بین هر فرستنده با هر گیرنده ای را در بر دارد. برای این کار از یک ماتریس دو بعدی که یک بعد آن به اندازه تعداد فرستنده هاست و بعد دیگر به اندازه تعداد گیرنده هاست استفاده می کند. هر عضو یا درایه این ماتریس خود یک اشاره گر به یک فیلتر FIR می باشد که از طریق این فیلتر می توان فضای بین فرستنده i و گیرنده j را با یک فیلتر FIR مدلسازی نمود و از طریق دیالوگ CMediumDialog آن را اضافه یا اصلاح کرد.
متغیرهای این کلاس به شرح زیرند:
متغیر NumTx که برابر تعداد فرستنده هاست به عنوان بعد افقی یا تعداد ردیفهای ماتریس فیلتر FIR.
متغیر NumRx که برابر تعداد گیرنده هاست به عنوان بعد عمودی با تعداد ستونهای ماتریس.
متغیر H که از نوع CFIR*** تعریف شده است. هر کدام از ستاره ها نشاندهنده اشاره گر می باشند و چون می خواهیم که ماتریسی دو بعدی داشته باشیم که هر درایه آن یک اشاره گر به کلاس فیلتر FIR باشد یعنی از نوع CFIR* باشد لذا بایستی از سه ستاره برای اشاره به ردیف موردنظر ماتریس و بعد اشاره به ستون موردنظر آن ردیف از ماتریس و در نهایت برای اشاره به فیلتر FIRی موردنظر در آن ردیف و ستون مذکور، استفاده کنیم.
بقیه متغیرها برای حرکت دادن و کلیک کردن Buttonی ساخته شده این کلاس در Documentی پروژه مورد استفاده قرار می گیرد و با مراجعه به commentی source codeی برنامه می توانید از آنها و وظایفشان اطلاع پیدا کنید.
کلاس CMediumDialog
از این کلاس دیالوگی برای دیدن ماتریس فیلترهای FIRای که بین هر فرستنده و هر گیرنده در نظر گزفته می شود و کلیک کردن آنها برای تغییر پارامترها و ضرایب فیلترها استفاده می شود. همچنین می توانید ماتریسی را که تنظیم کرده اید بر روی فایل ذخیره کنید و یا فایلی را که قبلا ماتریس در آن ذخیره شده را باز کنید و یا اینکه همه مقادیر را reset کنید.
دیالوگ Medium Profile با شناسه IDD_DMediumProfile در ارتباط با این کلاس است. متغیرهای تعریف شده در آن همانند متغیرهای تعریف شده در کلاس CMedium می باشد.
کلاس CMSFlexGrid
این کلاس به دلیل اضافه شدن ActiveXی Microsoft Flex Grid به این پروژه خودبخود توسط VC++ به کلاسهای Work Spaceی برنامه اضافه شده است. از این کلاس و کلاسهای پشتیبان آن، چون کلاس COleFont و کلاس CPicture و کلاس CRowCursor برای نشان دادن ماتریس فیلترهای FIR و ضرایب این فیلترها استفاده شده است.
کلاس COCNSApp
به محض تعریف هر پروژه ای در VC++ این کلاس به کلاسهای Work Spaceی پروژه اضافه می گردد. از این کلاس برای نمایش اصلی ترین پنجره ی پروژه استفاده می شود. این کلاس از نوع کلاس CwinAppی خود Windows می باشد و در حقیقت handleی این نرم افزار را در اختیار دارد و این handle را در اختیار Windows هم قرار می دهد. در حقیقت اصلی ترین کلاس پروژه که حاکم بر نرم افزار است، می باشد.
کلاس COCNSCntrlItem
به محض تعریف هر پروژه ای در VC++ این کلاس به کلاسهای Work Spaceی پروژه اضافه می گردد. از این کلاس که از نوع COleClientItem است، برای کنترل Itemهای مختلف پروژه که مهمترین آنها دو objectی COleDocument و CView می باشند، استفاده می شود.
کلاس COCNSDoc
این کلاس از کلاسهای پیش ساخته توسط VC++ می باشد که برای کار با صفحه Documentی پروژه قرار داده شده است. از نوع objectی COleDocument است و دارای توابعی برای پرینت کردن و Save کردن یا Load کردن Document می باشد.
کلاس COCNSView
از این کلاس می توان برای کار با ادوات Visualی برنامه چون Menu Bar و هر آنچه که بر روی پنجره پروژه به نمایش در می آید مانند Buttonها، شکلها، همه کنترلها و دیگر چیزها. این کلاس هم به صورت اتوماتیک با تعریف یک پروژه MFC در VC++ به وجود می آید.
کلاس COleFont
این کلاس به دلیل اضافه شدن ActiveXی Microsoft Flex Grid به این پروژه خودبخود توسط VC++ به کلاسهای Work Spaceی برنامه اضافه شده است. از این کلاس و کلاسهای پشتیبان آن، چون کلاس CMSFlexGrid و کلاس CPicture و کلاس CRowCursor برای نشان دادن ماتریس فیلترهای FIR و ضرایب این فیلترها استفاده شده است.
کلاس CPicture
این کلاس به دلیل اضافه شدن ActiveXی Microsoft Flex Grid به این پروژه خودبخود توسط VC++ به کلاسهای Work Spaceی برنامه اضافه شده است. از این کلاس و کلاسهای پشتیبان آن، چون کلاس CMSFlexGrid و کلاس COleFont و کلاس CRowCursor برای نشان دادن ماتریس فیلترهای FIR و ضرایب این فیلترها استفاده شده است.
کلاس CRowCursor
این کلاس به دلیل اضافه شدن ActiveXی Microsoft Flex Grid به این پروژه خودبخود توسط VC++ به کلاسهای Work Spaceی برنامه اضافه شده است. از این کلاس و کلاسهای پشتیبان آن، چون کلاس CMSFlexGrid و کلاس CPicture و کلاس COleFont برای نشان دادن ماتریس فیلترهای FIR و ضرایب این فیلترها استفاده شده است.
کلاس CRx
کلاس CRx برای تعریف گیرنده در این پروژه به کار می رود. تمام متغیرهای آن در source codeی پروژه به صورت comment توضیح داده شده است و برای کسب اطلاعات دقیق در مورد آن می توانید به CDی ضمیمه پروژه مراجعه کنید.
کلاس CRxDialog
از این کلاس دیالوگی برای وارد کردن یک سری از خصوصیات گیرنده ها از طریق کاربر استفاده می شود. دیالوگ Receiver Profile با شناسه IDD_DReceiverProfile در ارتباط با متغیرهای این کلاس و گرفتن مقدار متغیرها از کاربر کار می کند.
کلاس CSim
از این کلاس برای تعریف کردن تمام مشخصات یک objectی شبیه سازی استفاده می شود. اصلی ترین کلاس پروژه که بقیه متغیرهای کلاسهای دیگر از طریق آن تعریف می شوند. لذا کلاسهایی مانند CMedium، CTx، CRx و CCode در آن #include می شوند تا از آنها objectهایی به صورت آرایه ای ساخته شود.
در این کلاس برای ذخیره objectهای فرستنده، گیرنده و کد از کلاس CObArray استفاده شده است که به محض تعریف یکی از این متغیرها توسط کاربر برای objectی آن فضای لازم اختصاص داده شده و تنها handleی آن در آرایه مربوطه ذخیره می شود. این آرایه ها عبارتند از TXs، RXs و codes که همگی از نوع CObArray اند و حاوی handleهای به ترتیب فرستنده ها، گیرنده ها و کدها می باشند و از طریق متغیرهای CTx* tx;، CRx* rx و CCode* code در این کلاس توسط خواست کاربر در RAM تعریف می شوند. فضا چون به صورت یک تک متغیر است تنها یکبار توسط متغیر CMedium* medium; در کلاس CSim تعریف می شود و نیازی به استفاده آرایه با استفاده از CObArray برای آن نیست.
با مراجعه به source codeی برنامه و مطالعه commentهای کلاس CSim متوجه می شوید که پارامترهای تولید کدهای متعامد مانند طول کد، وزن کد و پارامترهای حداکثر Collision نیز در این کلاس مورد استفاده قرار می گیرند تا بر اساس مقادیر ورودی کاربر برای این متغیرها، کدهای متعامد نوری تولید شوند. همچنین پارامتر حداکثر اندازه یک مجموعه کد نیز با استفاده از الگوریتم Johnson Bound تعیین می شود. متغیرهایی نیز برای تعیین زمان دقیق عمل شبیه سازی وجود دارد که این زمان را بر حسب Sub-Chip، Chip، بیت و بایت به ترتیب بوسیله ClockSubChip، ClockChip، ClockBit و ClockByte کنترل می کنند. بقیه متغیرها که عموما توسط کاربر تنظیم می شوند و در فصل قبل هم در مورد آنها توضیح داده شد را در source code می توانید ببینید.
مهمترین توابع استفاده شونده در این کلاس دو تابع Clock() و InitClock() می باشد که اینها در واقع برنامه کلاک فرستنده ها و گیرنده ها را Initialize کرده و در هر مرحله عمل شبیه سازی کلاک آنها را از طریق handleهای آنها که در CObArray موجود است، فراخوانی می کند. البته ابتدا کلاک فرستنده ها را اجرا می کند و بعد با اجرای برنامه CoupleData() تمام ورودیهای گیرنده ها را توسط خروجی فرستنده ها و فیلترهای FIRی موجود در medium بدست می آورد و بعد کلاک گیرنده ها را اجرا می کند.
کلاس CSimDialog
از این کلاس برای وارد کردن برخی از متغیرهای کلاس CSim که لزوما باید از طریق کاربر وارد شود، استفاده می شود که در فصل قبل طریقه وارد کردن و نام آنها ذکر شد. این کلاس در ارتباط با دیالوگ Simulation Profile می باشد و شناسه دیالوگ آن هم در source fileی پروژه IDD_SimDialog می باشد. متغیرهای موجود در این کلاس بسیار مشابه متغیرهای کلاس CSim می باشد و نیازی به معرفی ندارد. از این کلاس برای ساختن، اصلاح، ذخیره و باز کردن یک Simulationی که قبلا ذخیره شده است هم می توان استفاده کرد..
کلاس CSimShowDialog
کلاس اخیر از کلاسهای دیالوگی پروژه می باشد که با دیالوگ CSimShow با شناسه IDD_SimShowDialog کار می کند. وظیفه این کلاس نمایش اتفاقاتی است که در حین عمل شبیه سازی می افتد. در واقع کلاس دیالوگی اخیر می تواند سیگنال ورودی به فقط یک فرستنده و فقط یک گیرنده را همزمان در حین عمل شبیه سازی در Edit Boxهای موجود در قسمت State of System نشان دهد. در ضمن می تواند وقایع مهمی چون Acquision و Trackingی گیرنده ها را نیز در List Boxی موجود در صفحه دیالوگ نمایش دهد. البته باید قبل از آن نمایش این پارامترها با انتخاب گزینه های "on" در هر کدام از قسمتها آنها را فعال کرده باشید.
از مهمترین قابلیتهای این کلاس تنظیم سرعت عمل شبیه سازی است. به محض باز شدن دیالوگ کلاس در تابع OnInitDialog()ی کلاس یک تایمر با زمان Interruptی حداکثر 100ms ساخته می شود. سپس از طریق objectی CSim* sim روال InitClock()ی تمام فرستنده ها و گیرنده ها نیز اجرا می شود. با زدن دکمه Resume/Pause در صفحه عمل شبیه سازی آغاز می شود و تابع کلاک کلاس CSim در هر بار Interrupt دادن تایمر یکبار اجرا می شود. به این ترتیب با تغییر زمان Interruptی تایمر از طریق اسلایدر Master Speed می توان سرعت شبیه سازی را تغییر داد.
همچنین می توان با استفاده از دو اسلایدر دیگر نیز می توان سرعت را تنظیم کرد. به این صورت که این دو اسلایدر هر کدام عددی مابین یک تا صد را مشخص می کنند که حاصلضرب آنها تعداد بارهای اجرای برنامه کلاک کلاس CSim را در یکبار Interrupt دادن تایمر مشخص می کند لذا با کم و زیاد کردن اسلایدرها (به صورت پیش فرض اسلایدرهای پایینی روی کمترین مقدار یعنی عدد یک ست می شوند) می توان باز هم سرعت را تنظیم کرد!
در عمل سرعت شبیه سازی از یک حدی بیشتر نمی شود که عامل این محدودیت همان سرعت CPU می باشد. لذا بعد از یک حدی دیگر سرعت شبیه سازی افزوده نمی گردد و چون CPU مجبور می شود که با تمام ظرفیت خویش کار کند، چنین احساس می شود که کامپیوتر اصطلاحا Hang کرده است. ولی در این حالت نیز شما می توانید دکمه Resume/Pause را فشار دهید و بعد از مدتی کلمه Pauseی آن Resume می شود و عمل شبیه سازی متوقف می شود و شما می توانید سرعت را براحتی کاهش دهید و دوباره عمل شبیه سازی را راه اندازی کنید.
کلاس CTx
کلاس CTx برای تعریف فرستنده در این پروژه به کار می رود. تمام متغیرهای آن در source codeی پروژه به صورت comment توضیح داده شده است و برای کسب اطلاعات دقیق در مورد آن می توانید به CDی ضمیمه پروژه مراجعه کنید.
کلاس CTxDialog
از این کلاس دیالوگی برای وارد کردن یک سری از خصوصیات فرستنده ها از طریق کاربر استفاده می شود. دیالوگ Transmitter Profile با شناسه IDD_DTransmitterProfile در ارتباط با متغیرهای این کلاس و گرفتن مقدار متغیرها از کاربر کار می کند.
کلاس CTxRx
از این کلاس می توان برای تعریف یک objectی کامل Full Duplex یعنی هم فرستنده هم گیرنده استفاده کرد. در حال حاضر برای این کلاس طراحی صورت نگرفته است بلکه در آینده برای طراحی آن اقدامی صورت گیرد. در این صورت باید بسیاری تصمیمگیریها و برنامه ریزیها هم در رابطه با زمانبندی ارسال و دریافت این object صورت بپذیرد.
کلاس CTxRxDialog
از این کلاس دیالوگی برای وارد کردن یک سری از خصوصیات فرستنده-گیرنده ها از طریق کاربر استفاده می شود. دیالوگ TxRx Profile با شناسه IDD_DTxRxProfile در ارتباط با متغیرهای این کلاس و گرفتن مقدار متغیرها از کاربر کار می کند.
فصل 4 توضیح جزئی تر در رابطه با متغیرها و توابع مهم برخی کلاسها
برای توضیحات جزییات خصوصیات کلاسها می توانید به commentهای موجود در source codeی پروژه که در CDی ضمیمه پروژه موجود است مراجعه کنید. برای دیدن commentها به فایلهای هدر کلاسها مراجعه کنید. در آنجا می توانید Declarationی تمامی متغیرها و توابع تعریف شده در کلاس مورد نظرتان را به همراه توضیحات لازمه بیابید.
فصل 5 جمع بندی و پیشنهادات
جمع بندی
آنچه در این پروژه مدنظر بوده است، ساخت و پیاده سازی یک شبیه ساز شبکه CDMAی چندکاربره نوری بوده است تا بوسیله آن بتوان اتفاقاتی را که در مدل عملی آن به وقوع می پیوندد، ردیابی کرده و برخی پارامترهای شبکه را مورد تجزیه و تحلیل قرار داد. برای مثالها و نمونه هایی از این مدلها می توانید به CDی ضمیمه این پروژه مرجعه کرده و Exampleهای مسیر اصلی را در نرم افزار باز کنید و طبق آنچه از کار با نرم افزار یاد گرفته اید، آنها را اجرا کنید.
تحلیل هر مدل شبیه سازی شامل دو مرحله Run-Time یعنی در حال انجام عمل شبیه سازی و بعد از عمل شبیه سازی مدل می باشد. اولی را حین عمل بر روی دیالوگ SimShow می توانید مشاهده کنید ولی برای دیدن تحلیل بعد از عمل می توانید به Tabی Debug زفته و یکی از پارامترهای مهم شبکه مانند Bit Error Rate و یا Link Utilization را انتخاب کنید و مراحل بعدی تجزیه و تحلیل را بر روی نرم افزار دنبال کنید.
نرم افزار اخیر مطمئنا دارای کاستیهای متعددی می باشد و این پایان نامه نیز تنها برای درک آیندگان از طرز کار برنامه گردآوری شده است.
در پایان به ذکر برخی از ایده هایی که در آینده قابل اضافه کردن به پروژه می باشد و به ذهن نویسنده خطور کرده است، می پردازم.
پیشنهادات و ایده های آتی
1) به جای متغیر CBit* bit به عنوان واحد ساختمانی داده های پردازش شونده در فرستنده ها و گیرنده ها می توان از متغیر CData* data که واحد برزگتری است، استفاده کرد و عمل پردازش اطلاعات و تصمیم گیریهای اعمال شونده بعد آن را نیز گسترش داد که بر روی اطلاعات با حجم بالاتر انجام شود.
2) استفاده از سیاستهایی در رابطه با سازماندهی هدرها و Preambleها برای عملکرد بهتر سیستم در هنگام Acquisition در دو حالت آن و شناسایی متغیرهای کنترلی شبکه در فریمها.
3) هوشمندتر کردن عمل Tracking با اعمال برخی سیاستها در رابطه با شیفت دادن بیتها یا اینکه در چه مواقعی Tracking را به راه اندازیم.
4) راه کردهایی در رابطه با افزایش سرعت عمل شبیه سازی سیستم مانند Multi-Threading همراه با Multi-Processing با استفاده از چند CPU.
5) خلق الگویی گرافیکی برای حرکت بیتها یا Chipها یا حتی SubChipها بر روی صفحه Documentی اصلی و یا هر دیالوگی.
6) برداشتن بسیاری از محدودیتهای نرم افزاری از جمله تعداد بافرهای فرستنده یا گیرنده، استفاده از چند کد به جای یک کد، و یا شکل آنها.
7) استفاده از یک کلاس شمارنده (CCounter) برای دسته شمارنده موجود برای بایت، بیت، چیپ و Sub-Chip تا فرستنده ها و گیرنده ها به صورت متغیری خارج از کلاس خود به آن دسترسی پیدا کنند و دیگر محدودیتی روی استفاده از چند دسته شمارنده برای چند بافر نداشته باشیم.
8) استفاده از کلاس CBuffer برای آنکه فرستنده ها و گیرنده ها بدون محدودیت با برنامه ریزی قبلی بتوانند اطلاعات خود را ارسال یا دریافت کنند. این کلاس تمام خواص یک بافر کامل را در بر خواهد داشت.
9) تعریف کلاس CTxRx به جای کلاسهای CTx و CRx به این معنی که دیگر یک objectی فقط فرستنده یا فقط گیرنده نداریم بلکه هر objectی هم فرستنده است و هم گیرنده که با برنامه ریزی دقیق می توان آن را برای ارسال و دریافت اطلاعات مورد نیاز تنظیم کرد.
10) یکی از کارهای اصلی در این پروژه طراحی فیلترهای FIRی است که به صورت ماتریسی در objectی CMedium تعریف می شوند. طراحی این فیلترها تنها بر اساس تجربه و سواد افراد در رابطه با این شبکه می باشد. لذا می توان با بهره گیری از تجربیات افراد مجرب در این زمینه برای هوشمندتر کردن طراحی و بدست آوردن ضرایب این فیلترها اقدام کرد.
11) برای نحوه ارسال و دریافت اطلاعات می توان روشهای متعددی را که در لایه های مختلف مانند Data Link به نام Go Back N و Selective Repeat موجود است را به سیستم فرستنده ها و گیرنده ها اضافه نمود.
12) برای استفاده از آزمایشات و مثالهایی که با این پروژه شبیه سازی می شود و همچنین نتایج بدست آمده از آنها می توان محیط برنامه را کابرپسندتر کرد به گونه ای که امکان Save و یا Load کردن هر عملیاتی یا اتفاقی یا نتیجه در محیط برنامه امکان پذیر باشد تا آیندگان بتوانند به راحتی به نتایج گذشتگان دست یابند.
منابع و مراجع
[1] J. A. SALEHI, "Code Division Multiple-Access Techniques in Optical Fiber Networks-Part I & II", IEEE Transaction on Communication, VOL. 37, NO.8, August 1989