Mi primer Receptor "Software Defined Radio" (SDR) - 2ª Parte

Downconverter

full-spectrum-peq


1ª Parte - Etapa de Captura
2ª Parte - Downconverter
3ª Parte - Demodulación

Apéndice - Espectrograma

 

English Version

Recordemos el diagrama inicial:

non-realtime-sdr-stage-diagram

 

2.1 - ¿Que es baudline?

baudline: baudline (http://www.baudline.com/) es un magnifico programa para el análisis de señales. Parece ser diseñado para analizar señales de audio y música pero ajustando los parámetros necesarios y proporcionándole un fichero con una señal de radio, puede realizar la función de downconverter como narraremos mas adelante. Su salida nos proporcionara otro fichero .wav con una porción de la señal original.

2.2 - ¿Puedo conectar directamente baudline a /dev/dsp sin necesidad del fichero .wav?

No me ha sido posible conseguir que baudline se conecte directamente a /dev/audio. Hay problemas de compatibilidad con el modulo btaudio. De todas formas, aunque fuera posible esta conexión, tendríamos el problema de la potencia necesaria para trabajar en tiempo real.

Una opción para procesar una señal de entrada del Bt878A mediante baudline en una máquina potente es esta:

# sox -r 896000 -w -t ossdsp /dev/dsp2 -t sw - | ./baudline -stdin -samplerate 896000

(nota: el parámetro /dev/dsp2 depende de tu hardware)

De esta manera, el stream adquirido por SOX pasa a baudline mediante una pipe en tiempo real.


2.3 - ¿Que es un downconverter?

Es un mezclador que mezcla dos señales en frecuencia: nuestra entrada y una señal senoidal de una determinada frecuencia. El resultado es, al mismo tiempo, nuestra señal original sumada en frecuencia con la señal senoidal y nuestra señal original restada en frecuencia con la señal senoidal. Si despreciamos el resultado sumado en frecuencia y solo nos quedamos con la resta, obtenemos la señal original "bajada" en frecuencia. Un downconverter. Para saber mas.

2.3 - ¿Que es un filtro antialiasing?

"... It is simply a low pass filter (LPF) that removes signal above the soon-to-be-decimated new Nyquist frequency. Without this LPF you would get mirror images when you decimate. That would be bad. It would corrupt the data." [Erik Olson]

"... Aliasing is what makes the wagon wheels look like they're going backward in the old westerns: the sampling rate of the movie camera is not fast enough to represent the position of the spokes unambiguously."  [Eric Blossom] (article)

2.4 - ¿Que es un diezmador (decimator)?

Un diezmador no es mas que una etapa digital que divide el numero de muestras por un determinado valor para obtener una cantidad menor. La señal obtenida es la misma que la original pero con un numero menor de Sps y de ancho de banda. El diezmador tras el downconverter se utiliza para descartar la parte del espectro que no nos interesa y quedarnos solo con las frecuencias mas cercanas a 0 Hz, ósea, la banda base.

 

Downconverter

2.5 - Análisis de la señal con baudline

Podemos obtener una copia gratuita de baudline para Linux en su site (http://www.baudline.com/download.html). Es un fichero ejecutable que no requiere instalación.

El método consiste en lanzar contra baudline el fichero .wav previamente obtenido (parte anterior) mediante una pipe, de la siguiente manera:

# sox -t .wav radio-capture-896000.wav -t sw - | ./baudline -stdin -samplerate 896000

SOX no requiere el parámetro -r 896000 por que en este caso obtiene esta información de la cabecera del .wav. Con -t sw solicitamos que la salida de la pipe sea en formato "signed word".

Se abrirá la ventana principal de baudline. Pulsando con el botón de la derecha del ratón en el interior de la venta se despliega el menú principal. Seleccionamos "Input  Devices":

sdr-baudline-selecting-input-devices-2

Nótese que "Sample Rate" indica 896000 que es la velocidad que le hemos pasado al programa vía línea de comandos. El diezmador desactivado inicialmente. La opción "Down Mixer" (downconverter) esta presente pero desactivada y nos indica un ancho de banda de 448000 Hz (896000 / 2).

sdr-baudline-input-devices-start

Los periféricos de sonido han sido detectados por baudline pero no deben ser seleccionados. Nuestro periférico de entrada es el stdin.

Abrimos "Play Deck":

sdr-baudline-selecting-play-deck

 

 

         sdr-baudline-play-deck        sdr-baudline-record-button

 

Pulsamos el botón de "Record" (en rojo) y el programa comenzara el procesado de la señal, mostrándonos también el análisis de espectro correspondiente, desde 0 hasta 447125 Hz.

sdr-baudline-record

sdr-baudline-stop-button

 

2.6 - "Down Mixer"

En la ventana "Input Devices", seleccionamos el valor 32 en "Decimate by" para diezmar por 32. Este valor no es casual ya que al dividir 896000 Sps por 32 nos quedan 28000 Sps, la cual es una velocidad soportada por la mayoría de tarjetas de sonido y esto será útil mas adelante. El valor inmediatamente inferior: 16, generaría un stream de 56000 Sps que esta por encima de los 44100 Sps estándar.

sdr-baudline-decimate-2

Al seleccionar el diezmado la barra del Down Mixer se activa automáticamente. Nótese que ahora el rango de frecuencias que nos indica es de 0 a 14000 Hz. (28000 / 2). Esto significa que ahora, en el análisis de espectro, solo mostrara un ancho de banda de 14 Khz.

sdr-baudline-record-button

Si pulsamos nuevamente Record y mientras se procesa la señal hacemos clic en la barra del Down Mixer, podemos "movernos" por la señal original de 447 Khz. a saltos de 14 Khz. Es el equivalente a cuando giramos el dial de una radio.

Por ejemplo: movemos la barra del downconverter hasta 154492 Hz:

sdr-baudline-downconverter-154492

Y observamos el espectrograma correspondiente:

sdr-baudline-record-154-khz

baudline muestra en el espectrograma frecuencias desde 154492.19 Hz hasta 168464.84 Hz pero no es mas que un ajuste que él realiza para que sepamos a que frecuencia original corresponde lo que estamos viendo en pantalla. En realidad, una vez mezclamos y diezmamos, dichas frecuencias dejan de existir y a la izquierda del espectro tenemos 0 Hz y a la derecha 14 Khz. La siguiente figura intenta aclarar este concepto.

homebrew-sdr-mixer-decimation-process

Por consiguiente, si tras el diezmado visualizamos en el espectro una portadora centrada a 162 Khz., realmente corresponde a una portadora centrada a 8 Khz. en la señal de salida pero sigue correspondiendo a una de 162 Khz. en la señal original.

sdr-baudline-stop-button

Pulsamos Stop en el Play Deck y cerramos baudline.

 

2.7 - Guardar la señal obtenida

Hasta ahora hemos utilizado baudline como herramienta de visualización pero podemos utilizar el stdout para almacenar el resultado de sus operaciones en un fichero .wav. El comando queda de la siguiente manera:

# sox -t .wav radio-capture-896000.wav -t sw - | ./baudline -stdin -samplerate 896000 -stdout | sox -r 28000 -w -t sw - -t .wav radio-downconverter-28000.wav

Los dos primeros comandos son idénticos al paso anterior, salvo por el parámetro -stdout que indica a baudline que active como periférico de salida el stdout. Añado un segundo comando SOX que recoge la salida de baudline en formato "signed word" a 28000 Sps (896000 / 32) y lo envía a un fichero .wav.

baudline arranca. En Play Deck pulsamos el triangulito de la derecha para desplegar la ventana y seleccionamos "Output Device -> stdout" como indica la siguiente imagen:

sdr-baudline-selecting-play-deck-stdout

sdr-baudline-record-button

baudline ha recordado los parámetros del "Down Mixer" y del "Decimate by" y si no hemos cambiado nada no es necesario configurarlos nuevamente. Pulsamos el botón de Record. El espectrograma se actualiza con nueva información, pero ahora la señal resultante se esta enviando al mismo tiempo al fichero radio-downconverter-28000.wav.

 

2.8 - "Signal Rendering"

A medida que baudline avanza por la señal original el fichero de salida crece lentamente. Esperamos a que recorra completamente el fichero de entrada. Para que el proceso sea mas rápido podemos desactivar el analizado de espectro y el espectrograma. Sabremos que el proceso ha finalizado cuando baudline deje de consumir CPU o el fichero de salida deje de crecer.

sdr-baudline-stop-button     sdr-baudline-record-button

Podemos pulsar Stop para realizar alguna tarea en el Linux y pulsar nuevamente Record retomando la conversión justo en el punto donde la dejamos, sin perder información. Depende de la carga de la máquina, baudline puede tardar bastante en responder a nuestra petición de Stop.

En este momento se esta produciendo un hecho curioso. Debido a que tanto la fuente de la señal como la salida son un fichero y no interviene ningún periférico hardware en el proceso de entra/salida (tarjeta de sonido o el Bt878a) la conversión es asíncrona. Quiero decir que a pesar de que baudline consume el 100% de CPU no se produce ningún tipo de "buffer-overrun". El programa obtiene datos del stdin, los procesa y los envía al stdout, tan rápido como la CPU se lo permite. Puede darse el caso de que en una máquina potente, el procesar un .wav de 10 minutos de duración, tarde menos de 10 minutos o mas de 50 minutos en un PC lento, siendo el fichero de salida idénticos. A esto yo lo llamo: "Signal Rendering". Todo esto puede resultar obvio pero para mi ha sido una experiencia muy interesante.

sdr-baudline-stop-button

Una vez finalizada el proceso pulsamos Stop y cerramos baudline. En mi caso, un radio-capture-896000.wav de 596 MBytes con una captura de 5,48 minutos de duración ha quedado convertido en un radio-downconverter-28000.wav de 19 MBytes y el proceso ha tardado unos 20 minutos en completarse. 

Al cerrar baudline rompemos la pipe que hemos creado y esto provoca que el fichero de salida no se cierre correctamente. El comando SOX no puede grabar en la cabecera la duración total del .wav y esto puede provocar algún problema mas adelante si abrimos el fichero con otros programas. Para arreglarlo basta con hacer esto para crear una copia reparada y con un nuevo nombre:

# sox -t .wav radio-downconverter-28000.wav -t .wav radio-downconverter-28000-sps-162-khz.wav

En mi caso, la portadora a 162 Khz. corresponde a una emisora de radiodifusión. En la próxima parte intentaremos demodularla.

¡Gracias baudline!

 

->> 3ª Parte - Demodulación ->>


 


- Autor:

Juan Domenech Fernandez

http://www.domenech.org
 

English Version

v0.1 10-junio-2004
v0 10-junio-2004