Receptor SDR DVB-T2 en C++

Software Defined Radio é un método para substituír o traballo de metal (que é bo para a túa saúde) pola dor de cabeza da programación. Os SDR prevén un gran futuro e considérase que a principal vantaxe é a eliminación das restricións na implementación de protocolos de radio. Un exemplo é o método de modulación OFDM (Orthogonal frequency-division multiplexing), que só é posible grazas ao método SDR. Pero SDR tamén ten unha oportunidade máis, puramente de enxeñería: a capacidade de controlar e visualizar un sinal en calquera punto arbitrario co mínimo esforzo.

Un dos estándares de comunicación interesantes é a televisión terrestre DVB-T2.
Para qué? Por suposto, pode simplemente acender a televisión sen levantarse, pero non hai absolutamente nada que ver alí e esta xa non é a miña opinión, senón un feito médico.

En serio, DVB-T2 está deseñado con capacidades moi amplas, incluíndo:

  • aplicación interior
  • modulación de QPSK a 256QAM
  • ancho de banda de 1,7 MHz a 8 MHz

Teño experiencia en recibir televisión dixital utilizando o principio SDR. O estándar DVB-T está no coñecido proxecto GNURadio. Hai un bloque gr-dvbs2rx para o estándar DVB-T2 (todo para o mesmo GNURadio), pero require unha sincronización de sinal preliminar e é inspirador (grazas especiais a Ron Economos).

O que temos.

Hai unha norma ETSI EN 302 755 que detalla a transmisión, pero non a recepción.

O sinal está no aire cunha frecuencia de mostraxe de 9,14285714285714285714 MHz, modulado por COFDM con 32768 portadoras, nunha banda de 8 MHz.

Recoméndase recibir tales sinais co dobre da frecuencia de mostraxe (para non perder nada) e na frecuencia intermedia máis ancho de banda (recepción superheterodina), para desfacerse da compensación de corrente continua (DC) e da "fuga" do oscilador local. (LO) á entrada do receptor. Os dispositivos que cumpren estas condicións son demasiado caros para a simple curiosidade.

SdrPlay con 10Msps 10bit ou AirSpy con características similares é moito máis barato. Aquí non se trata de duplicar a frecuencia de mostraxe e a recepción só se pode facer con conversión directa (IF cero). Polo tanto (por razóns económicas) estamos cambiando ao lado dos seguidores do SDR "puro" cun mínimo de conversión de hardware.

Había que resolver dous problemas:

  1. Sincronización. Descubra a desviación de RF exacta en fase e a desviación da frecuencia de mostraxe.
  2. Reescriba o estándar DVB-T2 ao revés.

A segunda tarefa require moito máis código, pero pódese resolver con perseveranza e pódese verificar facilmente mediante sinais de proba.

Os sinais de proba están dispoñibles no servidor da BBC ftp://ftp.kw.bbc.co.uk/t2refs/ con instrucións detalladas.

A solución ao primeiro problema depende en gran medida das características do dispositivo SDR e das súas capacidades de control. Usar as funcións de control de frecuencia recomendadas, como din, non tivo éxito, pero deu moita experiencia lendo esas. documentación, programación, ver series de televisión, resolver cuestións filosóficas..., en fin, non foi posible abandonar o proxecto.

A fe no "SDR puro" só se fixo máis forte.

Collemos o sinal tal e como está, interpolámolo case a un analóxico e sacamos un discreto, pero semellante ao real.

Diagrama de bloques de sincronización:

Receptor SDR DVB-T2 en C++

Todo aquí é segundo o libro de texto. O seguinte é un pouco máis complicado. Hai que calcular as desviacións. Hai moita literatura e artigos de investigación que comparan as vantaxes e os inconvenientes de diferentes métodos. Dos clásicos: este é "Michael Speth, Stefan Fechtel, Gunnar Fock, Heinrich Meyr, Deseño óptimo de receptores para transmisión de banda ancha baseada en OFDM - Parte I e II". Pero non coñecín un só enxeñeiro que poida e queira contar, polo que utilizouse un enfoque de enxeñería. Usando o mesmo método de sincronización, introduciuse a desintonía no sinal de proba. Ao comparar diferentes métricas con desviacións coñecidas (el mesmo presentounos), seleccionáronse as mellores por rendemento e facilidade de implementación. A desviación da frecuencia de recepción calcúlase comparando o intervalo de garda e a súa parte repetitiva. A fase da frecuencia de recepción e a frecuencia de mostraxe estímase a partir da desviación de fase dos sinais piloto e tamén se usa nun ecualizador lineal sinxelo dun sinal OFDM.

Característica do ecualizador:

Receptor SDR DVB-T2 en C++

E todo isto funciona ben se sabes cando comeza o cadro DVB-T2. Para iso, transmítese no sinal o símbolo de preámbulo P1. O método para detectar e decodificar o símbolo P1 descríbese na especificación técnica ETSI TS 102 831 (tamén hai moitas recomendacións útiles para a recepción).

Autocorrelación do sinal P1 (o punto máis alto ao comezo do cadro):

Receptor SDR DVB-T2 en C++

Primeira imaxe (só quedan seis meses para a imaxe en movemento...):

Receptor SDR DVB-T2 en C++

E aquí é onde aprendemos o que son o desequilibrio do coeficiente intelectual, a compensación de CC e as fugas de LO. Como regra xeral, a compensación destas distorsións específicas para a conversión directa implícase no controlador do dispositivo SDR. Polo tanto, levou moito tempo entender: eliminar estrelas da amigable constelación QAM64 é o traballo das funcións de compensación. Tiven que apagar todo e escribir a miña bicicleta.

E entón a imaxe moveuse:

Receptor SDR DVB-T2 en C++

Modulación QAM64 con rotación de constelación específica no estándar DVB-T2:

Receptor SDR DVB-T2 en C++

En resumo, este é o resultado de pasar a carne picada de novo polo moedor de carne. A norma prevé catro tipos de mestura:

  • bit entrelazado
  • intercalación de células (mestura de células nun bloque de codificación)
  • intercalación temporal (tamén está no grupo de bloques de codificación)
  • entrelazado de frecuencias (mestura de frecuencias nun símbolo OFDM)

Como resultado, temos o seguinte sinal na entrada:

Receptor SDR DVB-T2 en C++

Todo isto é unha loita pola inmunidade ao ruído do sinal codificado.

Total

Agora podemos ver non só o sinal en si e a súa forma, senón tamén a información do servizo.
Hai dous multiplexes ao aire. Cada un ten dúas canles físicas (PLP).

No primeiro múltiplex notouse unha peculiaridade: o primeiro PLP é etiquetado como "múltiple", o que é lóxico, xa que hai máis dun no múltiplex, e o segundo PLP é etiquetado como "único" e esta é unha pregunta.
Aínda máis interesante é a segunda rareza no segundo multiplex: todos os programas están no primeiro PLP, pero no segundo PLP hai un sinal de natureza descoñecida a baixa velocidade. Polo menos o reprodutor VLC, que comprende uns cincuenta formatos de vídeo e a mesma cantidade de audio, non o recoñece.

O propio proxecto pódese atopar aquí.

O proxecto foi creado co obxectivo de determinar a posibilidade mesma de decodificar DVB-T2 usando SdrPlay (e agora AirSpy.), polo que esta non é nin unha versión alfa.

PD Mentres escribía o artigo con dificultade, conseguín integrar PlutoSDR no proxecto.

Alguén dirá inmediatamente que só hai 6 Msps para o sinal IQ na saída USB2.0, pero necesitas polo menos 9,2 Msps, pero este é un tema separado.

Fonte: www.habr.com

Engadir un comentario