เครื่องรับ SDR DVB-T2 ในภาษา C++

Software Defined Radio เป็นวิธีหนึ่งในการแทนที่งานโลหะ (ซึ่งดีต่อสุขภาพของคุณจริงๆ) ด้วยความปวดหัวในการเขียนโปรแกรม SDR ทำนายอนาคตที่ดีและข้อได้เปรียบหลักถือเป็นการขจัดข้อ จำกัด ในการใช้งานโปรโตคอลวิทยุ ตัวอย่างคือวิธีการมอดูเลต OFDM (มัลติเพล็กซ์แบบแบ่งความถี่มุมฉาก) ซึ่งสามารถทำได้โดยวิธี SDR เท่านั้น แต่ SDR ยังมีโอกาสทางวิศวกรรมอีกอย่างหนึ่ง นั่นคือความสามารถในการควบคุมและแสดงภาพสัญญาณ ณ จุดใดๆ ก็ได้โดยใช้ความพยายามน้อยที่สุด

หนึ่งในมาตรฐานการสื่อสารที่น่าสนใจคือโทรทัศน์ภาคพื้นดินภาคพื้นดิน DVB-T2
เพื่ออะไร? แน่นอนคุณสามารถเปิดทีวีได้โดยไม่ต้องลุกขึ้น แต่ไม่มีอะไรให้ดูอย่างแน่นอนและนี่ไม่ใช่ความคิดเห็นของฉันอีกต่อไป แต่เป็นข้อเท็จจริงทางการแพทย์

จริงๆ แล้ว DVB-T2 ได้รับการออกแบบให้มีความสามารถที่หลากหลายมาก รวมไปถึง:

  • การประยุกต์ใช้ในร่ม
  • การมอดูเลตจาก QPSK ถึง 256QAM
  • แบนด์วิธตั้งแต่ 1,7MHz ถึง 8MHz

ฉันมีประสบการณ์ในการรับโทรทัศน์ระบบดิจิตอลโดยใช้หลักการ SDR มาตรฐาน DVB-T อยู่ในโครงการ GNURadio ที่รู้จักกันดี มีบล็อก gr-dvbs2rx สำหรับมาตรฐาน DVB-T2 (ทั้งหมดสำหรับ GNURadio เดียวกัน) แต่ต้องมีการซิงโครไนซ์สัญญาณเบื้องต้นและสร้างแรงบันดาลใจ (ขอขอบคุณเป็นพิเศษสำหรับ Ron Economos)

สิ่งที่เรามี

มีมาตรฐาน ETSI EN 302 755 ที่ให้รายละเอียดการส่งสัญญาณ แต่ไม่มีการรับสัญญาณ

สัญญาณอยู่ในอากาศด้วยความถี่สุ่มตัวอย่าง 9,14285714285714285714 MHz มอดูเลตโดย COFDM พร้อมด้วยพาหะ 32768 ตัว ในย่านความถี่ 8 MHZ

ขอแนะนำให้รับสัญญาณดังกล่าวด้วยความถี่การสุ่มตัวอย่างเป็นสองเท่า (เพื่อไม่ให้สูญเสียสิ่งใด) และแบนด์วิธที่มากขึ้น (การรับซูเปอร์เฮเทอโรไดน์) ที่ความถี่กลางเพื่อกำจัดออฟเซ็ตกระแสตรง (DC) และ "การรั่วไหล" ของออสซิลเลเตอร์ในพื้นที่ (LO) ไปยังอินพุตตัวรับ อุปกรณ์ที่ตรงตามเงื่อนไขเหล่านี้มีราคาแพงเกินไปสำหรับความอยากรู้อยากเห็น

SdrPlay ที่มี 10Msps 10 บิตหรือ AirSpy ที่มีลักษณะคล้ายกันนั้นราคาถูกกว่ามาก ไม่ต้องสงสัยเลยว่าความถี่ในการสุ่มตัวอย่างจะเพิ่มขึ้นเป็นสองเท่าที่นี่ และการรับสัญญาณสามารถทำได้ด้วยการแปลงโดยตรงเท่านั้น (Zero IF) ดังนั้น (ด้วยเหตุผลทางการเงิน) เราจึงเปลี่ยนไปใช้ด้านข้างของ SDR "บริสุทธิ์" โดยมีการแปลงฮาร์ดแวร์ขั้นต่ำ

จำเป็นต้องแก้ไขปัญหาสองประการ:

  1. การซิงโครไนซ์ ค้นหาค่าเบี่ยงเบน RF ที่แม่นยำของเฟสและการเบี่ยงเบนความถี่สุ่มตัวอย่าง
  2. เขียนมาตรฐาน DVB-T2 กลับไปด้านหลัง

ภารกิจที่สองต้องใช้โค้ดมากกว่ามาก แต่สามารถแก้ไขได้ด้วยความเพียรพยายามและสามารถตรวจสอบได้อย่างง่ายดายโดยใช้สัญญาณทดสอบ

สัญญาณการทดสอบมีอยู่ในเซิร์ฟเวอร์ BBC ftp://ftp.kw.bbc.co.uk/t2refs/ พร้อมคำแนะนำโดยละเอียด

การแก้ปัญหาแรกนั้นขึ้นอยู่กับลักษณะของอุปกรณ์ SDR และความสามารถในการควบคุมเป็นอย่างมาก ตามที่กล่าวไว้ การใช้ฟังก์ชันควบคุมความถี่ที่แนะนำไม่ประสบผลสำเร็จ แต่ให้ประสบการณ์มากมายในการอ่านฟังก์ชันเหล่านั้น เอกสาร การเขียนโปรแกรม ดูละครโทรทัศน์ แก้คำถามเชิงปรัชญา... พูดง่ายๆ ก็คือ เป็นไปไม่ได้ที่จะละทิ้งโปรเจ็กต์นี้

