Δέκτης SDR DVB-T2 σε C++

Το Software Defined Radio είναι μια μέθοδος αντικατάστασης της μεταλλοτεχνίας (που είναι πραγματικά καλό για την υγεία σας) με τον πονοκέφαλο του προγραμματισμού. Τα SDR προβλέπουν ένα μεγάλο μέλλον και το κύριο πλεονέκτημα θεωρείται η άρση των περιορισμών στην εφαρμογή ραδιοφωνικών πρωτοκόλλων. Ένα παράδειγμα είναι η μέθοδος διαμόρφωσης OFDM (Orthogonal frequency-division multiplexing), η οποία κατέστη δυνατή μόνο με τη μέθοδο SDR. Αλλά το SDR έχει επίσης μια ακόμη, καθαρά μηχανική ευκαιρία - τη δυνατότητα ελέγχου και οπτικοποίησης ενός σήματος σε οποιοδήποτε αυθαίρετο σημείο με την ελάχιστη προσπάθεια.

Ένα από τα ενδιαφέροντα πρότυπα επικοινωνίας είναι η επίγεια επίγεια τηλεόραση DVB-T2.
Για τι? Φυσικά, μπορείτε απλά να ανοίξετε την τηλεόραση χωρίς να σηκωθείτε, αλλά δεν υπάρχει απολύτως τίποτα να παρακολουθήσετε εκεί και αυτό δεν είναι πλέον η γνώμη μου, αλλά ένα ιατρικό γεγονός.

Σοβαρά, το DVB-T2 έχει σχεδιαστεί με πολύ ευρείες δυνατότητες, όπως:

  • εφαρμογή σε εσωτερικούς χώρους
  • διαμόρφωση από QPSK σε 256QAM
  • εύρος ζώνης από 1,7 MHz έως 8 MHz

Έχω εμπειρία στη λήψη ψηφιακής τηλεόρασης χρησιμοποιώντας την αρχή 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 10bit ή το AirSpy με παρόμοια χαρακτηριστικά είναι πολύ φθηνότερο. Εδώ δεν τίθεται θέμα διπλής συχνότητας δειγματοληψίας και η λήψη μπορεί να γίνει μόνο με απευθείας μετατροπή (Zero IF). Επομένως (για οικονομικούς λόγους) μεταβαίνουμε στην πλευρά των οπαδών του «καθαρού» SDR με ελάχιστη μετατροπή υλικού.

Ήταν απαραίτητο να λυθούν δύο προβλήματα:

  1. Συγχρονισμός. Μάθετε την ακριβή απόκλιση ραδιοσυχνοτήτων με ακρίβεια φάσης και την απόκλιση συχνότητας δειγματοληψίας.
  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 και η διαρροή LO. Κατά κανόνα, η αντιστάθμιση για αυτές τις παραμορφώσεις ειδικά για την άμεση μετατροπή εφαρμόζεται στο πρόγραμμα οδήγησης συσκευής SDR. Ως εκ τούτου, χρειάστηκε πολύς χρόνος για να καταλάβουμε: το να χτυπήσουμε αστέρια από τον φιλικό αστερισμό QAM64 είναι το έργο των συναρτήσεων αντιστάθμισης. Έπρεπε να τα σβήσω όλα και να γράψω το ποδήλατό μου.

Και μετά η εικόνα μετακινήθηκε:

Δέκτης SDR DVB-T2 σε C++

Διαμόρφωση QAM64 με συγκεκριμένη περιστροφή αστερισμού στο πρότυπο DVB-T2:

Δέκτης SDR DVB-T2 σε C++

Εν ολίγοις, αυτό είναι το αποτέλεσμα της διέλευσης του κιμά από τον μύλο κρέατος. Το πρότυπο προβλέπει τέσσερις τύπους ανάμειξης:

  • λίγο παρεμβαλλόμενο
  • παρεμβολή κελιών (ανάμειξη κελιών σε μπλοκ κωδικοποίησης)
  • παρεμβολή χρόνου (είναι επίσης στην ομάδα των μπλοκ κωδικοποίησης)
  • παρεμβολή συχνότητας (μίξη συχνότητας σε σύμβολο OFDM)

Ως αποτέλεσμα, έχουμε το ακόλουθο σήμα στην είσοδο:

Δέκτης SDR DVB-T2 σε C++

Όλα αυτά είναι ένας αγώνας για την ασυλία θορύβου του κωδικοποιημένου σήματος.

Σύνολο

Τώρα μπορούμε να δούμε όχι μόνο το ίδιο το σήμα και το σχήμα του, αλλά και πληροφορίες υπηρεσίας.
Υπάρχουν δύο πολυπλέκτες στον αέρα. Το καθένα έχει δύο φυσικά κανάλια (PLP).

Ένα παράξενο παρατηρήθηκε στον πρώτο πολυπλέκτη - το πρώτο PLP φέρει την ένδειξη "πολλαπλό", το οποίο είναι λογικό, αφού υπάρχουν περισσότερα από ένα στον πολυπλεξία, και το δεύτερο PLP έχει την ένδειξη "μονό" και αυτό είναι ένα ερώτημα.
Ακόμη πιο ενδιαφέρον είναι το δεύτερο παράξενο στο δεύτερο multiplex - όλα τα προγράμματα είναι στο πρώτο PLP, αλλά στο δεύτερο PLP υπάρχει ένα σήμα άγνωστης φύσης σε χαμηλή ταχύτητα. Τουλάχιστον το πρόγραμμα αναπαραγωγής VLC, το οποίο καταλαβαίνει περίπου πενήντα μορφές βίντεο και την ίδια ποσότητα ήχου, δεν το αναγνωρίζει.

Το ίδιο το έργο μπορείτε να το βρείτε εδώ.

Το έργο δημιουργήθηκε με στόχο να προσδιοριστεί η ίδια η δυνατότητα αποκωδικοποίησης του DVB-T2 χρησιμοποιώντας το SdrPlay (και τώρα το AirSpy.), επομένως δεν πρόκειται καν για έκδοση άλφα.

ΥΓ Ενώ έγραφα το άρθρο με δυσκολία, κατάφερα να εντάξω το PlutoSDR στο έργο.

Κάποιος θα πει αμέσως ότι υπάρχουν μόνο 6Msps για το σήμα IQ στην έξοδο USB2.0, αλλά χρειάζεστε τουλάχιστον 9,2Msps, αλλά αυτό είναι ένα ξεχωριστό θέμα.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο