گیرنده SDR DVB-T2 در C++

نرم افزار تعریف شده رادیو روشی برای جایگزینی کارهای فلزی (که در واقع برای سلامتی شما مفید است) با سردرد برنامه نویسی است. SDR ها آینده بزرگی را پیش بینی می کنند و مزیت اصلی آن حذف محدودیت ها در اجرای پروتکل های رادیویی است. یک مثال روش مدولاسیون OFDM (Orthogonal Frequency-Division Multiplexing) است که تنها با روش SDR امکان پذیر شد. اما SDR یک فرصت کاملاً مهندسی دیگر نیز دارد - توانایی کنترل و تجسم سیگنال در هر نقطه دلخواه با کمترین تلاش.

یکی از استانداردهای ارتباطی جالب تلویزیون زمینی DVB-T2 است.
برای چی؟ البته، شما می توانید به سادگی تلویزیون را بدون بلند شدن روشن کنید، اما مطلقاً چیزی برای تماشا کردن وجود ندارد و این دیگر نظر من نیست، بلکه یک واقعیت پزشکی است.

به طور جدی، DVB-T2 با قابلیت های بسیار گسترده ای طراحی شده است، از جمله:

  • برنامه داخلی
  • مدولاسیون از QPSK به 256QAM
  • پهنای باند از 1,7 مگاهرتز تا 8 مگاهرتز

من تجربه دریافت تلویزیون دیجیتال با استفاده از اصل SDR را دارم. استاندارد DVB-T در پروژه معروف GNURadio است. یک بلوک gr-dvbs2rx برای استاندارد DVB-T2 وجود دارد (همه برای یک GNURadio)، اما به همگام سازی سیگنال اولیه نیاز دارد و الهام بخش است (به لطف Ron Economos ویژه).

آن چه که ما داریم.

یک استاندارد ETSI EN 302 755 وجود دارد که جزئیات انتقال، اما نه دریافت را دارد.

سیگنال روی هوا با فرکانس نمونه برداری 9,14285714285714285714 مگاهرتز، مدوله شده توسط COFDM با 32768 حامل، در باند 8 مگاهرتز است.

توصیه می شود چنین سیگنال هایی را با فرکانس نمونه برداری دوبرابر دریافت کنید (تا چیزی از دست ندهید) و در فرکانس متوسط ​​پهنای باند بیشتر (دریافت سوپرهتروداین) برای خلاص شدن از شر جریان مستقیم (DC) و "نشت" نوسانگر محلی. (LO) به ورودی گیرنده. دستگاه هایی که این شرایط را برآورده می کنند برای کنجکاوی بسیار گران هستند.

SdrPlay با 10Msps 10bit یا AirSpy با ویژگی های مشابه بسیار ارزان تر است. در اینجا بحث دو برابر فرکانس نمونه گیری مطرح نیست و دریافت فقط با تبدیل مستقیم (صفر IF) قابل انجام است. بنابراین (به دلایل مالی) ما به طرفداران SDR "خالص" با حداقل تبدیل سخت افزار تغییر می کنیم.

حل دو مشکل ضروری بود:

  1. هماهنگ سازی. انحراف RF دقیق فاز و انحراف فرکانس نمونه برداری را بیابید.
  2. استاندارد DVB-T2 را به عقب بازنویسی کنید.

کار دوم به کد بسیار بیشتری نیاز دارد، اما با پشتکار قابل حل است و به راحتی می توان با استفاده از سیگنال های تست تأیید کرد.

سیگنال های آزمایشی با دستورالعمل های دقیق در سرور بی بی سی ftp://ftp.kw.bbc.co.uk/t2refs/ موجود است.

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

ایمان به "SDR خالص" تنها قوی تر شده است.

سیگنال را همانطور که هست می گیریم، آن را تقریبا به یک آنالوگ درون یابی می کنیم و یک سیگنال گسسته، اما شبیه به واقعی را خارج می کنیم.

بلوک دیاگرام همگام سازی:

گیرنده SDR DVB-T2 در C++

اینجا همه چیز طبق کتاب درسی است. بعد کمی پیچیده تر است. انحرافات باید محاسبه شود. مقالات و مقالات تحقیقاتی زیادی وجود دارد که مزایا و معایب روش‌های مختلف را با هم مقایسه می‌کنند. از کلاسیک ها - این "مایکل اسپث، استفان فچتل، گونار فوک، هاینریش مایر، طراحی گیرنده بهینه برای انتقال پهن باند مبتنی بر OFDM - قسمت اول و دوم" است. اما من حتی یک مهندس را ندیده‌ام که بتواند و بخواهد حساب کند، بنابراین از رویکرد مهندسی استفاده شد. با استفاده از همان روش همگام سازی، detuning به سیگنال تست وارد شد. با مقایسه معیارهای مختلف با انحرافات شناخته شده (خود او آنها را معرفی کرد)، بهترین ها برای عملکرد و سهولت اجرا انتخاب شدند. انحراف فرکانس دریافت با مقایسه بازه نگهبان و قسمت تکراری آن محاسبه می شود. فاز فرکانس دریافت و فرکانس نمونه برداری از انحراف فاز سیگنال های آزمایشی تخمین زده می شود و این نیز در یک اکولایزر ساده و خطی یک سیگنال OFDM استفاده می شود.

ویژگی اکولایزر:

گیرنده SDR DVB-T2 در C++

و اگر بدانید فریم DVB-T2 چه زمانی شروع به کار می کند، همه اینها به خوبی کار می کند. برای انجام این کار، نماد مقدمه P1 در سیگنال ارسال می شود. روش تشخیص و رمزگشایی نماد P1 در مشخصات فنی ETSI TS 102 831 توضیح داده شده است (همچنین توصیه های مفید زیادی برای دریافت وجود دارد).

همبستگی خودکار سیگنال P1 (بالاترین نقطه در ابتدای کادر):

گیرنده SDR DVB-T2 در C++

تصویر اول (فقط شش ماه تا تصویر متحرک باقی مانده است...):

گیرنده SDR DVB-T2 در C++

و اینجاست که می آموزیم عدم تعادل IQ، DC offset و نشتی LO چیست. به عنوان یک قاعده، جبران این اعوجاج خاص برای تبدیل مستقیم در درایور دستگاه SDR اجرا می شود. بنابراین، زمان زیادی طول کشید تا بفهمیم: حذف ستارگان از صورت فلکی دوستانه QAM64 کار توابع جبران است. مجبور شدم همه چیز را خاموش کنم و دوچرخه ام را بنویسم.

و سپس تصویر حرکت کرد:

گیرنده SDR DVB-T2 در C++

مدولاسیون QAM64 با چرخش صورت فلکی خاص در استاندارد DVB-T2:

گیرنده SDR DVB-T2 در C++

به طور خلاصه، این نتیجه برگشت گوشت چرخ کرده از چرخ گوشت است. استاندارد چهار نوع اختلاط را ارائه می دهد:

  • کمی در هم می آمیزد
  • در هم آمیختن سلول ها (اختلاط سلول ها در یک بلوک کدگذاری)
  • interleaving زمان (همچنین در گروه بلوک های رمزگذاری قرار دارد)
  • تلاقی فرکانس (اختلاط فرکانس در نماد OFDM)

در نتیجه سیگنال زیر را در ورودی داریم:

گیرنده SDR DVB-T2 در C++

همه اینها مبارزه ای برای مصونیت نویز سیگنال رمزگذاری شده است.

مجموع

اکنون می توانیم نه تنها خود سیگنال و شکل آن، بلکه اطلاعات سرویس را نیز ببینیم.
دو مالتی پلکس روی هوا وجود دارد. هر کدام دو کانال فیزیکی (PLP) دارند.

یک چیز عجیب در مالتی پلکس اول مشاهده شد - PLP اول دارای برچسب "چندین" است، که منطقی است، زیرا بیش از یک در مالتی پلکس وجود دارد و PLP دوم با برچسب "تک" است و این یک سوال است.
حتی جالب تر، عجیب تر بودن دوم در مالتی پلکس دوم است - همه برنامه ها در PLP اول هستند، اما در PLP دوم سیگنالی با ماهیت ناشناخته با سرعت کم وجود دارد. حداقل پخش کننده VLC که حدود پنجاه فرمت ویدیویی و همین مقدار صدا را می فهمد، آن را تشخیص نمی دهد.

خود پروژه را می توان در اینجا یافت.

این پروژه با هدف تعیین امکان رمزگشایی DVB-T2 با استفاده از SdrPlay (و اکنون AirSpy.) ایجاد شده است، بنابراین این حتی یک نسخه آلفا نیست.

PS در حالی که به سختی مقاله را می نوشتم، موفق شدم PlutoSDR را در پروژه ادغام کنم.

کسی بلافاصله می گوید که فقط 6Msps برای سیگنال IQ در خروجی USB2.0 وجود دارد، اما شما حداقل به 9,2Msps نیاز دارید، اما این یک موضوع جداگانه است.

منبع: www.habr.com

اضافه کردن نظر