Práctica 3 de Laboratorio Entradas y Salidas Analógicas

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 9

PRÁCTICAS DE LABORATORIO PARA PROCESAMIENTO DIGITAL DE SEÑAL

“Entradas y Salidas Analógicas”

Por

EDUARDO AVENDAÑO FERNÁNDEZ

UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA


ESCUELA DE INGENIERÍA ELECTRÓNICA
FACULTAD SECCIONAL SOGAMOSO
2019
1. Introducción

El procesamiento digital de señal en tiempo real proporciona numersas ventajas en el


procesamiento de señales en tiempo continuo (o analógicas). Sin embargo, hay limitaciones
inherentes en el sistema DSP por si mismo que pueden restringir los tipos de señales que se
pueden procesar. A través de este laboratorio, se caracterizará algunos de los componentes
importantes del sistema DSP para entender su impacto y desempeño en la capacidad del
sistema completo.

Conversor Procesador Conversor


Filtro Anti- Digital a Filtro de
Analógico a Digital de
Alias (FAA) Analógico Reconstrucción
Digital (ADC) Señal
(DAC)
Fig. 1. Diagrama de bloques de un sistema DSP.

2. Respuesta al escalón y al impulso unitario del filtro de reconstrucción del DAC

De acuerdo a la figura 1, el primer análisis se hace sobre el filtro de reconstrucción. Por tanto,
// square_intr .c

# include " audio .h"


void I2S_HANDLER ( void ) { /* ***** I2S Interruption Handler **** */
const int loop_size = 64;
const int16_t square_table [ loop_size ] = {
10000 , 10000 , 10000 , 10000 , 10000 , 10000 , 10000 , 10000 ,
10000 , 10000 , 10000 , 10000 , 10000 , 10000 , 10000 , 10000 ,
10000 , 10000 , 10000 , 10000 , 10000 , 10000 , 10000 , 10000 ,
10000 , 10000 , 10000 , 10000 , 10000 , 10000 , 10000 , 10000 ,
-10000 , -10000 , -10000 , -10000 , -10000 , -10000 , -10000 , -10000 ,
-10000 , -10000 , -10000 , -10000 , -10000 , -10000 , -10000 , -10000 ,
-10000 , -10000 , -10000 , -10000 , -10000 , -10000 , -10000 , -10000 ,
-10000 , -10000 , -10000 , -10000 , -10000 , -10000 , -10000 , -10000};
static int square_ptr = 0;
int16_t audio_chR =0;
int16_t audio_chL =0;

audio_IN = i2s_rx ();


audio_chL = audio_IN & 0 x0000FFFF ;
audio_chR = ( audio_IN > >16)& 0 x0000FFFF ;

audio_chL = square_table [ square_ptr ++];


audio_chR = audio_chL ;
square_ptr %= loop_size ; // return to start if we reached the end of the array

audio_OUT = (( audio_chR < <16) & 0 xFFFF0000 ) | ( audio_chL & 0 x0000FFFF );


i2s_tx ( audio_OUT );
}
int main ( void ) {
audio_init ( hz8000 , line_in , intr , I2S_HANDLER );
while (1){}
}
UPTC
Fig.Ingeniería Electrónica
2. Código de programa Eduardo Avendaño Fernández
square_intr.c 2
para examinar el diseño del filtro, se generará diferentes formas de onda desde el DSP y estas
salidas pasarán a través del DAC y el filtro de reconstrucción, esto requiere aislar la parte de la
salida del sistema.

El programa square_intr.c repetidamente entrega una secuencia que comprende 32 valores


consecutivos de 10000 seguidos por 32 valores consecutivos de -10000. Observando la salida
del sistema, se puede entender que esto podría parecerse a una forma de onda cuadrada que
ha sido pasada a través del DAC y filtro de reconstrucción en el codificador-decodificador
(CODEC), que nos permite tener una percepción de la respuesta al escalón.

