تحت شرایط عملی، علاوه بر نویز، چالشهای خیلی مهم دیگری نیز وجود دارد که از جملهی آنها میتوان به افست فرکانسی و زمانی و چند مسیرگی اشاره کرد، افست فرکانسی علت ایجاد آن به دو صورت میباشد، اول اینکه ممکن است فرستنده و گیرنده، یکی یا هر دو، در حالت حرکت باشند که به این نوع افست فرکانسی، Doppler Shift گفته میشود، علاوه بر این عامل دیگری که باعث افست فرکانسی میشود، این است که فرستنده و گیرندههای ما داری oscillator های متفاوتی هستند، به عبارتدیگر همه oscillator های دستگاههای RF دارای دقتی هستند که بر حسب ppm بیان میشود، به عنوان مثال برای درک بهتر ما میخواهیم در فرکانس 900 مگاهرتز سیگنالی رو ارسال و دریافت کنیم، در صورتی که Hack RF ما دارای دقت
و RTL-SDR ما دارای دقت
باشد. حداکثر افست فرکانسی ما برابر است با:

در نهایت در بدترین حالت افست فرکانسی ما برابر است با:

ولی نکتهای که وجود دارد این است که Doppler Shift، نسبت به افست فرکانسی ناشی از oscillatorها دارای افست فرکانسی بهشدت کمتری است، البته دقت شود تنها زمانی این مقدار خیلی زیاد میشود که بخواهیم بین یک ماهواره LEO و یک ایستگاه زمینی ارتباط برقرار کنیم. اکنون برای برطرفکردن این موضوع از FFT کمک میگیریم و تا حدود زیادی میتوانیم موضوع افست فرکانسی را حل کنیم.
همانطور که در شکل فوق مشاهده میکنید فرکانس حامل 915 مگاهرتز و نرخ نمونهبرداری یا به عبارتی در اینجا پهنایباند، برابر با 1 مگاهرتز است وقتی که تبدیل فوریه گرفته میشود همانطور که در مثال قبل مشاهده کردید سیگنال باید فرکانس مرکزیاش صفر باشد اما در واقعیت به علت افستهای فرکانسی، به جای این که فرکانسی مرکزی آن صفر هرتز باشد به عنوان مثال 25 کیلوهرتز است، بنابراین ما با استفاده از تبدیل فوریه پیک سیگنال را به دست میآوریم و بعد از به دست آوردن پیک سیگنال، فرکانسی که در آن پیک رخ داده است را به دست میآوریم سپس با استفاده از بلوکی به نام shift frequency این افست را حذف میکنیم، نکتهای که وجود دارد این است که ما تا بلوک Argmax مقدار افست فرکانسی را به دست میآوریم اما دادهای که ما به دست آوردیم از صفر شروع میشود تا اندازه FFT، برای اینکه این مقدار را به فرکانس مورد نظر تبدیل کنیم باید به صورت زیر عمل کنیم:

که این عملیات با استفاده از دو بلوک Multiply const و Add const انجامگرفته شده است. در ادامه نکتهای که وجود دارد و آن به تصمیم کاربر بستگی دارد و آن این است که میتوان افست فرکانسی سیگنال را هر لحظه به دست آورد و این افست فرکانسی را با استفاده از بلوک frequency shift از بین برد یا خیر برای بار اول که افست فرکانسی به دست آمد دیگر عملیات بهروزرسانی انجام نگیرد که هر کدام یک سری معایب و مزایا دارند، عیب حالت دوم این است که ممکن است در ابتدا پیک سیگنال بهاشتباه تشخیص داده شود، ولی حالت اول سربار محاسباتی بالاتر و همچنین پایداری کمتری دارد؛ ولی در صورت خطا توان اصلاح آن را دارا میباشیم.
از موارد دیگری که باید به آن اشاره کرد هر چهقدر اندازه FFT مقدارش بیشتر باشد دقت تشخیص افست فرکانسی بیشتر است، ولی بااینوجود دارای سربار محاسباتی بیشتری میباشد.
در ادامه نکته خیلی مهمی که باید به آن اشاره کرد دربارة مدولاسیونهای دیجیتال BPSK، QPSK و… میباشد و آن این است، فرض کنید که سیگنال
ما، که یک سیگنال باند پایه میباشد، از مدلاسیون BPSK برای انتقال داده استفاده میکند و بعد از گذر از کانال، گیرنده چنین سیگنالی را دریافت خواهد کرد:

