رادیو و پردازش سیگنال

SDR چیست؟ رادیوی نرم‌افزاری و داده‌های I/Q

در رادیوی نرم‌افزاری، برنامه داده‌های موج دریافتی را بررسی می‌کند. با یک مثال ساده می‌بینیم I/Q چیست و چرا برای هر نمونه دو عدد لازم است.

فهرست مطالب

گیرندهٔ رادیویی موجی را که از آنتن می‌رسد به اطلاعات قابل استفاده، مثلاً صدا، تبدیل می‌کند. به تغییرات این موج «سیگنال» می‌گوییم. در رادیوی نرم‌افزاری یا SDR، برنامه روی عددهای به‌دست‌آمده از سیگنال محاسبه می‌کند تا مثلاً یک کانال را جدا کند. دادهٔ I/Q یعنی هر لحظهٔ سیگنال را با یک جفت عدد نشان بدهیم. با حرکت یک نقطه روی یک نمودار می‌بینیم چرا هر دو عدد لازم‌اند.

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

SDR چه چیزی را نرم‌افزاری می‌کند؟

آنتن موج رادیویی را به یک ورودی الکتریکی تبدیل می‌کند. مدار گیرنده، یعنی قطعات متصل به‌هم، این ورودی ضعیف را قوی‌تر می‌کند و بخش‌های ناخواسته‌اش را کاهش می‌دهد. کار دوم را «فیلترکردن» می‌نامیم. مبدل آنالوگ به دیجیتال یا ADC، مقدار ورودی را در فاصله‌های زمانی منظم می‌خواند و به عدد تبدیل می‌کند؛ این کار، ورودی پیوسته را به اندازه‌گیری‌های جدا تبدیل می‌کند. بسته به طراحی، آماده‌کردن این داده و ساختن I/Q می‌تواند کار مدار، برنامه یا ترکیبی از هر دو باشد.

نرم‌افزار می‌تواند روی دادهٔ خروجی کانال انتخاب کند، فیلتر دیگری اعمال کند یا اطلاعات را از شکل موج بیرون بکشد؛ کار آخر را «دمدولاسیون» می‌نامیم. پس SDR به معنی حذف آنتن، فیلتر ورودی یا محدودیت مدار نیست. معرفی PySDR همین تفاوت میان دستگاه گیرنده و پردازش نرم‌افزاری را توضیح می‌دهد.

گیرنده USB مدل RTL-SDR V3 و مبدل‌های اتصال کنار آن
گیرندهٔ RTL-SDR V3 و مبدل‌های اتصال آن. عکس: Joeceads، ویکی‌مدیا کامنز، CC BY-SA 4.0؛ بدون تغییر.

I و Q را مثل دو مختصات ببینید

در این درس، هر بار ثبت I و Q با هم را یک نمونه می‌نامیم. برای مشخص‌کردن جای یک نقطه روی نقشه، هم فاصلهٔ افقی لازم است و هم فاصلهٔ عمودی. در نمایش I/Q هم هر لحظه یک جفت عدد داریم: I مختصات افقی و Q مختصات عمودی است. فاصلهٔ نقطه از مرکز، دامنه را نشان می‌دهد و زاویهٔ آن، فاز را. «فاز» در اینجا یعنی جای سیگنال در چرخهٔ تغییرش، نسبت به یک الگوی مقایسهٔ درون گیرنده.

نام I از in-phase و نام Q از quadrature می‌آید. در یک گیرندهٔ متداول با دو مسیر مرجع، مرجع‌های دو مسیر، یعنی الگوهای مقایسهٔ درون گیرنده، ۹۰ درجه یا یک‌ربع دور اختلاف دارند. این به معنی دو کانال صوتی چپ و راست نیست؛ همچنین I و Q در هر سیگنال دلخواه الزاماً دو سینوس با اختلاف ثابت نیستند. می‌توان این جفت را کوتاه‌تر به شکل I + jQ نوشت؛ حرف j فقط علامت محور دوم است. نام این نمایش «مختلط» است؛ یعنی دو مختصات را یک نمونه در نظر می‌گیریم.

یک مثال: چرا دو عدد بهتر از یکی است؟

