باتوجهبه مرجع [14] در مدلاسیون BFSK، ابتدا دادههای باینری که شامل صفر و یک میباشند به ترتیب به منفی و مثبت یک نگاشت میشوند و در ادامه نکتهای که وجود دارد این است در صورتی که فرکانس حامل برابر با
باشد، در صورتی که ما بخواهیم یک ارسال کنیم یک tone با فرکانس
ارسال میکنیم و در صورتی که بخواهیم صفر ارسال کنیم یک tone با فرکانس
ارسال خواهیم کرد. بنابراین اگر ما بخواهیم از مدلاسیون BFSK استفاده کنیم میتوانیم از رابطه زیر برای ارسال داده استفاده کنیم.


فقط نکتهای که وجود دارد به علت انتگرالگیری از سیگنال پیام فاز سیگنال ما پیوسته میشود؛ بنابراین به این نوع مدولاسیون CPFSK میگویند؛ ولی ما در ادامه برای سادگی کار آن را مدولاسیون FSK مینامیم. در معادله بالا (a)m سیگنال پیام،
فرکانس حامل و
نیز فرکانس نمونهبرداری ما میباشد، همانطور که میدانید
سیگنال حامل است که در سیگنال باندپایه ضرب میشود بنابراین سیگنال باند پایه ما به صورت زیر میباشد.

علاوه بر این پارامتر دیگری به نام spacing tone وجود دارد که
میباشد، چند نکته قبل از پیادهسازی نیاز است که گفته شود اول اینکه برای اینکه دادهها در سمت گیرنده به درستی دریافت شوند از لحاظ تئوری باید
در گیرنده غیر همدوس و در گیرنده همدوس،
باشد دلیل این امر این است که بین
و
تعامد برقرار شود همانطور که در شکل زیر میبینبد.

حداقل spacing tone برای اینکه گیرنده غیره همدوس دادهها را به درستی تشخیص دهد.
همانطور که مشاهده میکنید نقطه عبور از صفر tone اول با پیک tone دوم مطابقت دارد. توجه شود در این قسمت گیرنده همدوس و غیرهمدوس موردبررسی قرار نمیگیرد؛ ولی نکتهای که وجود دارد این است که گیرنده همدوس در گیرنده برای این که دادهها رو بتواند بهدرستی دریافت کند نیاز دارد که فاز را نیز تخمین بزند و بنابراین گیرنده پیچیدهتر و سربار محاسباتی بیشتری داریم؛ ولی پهنای باند موردنیاز کمتر از گیرنده غیرهمدوس است، و در گیرنده غیرهمدوس نیازی به تخمین فاز نداریم البته برای این دادهها به کیفیت بالا دریافت شوند در عمل بهتر است تخمین فاز انجام گیرد.
اکنون شروع به پیادهسازی این سیستم ارتباطی در gnu radio میکنیم، ابتدا فرستنده را موردبررسی قرار میدهیم.

فرستنده مدلاسیون BFSK، دادههای ارسال شده عکس میباشند.
همانطور که مشاهده میکنید دادههای ارسالی ما یک عکس میباشد که در ابتدا چون در مدولاسیون BFSK هر Symbol برابر با یک بیت میباشد؛ بنابراین هر بایت که از هشت بیت تشکیل شده است باید تبدیل به هشت بایت که هر کدام دارای یک بیت باارزش هستند تبدیل شود این کار با استفاده بلوک unpack K Bits انجام شده است، در ادامه چون دادهها بهصورت منفی یک و یک باید ارسال شوند دادهها با استفاده از دو بلوک char to float و Add const به منفی یک و یک تبدیل میشوند برای درک بهتر بلوک char to float که دارای پارامتر scale میباشد وقتی برابر نیم باشد؛ یعنی هر ورودی که دریافت میکند را دوبرابر میکند؛ یعنی صفر به صفر و یکبهدو تبدیل میشود و در ادامه با استفاده از بلوک Add const دادهها به منفی یک و یک تبدیل شده است. در ادامه با استفاده از بلوک Throttle مقدار symbol rate که برابر با bit rate میباشد رو مشخص کردهایم این بلوک کار پردارشی انجام نمیدهد؛ بلکه ابزاری است که با استفاده از آن میتوان نرخ ارسال داده را برای رایانه مشخص کرد. همانطور که میدانید در ارتباطات ما بهجای اینکه مقدار منفی یک یا مثبت یک ارسال کنیم یک پالس مستطیلی که دارای دامنه منفی یک یا مثبت بک میباشد ارسال میکنیم.
اما همانطور که میدانید در حوزه دیجیتال ما یک پالس مستطیلی واقعی نداریم زیر هر پالس مستطیلی بهنوعی از هزار تا تابع دلتا تشکیل شده است. به همین خاطر ما با استفاده از بلوک repeat که دارای پارامتری به نام Interpolation است این کار رو انجام میدهیم و مقدار آن را روی 16 قرار دادهایم. و نکتهای که وجود دارد از این جا به بعد نرخنمونه برداری ما 16 برابر میشود نکته دیگری که وجود دارد این است که میتوانیم بگویم ما هر symbol را با 16، نمونه نشان میدهیم بنابراین میتوان گفت sample per symbol برابر با 16 میباشد، و به نوعی میتوانیم بگویم با افزایش نرخ نمونهبرداری از حالت زمان گسسته به حالت زمان پیوسته رفتهایم، در ادامه همانطور که در معادله مشخص است باید از دادهها انتگرال گرفت و همانطور که میدانید در حوزه دیجیتال که سیگنالها گسسته هستند از جمعانبارهای به جای انتگرال استفاده میشود و برای انجام این کار ما خودمان با استفاده از کد پایتون یک بلوک تولید کردهایم که این کار رو انجام میدهد و کد آن در مرجع اشاره شده آورده شده است، بعد از اعمال انتگرالگیری با استفاده بلوک Phase Mod که قبلاً آن را توضیح دادهایم، سیگنال BFSK را تولید خواهیم کرد.
بنابراین، ورودی ما سیگنالی است که تابهحال تولید کردهایم و sensitivity باید برابر با
باشد، بنابراین خروجی این بلوک یک سیستم ارتباطی میباشد که مبتنی بر مدلاسیون BFSK است که در باند پایه قرار دارد، نکتهای که وجود دارد چون ما در حال شبیهسازی هستیم نیازی نیست دادهها را به باند میانی انتقال دهیم. و در ادامه برای اینکه کانال ارتباطی را شبیهسازی کنیم از بلوکی به نام Noise source استفاده کردهایم.
سیگنال خروجی در حوزه زمان و فرکانس به ترتیب بهصورت زیر میباشد.

خروجی حوزه فرکانس فرستنده مدلاسیون BFSK
و درصورتیکه نویز به سیستم اضافه کنیم به صورتی که واریانس نویز برابر با یک شود حوزه فرکانس که مشاهده خواهیم کرد بهصورت زیر خواهد بود.

مقایسه خروجی حوزه فرکانس زمانی که گیرنده دادهها را با نویز دریافت میکند و زمانی که بدون نویز دریافت میکند.
بنابراین، تأثیر نویز را در سیستم مشاهده کردهایم. در ادامه به موضوع گیرنده پرداخته میشود نکتهای که وجود دارد این است که از گیرنده غیرهمدوس استفاده خواهیم کرد. برای این کار گیرنده نیاز دارد مقادیر
،
و
را بداند و توجه داشته باشید در حال حاضر به علت این که ما در شرایط شبیهسازی هستیم و سیگنال شبیهسازی شده در باند پایه قرار دارد به همین دلیل گیرنده سیگنال دریافتی را در سیگنالهای تک تن با فرکانسهای
ضرب میکند این باعث میشود که خروجی کار ما به صورت زیر شود.

خروجی حوزه فرکانس در گیرنده پس از ضرب سیگنال دریافت شده در سیگنال تک تن با فرکانس

خروجی حوزه فرکانس در گیرنده پس از ضرب سیگنال دریافت شده در سیگنال تک تن با فرکانس
همانطور که مشاهده میکنید اکنون ما با قراردادن یک Low Pass Filter سایر اجزای فرکانسی را حذف میکنیم. برای درک بهتر بلوک دیاگرام گیرنده بهصورت زیر میباشد.

گیرنده مدلاسیون BFSK
همانطور که مشاهده میشود ما از یک نوع low pass Filter به نام moving average استفاده کردهایم که دارای پیچیدگی و سربار محاسباتی بسیار کم میباشد که خیلی دقیق نیست[2]، و دارای پاسخ فرکانسی زیر میباشد.

پاسخ فرکانسی فیلتر Moving average
نکتهای که وجود دارد این است که اولین عبور از صفر در حوزه فرکانس برابر است با
که M در اینجا همان مقدار length در بلوک moving average میباشد. ما مقدار 25=M قرار دادهایم. در ادامه خروجی بلوک Complex to Mag^2 را مشاهده خواهید کرد و خروجی این بلوک به صورت زیر میباشد.

خروجی حوزه زمان بعد از بلوک complex to Mag^2
همانطور که مشاهده میکنید خروجی این دو دقیقاً معکوس یکدیگر میباشند زیر وقتی که ما صفر ارسال میکنیم، حامل
ارسال کردهایم و بنابراین، حامل
را نداریم و بنابراین در حوزه زمان سیگنالی را مشاهده نخواهیم کرد و برعکس و بعد از این که خروجی این دو بلوک رو از هم کم کنیم با استفاده از بلوک Subtract خروجی به صورت زیر در میآید.

خروجی حوزه زمان بعد از بلوک subtract
و همانطور میدانید ما با استفاده از بلوک repeat هر نمونه رو به 16 نمونه تبدیل کردهایم حال با استفاده از بلوک
هر 16 نمونه رو به یک نمونه تبدیل میکنیم و بلوک Binary Slicer، در صورتی که مقدار منفی داشته باشیم آن را به صفر تبدیل کرده و در غیر این صورت آن را به یک تبدیل میکند همانطور که در شکل زیر مشاهده میکنید.

خروجی حوزه زمان بعد از بلوک binary Slicer
در ادامه برای درک بهتر این موضوعات به ذکر مثالهای دیگر میپردازیم.
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.