درصورتیکه نویز را نادیده بگیریم، و سیگنال دریافتی را در خودش ضرب کنیم اثر مدولاسیون خنثی میشود.

فقط نکتهای که وجود دارد این است که افست فرکانسی ما هم دو برابر شده است، بنابراین در محاسبات برای حذف افست فرکانسی، افست فرکانسی به دست آمده را باید بر دو تقسیم کرد. در مورد مدلاسیونهای دیگری مانند QPSK در اصل باید سیگنال دریافتی را چهار بار در خودش ضرب کرد که این اتفاق بیافتد، برای درک بهتر ریاضیات این موضوع بهتر است.
در ادامه به موضوع فرستند مدولاسیون BPSK اشاره خواهیم کرد در ابتدا بلوک دیاگرام فرستنده بهصورت زیر میباشد.

شکل 3‑38 فرستنده مدلاسیون BPSK یا استفاده از بلوک Constellation Modulator
همانطور که مشاهده میکنید با استفاده از بلوک message strobe پیام دلخواهی که میخواهیم برای گیرنده ارسال کنیم را با استفاده از این بلوک تعریف میکنیم و بهصورت زیر عمل میکنیم:
|
1 |
pmt.cons(pmt.make_dict() ,pmt.pmt_to_python.numpy_to_uvector( numpy.array([ord(c) for c in "Hello GNU Radio!"],numpy.uint8))) |
شکل 3‑39 نحوه مقداردهی بلوک message strobe
سپس دادههای ما وارد بلوک سفارشی، packet format میشود، و بهصورت زیر این بلوک سفارشی کدنویسی شده است:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# Embedded Python Block """ """ import numpy as np from gnuradio import gr import pmt class blk(gr.sync_block): """Packet Format""" def __init__(self): gr.sync_block.__init__(self, name = "Packet Format", in_sig = None, out_sig = None) self.message_port_register_in(pmt.intern('PDU_in')) self.message_port_register_out(pmt.intern('PDU_out')) self.set_msg_handler(pmt.intern('PDU_in'), self.handle_msg) def handle_msg(self, msg): # Generate header hdr1 = np.tile([85,170,85,170,85,170,85,170],16) hdr1 = hdr1.tolist() # Generate footer ftr1 = np.tile([85,170,85,170,85,170,85,170],128) ftr1 = ftr1.tolist() ftr2 = np.tile([0, 0, 0, 0, 0, 0, 0, 0], 896) ftr2 = ftr2.tolist() # Incoming message inMsg = pmt.to_python(msg) pld = inMsg[1] mLen = len(pld) |
شکل 3‑40 قسمت اول کد بلوک سفارشی packet format
این کد ادامه دارد؛ ولی برای سادگی ابتدا این کد رو توضیح میدهیم و سپس به دنبال آن، مابقی کد را آورده و آن را موردبررسی قرار میدهیم.

شکل 3‑41 یکی از انواع، فرمت ارسال داده
به شکل فوق توجه کنید، ساختار یک packet بهصورت فوق است، و تقریباً بر اساس این ساختار ما دادههای خود را میخواهیم ارسال کنیم. درصورتیکه این موارد حداقلی رعایت نشود ما نمیتوانیم دادهها را در گیرنده بهدرستی دریافت کنیم و اما کد بهصورت زیر میباشد. ابتدا یک سری داده header با مقادیر
تولید میکنید و این مقادیر رو 16 بار تکرار میکنید، سپس نوبت به تولید دادههای footer میرسد و دو نوع داده footer تولید کردهایم که یکی از آنها دارای مقادیر مشابه header میباشد با این تفاوت که بهجای این که 16 بار تکرار شود 128 بار تکرار شده است و سپس footer دوم دارای مقادیر صفر میباشد که 896 بار تکرار شده است.
در ادامه دادههای پیامی که میخواهیم ارسال کنیم فراخوانی شده و طول آن محاسبه شده و در نهایت ساختار کلی پیام ارسالی ما بهصورت زیر میباشد.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
if (mLen > 0): char_list = hdr1 #Add access code char_list.append(225) char_list.append(90) char_list.append(232) char_list.append(147) char_list.append(147) #Add payload length twice (as required by the 'Correlate Code - Stream Tag' block) char_list.append(mLen >> 8) char_list.append(mLen & 255) char_list.append(mLen >> 8) char_list.append(mLen & 255) char_list.extend(pld) char_list.extend(ftr1) char_list.extend(ftr2) out_len = len(char_list) self.message_port_pub(pmt.intern('PDU_out'),pmt.cons(pmt. PMT_NIL, pmt.init_u8vector(out_len, char_list))) |
شکل 3‑42 قسمت دوم کد بلوک سفارشی packet format
در ابتدا دادههای مربوط به header قرار میگیرد سپس یک سری داده به نام access code به پیام اضافه شده و سپس طول دادههای Payload یا دادههای که میخواهیم ارسال کنیم به packet اضافه میشود و این عمل دو بار تکرار میشود و سپس دادههای payload ما اضافه شده و در نهایت دادههای footer به packet اضافه شده نکتهای که وجود دارد صفرهای ارسالی در آخر packet یکی از کاربردهای آن بهعنوان guard band میباشد که میتواند باعث شود دادههای ما در برابر تداخل مقاوم شوند.
در ادامه دادهها از بلوک PDU to tagged stream عبور داده میشوند به این صورت که دادهها از PDU به stream تبدیل شده، و سپس دادهها با استفاده از بلوک constellation modulator ارسال میشوند در این بلوک اتفاقات خاصی میافتد اولین مورد پارامتر sample per symbols که برابر با 8 میباشد همانطور که در مثال قبلی گفته شد. ولی تفاوتی که در اینجا وجود دارد مفهومی به نام شکلدهی پالس میباشد. با توجه به مرجع فرض کنید برای سادگی کار ما یک سری داده را با استفاده از مدلاسیون PAM میخواهیم ارسال کنیم که این سیگنال
میباشد، و سطح سیگنال را با
نمایش میدهیم همانطور که میدانید در صورتی که ما در حوزه زمان یک پالس مستطیلی ارسال کنیم در حوزه فرکانس یک sink خواهیم داشت، که تبدیل فوریه آن به صورت زیر میباشد:

جای که
میباشد، بنابراین طیف سیگنال به وسیلهی
که تبدیل فوریه پالس
میباشد تعیین میشود، که
یک پالس مستطیلی با دامنه یک و عرض
میباشد. بنابراین
که 95 درصد توان آن در پهنای باند
نهفته است. برای کاهش پهنایباند به
ما به جای اینکه از پالس مستطیلی استفاده کنیم از پالس
که به آن sink یا به نوعی raised cosine filter گفته میشود، استفاده میکنیم. بنابراین داریم:

که
یک پارامتر کنترلکننده پهنای باند میباشد که
میباشد، نکتهای که وجود دارد این است که در صورتی که
باشد یعنی تابع ما sink میباشد اما در عمل این یک کار نشدنی است زیرا غیر علی میباشد، در این صورت پهنایباند
برای پالس raised cosine filter مدلاسیون PAM برابر با
میباشد، در شکل زیر پالسraised cosine filter در حوزه زمان با
مختلف نشان داده شده است. و root raised cosine یک فیلتر میباشد که خیلی شبیه به فیلتر raised cosine میباشد که ما معمولا از آن استفاده میکنیم.
![طراحی و پیادهسازی یک سیستم ارتباطی ارسال متن، مبتنی بر مدولاسیون BPSK 32 شکل 3‑43 نمایش حوزه زمان شکلدهی پالس با استفاده از فیلتر RC [20]](https://sisoog.com/wp-content/uploads/2026/08/3-43.webp)
شکل 3‑43 نمایش حوزه زمان شکلدهی پالس با استفاده از فیلتر RC [20]
نکتهای که وجود دارد این است که پالسهای raised cosine filter در حالت ایدآل از
تا
ادامه دارند، اما برای اهداف عملی tails پالس باید کوتاه باشند، مثلا تا k نقطه از اولین عبور از صفر از چپ و راست لوب اصلی ادامه پیدا کند.
نکتهای که وجود دارد معمولا به
، roll of factor گفته میشود، که در بلوک Constellation Modulator به وسیله پارامتری تحت عنوان Excess BW تعیین میشود. از دیگر پارامترهای مهمی که در این بلوک قرار دارد میتوان به Differential encoding اشاره کرد که پارامتر خیلی مهمی است، و باعث میشود در سمت گیرنده ابهام فاز نداشته باشیم. و در نهایت سیگنال ارسال میشود. در اینجا باید به یک موضوع بسیار مهم اشاره کرد و آن موضوع گیرنده بهینه میباشد، در واقع تئوری گیرنده بهینه بیان میکند که برای به حداکثر رساندن نسبت سیگنال به نویز در گیرنده ما باید سیگنال دریافتی را با یک match filter کانوالو کنیم. Match filter یعنی فیلتری مشابه با پالسی که از فرستنده ارسال کردیم، باشد.
بنابراین، همانطور که در فرستنده از یک فیلتر root raised cosine استفاده کردهایم در سمت فرستنده نیز به چنین فیلتری نیاز داریم. در اینجا باید به موضوع دیگری به نام polyphase decomposition نیز اشاره کرد، در واقع بسیاری از بلوکهای که با فیلتر سروکار دارند که یکی از آن بلوکهای interpolation و decimation میباشد، از polyphase استفاده میکنند. Polyphase decomposition برای پیادهسازی فیلترهای دیجیتال کاربرد بیشتری دارد، زیرا امکان موازیسازی محاسبه عملیات کانولوشن را فراهم میکند و نسبت به حالت عادی باعث سرعت انجام بیشتر این عملیات میشود. ولی سربار محاسباتی را افزایش میدهد.
به مدولاسیون BPSK برگردیم، خود بلوک Constellation modulator بهصورت پیشفرض برای محاسبه کانولوشن از polyphase استفاده میکند؛ اما برای درک بهتر این موضوع میتوان فرستنده مدولاسیون BPSK رو بهصورت زیر نیز پیادهسازی کرد.

شکل 3‑44 فرستنده مدلاسیون BPSK با استفاده از بلوک Polyphase arbitrary resampler
و پارامترهای متغیر rrc_tpas_1 بهصورت زیر میباشد.

شکل 3‑45 نحوه مقداردهی پارامترهای بلوک Polyphase arbitrary resampler
پارامترهای فوق به این صورت است وقتی که ما از polyphase با Filter،n استفاده میکنیم اولین پارامتری که باید تنظیم کنیم مقدار gain میباشد و با تنظیم gain روی
باعث میشود که دامنه سیگنال خروجی این بلوک تقریبا بین منفی و مثبت یک باشد و بیشتر از این نشود چون اگر بیشتر از این مقدار شود وقتی خروجی این بلوک به ورودی بلوکی مانند soapy Hack RF Sink وصل شود Hack RF به اشباع میرود.
دومین پارامتر و سومین پارامتر به نوعی مکمل هم هستند دومین پارامتر Sample rate و سومین پارامتر symbol rate میباشد ولی معمولا این دو پارامتر را نرمالیزه میکنند یعنی به این صورت است که به جای اینکه مقدار sample rate را برابر با symbol rate ضرب در sample per symbol قرار بدهند مقدار آن را برابر با sample per symbol قرار داده و مقدار symbol rate را برابر با یک قرار میدهند، پارامتر بعدی نیز roll off factor میباشد. و در نهایت پارمتر نهایی معمولا number taps

میباشد که معمولا مقدار آن به صورت زیر میباشد.
همانطور که قبلاً گفته شد بلوک constellation modulator نیز از polyphaseها استفاده میکند که بهصورت پیشفرض مقدار filter، برابر با 32 و مقدار number taps برابر با
تنظیم شده است.
نکتهای که وجود دارد این است که برای این که بتوانیم دادهها در حوزه فرکانس بهصورت پایدار مشاهده کنیم، guard band که داری مقادیر صفر بودند را حذف کردیم و همانطور که در شکل زیر میبینید، sample rate برابر است با یک مگاهرتز که باتوجهبه این که sample per symbol برابر با 8 میباشد بنابراین symbol rate که در اینجا برابر با bit rate میباشد برابر با 125 کیلوهرتز است.
در ادامه حوزه فرکانس آن را مشاهده خواهیم کرد.

شکل 3‑46 خروجی حوزه فرکانس مدلاسیون BPSK در سمت فرستنده
باتوجهبه این که symbol rate برابر با 125 کیلوهرتز و roll of factor برابر با میباشد بنابراین پهنای باند اشغال شده منفی 6 دسیبل برابر خواهد بود:

و در ادامه حوزه زمان را مشاهده میکنید.

شکل 3‑47 خروجی حوزه زمان مدلاسیون BPSK در سمت فرستنده
فقط نکتهای که وجود دارد این است که ما اکنون در حالت شبیهسازی هستیم و وقتی بخواهیم بهصورت عملی آزمایش خود را انجام دهیم به بلوکی مانند soapy Hack RF Sink نیاز داریم؛ ولی دقت شود قبل از این که دادههای خود را برای این بلوک بفرستید بهتر است دامنه سیگنال خود را تنظیم کنید و مقدار بیشینه را روی یک قرار بدهیم در غیر این صورت Hack RF به اشباع میرود و آن کارایی مناسب را نمیتوان از آن انتظار داشت؛ بنابراین میتوان با قراردادن بلوکی به نام Multi const، مقدار بیشینه را به یک رساند و حداکثر کارایی را انتظار داشت.
اکنون به موضوع گیرنده میپردازیم، همانطور که در ابتدا گفته شد برای اینکه بتونیم افست فرکانسی را حذف کنیم از FFT کمک گرفتیم و سپس با استفاده از بلوک Frequency Shift توانستیم تا حد قابلتوجهی افست فرکانسی را حذف کنیم در شکل زیر بلوک دیاگرام گیرنده آورده شده است.

شکل 3‑48 گیرنده مدلاسیون BPSK
اما قبل از این که به ادامه مطالب بپردازیم نیاز است یک سری موضوعات گفته شود و آن این است که در دنیای واقعی وقتی که ما یک دادهای را از فرستنده به سمت گیرنده ارسال میکنیم دچار افستهای فازی و فرکانسی و زمانی میشود که برای این موضوع طی دو مرحله اقدام میشود اولین مرحله اکتساب است که در آن تقریبی از افستها زده میشود و سپس در مرحله دوم ردیابی انجام میگیرد که در آن بهصورت جزئی به افستها پرداخته میشود. و بنابراین FLL Band-Edge که در ادامه گفته میشود و FFT گفته شده نوعی اکتساب هستند که تقریبی از افست فرکانسی را برای ما مشخص میکنند.
بعد از بلوک Frequency Shift، بلوکی وجود دارد به نام FLL Band-Edge، کارایی این بلوک همانند FFT میباشد و میتواند افست فرکانسی را برطرف کند اما کند است، برای درک بهتر این موضوع یک الگوریتم به روزرسانی را در نظر بگیرید که با استفاده یک Step size خودش را به روزرسانی میکند، نکتهای که وجود دارد در صورتی که افست فرکانسی ما مثلا 30 کیلوهرتز باشد زمان میبرد که این بلوک بتواند افست فرکانسی رو حذف کند و علاوه بر این، نکتهای که وجود دارد این است که همانطور که در فرستنده مشاهده کردید ما برای مدتی صفر ارسال میکردیم و ارسال صفر یعنی این که ما هیچ دادهای را ارسال نمیکنیم و در اصل به عنوان guard band استفاده میشود در صورتی که این guard band وجود نداشت میتوانستیم از FFT برای تخمین افست فرکانسی استفاده نکنیم زیرا بعد از مدتی این بلوک افست فرکانسی را حذف میکرد اما وجود صفر باعث شد که تداخل بین Symbol کم شود اما وقتی که صفر ارسال میشود چون گیرنده ما برای مدتی دادهای دریافت نمیکند یا به عبارتی صفرهای پشت سر هم دریافت میکنند FLL همگرایی خود را از دست میدهد و این باعث میشود یک سری از دادههای ما از دست بروند، به همین دلیل ابتدا افست فرکانسی را با استفاده از FFT بین میبریم و سپس با استفاده از بلوک FLL Band-Edge با توجه به این که افست فرکانسی کم است میتوانیم به سرعت افست فرکانسی را حذف نماییم.
در ادامه پارامترهای این بلوک شرح داده میشود. اولین پارامتر و دومین پارامتر که مشخص هستند یعنی Sample per symbol و Filter roll off factor که درباره این پارامترها قبلا صحبت شده است.

شکل 3 49 تعیین پارامترهای بلوک FLL Band-Edge
دو پارامتر دیگر به نام prototype Filter size و Loop bandwidth وجود دارد که معمولاً مقدار Loop bandwidth بین
میباشد. در ادامه به پارامتر loop bandwidth بیشتر پرداخته میشود.
بعدازاین بلوک، از بلوک Low Pass filter استفاده شده است نکتهای که وجود دارد همانطور که دیدید پهنای باند کلی سیگنال ارسالی ما یک مگاهرتز است؛ اما پهنای باند اشغال شده 84 کیلوهرتز بود در صورتی که از Low Pass Filter استفاده نکنیم نویز قسمتی که جز پهنایباند اشغال شده نیست وارد سیستم ارتباطی ما میشود و نکتهای که وجود دارد این است که هر چه قدر پهنایباند اشغال شده کمتر باشد نویز کمتری را متحمل میشویم اما سرعت انتقال داده کم است بنابراین، ما با استفاده از یک Low Pass Filter نویزهای خارج از باند را حذف میکنیم. همانطور که مشاهده میکنید فرکانس قطع Low Pass Filter را به صورت زیر محاسبه کردهایم:

نکتهای که وجود دارد Low Pass Filter در شرایط ایده آل بهصورت یک پنجره مستطیلی میباشد؛ ولی در حالت واقعی تقریباً بهصورت زیر میباشد.
![طراحی و پیادهسازی یک سیستم ارتباطی ارسال متن، مبتنی بر مدولاسیون BPSK 48 شکل 3‑50 تعیین محدوده transition band در یک بلوک Low Pass Filter [22]](https://sisoog.com/wp-content/uploads/2026/09/3-50.webp)
شکل 3‑50 تعیین محدوده transition band در یک بلوک Low Pass Filter [22]
علاوه بر این میتوان در Gnu Radio با مراجعه منو tools و زدن گزینة Filter Design Tool انواع فیلترها را با تغییر انواع پارامتر مشاهده کرد، در ادامه، بعدازاین بلوک، بلوکی به نام polyphase clock sink وجود دارد، این بلوک وظیفه حذف افست زمانی و RRC filtering را انجام میدهد و یا به عبارتی match filter ما میباشد. ما از موضوع Match filtering عبور میکنید زیر قبلاً به این موضوع اشاره شده است؛ اما دربارهی موضوع حذف افست زمانی برای سادگی کار ما فرض میکنیم از شکل پالس مستطیلی استفاده میکنیم. به شکل زیر نگاه کنید.
![طراحی و پیادهسازی یک سیستم ارتباطی ارسال متن، مبتنی بر مدولاسیون BPSK 49 شکل 3‑51 ایجاد افست زمانی به علت عدم همزمانی پالسهای مستطیلی [23]](https://sisoog.com/wp-content/uploads/2026/09/3-51.webp)
شکل 3‑51 ایجاد افست زمانی به علت عدم همزمانی پالسهای مستطیلی [23]
همانطور که میبینید پالس مستطیلی فوق پالس دریافتی میباشد و پالس پایینی پالسی است که ما تولید میکنیم، همانطور که میدانید گیرنده مقدار sample rate و symbol rate را میداند بنابراین میتواند پالسی مانند فرستنده تولید کند، منظور از حذف افست زمانی این است که چه زمانی شروع به نمونهبرداری کنیم که پالسی که فرستنده میفرستد با پالسی که گیرنده تولید میکند، زمان شروع آنها با هم مطابقت داشته باشد. به عبارتی پالس فرستنده دقیقاً روی گیرنده بیفتد و این کار با استفاده از یک Phase Locked Loop انجام میگیرد و وقتی زمان نمونهبرداری بهینه پیدا شد عمل match filtering با استفاده از polyphase decomposition انجام میگیرد. در ادامه پارامترهای این بلوک موردبررسی قرار میگیرد.

شکل 3‑52 تعیین پارامترهای بلوک polyphase clock sync
پارامترهای مانند initial phase و maximum rate deviation برای حذف افست زمانی استفاده میشود و معمولاً مقدار آن برابر با مقدار پیشفرض میباشد و output SPS نیز مربوط به زمانی میباشد که ما از بلوک Equalization استفاده میکنید درصورتیکه از این بلوک استفاده نمیکنیم مقدار آن را برابر یک قرار دهید در ادامه که به موضوع Equalization ورود کردیم این پارامتر بیشتر موردبررسی قرار خواهد گرفت گاهی اوقات نیز بهجای استفاده از این بلوک از بلوک symbol sink استفاده میکنیم که یک بلوک جامعتری میباشد برای درک کامل این بلوک بهتر است به مرجع رجوع شود. بعدازاین بلوک، بلوک Costas Loop میباشد که برای حذف افست فرکانسی و فازی مورداستفاده قرار میگیرد البته نکتهای که وجود دارد این است این بلوک برای مدولاسیونهای مانند BPSK، QPSK و مدولاسیونهای که از جنس PSK هستند مناسب هست و این کار را با استفاده از یک Phase Locked Loop انجام میگیرد. پارامترهای این بلوک بهصورت زیر تنظیم میشود.

شکل 3‑53 تعیین پارامترهای بلوک costas Loop
درصورتیکه از مدولاسیون BPSK استفاده شده مقدار Order برابر با 2 میباشد و در صورتی که QPSK باشد این مقدار برابر با 4 است.
نکتهای دیگری که وجود دارد این است که معمولاً قبل از حذف افست زمانی بلوکی تحت عنوان AGC قرار میگیرد و علت آن این میباشد که وقتی ما سیگنالی را از فرستنده به سمت گیرنده ارسال میکنید به علت عواملی مانند فاصله، fading (که در ادامه به آن میپردازیم)، اثر چند مسیری و داپلر، دامنه سیگنال ورودی در گیرنده میتواند در یک محدوده دینامیکی وسیعی تغییر کند، و نکتهای که وجود دارد این است که برای اینکه همگامسازی بهدرستی کار کند، دامنه سیگنال ورودی نیاز است که بین منفی و مثبت یک باشد، و AGC این کار را انجام میدهد. پارامترهای آن را روی مقدار پیشفرض قرار دهید. نکتهای که وجود دارد این است که این بلوک نیز از یک PLL در ساختار خود استفاده میکند، بنابراین خوب است ساختار یک PLL را بهصورت کلی شرح دهیم.
باتوجهبه مرجع یک PLL به صورت کلی از سه قسمت Phase error detector، Loop Filter و NCO تشکیل شده است. چند نکته در صورتی که یک PLL، Loop Filter نداشته باشد به عنوان PLL مرتبه اول شناخته میشود به همین دلیل، در طراحی زیر، یک PLL مرتبه دوم داریم.

شکل 3‑54 ساختار یک PLL مرتبه اول
همانطور که مشاهده میکنید پارامترهای مانند ،
و … در یک PLL باید مقداردهی شوند اما نیاز نیست ما این پارامترها را مقداردهی کنیم بلکه ما فقط نیاز است به صورت کلی در بلوکهای که دارای PLL میباشند دو پارامتر Damping factor و Loop bandwidth را مقداردهی کنیم سپس بلوک با استفاده از این دو پارامتر مقادیر سایر پارامترها را به دست میآورد. البته همه PLLها به این صورت نیستند و این مفاهیم کلی میباشند.
در طراحی یک PLL همیشه بین سرعت همگامسازی و پایداری باید یک تعادل برقرار شود، اگر مقدار Damping factor را خیلی بالا ببریم سیستم بدون نوسان کار میکند ولی کند است، برعکس اگر مقدار Damping factor کم باشد سریعتر به مقدار مطلوب میرسیم؛ ولی همراه با نوسان است. بهعنوانمثال برای تکنیک مدولاسیون FHSS چون نوسانات بالا است بهتر است مقدار Damping factor کم استفاده کنیم.
پارامتر بعدی فرکانس طبیعی یا
میباشد و نکتهای که وجود دارد PLL در حالت ردیابی مانند یک low pass filter عمل میکند. در این حالت فرکانس طبیعی را میتوان معیاری از Loop bandwidh در نظر گرفت. وقتی که PLL در حالت ردیابی قرار دارد، یعنی سیگنال ورودی در حال تغییر جزئی است، PLL باید این تغییرات را دنبال کند. نکتهای که وجود دارد این است که فیلتر پایین گذر فقط سیگنالهای با تغییرات کند را عبور میدهد و تغییرات سریع و نویز را حذف میکند، PLL نیز در این حالت فقط سیگنالی که تغییرات آهسته دارد را عبور میدهد یا به عبارتی آن را دنبال میکند و نویز و پرشهای سریع را نادیده میگیرد، بنابراین Loop bandwidth بزرگتر باعث میشود که PLL، تغییرات سریعتر را نیز دنبال کند و Loop bandwidth کوچکتر یعنی PLL تغییرات کندتر را دنبال میکند و نسبت به نویز مقاومتر میشود.
در ادامه به بلوک constellation decoder میرسیم که عکس عمل مدولاسیون BPSK را انجام میدهد؛ یعنی دادهها منفی یک را به صفر و دادههای مثبت یک را به یک تبدیل میکند و در ادامه از بلوک diffrential decoder استفاده میکنیم که علت آن مشخص است و سپس به بلوک correlate access code – Tag stream میرسیم اگر یادتان باشد در فرستند به دادههای payload خود یک سری داده اضافه کردیم مانند access code، header، طول دادههای payload و… ما در گیرنده با قراردادن مقدار access code در بلوک correlate access code -Tag stream شروع داده رو متوجه میشویم و دادهها رو دریافت میکنیم.
آموزش پیادهسازی مدولاسیون BFSK در GNU Radio
با سلام
مقاله خوبی بود .متاسفانه در عمل چیپ های انگشت شماری در کار با مودلاسیون psk در بازار موجودند و نهایتا تست رو باید روی sdr card ها انجام داد.
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.