Receveur SDR DVB-T2 en C++

La Radio DĂ©fini par Logiciel (Software Defined Radio) est une mĂ©thode qui remplace le travail de mĂ©tal (ce qui, en principe, est bĂ©nĂ©fique pour la santĂ©) par la douleur de la programmation. L'SDR est promis Ă  un grand avenir, et son principal avantage rĂ©side dans la suppression des restrictions sur la mise en Ɠuvre des protocoles radio. Un exemple est la mĂ©thode de modulation OFDM (Orthogonal frequency-division multiplexing), qui n'est devenue possible que grĂące Ă  la mĂ©thode SDR. Cependant, l'SDR offre Ă©galement une autre possibilitĂ© purement technique : la capacitĂ© de contrĂŽler et de visualiser le signal Ă  n'importe quel point arbitraire avec un minimum d'efforts.

L'un des standards de communication intéressants est la télévision terrestre DVB-T2.
Pourquoi faire ? Bien sûr, on peut simplement allumer la télévision sans se lever, mais il n'y a absolument rien à regarder et cela n'est pas seulement mon opinion, c'est un fait médical.

Si on parle sérieusement, le DVB-T2 a été développé avec des capacités trÚs larges, y compris :

  • application intĂ©rieure
  • modulation de QPSK Ă  256QAM
  • largeur de bande de 1,7 MHz Ă  8 MHz

Il existe une expérience de réception de télévision numérique selon le principe SDR. Le standard DVB-T est présent dans le projet connu GNURadio. Il existe un bloc gr-dvbs2rx pour le standard DVB-T2 (tout cela pour GNURadio), mais nécessitant une synchronisation préalable du signal et il est inspirant (merci spécial à Ron Economos).

Qu'avons-nous ?

Il existe une norme ETSI EN 302 755, décrivant en détail la transmission, mais pas la réception.

Le signal diffusé avec une fréquence d'échantillonnage de 9,14285714285714285714 MHz, modulé en COFDM avec 32768 porteuses, dans une bande de 8 MHz.

Il est recommandé de recevoir de tels signaux avec une fréquence d'échantillonnage double (pour ne rien perdre) et à une fréquence intermédiaire supérieure à la largeur de bande (réception par superhétérodyne), afin d'éliminer le décalage en courant continu (DC) et le "fuite" de l'oscillateur local (LO) à l'entrée du récepteur. Les dispositifs respectant ces conditions sont trop coûteux pour une simple curiosité.

SdrPlay avec 10Msps 10bit ou AirSpy avec des caractéristiques similaires est beaucoup moins cher. Ici, il n'est pas question de fréquence d'échantillonnage double et la réception ne peut se faire qu'avec une conversion directe (Zero IF). Par conséquent, (pour des raisons financiÚres) nous passons du cÎté des adeptes du "pur" SDR avec un minimum de conversion matérielle.

Il était nécessaire de résoudre deux tùches :

  1. Synchronisation. Déterminer le décalage exact de la fréquence radio avec une précision de phase et le décalage de la fréquence d'échantillonnage.
  2. Réécrire la norme DVB-T2 à l'envers.

La deuxiĂšme tĂąche nĂ©cessite beaucoup plus de code, mais elle est rĂ©solvable par la persĂ©vĂ©rance et peut ĂȘtre facilement vĂ©rifiĂ©e Ă  l'aide de signaux de test.

Les signaux de test sont disponibles sur le serveur de la BBC ftp://ftp.kw.bbc.co.uk/t2refs/ avec des instructions détaillées.

La solution de la premiÚre tùche dépend fortement des caractéristiques de l'appareil SDR et des capacités de contrÎle. Utiliser les fonctions de contrÎle de fréquence recommandées, comme on dit, n'a pas réussi, mais cela a permis d'acquérir beaucoup d'expérience en lecture de documentation technique, en programmation, en regardant des séries, en résolvant des questions philosophiques..., en gros, il n'a pas été possible d'abandonner le projet.

La foi en « pure SDR » n'a fait que se renforcer.

Nous prenons le signal tel quel, l'interpolons pratiquement jusqu'Ă  un analogue et en extrayons ainsi un discret, mais ressemblant Ă  l'original.

Schéma de synchronisation :

Receveur SDR DVB-T2 en C++

