C++'da SDR DVB-T2 alıcısı

Yazılım Tanımlı Radyo, metal işlerini (aslında sağlığınız için iyidir) programlamanın baş ağrısıyla değiştirmenin bir yöntemidir. SDR'ler büyük bir gelecek öngörüyor ve asıl avantajı, radyo protokollerinin uygulanmasındaki kısıtlamaların kaldırılması olarak değerlendiriliyor. Bunun bir örneği, yalnızca SDR yöntemiyle mümkün olan OFDM (Ortogonal frekans bölmeli çoğullama) modülasyon yöntemidir. Ancak SDR'nin ayrıca tamamen mühendislik fırsatı olan bir fırsatı daha var: herhangi bir noktada bir sinyali en az çabayla kontrol etme ve görselleştirme yeteneği.

İlginç iletişim standartlarından biri karasal karasal televizyon DVB-T2'dir.
Ne için? Tabii ki kalkmadan televizyonu açabilirsiniz ama orada kesinlikle izlenecek bir şey yok ve bu artık benim görüşüm değil, tıbbi bir gerçek.

Ciddi anlamda DVB-T2, aşağıdakiler de dahil olmak üzere çok geniş yeteneklerle tasarlanmıştır:

  • iç mekan uygulaması
  • QPSK'den 256QAM'ye modülasyon
  • bant genişliği 1,7MHz'den 8MHz'e

SDR ilkesini kullanarak dijital televizyon alma konusunda deneyimim var. DVB-T standardı iyi bilinen GNURadio projesinde yer almaktadır. DVB-T2 standardı için bir gr-dvbs2rx bloğu var (hepsi aynı GNURadio için), ancak ön sinyal senkronizasyonu gerektiriyor ve ilham verici (Ron Economos'a özel teşekkürler).

Neyimiz var.

İletimi ayrıntılandıran ancak alımı ayrıntılandırmayan bir ETSI EN 302 755 standardı vardır.

Sinyal, 9,14285714285714285714 MHZ bandında, 32768 taşıyıcılı COFDM tarafından modüle edilen, 8 MHz örnekleme frekansıyla yayındadır.

Doğru akım (DC) sapmasından ve yerel osilatörün "sızıntısından" kurtulmak için bu tür sinyallerin örnekleme frekansının iki katı (hiçbir şey kaybetmemek için) ve ara frekansta daha fazla bant genişliği (süperheterodin alımı) ile alınması önerilir. (LO) alıcı girişine. Bu koşulları karşılayan cihazlar sırf merak için fazlasıyla pahalıdır.

Benzer özelliklere sahip 10Msps 10bit veya AirSpy ile SdrPlay çok daha ucuzdur. Burada örnekleme frekansının iki katına çıkması söz konusu değildir ve alım yalnızca doğrudan dönüşüm (Sıfır IF) ile yapılabilir. Bu nedenle (mali nedenlerden dolayı) minimum donanım dönüşümü ile "saf" SDR taraftarlarının tarafına geçiyoruz.

İki sorunu çözmek gerekiyordu:

  1. Senkronizasyon. Kesin faz-doğru RF sapmasını ve örnekleme frekansı sapmasını öğrenin.
  2. DVB-T2 standardını geriye doğru yeniden yazın.

İkinci görev çok daha fazla kod gerektirir ancak azimle çözülebilir ve test sinyalleri kullanılarak kolayca doğrulanabilir.

Test sinyalleri, ayrıntılı talimatlarla birlikte ftp://ftp.kw.bbc.co.uk/t2refs/ BBC sunucusunda mevcuttur.

İlk sorunun çözümü büyük ölçüde SDR cihazının özelliklerine ve kontrol yeteneklerine bağlıdır. Önerilen frekans kontrol işlevlerinin kullanılması, dedikleri gibi, başarılı olmadı, ancak bunları okurken çok fazla deneyim kazandırdı. belgelemek, programlamak, dizi izlemek, felsefi sorular çözmek... kısacası projeden vazgeçmek mümkün değildi.

“Saf SDR”ye olan inanç daha da güçlendi.

Sinyali olduğu gibi alıyoruz, neredeyse bir analoga enterpolasyon yapıyoruz ve ayrı bir tane çıkarıyoruz, ancak gerçek olana benzer.

Senkronizasyon blok şeması:

C++'da SDR DVB-T2 alıcısı

Buradaki her şey ders kitabına göre. Sonrası biraz daha karmaşık. Sapmaların hesaplanması gerekir. Farklı yöntemlerin avantaj ve dezavantajlarını karşılaştıran çok sayıda literatür ve araştırma makalesi bulunmaktadır. Klasiklerden - bu "Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, OFDM Tabanlı Geniş Bant İletimi için Optimum Alıcı Tasarımı - Bölüm I ve II." Ancak sayabilen ve saymak isteyen tek bir mühendise rastlamadım, bu nedenle mühendislik yaklaşımı kullanıldı. Aynı senkronizasyon yöntemini kullanarak, test sinyaline ayarı bozma işlemi uygulandı. Farklı metrikleri bilinen sapmalarla karşılaştırarak (bunları kendisi tanıttı), performans ve uygulama kolaylığı açısından en iyileri seçildi. Alım frekansı sapması, koruma aralığı ve tekrarlanan kısmı karşılaştırılarak hesaplanır. Alma frekansının fazı ve örnekleme frekansı, pilot sinyallerin faz sapmasından tahmin edilir ve aynı zamanda bir OFDM sinyalinin basit, doğrusal ekolayzırında da kullanılır.

Ekolayzer karakteristiği:

C++'da SDR DVB-T2 alıcısı

Ve DVB-T2 çerçevesinin ne zaman başladığını biliyorsanız tüm bunlar işe yarar. Bunu yapmak için, giriş sembolü P1 sinyalde iletilir. P1 sembolünü tespit etme ve kodunu çözme yöntemi, ETSI TS 102 831 Teknik Şartnamesinde açıklanmıştır (ayrıca alım için birçok yararlı öneri vardır).

P1 sinyalinin otokorelasyonu (karenin başlangıcındaki en yüksek nokta):

C++'da SDR DVB-T2 alıcısı

İlk fotoğraf (hareketli görsele yalnızca altı ay kaldı...):

C++'da SDR DVB-T2 alıcısı

Ve burası IQ dengesizliğinin, DC ofsetinin ve LO kaçağının ne olduğunu öğrendiğimiz yerdir. Kural olarak, doğrudan dönüşüme özgü bu bozulmaların telafisi SDR aygıt sürücüsünde uygulanır. Bu nedenle anlaşılması uzun zaman aldı: Dost QAM64 takımyıldızındaki yıldızları yok etmek, telafi fonksiyonlarının işidir. Her şeyi kapatıp bisikletimi yazmak zorunda kaldım.

Ve sonra resim taşındı:

C++'da SDR DVB-T2 alıcısı

DVB-T64 standardında belirli takımyıldızı rotasyonuyla QAM2 modülasyonu:

C++'da SDR DVB-T2 alıcısı

Kısaca kıymanın tekrar kıyma makinesinden geçirilmesi sonucudur. Standart dört tip karıştırma sağlar:

  • bit serpiştirme
  • hücre serpiştirme (hücrelerin bir kodlama bloğunda karıştırılması)
  • zaman serpiştirme (aynı zamanda kodlama blokları grubundadır)
  • frekans serpiştirme (bir OFDM sembolünde frekans karıştırma)

Sonuç olarak girişte aşağıdaki sinyale sahibiz:

C++'da SDR DVB-T2 alıcısı

Bütün bunlar kodlanmış sinyalin gürültü bağışıklığı için verilen bir mücadeledir.

sonuç

Artık yalnızca sinyalin kendisini ve şeklini değil aynı zamanda hizmet bilgilerini de görebiliriz.
Yayında iki multipleks var. Her birinin iki fiziksel kanalı (PLP) vardır.

İlk multiplekste bir tuhaflık fark edildi - ilk PLP "çoklu" olarak etiketlendi, bu mantıklı çünkü multiplekste birden fazla var ve ikinci PLP "tekli" olarak etiketlendi ve bu bir soru.
Daha da ilginç olanı, ikinci multipleksteki ikinci tuhaflıktır - tüm programlar ilk PLP'dedir, ancak ikinci PLP'de düşük hızda bilinmeyen nitelikte bir sinyal vardır. En azından yaklaşık elli video formatını ve aynı miktarda sesi anlayan VLC oynatıcısı onu tanımıyor.

Projenin kendisini burada bulabilirsiniz.

Proje, SdrPlay (ve şimdi AirSpy) kullanarak DVB-T2'nin kodunu çözme olasılığını belirlemek amacıyla oluşturuldu, dolayısıyla bu bir alfa sürümü bile değil.

Not: Yazıyı zorlukla yazarken PlutoSDR'yi projeye entegre etmeyi başardım.

Birisi hemen USB6 çıkışında IQ sinyali için sadece 2.0Msps olduğunu söyleyecektir ancak en az 9,2Msps'ye ihtiyacınız var ama bu ayrı bir konu.

Kaynak: habr.com

Yorum ekle