Bộ thu SDR DVB-T2 trong C++

Radio được xác định bằng phần mềm là một phương pháp thay thế công việc kim loại (điều này thực sự tốt cho sức khỏe của bạn) bằng việc đau đầu trong việc lập trình. SDR dự đoán một tương lai tuyệt vời và ưu điểm chính được coi là loại bỏ các hạn chế trong việc thực hiện các giao thức vô tuyến. Một ví dụ là phương pháp điều chế OFDM (Ghép kênh phân chia tần số trực giao), chỉ có thể thực hiện được bằng phương pháp SDR. Nhưng SDR còn có một cơ hội nữa, thuần túy về mặt kỹ thuật - khả năng kiểm soát và hiển thị tín hiệu tại bất kỳ điểm tùy ý nào với ít nỗ lực nhất.

Một trong những chuẩn truyền thông thú vị là truyền hình mặt đất DVB-T2.
Để làm gì? Tất nhiên, bạn có thể chỉ cần bật TV mà không cần thức dậy, nhưng ở đó hoàn toàn không có gì để xem và đây không còn là quan điểm của tôi nữa mà là một sự thật y tế.

Nghiêm túc mà nói, DVB-T2 được thiết kế với khả năng rất rộng, bao gồm:

  • ứng dụng trong nhà
  • điều chế từ QPSK đến 256QAM
  • băng thông từ 1,7 MHz đến 8 MHz

Tôi có kinh nghiệm thu truyền hình kỹ thuật số theo nguyên tắc SDR. Chuẩn DVB-T nằm trong dự án GNURadio nổi tiếng. Có một khối gr-dvbs2rx dành cho chuẩn DVB-T2 (tất cả đều dành cho cùng một GNURadio), nhưng nó yêu cầu đồng bộ hóa tín hiệu sơ bộ và nó rất truyền cảm hứng (đặc biệt cảm ơn Ron Economos).

Những gì chúng tôi có.

Có tiêu chuẩn ETSI EN 302 755 quy định chi tiết về việc truyền tải nhưng không quy định chi tiết về việc tiếp nhận.

Tín hiệu được phát sóng với tần số lấy mẫu là 9,14285714285714285714 MHz, được điều chế bằng COFDM với 32768 sóng mang, trong băng tần 8 MHZ.

Bạn nên nhận những tín hiệu như vậy với tần số lấy mẫu gấp đôi (để không bị mất bất cứ thứ gì) và ở tần số trung gian có nhiều băng thông hơn (thu siêu âm), để loại bỏ độ lệch dòng điện một chiều (DC) và “rò rỉ” của bộ dao động cục bộ (LO) đến đầu vào máy thu. Các thiết bị thỏa mãn những điều kiện này quá đắt đối với sự tò mò đơn thuần.

SdrPlay với 10Msps 10bit hoặc AirSpy có đặc điểm tương tự thì rẻ hơn nhiều. Ở đây không có vấn đề gì về việc tăng gấp đôi tần số lấy mẫu và việc tiếp nhận chỉ có thể được thực hiện bằng chuyển đổi trực tiếp (Zero IF). Do đó (vì lý do tài chính), chúng tôi đang chuyển sang ủng hộ SDR “thuần túy” với mức chuyển đổi phần cứng tối thiểu.

Cần phải giải quyết hai vấn đề:

  1. Đồng bộ hóa. Tìm ra độ lệch RF chính xác theo pha và độ lệch tần số lấy mẫu.
  2. Viết ngược chuẩn DVB-T2.

Nhiệm vụ thứ hai yêu cầu nhiều mã hơn nhưng có thể được giải quyết bằng sự kiên trì và có thể dễ dàng xác minh bằng các tín hiệu kiểm tra.

Tín hiệu kiểm tra có sẵn trên máy chủ BBC ftp://ftp.kw.bbc.co.uk/t2refs/ kèm theo hướng dẫn chi tiết.

Giải pháp cho vấn đề đầu tiên phụ thuộc rất nhiều vào đặc tính của thiết bị SDR và ​​​​khả năng điều khiển của nó. Như người ta nói, việc sử dụng các chức năng điều khiển tần số được đề xuất không thành công nhưng mang lại nhiều kinh nghiệm khi đọc những chức năng đó. tài liệu, lập trình, xem phim truyền hình dài tập, giải các câu hỏi triết học..., tóm lại là không thể bỏ dự án.

Niềm tin vào “SDR thuần túy” ngày càng mạnh mẽ hơn.

Chúng tôi lấy tín hiệu như hiện tại, nội suy nó gần như thành tín hiệu tương tự và lấy ra một tín hiệu rời rạc, nhưng tương tự như tín hiệu thực.

Sơ đồ khối đồng bộ:

Bộ thu SDR DVB-T2 trong C++