ศรัทธาใน "SDR บริสุทธิ์" ยิ่งแข็งแกร่งขึ้นเท่านั้น

เรารับสัญญาณตามที่เป็นอยู่ สอดแทรกมันเกือบจะเป็นอะนาล็อกแล้วนำสัญญาณที่แยกออกมา แต่คล้ายกับของจริง

แผนภาพบล็อกการซิงโครไนซ์:

เครื่องรับ SDR DVB-T2 ในภาษา C++

ทุกอย่างที่นี่เป็นไปตามตำราเรียน ถัดไปมีความซับซ้อนมากขึ้นเล็กน้อย จำเป็นต้องคำนวณการเบี่ยงเบน มีวรรณกรรมและบทความวิจัยมากมายที่เปรียบเทียบข้อดีและข้อเสียของวิธีการต่างๆ จากคลาสสิก - นี่คือ "Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, การออกแบบตัวรับที่เหมาะสมที่สุดสำหรับการส่งสัญญาณบรอดแบนด์ที่ใช้ OFDM - ตอนที่ I และ II" แต่ฉันไม่พบวิศวกรสักคนเดียวที่สามารถและต้องการนับจำนวนได้ ดังนั้นจึงใช้แนวทางทางวิศวกรรม โดยใช้วิธีการซิงโครไนซ์แบบเดียวกัน การปรับจูนจึงถูกนำมาใช้ในสัญญาณทดสอบ โดยการเปรียบเทียบเมตริกต่างๆ กับการเบี่ยงเบนที่ทราบ (เขาแนะนำตัวเอง) เมตริกที่ดีที่สุดจึงถูกเลือกในด้านประสิทธิภาพและความง่ายในการใช้งาน ส่วนเบี่ยงเบนความถี่ในการรับสัญญาณคำนวณโดยการเปรียบเทียบช่วงป้องกันกับส่วนที่ทำซ้ำ เฟสของความถี่ในการรับและความถี่ในการสุ่มตัวอย่างประเมินจากการเบี่ยงเบนเฟสของสัญญาณนำร่อง และยังใช้ในอีควอไลเซอร์เชิงเส้นแบบธรรมดาของสัญญาณ 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++

กล่าวโดยสรุป นี่คือผลลัพธ์ของการส่งเนื้อสับกลับผ่านเครื่องบดเนื้อ มาตรฐานกำหนดให้มีการผสมสี่ประเภท:

  • สลับกันเล็กน้อย
  • การสลับเซลล์ (การผสมเซลล์ในบล็อกการเข้ารหัส)
  • การสลับเวลา (อยู่ในกลุ่มของบล็อกการเข้ารหัสด้วย)
  • การสลับความถี่ (ความถี่ผสมในสัญลักษณ์ OFDM)

เป็นผลให้เรามีสัญญาณต่อไปนี้ที่อินพุต:

เครื่องรับ SDR DVB-T2 ในภาษา C++

ทั้งหมดนี้เป็นการต่อสู้เพื่อภูมิคุ้มกันทางเสียงของสัญญาณที่เข้ารหัส

ทั้งหมด

ตอนนี้เราไม่เพียงมองเห็นสัญญาณและรูปร่างเท่านั้น แต่ยังรวมถึงข้อมูลการบริการด้วย
มีมัลติเพล็กซ์สองตัวที่ออกอากาศ แต่ละช่องมีฟิสิคัลแชนเนล (PLP) สองช่อง

สังเกตเห็นสิ่งแปลกประหลาดอย่างหนึ่งในมัลติเพล็กซ์แรก - PLP แรกมีป้ายกำกับว่า "หลายรายการ" ซึ่งเป็นตรรกะ เนื่องจากมีมากกว่าหนึ่งรายการในมัลติเพล็กซ์ และ PLP ตัวที่สองมีป้ายกำกับว่า "เดี่ยว" และนี่คือคำถาม
สิ่งที่น่าสนใจยิ่งกว่านั้นคือความแปลกประหลาดที่สองในมัลติเพล็กซ์ที่สอง - โปรแกรมทั้งหมดอยู่ใน PLP แรก แต่ใน PLP ที่สองมีสัญญาณของลักษณะที่ไม่รู้จักที่ความเร็วต่ำ อย่างน้อยเครื่องเล่น VLC ที่เข้าใจรูปแบบวิดีโอประมาณห้าสิบรูปแบบและเสียงในปริมาณเท่ากันจะไม่รู้จักมัน

สามารถพบได้ที่นี่.

โครงการนี้สร้างขึ้นโดยมีเป้าหมายเพื่อพิจารณาความเป็นไปได้ในการถอดรหัส DVB-T2 โดยใช้ SdrPlay (และปัจจุบันคือ AirSpy) ดังนั้นจึงไม่ใช่เวอร์ชันอัลฟ่าด้วยซ้ำ

ป.ล. ในขณะที่ฉันกำลังเขียนบทความด้วยความยากลำบาก ฉันสามารถรวม PlutoSDR เข้ากับโครงการได้

บางคนจะพูดทันทีว่าสัญญาณ IQ ที่เอาต์พุต USB6 มีเพียง 2.0Msps แต่คุณต้องมีอย่างน้อย 9,2Msps แต่นี่เป็นหัวข้อแยกต่างหาก

ที่มา: will.com

เพิ่มความคิดเห็น