فرکانس یعنی تعداد تکرار یک تغییر در هر ثانیه؛ واحدش هرتز (Hz) است. هر ۱۰۰۰ هرتز یک کیلوهرتز (kHz) و هر یک میلیون هرتز یک مگاهرتز (MHz) است. در مثال ساختگی ما، یک نقطه با شعاع ۰٫۵ دور مرکز می‌چرخد. در هر ثانیه ۸۰۰۰ جفت نمونه می‌سازیم و نقطه در هر ثانیه ۱۰۰۰ دور می‌زند؛ پس هر دور ۸ نمونه دارد. زاویه در هر نمونه ۴۵ درجه جلو می‌رود. چند جای نقطه چنین است:

شمارهٔ نمونهIQ
۰0.5۰
۱0.3535530.353553
۲۰0.5
۴−0.5۰
۶۰−0.5
مختصات I و Q در مثال عددی؛ حرکت نقطه روی دایره‌ای با شعاع نیم، در جهت پادساعتگرد
سه نمونهٔ اول مثال روی محورهای I و Q؛ شماره‌های ۰، ۱ و ۲ با ردیف‌های جدول مطابقت دارند.

اگر فقط I را داشته باشیم، چرخیدن نقطه به بالا یا پایین در این مثال، مقدار افقی یکسانی می‌سازد. Q این دو جهت را از هم جدا می‌کند. اگر علامت تمام Qها را برعکس کنیم، جهت چرخش برعکس می‌شود. در این تمرین به حرکت در جهت اول، فرکانس مثبت و به جهت دوم، فرکانس منفی می‌گوییم.

مقدار منفی در این مثال، جهت تغییر فاز را نسبت به مرکز نشان می‌دهد. در یک مثال فرضی با مرکز 100 MHz، فاصلهٔ +1 kHz می‌تواند نمایندهٔ 100.001 MHz و فاصلهٔ −1 kHz نمایندهٔ 99.999 MHz باشد. معنی علامت مثبت و منفی و ترتیب I/Q را باید در ابزار واقعی بررسی کرد. نرخ ۸۰۰۰ نمونهٔ تمرین، نرخ دادهٔ پس از تبدیل فرکانس است، نه نمونه‌برداری مستقیم از موج ۱۰۰ مگاهرتزی.

نرخ نمونه با فرکانس تنظیم گیرنده فرق دارد

«طیف» نمایش سیگنال برحسب فرکانس است. فرکانس مرکز می‌گوید به کدام بخشِ آن نگاه می‌کنیم. نرخ نمونه می‌گوید در هر ثانیه چند جفت I/Q به برنامه می‌رسد. عبارت 2 MS/s یعنی دو میلیون نمونهٔ مختلط در ثانیه؛ هر نمونه یک I و یک Q دارد، نه اینکه دو برابر این تعداد نمونهٔ مختلط داشته باشیم.

«باندپایه» یعنی نمایش سیگنال نسبت به فرکانس مرکز، به‌طوری‌که مرکز روی صفر قرار بگیرد. در نمایش ایدئالِ باندپایه، این نرخ می‌تواند بازه‌ای به پهنای ۲ مگاهرتز، از حدود منفی یک تا مثبت یک مگاهرتز نسبت به مرکز، را نمایش دهد. در عمل لبه‌ها به فیلتر و حاشیهٔ طراحی نیاز دارند و پهنای مفید ممکن است کمتر باشد. سیگنال بیرون از بازهٔ مجاز می‌تواند با سیگنال داخل آن اشتباه شود؛ به این ابهام «علیاسینگ» می‌گوییم. بیشترکردن عدد نرخ نمونه به‌تنهایی ضعف فیلتر یا محدودیت مدار را حل نمی‌کند.

فایل I/Q چه حجمی دارد و چطور خوانده می‌شود؟

در قالب float32، که یک روش ذخیرهٔ عدد اعشاری است، هر I و هر Q چهار بایت فضا می‌گیرد؛ بنابراین هر جفت هشت بایت است. در فرض 2 MS/s، دادهٔ خام در هر ثانیه 16 MB و در ۶۰ ثانیه 960 MB می‌شود؛ در این حساب هر MB یک میلیون بایت است و فضای اضافیِ غیر از خود نمونه‌ها را حساب نکرده‌ایم.