Ejecute el programa y observe la salida usando un osciloscopio. Debería obtener un resultado


similar al presentado en la figura 3.

Fig. 3. Forma de onda analógica generada usando la función square intr.c.

Pregunta 1: Incluya una captura gráfica de la medición hecha en osciloscopio. Basado en esa
captura, dibuje lo que usted considera es la respuesta al impulso del DAC y filtro de
reconstrucción. Justifique su respuesta.

Ayuda: Un impulso es la derivada en tiempo de un escalón y, de igual forma, la respuesta al


impulso de un sistema LTI es igual a la derivada en tiempo de su respuesta al escalón.

Pregunta 2: Modifique el programa square_intr.c de manera que la salida del sistema sea una
aproximación de la respuesta al impulso del DAC y filtro de reconstrucción. Incluya el código y
modificaciones que haga y explíquelos. Incluya una captura de la medición del osciloscopio.

UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 3


Ayuda: Cree y utilice una tabla de búsqueda que aproxime la función impulso o delta de
Kronecker.

3. Magnitud de la respuesta en frecuencia del filtro de reconstrucción del DAC

La forma de onda analógica de salida generada por square_intr.c contine las componentes de
frecuencia de una onda cuadrada a 125Hz y una frecuencia máxima de hasta 4 kHz. Las
componentes de mayor frecuencia (que podrían hacer los bordes de la forma de onda cuadrada
más agudos) se pierden. Esto puede ilustrarse usando cualquiera, la función de transformada
rápida de Fourier (FFT) de un osciloscopio o usando un analizador de espectro. Observe el
espectro de la señal de salida. ¿Qué observa? ¿A que corresponden esas líneas espectrales?, ¿El
resultado se parece a la forma de onda obtenida en la figura 4?

Fig. 4. Magnitud de las componentes de frecuencia presentes en una forma de onda analógica
generada usando la función square intr.c

Una representación más completa de la magnitud en el dominio de la frecuencia de un DAC y


filtro de reconstrucción puede obtenerse usando el programa prbs_intr.c mostrado en la figura
5. Este programa usa la función prbs() para generar una secuencia pseudo-aleatoria que, en
teoría, contiene un rango completo de componentes en frecuencias diferentes a igual
magnitud. Observando que frecuencias están presentes en la salida del sistema, se puede
discernir cómo el sistema atenúa ciertas frecuencias. Ejecute el programa y observe la
respuesta en los dominios del tiempo y la frecuencia.

UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 4


Pregunta 3: incluya una captura en pantalla de la medición con analizador de espectro.
Comente lo que observa.

Pregunta 4: cambie la tasa de muestreo del sistema a 48 kHz y de nuevo observe la salida del
sistema. Incluya una captura de pantalla de la medición con analizador de espectro. Comente lo
que observa e indique que camibo relativamente respecto a la pregunta anterior.

// prbs_intr .c

# include " audio .h"


void I2S_HANDLER ( void ) { /* ***** I2S Interruption Handler **** */
int16_t audio_chR =0;
int16_t audio_chL =0;

audio_IN = i2s_rx ();


audio_chL = audio_IN & 0 x0000FFFF ;
audio_chR = ( audio_IN > >16)& 0 x0000FFFF ;

audio_chL = prbs ();


audio_chR = audio_chL ;

audio_OUT = (( audio_chR < <16) & 0 xFFFF0000 ) | ( audio_chL & 0 x0000FFFF );


i2s_tx ( audio_OUT );
}

int main ( void ) {


audio_init ( hz8000 , line_in , intr , I2S_HANDLER );
while (1){}
}
Fig. 5. Código de programa prbs_intr.c

4. Respuesta al impulso de un filtro Anti-Alias

Se seguirá una estrategia similar para observar las características del filtro anti-alias a la entrada
analógica del hardware DSP en tiempo real. Se usará un generador de señal externa y se
recuperará las muestras ADC usando las capacidades de depuración en el entorno de desarrollo
(IDE) del Keil.

