C++ tilida SDR DVB-T2 qabul qiluvchisi

Software Defined Radio - bu metall ishini (aslida sog'ligingiz uchun yaxshi) dasturlashning bosh og'rig'i bilan almashtirish usuli. SDRlar buyuk kelajakni bashorat qiladi va asosiy afzallik radio protokollarini amalga oshirishdagi cheklovlarni olib tashlash hisoblanadi. Misol tariqasida faqat SDR usuli yordamida mumkin bo'lgan OFDM (Ortogonal chastota bo'linishi multipleksatsiyasi) modulyatsiya usulini keltirish mumkin. Ammo SDR yana bir sof muhandislik imkoniyatiga ega - signalni har qanday ixtiyoriy nuqtada eng kam harakat bilan boshqarish va vizualizatsiya qilish qobiliyati.

Qiziqarli aloqa standartlaridan biri DVB-T2 er usti televideniesidir.
Nima uchun? Albatta, siz shunchaki o'rnidan turmasdan televizorni yoqishingiz mumkin, lekin u erda tomosha qilish uchun mutlaqo hech narsa yo'q va bu endi mening fikrim emas, balki tibbiy haqiqat.

Jiddiy ravishda, DVB-T2 juda keng imkoniyatlarga ega, jumladan:

  • ichki dastur
  • QPSK dan 256QAM gacha modulyatsiya
  • 1,7 MGts dan 8 MGts gacha bo'lgan tarmoqli kengligi

SDR tamoyilidan foydalangan holda raqamli televideniyeni qabul qilish bo'yicha tajribam bor. DVB-T standarti taniqli GNURadio loyihasida. DVB-T2 standarti uchun gr-dvbs2rx bloki mavjud (barchasi bir xil GNURadio uchun), lekin u dastlabki signal sinxronizatsiyasini talab qiladi va u ilhomlantiradi (Ron Economosga alohida rahmat).

Bizda nima bor.

ETSI EN 302 755 standarti mavjud, u uzatishni batafsil tavsiflaydi, lekin qabul qilish emas.

Signal 9,14285714285714285714 MGts namuna olish chastotasi bilan havoda, 32768 tashuvchi bilan COFDM tomonidan modulyatsiyalangan, 8 MGts diapazonida.

To'g'ridan-to'g'ri tokning (to'g'ridan-to'g'ri) ofsetidan va mahalliy osilatorning "oqishidan" xalos bo'lish uchun bunday signallarni ikki baravar namuna olish chastotasi (hech narsani yo'qotmaslik uchun) va oraliq chastotada ko'proq tarmoqli kengligi (superheterodin qabul qilish) bilan qabul qilish tavsiya etiladi. (LO) qabul qiluvchining kirishiga. Bu shartlarni qondiradigan qurilmalar shunchaki qiziquvchanlik uchun juda qimmat.

10Msps 10bitli SdrPlay yoki shunga o'xshash xususiyatlarga ega AirSpy ancha arzon. Bu erda ikki baravar namuna olish chastotasi haqida gap yo'q va qabul qilish faqat to'g'ridan-to'g'ri konvertatsiya qilish (Nol IF) bilan amalga oshirilishi mumkin. Shuning uchun (moliyaviy sabablarga ko'ra) biz minimal apparat konvertatsiyasi bilan "sof" SDR tarafdorlari tomoniga o'tmoqdamiz.

Ikkita muammoni hal qilish kerak edi:

  1. Sinxronizatsiya. Faza-aniq RF og'ishini va namuna olish chastotasining og'ishini aniqlang.
  2. DVB-T2 standartini orqaga qayta yozing.

Ikkinchi vazifa juda ko'p kodni talab qiladi, lekin uni qat'iyat bilan hal qilish mumkin va sinov signallari yordamida osongina tekshirilishi mumkin.

Sinov signallari ftp://ftp.kw.bbc.co.uk/t2refs/ BBC serverida batafsil ko'rsatmalar bilan mavjud.

Birinchi muammoni hal qilish SDR qurilmasining xususiyatlariga va uni boshqarish imkoniyatlariga juda bog'liq. Tavsiya etilgan chastotani boshqarish funktsiyalaridan foydalanish, ular aytganidek, muvaffaqiyatli bo'lmadi, lekin ularni o'qishda katta tajriba berdi. hujjatlashtirish, dasturlash, serial tomosha qilish, falsafiy savollarni yechish..., qisqasi, loyihadan voz kechishning iloji bo‘lmadi.

"Sof SDR" ga bo'lgan ishonch yanada kuchaydi.

Biz signalni xuddi shunday qabul qilamiz, uni deyarli analogga interpolyatsiya qilamiz va diskretni chiqaramiz, lekin haqiqiyga o'xshash.

Sinxronizatsiya blok diagrammasi:

C++ tilida SDR DVB-T2 qabul qiluvchisi

Bu erda hamma narsa darslik bo'yicha. Keyingisi biroz murakkabroq. Og'ishlarni hisoblash kerak. Turli usullarning afzalliklari va kamchiliklarini taqqoslaydigan ko'plab adabiyotlar va tadqiqot maqolalari mavjud. Klassiklardan - bu "Maykl Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, OFDM-ga asoslangan keng polosali uzatish uchun optimal qabul qiluvchi dizayni - I va II qism". Ammo men hisoblashni biladigan va hisoblashni xohlaydigan biron bir muhandisni uchratmadim, shuning uchun muhandislik yondashuvidan foydalanildi. Xuddi shu sinxronizatsiya usulidan foydalanib, detuning sinov signaliga kiritildi. Turli ko'rsatkichlarni ma'lum bo'lgan og'ishlar bilan taqqoslab (ularni o'zi tanishtirdi), ishlash va amalga oshirish qulayligi uchun eng yaxshilari tanlandi. Qabul qilish chastotasining og'ishi qo'riqlash oralig'i va uning takrorlanadigan qismini solishtirish orqali hisoblanadi. Qabul qilish chastotasining fazasi va namuna olish chastotasi uchuvchi signallarning fazaviy og'ishidan baholanadi va u OFDM signalining oddiy, chiziqli ekvalayzerida ham qo'llaniladi.

Ekvalayzerning xarakteristikasi:

C++ tilida SDR DVB-T2 qabul qiluvchisi

Va bularning barchasi, agar siz DVB-T2 ramkasi qachon boshlanishini bilsangiz yaxshi ishlaydi. Buning uchun signalda P1 kirish belgisi uzatiladi. P1 belgisini aniqlash va dekodlash usuli ETSI TS 102 831 Texnik spetsifikatsiyasida tasvirlangan (qabul qilish uchun ko'plab foydali tavsiyalar ham mavjud).

P1 signalining avtokorrelyatsiyasi (ramka boshidagi eng yuqori nuqta):

C++ tilida SDR DVB-T2 qabul qiluvchisi

Birinchi rasm (harakatlanuvchi tasvirga atigi olti oy qoldi...):

C++ tilida SDR DVB-T2 qabul qiluvchisi

Va bu erda biz IQ nomutanosibligi, DC ofset va LO oqish nima ekanligini bilib olamiz. Qoida tariqasida, to'g'ridan-to'g'ri konvertatsiya qilish uchun xos bo'lgan bu buzilishlar uchun kompensatsiya SDR qurilma drayverida amalga oshiriladi. Shuning uchun tushunish uchun uzoq vaqt kerak bo'ldi: do'stona QAM64 yulduz turkumidan yulduzlarni taqillatish - bu kompensatsiya funktsiyalarining ishi. Men hamma narsani o'chirib, velosipedimni yozishim kerak edi.

Va keyin rasm ko'chdi:

C++ tilida SDR DVB-T2 qabul qiluvchisi

DVB-T64 standartida o'ziga xos yulduz turkumi aylanishi bilan QAM2 modulyatsiyasi:

C++ tilida SDR DVB-T2 qabul qiluvchisi

Muxtasar qilib aytganda, bu qiyma go'shtni go'sht maydalagichdan qaytarib o'tkazish natijasidir. Standart to'rt turdagi aralashtirishni nazarda tutadi:

  • biroz aralashib ketish
  • hujayralarni birlashtirish (kodlash blokidagi hujayralarni aralashtirish)
  • vaqt oralig'i (u ham kodlash bloklari guruhiga kiradi)
  • chastotani kesish (OFDM belgisida chastotani aralashtirish)

Natijada, biz kirishda quyidagi signalga egamiz:

C++ tilida SDR DVB-T2 qabul qiluvchisi

Bularning barchasi kodlangan signalning shovqin immuniteti uchun kurashdir.

Xulosa

Endi biz nafaqat signalning o'zi va uning shakli, balki xizmat ma'lumotlarini ham ko'rishimiz mumkin.
Efirda ikkita multipleks mavjud. Har birida ikkita jismoniy kanal (PLP) mavjud.

Birinchi multipleksda bitta g'alati narsa sezildi - birinchi PLP "bir nechta" deb belgilangan, bu mantiqan to'g'ri, chunki multipleksda bir nechta, ikkinchi PLP esa "yakka" deb belgilangan va bu savol.
Bundan ham qiziqroq, ikkinchi multipleksdagi ikkinchi g'alati - barcha dasturlar birinchi PLPda, lekin ikkinchi PLPda past tezlikda noma'lum tabiatning signali mavjud. Kamida ellikka yaqin video formatini va bir xil miqdordagi audioni tushunadigan VLC pleer uni tanimaydi.

Loyihaning o'zini bu erda topish mumkin.

Loyiha SdrPlay (va hozir AirSpy.) yordamida DVB-T2-ni dekodlash imkoniyatini aniqlash maqsadida yaratilgan, shuning uchun bu hatto alfa versiyasi ham emas.

PS Maqolani qiyinchilik bilan yozayotganimda PlutoSDR ni loyihaga qo'shishga muvaffaq bo'ldim.

Kimdir darhol USB6 chiqishida IQ signali uchun faqat 2.0Msps borligini aytadi, lekin sizga kamida 9,2Msps kerak, ammo bu alohida mavzu.

Manba: www.habr.com

a Izoh qo'shish