فرمت را از نام فایل حدس نزنید. عدد صحیح یا اعشاری، اندازهٔ هر عدد، ترتیب I/Q و ترتیب بایت‌ها باید معلوم باشد. راهنمای رسمی UHD هم چند نوع دادهٔ مختلط را جدا معرفی می‌کند. فایل این تمرین مشخصاً به ترتیب I0,Q0,I1,Q1,…، با دو float32 و ترتیب بایت little-endian ذخیره می‌شود. این نام، قاعدهٔ چیدن بایت‌های هر عدد در فایل را مشخص می‌کند و هنگام خواندن هم باید همین قاعده انتخاب شود. این فایل فقط عددهای نمونه‌ها را نگه می‌دارد و تنظیماتش در metadata.json کنار آن نوشته شده‌اند.

تمرین اختیاری: یک فایل بسازید و نتیجه را ببینید

برای دیدن اعداد، می‌توانید جدول آمادهٔ tone.csv را باز کنید. برای اجرای دوبارهٔ محاسبه، Python 3 لازم است؛ پایتون یک زبان برنامه‌نویسی است. این تمرین به گیرنده یا خرید قطعه نیاز ندارد. بستهٔ تمرین آفلاین I/Q شامل کد، فایل نمونه، راهنمای فارسی و انگلیسی و آزمون‌هاست.

  1. ZIP را در یک پوشهٔ جدا باز کنید. در همان پوشه یک ترمینال باز کنید؛ ترمینال برنامه‌ای برای نوشتن و اجرای فرمان‌های متنی است.
  2. فرمان زیر را اجرا کنید. برنامه فقط در زیرپوشهٔ generated فایل می‌نویسد؛ به رادیو یا شبکه وصل نمی‌شود.
python iq_demo.py
python -m unittest -v test_iq_demo.py

برنامه ۱۰۲۴ جفت نمونه، معادل 0.128 s، می‌سازد. فایل tone.csv را می‌توانید مثل یک جدول باز کنید. فایل باینری tone.cf32le باید ۸۱۹۲ بایت باشد. نتیجهٔ estimated_offset_hz نزدیک ۱۰۰۰ و نتیجهٔ offset_after_negating_Q_hz نزدیک منفی ۱۰۰۰ است. یعنی عوض‌کردن علامت Q، جهت فرکانس نسبی را برگرداند.

بررسی انجام‌شده: کد اجرا شد و هر ۱۰ آزمون نرم‌افزاری گذشتند؛ شامل خواندن دوبارهٔ فایل، جهت فرکانس، حذف Q و نمونهٔ علیاسینگ. این روشِ تخمین فرکانس برای یک موج ساده و بدون نویز در بازهٔ مجاز نوشته شده است؛ آشکارساز عمومیِ چند سیگنال نیست. هیچ آزمون گیرنده، آنتن یا ارسال رادیویی انجام نشده است.

سه اشتباه رایج

  • I/Q را صدای آماده فرض‌کردن: دادهٔ خام، هنوز به انتخاب کانال و روش درست دمدولاسیون نیاز دارد.
  • حذف Q برای کوچک‌شدن فایل: در مثال ما اطلاعات جهت از دست می‌رود و دو سمت طیف روی هم اثر می‌گذارند.
  • هر خط طیف را یک سیگنال واقعی دانستن: خطای عدم‌تطابق دو مسیر I/Q می‌تواند تصویر آینه‌ای بسازد؛ توضیح Analog Devices منشأ این اثر را نشان می‌دهد. نویز، یعنی تغییرات تصادفی و ناخواستهٔ ورودی، و بیش‌ازحد قوی‌بودن ورودی نیز می‌توانند نتیجه را خراب کنند.

حالا خواندن خبرِ «خروجی خام I/Q» روشن‌تر است: یعنی برنامه به نمونه‌های سیگنال دسترسی دارد، نه اینکه حتماً صدای آماده یا گیرندهٔ کاملِ هر نوع ارتباطی در اختیارمان باشد. برای ادامه، مسیر یادگیری امبدد و دقت و کالیبراسیون اندازه‌گیری را ببینید.

کاربرد این مفاهیم را در خبر آزمایش دسترسی خام I/Q و خبر پروژهٔ SDR با ESP32-S3 ببینید؛ خبر معرفی پروژه است و این صفحه مفاهیم پایه را توضیح می‌دهد.

منابع

پرسش و پاسخ مقاله

سوال فنی خود را مطرح کنید

پرسش‌ها و پاسخ‌ها پس از بررسی مدیر منتشر می‌شوند. نویسنده، پیش‌نویس در انتظار بررسی را می‌بیند.

هنوز پرسش تاییدشده‌ای برای این مقاله ثبت نشده است.