El programa loop_buf_intr.c mostrado en la figura 6, es un bucle de audio usado


anteriormente. Sin embargo, observe que las muestras de entrada pasadas son almacenadas en
un buffer. Al pausar el programa y recuperar las muestras, se observa (por ejemplo, por medio
de una gráfica en Matlab) las muestras de datos del ADC.

Para investigar la respuesta al escalón del filtro anti-alias en el codec WM8731, conecte un
generador de formas de onda al canal izquierdo del socket LINE IN. Ajuste el generador de señal
al generador para obtener una forma de onda cuadrada a la salida de frecuencia 200 Hz y
amplitud 500 mW pico a pico. Inicie una sesión de depuración (Debug) y ejecute el programa
loop_buf_intr.c. Examine la señal de salida del canal izquierdo desde LINE OUT, y observe que
no es una onda cuadrada perfecta. Detenga el programa dando clic en el botón Stop de la barra
UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 5
de herramientas. Escriba el nombre de la variable Ibuffer como la dirección en la ventana de
Memoria 1 (Memory 1) en el depurador. Ajuste el tipo de datos desplegado a tipo Decimal y
Flotante (float) como se muestra en la figura 7 (clic derecho en la ventana Memory 1). La
dirección de inicio del arreglo Ibuffer se desplegará en la parte superior en la esquina izquierda
de la ventana.

// loop_buf_intr .c
# include " audio .h"

static const int buffer_size = 256;


float32_t rbuffer [ buffer_size ];
float32_t lbuffer [ buffer_size ];

void I2S_HANDLER ( void ) { /* ***** I2S Interruption Handler **** */


static int16_t rbufptr = 0;
static int16_t lbufptr = 0;
int16_t audio_chR =0;
int16_t audio_chL =0;

audio_IN = i2s_rx ();


audio_chL = audio_IN & 0 x0000FFFF ;
audio_chR = ( audio_IN > >16)& 0 x0000FFFF ;

lbuffer [ lbufptr ++] = ( float32_t ) audio_chL ;


lbufptr %= buffer_size ; // return to start if we just wrote to the end
rbuffer [ rbufptr ++] = ( float32_t ) audio_chR ;
rbufptr %= buffer_size ; // return to start if we just wrote to the end
audio_OUT = (( audio_chR < <16) & 0 xFFFF0000 ) | ( audio_chL & 0 x0000FFFF );
i2s_tx ( audio_OUT );
}

int main ( void ) {


audio_init ( hz8000 , line_in , intr , I2S_HANDLER );
while (1){}
}

Fig. 6. Código de programa prbs_intr.c

Se puede observer los 128 valores leídos de muestra de entrada más recientes desde el ADC
salvándolos a un archivo usando la ventana de comandos del depurador (debugger’s
command). El comando

SAVE <filename> <start address>, <end address>

Salvará los contenidos del rango de memoria especificado (desde la dirección de inicio a la
dirección final) a un archivo en el espacio de trabajo. Por ejemplo, para almacenar 128
muestras iniciando en la dirección 0x1FFD0C84, use el commando

SAVE output.dat 0x1FFD0C84, 0x1FFD0C84 + 4 * 128

Observe que la dirección final ha sido ajustada como dirección de inicio + 4 * 128, especificando
128 muestras, cada 32 bits (4 bytes) en longitud.

UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 6


Se puede graficar los contenidos de ese archivo usando la función de Matlab plot_real(). Luego
de ejecutar la función en la ventana de comandos de Matlab, se le preguntara para seleccionar
el nombre de archivo (Por ejemplo, output.data) y las muestras serán graficadas. La función
ihexread (que es llamada dentro de plot_real) analiza el archivo del depurador y retorna las
muestras en punto flotante en un vector, además permite utilizar las muestras como se
requiera. Por ejemplo, el llamado

samples = ihexread(‘output.dat’);

lee los valores del ADC desde el archive output.dat y los ubica en un vector de muestras.

Pregunta 5: Comente lo que observa. Cómo se compara con la respuesta al escalón del filtro de
reconstrucción del DAC? Incluya una gráfica de la respuesta al escalón del filtro anti-alias.

Figura 7: Ventana Memory 1 mostrando los contenidos del arreglo lbuffer.

5. Respuesta magnitud en el dominio de la frecuencia del filtro Anti-Alias

La característica paso bajo del filtro anti-alias del codec WM8731 puede ser adicionalmente
investigada usando el programa loop_buf_intr.c. Ajustando el generador de señal para
proporcionar una salida sinusoidal, se puede observar la respuesta del filtro a unas frecuencias
invididuales.

Pregunta 6: ajuste el generador de señal para generar una salida sinusoidal con amplitud de 500
mW pico a pico. Para cada una de las frecuencias especificadas abajo, ejecute el programa

UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 7


loop_buf_intr.c por pocos segundos y grafique los contenidos del arreglo lbuffer usando
Matlab.
Cuidadosamente inspección las gráficas de Matlab, y ponga especial atención a las amplitudes
de la señal. Que le sugieren esas gráficas acerca de la respuesta en frecuencia a la magnitud?

Frecuencia de entrada sinusoidal Hz


100
500
1000
3500
4500
5000
10000

Comentarios, sugerencias y ayudas para usar la tarjeta Cypress FM4

Encontrará un estéreo de 3.5 mm a una tarjeta con terminal macho, incluida en el kit TSC
Cypress FM4, conveniente para conectar la línea de audio del FM4 en una salida jack de
auricular hacia la board Discovery Analógico.

{ \T" connection is the Right audio channel


{ \R" connection is the Left audio channel
{ \S" connection is Ground

Encontrará un estéreo de 3.5 mm a cables banana, disponible en el TSC, conveniente para


conectar la línea de udio del FM4 y una salida de auricular al equipo de laboratorio tradicional
de mesa.

Observe que en main() los programas muestra usualmente toman audio desde el puerto \mic
in. Cambie este puerto a \line in para usarlo. Esto es apropiado para recibir música desde un
reproductor y desde un generador de funciones. Desenergice los microfonos que operan a
voltajes mucho más bajosque los dispositivos de nivel de línea.

El Jack de la línea de entrada de la FM4 debería solamente recibir un máximo de 894 mV pico a
pico; este es el nivel de línea de audio. Monitoree cualquier señal que se ponta en este jack
usando un osciloscopio. Para estar seguros, mantenga el voltaje alrededor de 500 mV pico a
pico.

No conecte nada diferente al Jack mic del FM4 microfono suministrado.

UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 8


El FM4 usa conectores de audio estándar de 3 conductores (3.5 mm o 1/8 pulg). Algunos
dispositivos auriculares específicos (por ejemplo, teléfonos) tienen un canal de salida de 1 o 2
salidas y un mic, y podrían no comportarse correctamente sobre el jack de salida del auricular.
Por ejmplo, los

The FM4 uses standard 3-conductor 3.5mm (1/8 inch) audio connectors. Some device-specific
headsets (e.g., for cell phones) have a mic and either 1 or 2 audio output channels and might
not behave exactly correctly on the headphone out jack of the FM4, Por ejemplo, 2015 Apple
Earpods (estéreo con un mic que require 4 conductores) solo parecerá trabajar
apropiadamente cuando el boton de pausa esté inactive.

Auriculares con un conector de audio de 3-conductores y 3.5 mm está disponible para


verificación en el TSC.

Podrá encontrar que los canales de audio Izquierdo y derecho están reservados cuando se
escucha la salida FM4 a través de los audífonos.

Referencias

[1] Mathworks, http://www.mathworks.com/


[2] ARM University Worldwide Education Program. ARM-based Digital Signal Processing Lab-in-
a-Box, 2014.

UPTC Ingeniería Electrónica  Eduardo Avendaño Fernández 9

También podría gustarte