Mọi thứ ở đây đều theo sách giáo khoa. Tiếp theo phức tạp hơn một chút. Độ lệch cần được tính toán. Có rất nhiều tài liệu và bài báo nghiên cứu so sánh ưu điểm và nhược điểm của các phương pháp khác nhau. Từ tác phẩm kinh điển - đây là “Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Thiết kế bộ thu tối ưu cho truyền dẫn băng thông rộng dựa trên OFDM - Phần I và II.” Nhưng tôi chưa gặp một kỹ sư nào có thể và muốn đếm, vì vậy phương pháp kỹ thuật đã được sử dụng. Sử dụng cùng một phương pháp đồng bộ hóa, tính năng lệch pha được đưa vào tín hiệu kiểm tra. Bằng cách so sánh các số liệu khác nhau với những sai lệch đã biết (anh ấy tự giới thiệu chúng), những số liệu tốt nhất đã được chọn về hiệu suất và dễ thực hiện. Độ lệch tần số thu được tính bằng cách so sánh khoảng bảo vệ và phần lặp lại của nó. Pha của tần số thu và tần số lấy mẫu được ước tính từ độ lệch pha của tín hiệu thí điểm và điều này cũng được sử dụng trong bộ cân bằng tuyến tính đơn giản của tín hiệu OFDM.

Đặc tính cân bằng:

Bộ thu SDR DVB-T2 trong C++

Và tất cả điều này hoạt động tốt nếu bạn biết khi nào khung DVB-T2 bắt đầu. Để làm điều này, ký hiệu mở đầu P1 được truyền đi trong tín hiệu. Phương pháp phát hiện và giải mã ký hiệu P1 được mô tả trong Thông số kỹ thuật ETSI TS 102 831 (cũng có nhiều khuyến nghị hữu ích cho việc tiếp nhận).

Tự tương quan tín hiệu P1 (điểm cao nhất ở đầu khung):

Bộ thu SDR DVB-T2 trong C++

Bức ảnh đầu tiên (chỉ còn sáu tháng nữa là có hình ảnh chuyển động...):

Bộ thu SDR DVB-T2 trong C++

Và đây là nơi chúng ta tìm hiểu sự mất cân bằng IQ, độ lệch DC và rò rỉ LO là gì. Theo quy định, việc bù đắp cho những biến dạng cụ thể này đối với chuyển đổi trực tiếp được thực hiện trong trình điều khiển thiết bị SDR. Vì vậy, phải mất một thời gian dài người ta mới hiểu: việc đánh bật các ngôi sao khỏi chòm sao QAM64 thân thiện là công việc của các chức năng bù trừ. Tôi phải tắt mọi thứ và viết chiếc xe đạp của mình.

Và sau đó hình ảnh chuyển động:

Bộ thu SDR DVB-T2 trong C++

Điều chế QAM64 với góc quay chòm sao cụ thể trong tiêu chuẩn DVB-T2:

Bộ thu SDR DVB-T2 trong C++

Tóm lại, đây là kết quả của việc đưa thịt băm trở lại máy xay thịt. Tiêu chuẩn cung cấp bốn loại trộn:

  • xen kẽ một chút
  • xen kẽ ô (trộn các ô trong khối mã hóa)
  • xen kẽ thời gian (nó cũng nằm trong nhóm khối mã hóa)
  • xen kẽ tần số (trộn tần số trong ký hiệu OFDM)

Kết quả là chúng ta có tín hiệu sau ở đầu vào:

Bộ thu SDR DVB-T2 trong C++

Tất cả điều này là một cuộc đấu tranh để chống nhiễu cho tín hiệu được mã hóa.

Tổng

Bây giờ chúng ta không chỉ có thể thấy bản thân tín hiệu và hình dạng của nó mà còn cả thông tin dịch vụ.
Có hai kênh ghép kênh được phát sóng. Mỗi kênh có hai kênh vật lý (PLP).

Một điểm kỳ lạ đã được nhận thấy trong bộ ghép kênh đầu tiên - PLP đầu tiên được gắn nhãn “bội số”, điều này hợp lý vì có nhiều hơn một trong bộ ghép kênh và PLP thứ hai được gắn nhãn “đơn” và đây là một câu hỏi.
Điều thú vị hơn nữa là điều kỳ lạ thứ hai trong bộ ghép kênh thứ hai - tất cả các chương trình đều nằm trong PLP đầu tiên, nhưng trong PLP thứ hai có một tín hiệu không xác định được ở tốc độ thấp. Ít nhất thì trình phát VLC, hiểu được khoảng năm mươi định dạng video và cùng một lượng âm thanh, lại không nhận ra nó.

Bản thân dự án có thể được tìm thấy ở đây.

Dự án được tạo ra với mục tiêu xác định khả năng giải mã DVB-T2 bằng SdrPlay (và bây giờ là AirSpy.), vì vậy đây thậm chí không phải là phiên bản alpha.

Tái bút Trong khi tôi đang viết bài một cách khó khăn, tôi đã cố gắng tích hợp PlutoSDR vào dự án.

Ai đó sẽ nói ngay rằng chỉ có 6Msps cho tín hiệu IQ ở đầu ra USB2.0, nhưng bạn cần ít nhất 9,2Msps, nhưng đây là một chủ đề riêng.

Nguồn: www.habr.com

Thêm một lời nhận xét