Ici, tout est selon le manuel. Ensuite, c'est un peu plus compliquĂ©. Il est nĂ©cessaire de calculer les Ă©carts. Il existe de nombreuses littĂ©ratures et articles de recherche comparant les avantages et les inconvĂ©nients des diffĂ©rentes mĂ©thodes. Dans la classique, c'est « Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Optimum Receiver Design for OFDM-Based Broadband Transmission – Part I et II ». Cependant, je n'ai jamais rencontrĂ© d'ingĂ©nieur capable et dĂ©sireux de faire des calculs, donc une approche ingĂ©nierie a Ă©tĂ© appliquĂ©e. La mĂȘme mĂ©thode de synchronisation a introduit des perturbations dans le signal de test. En comparant diffĂ©rentes mĂ©triques avec des Ă©carts connus (je les ai moi-mĂȘme introduits), les meilleures pour la performance et la simplicitĂ© de mise en Ɠuvre ont Ă©tĂ© choisies. L'Ă©cart de frĂ©quence de rĂ©ception est calculĂ© en comparant l'intervalle de protection et sa partie rĂ©pĂ©tĂ©e. La phase de frĂ©quence de rĂ©ception et la frĂ©quence d'Ă©chantillonnage sont Ă©valuĂ©es en fonction de l'Ă©cart de phase des signaux pilotes, et cela est Ă©galement utilisĂ© dans un Ă©galiseur OFDM simple et linĂ©aire.

Caractéristiques de l'égaliseur :

Receveur SDR DVB-T2 en C++

Et tout cela fonctionne bien si l'on sait quand commence un cadre DVB-T2. Pour cela, un symbole de préambule P1 est transmis dans le signal. La méthode de détection et de décodage du symbole P1 est décrite dans la spécification technique ETSI TS 102 831 (il y a aussi de nombreuses recommandations utiles pour la réception).

Autocorrélation du signal P1 (le point le plus élevé au début du cadre) :

Receveur SDR DVB-T2 en C++

La premiĂšre image (il ne reste plus que six mois avant l'image en mouvement...) :

Receveur SDR DVB-T2 en C++

C'est ici que nous découvrons ce qu'est le déséquilibre IQ, le décalage DC et la fuite LO. En général, la compensation de ces distorsions spécifiques à la conversion directe est réalisée dans le pilote du dispositif SDR. Il a donc fallu beaucoup de temps pour comprendre que le fait de sortir les étoiles d'une constellation QAM64 bien ordonnée est le travail des fonctions de compensation. Il a fallu tout déconnecter et écrire sa propre solution.

Et voilà, l'image a commencé à bouger :

Receveur SDR DVB-T2 en C++

Modulation QAM64 avec une rotation spécifique de la constellation dans la norme DVB-T2 :

Receveur SDR DVB-T2 en C++

En résumé, c'est le résultat de faire passer une viande hachée à travers un hachoir à viande. La norme prévoit quatre types de mélange :

  • bit interleaving (mĂ©lange de bits avec torsion des colonnes)
  • cell interleaving (mĂ©lange des cellules dans le bloc de codage)
  • time interleaving (mĂ©lange dans le groupe de blocs de codage)
  • frequency interleaving (mĂ©lange des frĂ©quences dans le symbole OFDM)

Au final, nous avons ce type de signal en entrée :

Receveur SDR DVB-T2 en C++

Tout cela est une lutte pour la résistance aux interférences du signal codé.

Conclusion

Maintenant, nous pouvons voir non seulement le signal lui-mĂȘme et sa forme, mais aussi les informations de service.
Il y a deux multiplexeurs Ă  l'air. Chacun avec deux canaux physiques (PLP).

Une bizarrerie a Ă©tĂ© remarquĂ©e dans le premier multiplexe — le premier PLP a l'Ă©tiquette «multiple», ce qui est logique, car il n'est pas seul dans le multiplexe, tandis que le second PLP a l'Ă©tiquette «single» et c'est une question.
Encore plus intĂ©ressant, la seconde bizarrerie du second multiplexe — tous les programmes sont dans le premier PLP, tandis que dans le second PLP Ă  faible vitesse, il y a un signal d'une nature inconnue. Du moins, le lecteur VLC, qui comprend environ une cinquantaine de formats vidĂ©o et autant d'audio, ne le reconnaĂźt pas.

Le projet peut ĂȘtre trouvĂ© ici.

Le projet a Ă©tĂ© créé dans le but de dĂ©terminer la possibilitĂ© mĂȘme de dĂ©coder le DVB-T2 Ă  l'aide de SdrPlay (et maintenant aussi d'AirSpy), donc ce n'est mĂȘme pas une version alpha.

P.S. Pendant que l'article était difficile à écrire, il a été possible d'intégrer dans le projet le PlutoSDR.

Certaines personnes diront tout de suite qu'il n'y a que 6 Msps pour le signal IQ sur la sortie USB2.0, alors qu'il en faut au moins 9,2 Msps, mais c'est un sujet distinct.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster