Академический Документы
Профессиональный Документы
Культура Документы
Portada
Página de Título
Derecho de Autor
Dedicación
Prefacio
Capítulo 1: ARM ® CORTEX ® -M4 Sistemas de Desarrollo
1.1 Introducción
Referencia
Capítulo 2: Entrada y Salida Análoga
2.1 Introducción
2.2. TLV320AIC3104 (AIC3104) Códec de Estéreo para Entrada y Salida de Audio
2.3 WM5102 Códec de Audio Hub para Entrada y Salida de Audio
2.4 Ejemplos de Programación
2.5 Entrada y Salida en Tiempo Real Utilizando Polling, Interrupciones y Acceso Directo a Memoria (DMA)
2.6 Generación de Forma de Onda en Tiempo Real
2.7 Identificando la Respuesta de la Frecuencia de un DAC Utilizando Ruido Pseudo aleatorio
2.8 Aliasing
2.9 Identificando la Respuesta de la Frecuencia de un DAC Utilizando un Filtro Adaptivo
2.10 Salida Análoga Utilzando el de STM32F407 DAC de 12-BIT
Referencias
Capítulo 3: Filtros de Respuesta Finita Impulsiva
3.1 Introducción a los Filtros Digitales
3.2 Clasificaciones de Respuesta de Filtro Ideal: LP, HP, BP, BS
3.3. Ejemplos de Programación
Capítulo 4: Filtros de Respuesta Infinita Impulsiva
4.1 Introducción
4.2 Estructuras de Filtro IIR
4.3 Invariancia Impulsiva
4.4 TRANSFORMACIÓN BILINEAR
4.5 Ejemplos de Programación
Referencia
Capítulo 5: Transformada de Fast Fourier
5.1 Introducción
5.2 Desarrollo del Algoritmo FFT con BASE-2
5.3 Diezmación en Frecuencia de Algoritmo FFT con BASE -2
5.4 Diezmación en Tiempo de Algoritmo FFT con BASE -2
5.5 Diezmación en Frecuencia de Algoritmo FFT con BASE -4
5.6 Transformada Inversa de Fast Fourier
5.7 Ejemplos de Programación
5.8 Programación Basada en Cuadro o Bloque
5.9 Convolución Rápida
Referencia
Lista de Ilustraciones
Capítulo 2: Entrada y
Salida Análoga
Figura 2.1 Sistema Básico del Procesamiento de Señal Digital
Figura 2.2 Representación Simplificada de diagrama de bloque del lado de la entrada del
Figura 2.3 Representación Simplificada de diagrama de bloque del lado de la salida del códec AIC3104 mostrando bloques seleccionados
y trayectos de señal por ejemplos de programas en este libro (únicamente canal izquierdo).
Figura 2.4 Conexiones de entrada y salida en el amplificador de audio AIC3104.
Figura 2.5 Conexiones de entrada y salida en la tarjeta de audio Wolfson.
Figura 2.6 Pulso en la salida en GPIO pin PE2 por el programa tm4c123_loop_dma.c.
Figura 2.7 Retraso presentado por el uso del DMA-basado e/s en el programa tm4c123_loop_dma.c. El trazo superior muestra un
pulso rectangular con duración de 1 ms aplicada en EN LÍNEA, el trazo inferior muestra la salida desde FUERA DE LÍNEA, BUFSIZE = 256,
frecuencia de muestreo de 48 kHz.
Figura 2.8 Retraso presentado por el uso del interrupción-basada e/s en el programa tm4c123_loop_intr.c. El trazo superior muestra
un pulso rectangular con duración de 1 ms aplicada en EN LÍNEA, el trazo inferior muestra la salida desde FUERA DE LÍNEA, frecuencia
de muestreo de 48 kHz.
Figura 2.9 Retraso presentado por el uso del DMA-basado e/s en el programa stm32f4_loop_dma.c. El trazo superior muestra un pulso
rectangular con duración de 1 ms aplicada en EN LÍNEA, el trazo inferior muestra la salida desde FUERA DE LÍNEA, BUFSIZE = 256,
frecuencia de muestreo de 48 kHz.
Figura 2.10 Retraso presentado por el uso del interrupción-basada e/s en el programa stm32f4_loop_intr.c. El trazo superior muestra
un pulso rectangular con duración de 1 ms aplicada en EN LÍNEA, el trazo inferior muestra la salida desde FUERA DE LÍNEA, frecuencia
de muestreo de 48 kHz.
Figura 2.11 Representación de bloque de diagrama del programa tm4c123_delay_intr. c.
Figura 2.12 Representación de bloque de diagrama del programa tm4c123_echo_intr. c.
Figura 2.13 Representación de bloque de diagrama del programa tm4c123_flanger_intr. c.
Figura 2.14 (a) Respuesta impulsiva y (b) respuesta de frecuencia de magnitud de un flanger implementado utilizando el programa
tm4c123_flanger_intr. c en un instante cuando el retraso T es igual 104.2 us. Las muescas en la respuesta de frecuencia de magnitud
son en frecuencias 4800 y 14,400 Hz.
Figura 2.15 (a) Respuesta impulsiva y (b) respuesta de frecuencia de magnitud de un flanger modificado e implementado utilizando el
programa tm4c123_flanger_intr. c en un instante cuando el retraso T es igual 208.3 us. Las muescas en la respuesta de frecuencia de
magnitud son en frecuencias 0, 4800, 9600, 14,400 y 19,200 Hz.
Figura 2.16 Forma de onda en la salida producida utilizando el programa tm4c123_flanger_dimpulse_intr. c en instante
cuando el retraso T es igual a aproximadamente 400 us.
Figura 2.21 Pulso rectangular en la salida en GPIO pin PD15 por el programa stm32f4_sine_intr. c
Figura 2.17 Especto y espectrograma del flanger de la salida para un ruido pseudo aleatorio en la entrada. En el espectrograma, la x-
axis representa el tiempo en segundos y la y-axis representa la frecuencia en Hz.
Figura 2.18 Valores de muestreo almacenados en formación lbuffer por el programa stm32f4_loop_buf_intr. c trazados utilizando la
función MATLAB stm32f4_logftt (). La frecuencia de señal de entrada fue de 350 Hz.
Figura 2.19 (a) 1-kHz sinusoide generado utilizando el programa tm4c123_sine48_intr. c vistos utilizando el osciloscopio Rigol
DS1052E conectado al (negro) FUERA DE LÍNEA, conexión en el amplificador de audio. (b) Magnitud de FFT de señal trazada utilizando
MATLAB.
Figura 2.20 (a) 1-kHz sinusoide generado utilizando el programa tm4c123_sine48_intr. c vistos utilizando el osciloscopio Rigol
DS1052E conectado al gancho de alcance en el amplificador de audio. (b) Magnitud de FFT de señal trazada utilizando MATLAB.
Figura 2.22 Salida desde el programa tm4c123_sineDTMF_intr. c visto utilizando el osciloscopio Rigol DS1052.
Figura 2.23 Salida desde el programa stm32f4__square_Intr. c visto utilizando el osciloscopio Rigol DS1052.
Figura 2.24 Salida desde el programa stm32f4__square_Intr. c visto en ambos, dominancia de tiempo y frecuencia utilizando el
osciloscopio Rigol DS1052.
Figura 2.25 Salida desde el programa tm4c123_square_intr. c visto utilizando el osciloscopio Rigol DS1052.
Figura 2.26 Salida desde el programa tm4c123__square_Intr. c visto en ambos, dominancia de tiempo y frecuencia utilizando el
osciloscopio Rigol DS1052.
Figura 2.27 Salida desde el programa tm4c123_square_1khz_intr. c utilizando el osciloscopio Rigol DS1052.
Figura 2.28 Salida desde el programa stm32f4__dimpulse_Intr. c visto en ambos, dominancia de tiempo y frecuencia utilizando el
osciloscopio Rigol DS1052.
Figura 2.29 Salida desde el programa tm4c123__dimpulse_ Intr. c utilizando el osciloscopio Rigol DS1052.
Figura 2.30 Forma de onda de salida generada por el programa tm4c123_ramp_intr. c.
Figura 2.31 Forma de onda de salida generada por el programa tm4c123_am_intr. c.
Figura 2.32 Salida desde el programa tm4c123__prbs_ Intr. c utilizando el osciloscopio Rigol DS1052 y Goldware.
Figura 2.33 Salida desde el programa tm4c123__prbs_deemph_ Intr. c utilizando el osciloscopio Rigol DS1052 y Goldware.
Figura 2.34 Salida desde el programa tm4c123__prbs_hpf_ Intr. c utilizando el osciloscopio Rigol DS1052 y Goldware.
Figura 2.35 Salida desde el programa tm4c123__prbs_biquad_ Intr. c utilizando el osciloscopio Rigol DS1052 y Goldware.
Figura 2.36 Salida desde el programa tm4c123__prandom_ Intr. c utilizando el osciloscopio Rigol DS1052.
Figura 2.38 Valores de muestreo leídos desde el WM5102 ADC y almacenados en formación lbuffer por el programa
stm32f4_loop_buf_intr. c.
Figura 2.37 Señal de entrada en onda cuadrada utilizando el programa stm32f4_loop_buf_intr. c.
Figura 2.39 Valores de muestreo leídos desde el WM5102 ADC y almacenados en formación lbuffer por el programa
tm4c123_loop_buf_intr. c.
Figura 2.40 Valores de muestreo leídos desde el AIC3104 ADC y almacenados en formación lbuffer por el programa
tm4c123_sine48_loop_intr. c.
Figura 2.41 Conexión del diagrama por el programa tm4c123_sysid_CMSIS_intr. c.
Figura 2.42 La repuesta impulsiva y la frecuencia de magnitud identificadas utilizando el programa tm4c123_sysid_CMSIS_intr. c con
conexiones como se muestra en la Figura 2.41, demostradas utilizando la función MATLAB tm4c123_logfft (). Frecuencia de muestreo
8000 Hz, 128-filtro adaptativo de coeficiente.
Figura 2.43 La repuesta impulsiva y la frecuencia de magnitud identificadas utilizando el programa tm4c123_sysid_CMSIS_intr. c con
primera orden, paso bajo de filtro análogo conectado entre las conexiones EN LÍNEA y FUERA DE LÍNEA, demostradas utilizando la
función MATLAB tm4c123_logfft (). Frecuencia de muestreo 8000 Hz, 128-filtro adaptativo de coeficiente.
Figura 2.44 La repuesta impulsiva y la frecuencia de magnitud identificadas utilizando el programa tm4c123_sysid_CMSIS_intr. c con
conexiones como se muestran en la Figura 2.41 y desactivadas, demostradas utilizando la función MATLAB tm4c123_logfft (). Frecuencia
de muestreo 8000 Hz, 128-filtro adaptativo de coeficiente.
Figura 2.45 La repuesta impulsiva y la frecuencia de magnitud identificadas utilizando el programa stm32f4_sysid_CMSIS_intr. c con
FUERA DE LÍNEA conectadas directamente con FUERA DE LÍNEA, demostradas utilizando la función MATLAB stm32f4_logfft ().
Frecuencia de muestreo 8000 Hz, 128-filtro adaptativo de coeficiente.
Figura 2.46 Conexión de diagrama para el programa tm4c123_sysid_CMSIS_intr. c
Figura 2.47 La repuesta impulsiva y la frecuencia de magnitud identificadas utilizando el programa stm32f4_sysid_CMSIS_intr. c con
conexiones como se muestran en la Figura 2.46, demostradas utilizando la función MATLAB stm32f4_logfft (). Frecuencia de muestreo
16,000 Hz, 192-filtro adaptativo de coeficiente.
Figura 2.48 Pulso en la salida en GPIO pin PE2 por el programa tm4c123_sysid_CMSIS_intr. c ejecutandose en la frecuencia de
muestreo de 16 kHz y utilizando 192 coeficientes de filtro adaptativo.
Figura 2.49 Salida desde el programa stm32f4__sine8_ dac12_Intr. c utilizando el osciloscopio Rigol DS1052.
Figura 2.50 Salida desde el programa stm32f4__square_ dac12_Intr. c utilizando el osciloscopio Rigol DS1052.
Figura 2.51 Salida desde el programa stm32f4__dimpulse_ dac12_Intr. c utilizando el osciloscopio Rigol DS1052.
Figura 2.52 Salida desde el programa stm32f4__prbs_ dac12_Intr. c utilizando el osciloscopio Rigol DS1052.
Capítulo 3: Filtros de Respuesta Finita Impulsiva
Figura 3.1 Representación del bloque de diagrama de un filtro FIR genérico.
Figura 3.2 Polos y ceros y región de convergencia para una secuencia causal x (n) = an u (n), X (z) = z / (z-a), trazadas en el
plano z.
Figura 3.3 Polos y ceros y región de convergencia para una secuencia anticausal x (n) = -anu (-n -1), X (z) = z/ (z-a), trazados en el
plano z.
Figura 3.4 Posible región de convergencia, trazada en el plano z, correspondiente a la secuencia causal en el lado derecho x (n)
para un sistema con dos polos de real valor.
Figura 3.6 Posible región de convergencia, trazada en el plano z, correspondiente a la secuencia no causal de ambos lados x (n)
para un sistema con dos polos de real valor.
Figura 3.7 Polos y ceros y región de convergencia para X (z) = z/ (z-a) trazados en el plano z, para /a/ < 1, correspondiente a la
secuencia x (n) a u (n) la cual es causal y estable.
Figura 3.9 Polos y ceros y región de convergencia para X (z) = z/ (z-a) trazados en el plano z, para /a/ > 1, correspondiente a la
secuencia x (n) a u (n) la cual es causal y estable.
Figura 3.10 Polos y ceros y región de convergencia para X (z) = z/ (z-a) trazados en el plano z, para /a/ < 1, correspondiente a la
secuencia x (n) -a u (-n -1) la cual es anticausal y estable.
Figura 3.12 Polos y ceros y región de convergencia para X (z) = z/ (z-a) trazados en el plano z, para /a/ > 1, correspondiente a la
secuencia x (n) -a u (-n -1) la cual es anticausal y estable.
Figura 3.13 Dominio de tiempo y dominio z con representaciones de bloque de diagrama en tiempo discreto sistema LTI.
Figura 3.14 Mapeo desde el plano s al plano z.
Figura 3.15 Respuestas de frecuencia de magnitud de filtro ideal. (a) Paso bajo (LP). (b) Paso alto (HP). ( c ) Paso de banda (BP). (d)
Paro de banda (BS).
Figura 3.16 Respuesta de frecuencia de paso bajo ideal definida por el rango de frecuencia normalizada [ecuación].
Figura 3.17 Sesenta y uno del número infinito de valores en respuesta impulsiva en tiempo discreto obtenida al tomar la inversa
DTFT de la respuesta de frecuencia de paso bajo ideal de la Figura 3.16.
Figura 3.18 Respuesta impulsiva en tiempo discreto de la Figura 3.17 truncada a N = 33 valores.
Figura 3.19 La respuesta de frecuencia de magnitud continua y periódica obtenida al tomar el DTFT de una respuesta impulsiva truncada,
tal como se muestra en la Figura 3.18 (trazada contra la frecuencia normalizada [símbolo]).
Figura 3.20 Una ventana Hanning de 33 puntos.
Figura 3.21 La respuesta de frecuencia de magnitud correspondiente a los coeficientes de filtro de la Figura 3.22 (trazados en
contra de la frecuencia normalizada [símbolo]).
Figura 3.22 Los coeficientes de filtro de la Figura 3.17 multiplicados por la ventana Hanning de la Figura 3.20.
Figura 3.23 Las respuestas de frecuencia de magnitud de la Figura 3.19 y 3.21 trazadas en una escala algoritmica, en contra de
la frecuencia normalizada [símbolo]).
Figura 3.24 Respuesta de frecuencia de magnitud de un filtro de paso alto ideal.
Figura 3.25 Respuesta de frecuencia de magnitud de un filtro de paso de banda ideal.
Figura 3.26 Respuesta de frecuencia de magnitud de un filtro de paro de banda ideal.
Figura 3.27 Respuesta de frecuencia de magnitud teórica de cinco puntos moviendo filtro promedio (frecuencia de muestreo 8
kHz).
Figura 3.28 Respuesta de frecuencia de magnitud de cinco puntos moviendo un filtro promedio demostrado utilizando el programa
stm32f4_average_prbs_intr. c y demostrado utilizando (a) osciloscopio Rigol DS1052E (trazo inferior) y (b) Goldware.
Figura 3.29 Conexión del diagrama para el uso del programa tm4c123_sysid_CMSIS_intr. c para identificar las características de un
filtro promedio en movimiento implementado utilizando dos sets de hardware.
Figura 3.30 Respuesta impulsiva de cinco puntos en movimiento de filtro promedio identificado utilizando dos launchpas y
amplificadores de audio y programas tm4c123_sysid_CMSIS_intr. c y tm4c123_average_intr. c
Figura 3.31 Respuesta de frecuencia de magnitud de cinco puntos en movimiento de filtro promedio identificado utilizando dos sets de
hardware y programas tm4c123_sysid_CMSIS_intr. c y tm4c123_average_intr. c.
Figura 3.32 Conexión del diagrama para el programa tm4c123_sysid_average_CMSIS_intr. c.
Figura 3.33 Respuesta de frecuencia de magnitud de once puntos en movimiento de filtro promedio implementado utilizando el
programa tm4c123_average_prbs_intr. c y demostrado utilizando Goldwave.
Figura 3.34 Respuesta de frecuencia de magnitud de cinco puntos en movimiento de filtro promedio con una ventana Hanning
utilizando el programa stm32f4_average_prbs_intr. c y demostrado utilizando Goldwave.
Figura 3.35 Ventana fdatool con MATLAB correspondiente al diseño de el y filtro de paro de banda FIR centrado a 2700 Hz.
Figura 3.36 Ventana fdatool con MATLAB correspondiente al diseño de el y filtro de paso de banda FIR centrado a 1750 Hz.
Figura 3.37 Salida generada utilizando el programa tm4c123_fir_prbs_intr. c y archivo de coeficiente bs2700.h demostrado
utilizando (a) osciloscopio Rigol DS1052E y (b) Goldwave.
Figura 3.38 Salida generada utilizando el programa tm4c123_fir_prbs_intr. c utilizando los archivos de coeficiente (a) pass2b.h y
(b) hp55.h.
Figura 3.39 Magnitud del FFT de la salida del programa stm32f4_fir_prbs_buf_intr. c utilizando la cabecera del archivo del coeficiente
bp1750.h.
Figura 3.40 Coeficientes de filtro utilizados en el programa stm32f4_fir_prbs_buf_intr. c (bp1750.h).
Figura 3.41 Magnitud de FFT de los coeficientes de filtro utilizados en el programa stm32f4_fir_prbs_buf_intr. c.
Figura 3.42 Una onda de cuadrado de 200 Hz pasada a través de tres diferentes filtros de paso bajo implementados utilizando
el programa tm4c123_fir3lp_intr. c.
Figura 3.43 Salida generada utilizando el programa tm4c123_fir_4types_intr. c.
Figura 3.44 Ruido Pseudo aleatorio filtrado utilizando el programa tm4c123_notch2_intr. c.
Figura 3.45 Representación del bloque de diagrama de codificador implementado utilizando el programa
tm4c123_scrambler_intr. c.
Figura 3.46 Pulsos en la salida en GPIO pin PE2 por los programas tm4c123_fir_prbs_intr. c y tm4c123_fir_prbs_dma. c.
Capítulo 4: Filtros de Respuesta Infinita Impulsiva
Figura 4.1 Estructura de filtro IIR de forma directa I
Figura 4.2 Estructura de filtro IIR de forma directa II
Figura 4.3 Estructura de filtro IIR de transponer de forma directa II
Figura 4.4 Estructura de filtro IIR de forma cascada
Figura 4.5 Filtro IIR de cuarta orden con dos formas directas en secciones de cascadas II.
Figura 4.6 Estructura de filtro IIR de forma paralela.
Figura 4.7 Filtro IIR de cuarta orden con dos formas directas en secciones paralelas II.
Figura 4.8 Relación entre frecuencias análogas y digitales, [símbolo] (A) y [símbolo] (D), debido a una frecuencia de
deformación en la transformada bilinear.
Figura 4.9 (a) Respuesta de frecuencia de magnitud de filtro H (s), (b) fase de repuesta del filtro H (s).
Figura 4.10 Respuestas impulsivas h (t) (escaladas por el período de muestreo ts) y h (n) de filtro en tiempo continuo H (s) y su
implementación digital invariante impulso.
Figura 4.11 Salida desde el programa tm4c123_iirsos_prbs_intr. c utilizando el archivo de coeficiente impinv.h visto utilizando
la función FFT de un osciloscopio Rigol DS1052E.
Figura 4.12 Salida desde el programa tm4c123_iirsos_prbs_intr. c utilizando el archivo de coeficiente impinv.h visto utilizando
Goldwave.
Figura 4.13 Salida desde el programa tm4c123_iirsos_delta_intr. c utilizando el archivo de coeficiente impinv.h visto utilizando
la función FFT de un osciloscopio Rigol DS1052E.
Figura 4.14 La respuesta de la frecuencia de la magnitud del filtro implementado por el programa tm4c123_iirsos_delta_intr. c
utilizando el archivo de coeficiente impinv.h trazado utilizando la función MATLAB tm4c123_logfft ().
Figura 4.15 Salida desde el programa tm4c123_iirsos_prbs_intr. c utilizando el archivo de coeficiente bilinear.h visto utilizando
la función FFT de un osciloscopio Rigol DS1052E.
Figura 4.18 La respuesta de la frecuencia de la magnitud del filtro implementado por el programa tm4c123_iirsos_delta_intr. c
utilizando el archivo del coeficiente bilinear.h, trazado utilizando la función MATLAB tm4c123_logfft ().
Figura 4.19 El efecto de la transformada bilinear en la respuesta de frecuencia de magnitud del filtro de ejemplo.
Figura 4.20 Ventana fdatool con MATLAB mostrando la respuesta de frecuencia de magnitud de un filtro de cuarta orden
elíptica de paso bajo.
Figura 4.21 Ventana fdatool con MATLAB mostrando la respuesta de frecuencia de magnitud de un filtro de segunda orden Chebyshev
de paso bajo.
Figura 4.16 Salida desde el programa tm4c123_iirsos_prbs_intr. c utilizando el archivo de coeficiente bilinear.h visto utilizando
Goldwave.
Figura 4.22 Respuesta impulsiva y respuesta de frecuencia de magnitud del filtro implementado por el programa
tm4c123_iirsos_delta_intr. c, utilizando el archivo de coeficiente elíptico.h, trazado utilizando la función MATLAB tm4c123_logfft
().
Figura 4.23 Salida desde el programa tm4c123_iirsos_delta_intr. c utilizando el archivo de coeficiente elliptic.h visto utilizando
un osciloscopio Rigol DS1052E.
Figura 4.24 Ventana fdatool con MATLAB mostrando la respuesta de frecuencia de magnitud de un filtro de 18 orden de paso de
banda centrado en 2000 Hz.
Figura 4.25 Salida desde el programa tm4c123_iirsos_prbs_intr. c utilizando el archivo de coeficiente bp2000.h visto utilizando
un osciloscopio Rigol DS1052E.
Figura 4.26 Salida desde el programa tm4c123_iirsos_prbs_intr. c utilizando el archivo de coeficiente bp2000.h visto utilizando
Goldwave.
Figura 4.27 Conexión del diagrama para el programa tm4c123_sysid_biquad_intr. c.
Figura 4.28 Respuesta de frecuencia de la trayectoria de señal a través de DAC, conectando un cable, y ADC mostados en la
Figura 4.27 con filtros biquad desabilitados.
Figura 4.29 Respuesta de frecuencia de la trayectoria de señal a través de DAC, conectando un cable, y ADC mostados en la
Figura 4.27 con filtros biquad programados como cuarta orden elíptica de filtro de paso bajo y desabilitado.
Figura 4.30 fdatool utilizado para diseñar un filtro de cuarta orden elíptica y paso bajo.
Figura 4.31 Respuesta de frecuencia de la trayectoria de señal a través de DAC, conectando un cable, y ADC mostados en la
Figura 4.27 con filtros biquad programados como cuarta orden elíptica de filtro de paso de banda y desabilitado.
Figura 4.32 Representación de bloque de diagrama de la Ecuación (4.53).
Figura 4.33 Representación de bloque de diagrama de la Ecuación (4.54).
Figura 4.34 Muestras de salida generadas por el programa stm32f4_sinegenDTMF_intr. c trazado utilizando la función MATLAB
stm32f4_logfft ().
Figura 4.35 Muestras de salida generadas por el programa stm32f4_sinegenDTMF_intr. c visto utilizando un osciloscopio Rigol
DS1052E.
Figura 4.36 Mapa de cero polo para el filtro de muesca descrito por la Ecuación (4.56) para r = 0.8 y [Ecuación].
Figura 4.37 Respuesta de frecuencia para el filtro de muesca descrito por la Ecuación (4.56) para r = 0.8 y [Ecuación].
Figura 4.38 Ruido pseudo aleatorio filtrado por el programa tmc123_iirsos_prbs_intr. c utilizando un archivo de cabecera
iir_notch_coeffs_h.
Capítulo 5:
Transformada
de Fast Fourier
Figura 5.1 Factores de rotación [símbolo] para N = 8 representados como vectores en el plano complejo.
Figura 5.2 Descomposición de 8 puntos DFT en dos 4 puntos de DFT utilizando diezmación en frecuencia con base-2.
Figura 5.3 Descomposición de 4 puntos DFT en dos 2 puntos de DFT utilizando diezmación en frecuencia con base-2.
Figura 5.4 2 puntos FFT de estructura mariposa.
Figura 5.5 Representación de bloque de diagrama de 8 puntos FFT utilizando diezmación en frecuencia base-2.
Figura 5.6 Descomposición de 8 puntos DFT en dos 4 puntos de DFT utilizando diezmación en frecuencia con base-2.
Figura 5.7 Descomposición de 4 puntos DFT en dos 2 puntos de DFT utilizando diezmación en frecuencia con base-2.
Figura 5.8 Representación de bloque de diagrama de 8 puntos FFT utilizando diezmación en tiempo con base-2.
Figura 5.9 Contenidos complejos en formación muestras (TESTFREQ = 800.0) antes llamada función dft (), vistos en una
ventana Memoria en el debugger MDK-ARM.
Figura 5.10 Contenidos complejos en formación muestras (TESTFREQ = 800.0) antes llamada función dft (), trazados utilizando
la función MATLAB stm32f4_plot_complex ().
Figura 5.11 Contenidos complejos en formación muestras (TESTFREQ = 800.0) antes llamada función dft (), trazados utilizando
la función MATLAB stm32f4_plot_complex ().
Figura 5.12 Contenidos complejos en formación muestras (TESTFREQ = 900.0) antes llamada función dft (), trazados utilizando
la función MATLAB stm32f4_plot_complex ().
Figura 5.13 Registro MDK-ARM ventana mostrando articulo Sec.
Figura 5.14 Señal de salida desde el programa tm4c123_dft128_dma. c vista utilizando un osciloscopio.
Figura 5.15 Señal de salida desde el programa stm32f4_dft128_dma. c vista utilizando un osciloscopio.
Figura 5.16 Contenidos parciales en formación outbuffer, trazados utilizando la función MATLAB tm4c123_plot_real (), para
entrada sinusoide de frecuencia 1750 Hz.
Figura 5.17 Detalle de la señal de salida desde el programa tm4c123_dft128_dma. c, para entrada sinusoide de frecuencia
1781 Hz.
Figura 5.18 Detalle de la señal de salida desde el programa tm4c123_dft128_dma. c, para entrada sinusoide de frecuencia
1750 Hz.
Figura 5.19 Contenidos parciales en formación outbuffer, trazados utilizando la función MATLAB tm4c123_plot_real (), para
entrada sinusoide de frecuencia 1781 Hz.
Figura 5.20 Detalle de la señal de salida desde el programa tm4c123_dft128_dma. c, modificado para aplicar la ventana Hamming a
bloques de muestras de entrada, para entrada sinusoide de frecuencia 1750 Hz.
Figura 5.21 Detalle de la señal de salida desde el programa tm4c123_dft128_dma. c, modificado para aplicar la ventana Hamming a
bloques de muestras de entrada, para entrada sinusoide de frecuencia 1781 Hz.
Figura 5.22 Contenidos parciales en formación outbuffer, trazados utilizando la función MATLAB tm4c123_plot_real (), para entrada
sinusoide de frecuencia 1750 Hz. (ventana Hamming aplicada a bloques de muestras de entrada).
Figura 5.23 Contenidos parciales en formación outbuffer, trazados utilizando la función MATLAB tm4c123_plot_real (), para entrada
sinusoide de frecuencia 1781 Hz. (ventana Hamming aplicada a bloques de muestras de entrada).
Figura 5.24 Señal de salida generada por el programa tm4c123_fft128_sinetable_dma. c mostrado utilizando un osciloscopio
Rigol DS1052E.
Figura 5.25 Señal de salida desde el programa tm4c123_graphicEQ_CMSIS_dma. c demostrada utilizando Goldwave, para una señal de
entrada con ruido pseaudo aleatorio, bass_gain = 0.1, mid_gain = 0.1, treble_gain = 0.25.
Capítulo 6:
Filtros
Adaptativos
Figura 6.1 Estructura de filtro adaptado básico.
Figura 6.2 Diagrama de bloque simplificado de la estructura de filtro adaptado básico.
Figura 6.3 Estructura de filtro adaptado básico configurado por predicción.
Figura 6.4 Estructura de filtro adaptado básico configurado por una identificación del sistema.
Figura 6.5 Estructura de filtro adaptado básico configurado por una cancelación de ruido.
Figura 6.6 Representación alternativa de una estructura de filtro adaptado básico configurado por la cancelación de ruido,
enfatizando la diferencia H (z) en trayectorias desde un recurso de ruido singular a sensores primarios y de referencia.
Figura 6.7 Estructura de filtro adaptado básico configurado por ecualización.
Figura 6.8 Representación de bloque de diagrama de filtro FIR.
Figura 6.9 Función de rendimiento para un solo caso de peso.
Figura 6.10 Algoritmo de descenso más rápido ilustrado para un solo caso de peso.
Figura 6.11 Trazos de (a) deseados en la salida, (b) salida de filtro adaptado, y © error generado utilizando el programa
stm32f4_adaptive. C y demostrado utilizando la función MATLAB stm32f4_plot_real ().
Figura 6.12 Representación de bloque de diagrama del programa tm4c123_adaptnoise_intr. c.
Figura 6.13 Representación de bloque de diagrama del programa tm4c123_noise_cancellation_intr. c.
Figura 6.14 Respuesta impulsiva y respuesta de frecuencia magnitud del filtro IIR identificado por un filtro adaptado en el programa
tm4c123_noise_cancellation_intr. c y trazado utilizando la función MATLAB tm4c123_logfft ().
Figura 6.15 Representación de bloque de diagrama del programa tm4c123_adaptIDFIR_CMSIS_intr. c.
Figura 6.16 Salida desde el programa stm32f4_adaptIDFIF_CMSIS_intr. c utilizando el archivo de cabecera de coeficiente
bs55.h visto utilizando el osciloscopio Rigol DS1052E.
Figura 6.17 Salida desde un filtro adaptado en el programa tm4c123_adaptIDFIR_CMSIS_init_intr. c.
Figura 6.18 Representación de bloque de diagrama del programa tm4c123_iirsosadapt_CMSIS_intr. c.
Figura 6.19 Salida desde el filtro adaptado en el programa tm4c123_iirsosadapt_CMSIS_intr. c visto utilizando un osciloscopio
Rigol DS1052E.
Figura 6.20 Coeficientes del filtro adaptado desde el programa tm4c123_iirsosadapt_CMSIS_intr. c trazado utilizando la función
MATLAB tm4c123_logfft ().
Figura 6.21 Conexión del diagrama para el programa tm4c123_sysid_CMSIS_intr. c en el Ejemplo 6.14.
Figura 6.22 Coeficientes del filtro adaptado desde el programa tm4c123_sysid_CMSIS_intr. c trazado utilizando la función MATLAB
tm4c123_logfft ().
Figura 6.23 Coeficientes del filtro adaptado desde el programa tm4c123_sysid_CMSIS_dma. c trazado utilizando la función
MATLAB tm4c123_logfft (). (a) BUFSIZE = 32 (b) BUFSIZE = 64.
Capítulo 2:
Entrada y Salida
Análoga
Tabla 2.1 Resúmen de las Estructuras de Control DMA Utilizadas y los Indicadores Fijaron uas Rutinas de Servicio de Interrupción
SSI0IntHandler () y SSI1IHandler () en el Programa tm4c123_loop_dma. c
Capítulo 5:
Transformada
de Fast Fourier
Tabla 5.1 Tiempos de Ejecución para Funciones dft (), dftw (), fft () y arm_cfft_f32 ()
PROCESAMIENTO DE SEÑALES DIGITALES
UTILIZANDO EL ARM ® CORTEX® R – M4
DONALD S. REAY
Heriot-Watt University
WILEY
A Reiko
Prefacio
Este libro continua las series creadas en 1990, Procesamiento de Señales Digitales con
TMS320C25 por Rulph Chassaing y Darrell Horning, el cual rastreó el desarrollo de generaciones
sucesivas de los procesadores de señales digitales por Texas Instruments. De manera más
específica, cada libro en las series ha complementado hasta ahora un diferente kit de desarrollo
DSP (procesamiento de señales digitales por sus siglas en inglés), el cual es barato; promovido
para propósitos de enseñanza por el Programa Universitario de Texas Instruments. Un tema
consistente en los libros ha sido la provisión de un gran número de ejemplos simples de
programas, ilustrando conceptos DSP en tiempo real, en un entorno con laboratorio de ingeniería
eléctrica.
Era la creencia de Rulph Chassaing, y este autor continúa creyendo, que las manos en la
enseñanza de DSP, utilizando kits de desarrollo Hardware y equipo de prueba de laboratorio para
procesar señales de frecuencia de audio analógico, es una manera efectiva y valiosa para
reforzar la teoría enseñada en exposiciones.
En 2013, Robert Owen me sugirió que las manos en la enseñanza DSP, podría ser implementada
utilizando un microcontrolador ARM ® Cortex-M4 ® barato. Indiqué que el procesador C674x de
Texas Instruments fue significativamente más poderoso computacionalmente que un ARM Cortex-
M4. Pero fui y compré un Stellaris LaunchPad de Texas Instruments. Construí una interface de
audio utilizando códec Wolfson WM8731 y exitosamente porté los ejemplos del programa de mi
libro previo a esa plataforma hardware.
Este libro está dirigido a estudiantes de último año y graduados de ingeniería eléctrica quienes
tienen conocimiento en cuanto a programación C y teoría de sistemas lineales, pero está
dirigido, y se espera, que pueda servir como un recurso útil a cualquiera involucrado en enseñar
o aprender DSP y como un punto de comienzo para enseñar o aprender más.
Estoy agradecido con Robert Owen, primeramente por hacerme conciencia del ARM Cortex-M4; a
Khaled Benkrid en la ARM University Program y a la Royal Academy of Engineering por hacer
posible una Comisión de Servicio Industrial de ARM por seis meses durante la cual fueron
desarrollados materiales para la plataforma STM32f01; a Gordon McLeod y Scott Hendry en
Wolfosn Microelectronics por su ayuda en la obtención de la tarjeta de audio Wolfson Pi con la
STM32f01 Descubrimiento; a Sean Hong, Karthik Shivashankar, y Robert Iannello en ARM por su
ayuda; a Joan Teixidor Buixeda por su ayuda en depurar los ejemplos del programa; a Cathy
Wicks en la TI University Program y Hieu Duong en CircuitCo por desarrollar el booster de audio;
y a Kari Capone y Brett Kurzman en Wiley por su paciencia. Pero en primer lugar agradezco a
Rulph Chassing por inspirarme en involucrarme en la enseñanza DSP.
Donald S. Reay
Edinburgh
2015
Chapter 1
1.1 Introducción
Al tiempo que los ejemplos del programa presentados en este libro fueron creados,
comercialmente no había juntas de desarrollo ARM Cortex-M4 disponibles a bajo precio que
incorporasen entradas y salidas de audio en alta calidad. Los detalles de la STM32f407
Descubrimiento de STMicroelectronics con audio de alta calidad y conversión digital analógica
(DAC) pero no una conversión analógica digital (ADC). Muchos dispositivos ARM Cortex-M4,
incluyendo ambos STMicroelectronics STM32F407 y Texas Instruments TM4C123, ofrecen una
calidad de instrumentación con multicanales ADCs. Pero sin más circuitos externos adicionales,
estos no son adecuados para las aplicaciones discutidas en este libro.
Los ejemplos en este libro requieren la adición (de una tarjeta de desarrollo barata ARM Cortex-
M4) de una audiofrecuencia (barata).
En el caso del STM32F407 Descubrimiento de STMicroelectronics y en los Texas Instruments
TM4C123 LaunchPad, las interfaces de audio compatibles y baratas son proveídas por la tarjeta
de audio de Wolfson Pi y el audio booster pack de CircuitCo, respectivamente. Los detalles de
interconexión de nivel bajo y las características del rendimiento preciso y las características
extra de las interferencias con dos audio son sutilmente diferentes. Sin embargo, cada
instalación, la entrada y salida de señales con alta calidad de audio del procesador ARM Cortex-
M4, en el cual algoritmos DSP puedan ser implementados.
La mayoría de los ejemplos de los programas presentados en los capítulos del libro que a
continuación se presentan, son proveídos, en una manera ligeramente diferente, para ambos la
STM32F407 Descubrimiento y la TM4C123 LaunchPad, en el sitio web de socios
Sin embargo, en la mayoría de casos, los ejemplos de los programas son descritos
detalladamente, y los programas listados son presentados, solamente para una u otra plataforma
de hardware. Excepciones notables se encuentran en el Capítulo 2, mecanismos de bajo nivel de
entrada y salida (implementados ligeramente de manera distinta en dos dispositivos) son
descritos detalladamente para ambas plataformas de hardware, y se encuentran ejemplos de
programas útiles para utilizar las características únicas para un u otro procesador/interferencia
de audio.
Este libro no describe la arquitectura interna o las características del procesador ARM Cortex-M4
detalladamente. Un excelente texto en tal tema, incluyendo detalles de sus capacidades
relacionadas con DSP, es The Definitive Guide TO ARM® Cortex® R – M3 Y Cortex®-M4
Procesadores por Yiu [1].
Más que presentar en detalle las instrucciones aquí presentadas, las cuales pueden ser obsoletas,
lo más pronto cuando la siguiente versión de MD-ARM sea lanzada, el lector se dirige a la guía
“iniciando” en el sitio web de socios http: / / www.wiley.com /go / Reay / ARMcortexM4. Y
antes de seguir con el siguiente capítulo de este libro, necesitará instalar MDK-ARM, incluyendo
la biblioteca CMSIS DSP, descargar los ejemplos de los programas desde el sitio web, y
familiarizarse con cómo abrir el proyecto en MDK-ARM, agrega y quitar archivos de un proyecto,
construir un proyecto, empezar y detener una sesión de depuración, y hacer correr y detener un
programa en ejecución en el procesador ARM Cortex-M4.
Algunos de los programas de ejemplo implementan algoritmos DSP directamente, y con una
vista de transparencia y entendimiento más que una eficiencia o elegancia computacional. En
varios casos, las funciones en la biblioteca de ARM CMSIS DSP son utilizadas. Estas están
disponibles para ambos procesadores STMicroelectronics y Texas Instruments, como parte del
entorno de desarrollo MDK-ARM. En situaciones apropiadas, estas funciones de biblioteca son
particularmente computacionalmente eficientes. Esto es útil para algunos de los ejemplos del
programa, en donde las demandas de correr en tiempo real a la aproximación de los límites de lo
que se puede lograr con la ARM Cortex-M4. Una diferencia entre los dos dispositivos utilizados en
este libro es que la STM32F407 utiliza un procesador con velocidad de reloj de 168 MHz, mientras
que la TM4C123 utiliza un procesador con velocidad de reloj de 84 MHz. Como se presenta en el
libro, todos los ejemplos del programa correrán en tiempo real en cualquier dispositivo. Sin
embargo, si los valores de los parámetros utilizados son cambiados, por ejemplo, si el número de
coeficientes en un filtro FIR aumenta, es posible que los límites del dispositivo más lento, llegará
más fácil que aquellos rápidos.
Todos los ejemplos del programa, han sido testeados utilizando una versión MDK-ARM gratis, con
códigos limitados. El objetivo de la enseñanza DSP y la intención de este libro, no es enseñar
acerca de la arquitectura ARM Cortex-M4. El dispositivo es utilizado porque provee una
plataforma competente y barata. Ni es el objetivo de la enseñanza DSP, o la intención de este
libro, el enseñar acerca del uso de MDK-ARM. El objetivo de la enseñanza DSP es reforzar la
teoría DSP enseñada en clases, a través el uso de ejemplos ilustrativos involucrando el
procesamiento de señales de audio en tiempo real en un ambiente de laboratorio de ingeniería
eléctrica. Quiere decir, lugar en donde testeos de equipamiento como osciloscopios,
generadores de señal, y la conexión de cables están disponibles.
Para poder realizar experimentos descritos en este libro, se requiere un gran número de recursos
de hardware y software.
1. Una tarjeta de desarrollo ARM Cortex-M4 y una interface de audio. Ya sea una TM4C123
LaunchPad de Texas Instruments y un amplificador de audio CircuitCo o una tarjeta STM32F407
Descubrimiento de STMicroelectronics y una tarjeta de audio de Wolfson Microelectronics Pi son
plataformas de hardware adecuadas.
2. Una PC host que ejecuta un entorno de desarrollo integrado (IDE por sus siglas en inglés) y con
una conexión disponible de USB. Los ejemplos del programa descritos en este libro, fueron
llevados a cabo y testeados utilizando el entorno de desarrollo Keil MDK-ARM. Sin embargo,
versiones de los ejemplos del programa para la TM4C123 LaunchPad y archivos del proyecto
compatibles con el Code Composer Studio IDE de Texas Instruments son proveídos en el sitio web
de socios
6. Proyecto y archivos con ejemplos del programa desde el sitio web de socios
Referencia
1. Yiu, J., “The Definitive Guide to ARM ® Cortex®.M3 y Cortex®-M4 Processors”, Tercera
Edición, Elsevier Inc., 2014. R – M4
Capítulo 2
2.1 Introducción
[En esta parte se encuentra un diagrama del sistema básico de procesador de señal digital]
ADC
DAC
Ambos códec AIC3104 y WM5102 se comunican con sus procesadores asociados (TM4C123 y
STM32F407) utilizando I2C bus para control (escribiéndole a los registros de control de los códec)
y I2s para (audio) la transferencia de datos.
Dentro de los DSPs, las señales son presentadas en secuencias de valores discretos de la muestra,
y en donde quiera que las señales son mostradas, la posibilidad de aliasing incrementa. Más
adelante en este capítulo, el fenómeno de aliasing es explorado con más detalle. Basta decir
hasta aquí que la aliasing no es un factor deseable y puede ser evitada al utilizar un filtro
antialiasing puesto en la entrada del sistema mostrada en la Figura 2.1 y por un diseño adecuado
para el DAC. En un sistema de paso bajo, un filtro efectivo para la antialiasing será aquel que
permitirá los componentes de frecuencia en frecuencias por debajo de la mitad de las muestras
de la frecuencia para que pasen, pero esto atenúa grandemente, o para los componentes de
frecuencia en frecuencias mejores que o iguales a la mitad de las muestras de la frecuencia. Un
DAC adecuado para un sistema de peso bajo es ser el mismo un filtro de peso bajo, el cual tenga
características similares al filtro antialiasing anteriormente mencionado. El término DAC
comúnmente se refiere al dispositivo electrónico que convierte los valores discretos de la
muestra representados en el hardware digital en una señal eléctrica analógica continúa. Cuando
se ve esto puramente desde una perspectiva de procesamiento de señales, el DAC actúa como un
filtro de reconstrucción. Aunque estos pueden diferir en un número de aspectos, ambos códec
AIC3104 y WM5102, contienen filtros de antialiasing y reconstrucción, ambos digitales y análogos
y por lo tanto, no requieren filtros adicionales y externos.
El amplificador de audio hace uso de un códec TLV320AIC3104 (AIC3104) para entrada y salida
análoga (observe las Figuras 2.2 y 2.3). El AIC3104 es un códec de audio estéreo con potencia
baja, basado en tecnología sigma-delta, y diseñada para el uso en aplicaciones portables de
batería cargada. Cuenta con un número de micrófonos y una entrada de niveles de línea,
configurados con un solo extremo terminado o con una conexión diferencial. En su lado de
salida, un número diferencial y salidas de alto voltaje son proveídos. Las salidas de alto voltaje
son capaces de manejar los auriculares. Un número de diferentes tasas de muestras que varían
de 8 a 96 kHz es apoyado por el dispositivo. El conversor de señal analógica a digital (ADC), o
descifrador, parte del códec que reconstruye una señal de salida análoga desde una secuencia de
(16-bit, 24-bit, o 32 bit entero con signo) valores de muestra que han sido procesados por el DSP
y escritos por el DAC.
Lado análogo
LINE1L
MIC2L
Registro 19
Registro 17
PGA
Registro 15
ADC
HPF
Lado digital
Registro 12
(seleccionar/activar)
Registro 107
DOUTL
LINE1LP
Figura 2.2 Representación del diagrama de bloques simplificado del lado de la salida del códec
AIC3104 mostrando los bloques seleccionados y trayectos de señales utilizados por el ejemplo de
los programas en este libro (solamente el canal izquierdo).
[En esta parte se encuentra un diagrama del sistema básico de procesador de señal digital 2]
Lado digital
DINL
Registro 12
DAC_ATTEN
Registro 43
(digital DSC_L
Volumen
0 dB a -63.5 dB)
DAC_L
DAC_L
Lado análogo
Registro 81
0 dB a-78.3 dB)
Registro 86
(DAC
ganancia de salida
0 dB a 9 dB)
IZQUIERDO:LOPM
HPLOUT
Registro 51
Registro 47
Registro 46
0 dB a – 78.3 dB)
PGA_L
PGA_L
Registro 108
LINE1LP
Figura 2.3 Representación del diagrama de bloques simplificado del lado de la salida del códec
AIC3104 mostrando los bloques seleccionados y trayectos de señales utilizados por el ejemplo de
los programas en este libro (solamente el canal izquierdo).
Más adelante en este capítulo, los ejemplos que posibilitan algunos de los bloques de filtro
digital interno de los registros de control de AIC3104 son descritos. En el Capítulo 4, las
características de los filtros digitales programables dentro del AIC3104 son examinados con
mayor detalle.
Los datos son pasados a y desde vía AIC3104, su interfaz de serie I2S. Las conexiones ENTRADA
DE MICRÓFONO (rosado), EN LINEA (azul), SALIDA DE LÍNEA (verde) y HP FUERA DE LÍNEA (negro)
se encuentran disponibles vía cuatro 3.5 mm tomas de enchufe en el amplificador de audio, y
estos son conectados al AIC3104, tal como se muestra en la Figura 2.4. Además, por razones, las
cuales se explicarán con detalle más adelante, saltadores J6 y J7 en el amplificador de audio
permite la conexión de filtros bajos de primer orden y testeo de puntos en cuanto a gancho de
alcance TP2 y TP3 para SALIDA DE LÍNEA en el AIC3104.
[En esta parte se encuentra un diagrama de las conexiones de entrada y salida análogas]
ROSADO
VERDE
AZUL
NEGRO
Figura 2.4 Las conexiones de entrada y salida análogas en el amplificador de audio AIC3104.
La tarjeta de audio Wolfson hace uso de un audio hub para entrada y salida análogas. El WM5102
presenta un códec de audio de baja potencia y alto rendimiento.
Los datos son pasados a y desde vía WM5102, su interfaz de serie I2S, y el dispositivo es
configurado al escribirle a sus registros de control vía interface I2C. Además del número de
filtros configurables y bloques de ganancia, el códec WM5102 contiene un DSP programable. Sin
embargo, el uso de esta propiedad DSP se encuentra más allá del alcance de este libro.
Los siguientes ejemplos ilustran la entrada y salida análoga utilizando, ya sea la TM4C123
LaunchPad y el amplificador de audio o la STM32F407 Descubrimiento y la tarjeta de audio
Wolfson. Los ejemplos de los programas se encuentran disponibles en su plataforma, aunque en
varios casos, solamente una plataforma se menciona por ejemplo. A un número pequeño de
ejemplos de programas en este capítulo le conciernen los filtros digitales internos de la
programación en el códec AIC3104 y por lo tanto, se aplica solamente en la plataforma hardware
de Texas Instruments. A un número pequeño de programas le concierne el uso del 12-bit DAC
construido en el procesador STM32F407 y por lo tanto, se aplica solamente en la plataforma
hardware de STMicroelectronics.
Los ejemplos de los programas demuestran algunos conceptos importantes asociados con
conversor de señal analógica a digital y con conversor de señal digital a analógica, incluyendo el
muestreo, reconstrucción, y el aliasing. Además, estos ilustran el uso de polling-, interrupción-,
y un DMA (memoria de acceso directo)- basado en e/s para implementar aplicaciones en tiempo
real. Varios de estos conceptos y técnicas descritas en este capítulo son visitados en capítulos
subsecuentes.
2.5 Entrada y Salida en Tiempo Real Utilizando Polling-, Interrupción, y una Memoria de
Acceso Directo (DMA)
Tres formas básicas en tiempo real e/s son demostradas en los siguientes ejemplos. Los métodos
polling- e interrupción-basado e/s en los métodos de trabajo en muestra por muestra, y el
procesamiento consiste en ejecutar un grupo similar de declaraciones de programas en cada
instante de muestra. DMA-basado en e/s lidia con bloques, o cuadros, de muestras de entrada y
salida y es inherentemente más eficiente en términos de requisitos en cuanto al procesamiento
de una computadora. El procesamiento consiste en ejecutar un grupo de declaraciones de
programas similares después de cada transferencia DMA. Bloque- o cuadro- basados en el
procesamiento es unido cercanamente al, pero no restringido al, uso del dominio de
procesamiento de frecuencia (utilizando el FFT) tal como se describe en el Capítulo 5.
Los siguientes ejemplos ilustran el uso de los tres diferentes mecanismos e/s para poder
implementar una función simple a través de conversación. A lo largo del resto de este libro, el
uso se creó básicamente de métodos de interrupción- y DMA- basados. A comparación de los
métodos polling- e interrupción-basados, existe un gran retraso del tiempo entre la señal que
entra al sistema de procesamiento de señal digital y lo deja introducido por el método DMA-
basado. Es posible hacer uso del mecanismo DMA con un tamaño de cuadro de una sola muestra,
pero esto hace derrotar al propósito del uso DMA-basado e/s.
[Cuadro de fórmulas]: Ejemplo 2.1 Entrada y Salida Básica Utilizando Polling
El procesador TM4C123 no presenta una interface I2S. En vez de esto, dos Interfaces de serie
síncrona (SSI, por sus siglas en inglés) interfaces, SSI0 y SSI1, son utilizadas para emular un
estéreo bidireccional de interfaz I2S y para pasar datos de audio de y desde el códec AIC3104.
Una interfaz SSI maneja el canal izquierdo y la otra maneja el canal derecho. Los detalles de la
emulación I2S están descritos en la nota de aplicación [3].
para leer
Reconstruir el proyecto y ejecutar el programa una vez más utilizando una señal desde la tarjeta
de sonido, un generador de señal, o un reproductor de mp3 conectado al enchufe ENTRADA DE
LÍNEA (azul) como entrada.
Cambia la frecuencia de muestreo utilizada por pasar valor de parámetro FS:8000_HZ en vez de
FS_48000_HZ a la función de inicialización del códec, esto se da, por cambiar la declaración del
programa
Tm4c123_aic3104_init(FS_48000_HZ,
AIC3104_LINE_IN,
I0_METHOD_POLL,
PGA_GAIN_6_DB);
Para leer
Tm4c123_aic3104_init(FS_8000_HZ,
AIC3104_LINE_IN,
I0_METHOD_POLL,
PGA_GAIN_6_DB);
Reconstruir el proyecto y ejecutar el programa de nuevo. Las señales que pasan a través del
sistema deberían sonar menos brillante que el previo, debido a la menor frecuencia de muestreo
y al sistema reducido correspondiente al ancho de banda.
Los valores de los parámetros validos (constantes) que pueden pasar a la función
tm4c123_AIC3104_init() son
FS_48000_HZ
FS_44100_HZ
FS_32000_HZ
FS_24000_HZ
FS_22050_HZ
FS_16000_HZ
FS_11025_HZ
FS_8000_HZ
I0_METHOD_POLL
I0_METHOD_INTR
I0_METHOD_DMA
AIC3104_MIC_IN
AIC3104_LINE_IN
PGA_GAIN_0_DB
PGA_GAIN_1_DB
PGA_GAIN_2_DB
PGA_GAIN_3_DB
PGA_GAIN_4_DB
PGA_GAIN_5_DB
PGA_GAIN_6_DB
PGA_GAIN_7_DB
PGA_GAIN_8_DB
PGA_GAIN_9_DB
PGA_GAIN_10_DB
PGA_GAIN_11_DB
PGA_GAIN_12_DB
Los cuales establecen la ganancia del PGA que precede al ADC (se muestra en la Figura 2.2). El
valor del parámetro PGA_GAIN_6_DB es utilizado por defecto para poder compensar los circuitos
potenciales que se dividen entre el enchufe ENTRADA DE LÍNEA en el amplificador de audio y
LINEIN_L y LINEIN_R en el AIC3104 (tal como se muestra en la Figura 2.4) .
Ejemplo 2.2
Entrada y Salida Básica Utilizando Polling (stm32f4_loop_poll.c).
Si el valor de I2S_FLAG_CHSIDE indica que el valor de muestreo del canal izquierdo ha sido
recibido, y la función SPI_I2S_ReceiveData() se utiliza para leer tal forma de muestreo SPI/I2S2
en int16_tvarialbe input_left, y luego de esperar por el indicador de estado SPI_I2S_FLAG_TXE
para que éste se establezca, el valor de la variable input_left se escribe en I2S2_ext.
Si el valor de I2S_FLAG_CHSIDE indica que el valor de muestreo del canal derecho ha sido
recibido, y la función SPI_I2S_ReceiveData() se utiliza para leer tal forma de muestreo SPI/I2S2
en int16_tvarialbe input_right, y luego de esperar por el indicador de estado SPI_I2S_FLAG_TXE
para que éste se establezca, el valor de la variable input_right se escribe en I2S2_ext.
El bucle sin fin luego retorna para testear el indicador de estado SPI_I2S_FLAG_RXNE en SPI/IS2S.
De esta forma, la operación en tiempo real del programa se controla por el tiempo de la interfaz
I2S, la cual, en su turno, se determina por el códec WM5102 (actuando como el maestro I2S).
left_in_sample = SPI_I2S_ReceiveData(I2Sx) ;
while(SPI_I2S_GetFlagStatus(I2Sxext,
Los valores de los parámetros validos (constantes) que pueden pasar a la función
stm32_wm5102_init() son
FS_48000_HZ
FS_44100_HZ
FS_32000_HZ
FS_24000_HZ
FS_22050_HZ
FS_16000_HZ
FS_11025_HZ
FS_8000_HZ
I0_METHOD_POLL
I0_METHOD_INTR
I0_METHOD_DMA
WM5102_MIC_IN
WM5102_DMIC_IN
WM5102_LINE_IN
Los cuales se establecen en la conexión de entrada utilizada.
A diferencia del amplificador de audio para la TM4C123 LaunchPad, el cual separa los enchufes
ENTRADA DE MICRÓFONO y la SALIDA DE LÍNEA HP, la tarjeta de audio de Wolfson posee un
enchufe individual de AUDIFONO (como se muestra en la Figura 2.5) que puede ser utilizado para
un micrófono combinado y cascos auriculares, audífonos de estéreo convencional, un micrófono
electret que utiliza cuatro polos (TRRS) 3.5 mm jack plug. Además, la tarjeta de audio de
Wolfson presenta micrófonos digitales MEMS con un estéreo con alta calidad que pueden ser
seleccionados por un valor de parámetro pasajero WM5102_DMIC_IN para la función
stm32_wm5102_init().
[En esta parte se encuentra un diagrama de las conexiones de entrada y salida análogas]
EN LÍNEA
AURICULAR
FUERA DE LÍNEA
stm32f4_wm5102_init ( FS_48000_HZ,
WM5102_DMIC_IN,
I0_METHOD_INTR ) ;
Para leer
stm32f4_wm5102_init ( FS_48000_HZ,
WM5102_LINE_IN,
I0_METHOD_INTR ) ;
Ejemplo 2.3
Entrada y Salida Básica Utilizando Interrupciones ( tm4c123_loop_intr. c ).
Este programa simple es importante porque muchos de los ejemplos de los programas en este
libro, los cuales utilizan la interrupción basada en e/s y son estructuradas similarmente. En lugar
de simplemente copiar la secuencia de los valores de la muestra leídas de ADC a DAC, una
operación de filtro digital podría ser llevada a cabo cada vez que una nueva muestra de entrada
se recibe, eso es, un algoritmo de procesamiento de muestra por muestra, el cual podría ser
insertado entre las declaraciones de programa.
Por esta razón, vale la pena hacer el tiempo para asegurar que entiendes cómo un programa
tm4c123_loop_intr . c trabaja.
tm4c123_aic3104_init ( FS_48000_HZ,
AIC3104_MIC_IN,
I0_METHOD_INTR,
PGA_GAIN_6_DB ) ;
La SSI0 recibe las interrupciones FIFO (SSI_RXFF), las cuales ocurren en la frecuencia de
muestreo (48 kHz), son manejadas por una función de rutina de servicio de interrupción
SSI_interrupt_routine (). En esta función, el canal izquierdo y derecho de valores de muestreo
con 16-bit, son leídos desde SSI1 y SSI0, que reciben FIFOs respectivamente. Esos se convierten
en valores float32_t, input_left e input_right. Estrictamente hablando, el tipo de conversiones
son innecesarias en este programa de discusión simple desde que los valores de input_left e
input_right son subsecuentemente convertidos como eran al tipo int16_t y son escritos a
transmisión SSI1 y SSI0 FIFOs, respectivamente.
tm4c123_aic3104_init ( FS_48000_HZ,
AIC3104_MIC_IN,
I0_METHOD_INTR,
PGA_GAIN_6_DB ) ;
Para leer
tm4c123_aic3104_init ( FS_48000_HZ,
AIC3104_MIC_IN,
I0_METHOD_INTR,
PGA_GAIN_6_DB ) ;
El GPIO pin PE2 se establece alto en el arranque, y se resetea lento cerca del final, de la función
SSI_interrupt_routine (). Esta señal es accesible vía el conector J3 en la TM4C123 LaunchPad.
Ejemplo 2.4
Entrada y Salida Básica Utilizando Interrupciones (stm32f4_loop_intr . c).
La periférica I2S en el procesador STM32F407 es configurado por el modo esclavo full dúplex,
utilizando el protocolo de audio estándar PCM, con 16-bit empacado en 32-bit cuadros. Las
interrupciones del amplificador receptor que no se encuentra vacío (RXNE) son generados por IS2
instancia SPI/I2S2 cuando los datos son recibidos desde el códec WM5102. Estas interrupciones,
las cuales se llevan a cabo en la frecuencia de muestreo (48 kHz) para ambas muestras en los
canales izquierdos y derechos, son manejadas por la función SPI2_IRQHandler (). Esto testea el
indicador de estado CHSIDE para poder determinar cómo la muestra del canal izquierdo o
derecho ha sido recibida.
Si la muestra del canal izquierdo ha sido recibida (CHSIDE 1), entonces el valor se lee desde
SPI/I2S2 dentro de la variable input_left por la función SPI_I2S_ReceiveData (I2Sx). Luego pues,
es copiado a la variable output_left y escrito en I2S2_ext utilizando la función SPI_I2S_SendData
(). Finalmente, el GPIO pin PD15 es cambiado. Este pin es accesible vía J2 en la STM32F407
Descubrimiento y puede ser monitoreado utilizando osciloscopio. En la STM32F407
Descubrimiento, el GPIO pin PD15 maneja un LED azul, y, por lo tanto, su ciclo laboral es
discernible desde un brillo aparente en el LED azul. En este ejemplo del programa, desde que la
interrupción ocurre dos veces por periodo de muestra (una por cada canal, izquierdo y derecho),
el GPIO pin PD15 debiese hacer salir una onda cuadrada 48-kHz y el LED azul debiese emitir luz
con intensidad mediana.
Ejemplo 2.5
Entrada y Salida Básica Utilizando DMA (tm4c123_loop_dma. c).
El regulador TM4C123 DMA posee 32 canales, cada uno de los cuales pueden ser asignados a uno
de las cinco periféricas diferentes (cada dispositivo periférico en el procesador TM4C123 se
asocia con un canal controlador DMA especifico). Cada canal puede operar en modo básico de
ping-pong o dispersión-recolección. Los transmisores de DMA están creados de elementos 1024 x
8-, 16-, o 32-bit. Una interface I2S es emulada en el TM4C123 utilizando dos periféricas SSI
separadas (SSI0 y SSI1), SSI1 para el canal izquierdo y SSI0 para el canal derecho. La periférica
SSI0 se configura para activar a la orilla positiva del reloj de marco I2S, WCLK (generado por el
códec AIC3104), y la periférica SSI2 se configura para activar a la orilla negativa del reloj de
marco I2S (estrictamente hablando, la orilla positiva del reloj de marco I2S, el cual se encuentra
invertido). El códec AIC3104 en el amplificador de audio actúa como maestro I2S y suministra el
marco y señales de reloj de bits (WCLK y BCLK).
El control del canal DMA es implementado al utilizar una tabla (alineada en un límite de 1024-
byte en la memoria) de estructuras de control. Se encuentran dos estructuras de control
asociadas con cada canal (primario (PRI) y alternativo (ALT)) y ambos de estos son utilizados en
modo ping-pong.
Cada estructura de control incluye un puntero de dirección de origen (SRC por sus siglas en
inglés), un destino de puntero de dirección (DST), y un control de palabra especificando tamaño
de elementos de datos SRC y DST, la dirección de SRC y DST incrementa, el número total de
elementos a transferir, y el modo de transmisión (básico, ping-pong, o dispersión-recolección).
Los puntero de dirección SRC y DST en control con la tabla deben ser iniciados antes que la
transmisión de DMA comience, y según la dirección de SRC y DST incremente, estos son
actualizados como progresos transferidos.
En el modo ping-pong, tan pronto como la transmisión de DMA sea completada, otra
transferencia (ALT o PRI) en el mismo canal, comienza. Cuando una transferencia DMA es
completada, una interrupción puede ser generada y esto manda la señal de una oportunidad, en
modo ping-pong, no solamente para procesar el block de los datos de entrada, los cuales son los
más transferidos recientemente, pero también reinicializar la estructura de control inactiva
presente (PRI o ALT).
En los ejemplos del programa en este libro, el protocolo bidireccional de transferencia de datos
estéreo I2S hace uso de cuatro canales DMA unidireccionales, los cuales son asociados con
SSI0TX, SSI0RX, SSI1TX, Y SSI1RX.
Las transferencias SSI0TX DMA (PRI desde el SSI0 receptor FIFO desde la formación RpingIN y ALT
desde el SSI0 receptor FIFO a la formación RLpongIN) toman lugar en paralelo con las
transferencias SSI0TX, y la terminación de cualquiera de estas transferencias, genera
interrupciones también manejadas por SSI0IntHandler().
La rutina de servicio de interrupción SSI0IntHandler() debe por lo tanto determinad cuál de las
cuatro posible diferentes transferencias DMA, ha completado y reinicializado la estructura de
control correspondiente. Esto se resume en la Tabla 2.1. La función SSI0IntHandler() se muestra
en la Lista 2.11. Sus funciones son
1. determinar cuál de las cuatro posibles transferencias DMA ha completado (y generado una
interrupción SSI0IRQ).
Tabla 2.1 Resumen de las Estructuras de Control DMA Utilizadas y Banderas Establecidas en las
Rutinas de Servicio de Interrupción SSI0IntHandler() y SSI1IntHandler() en Programa
tm4c123_loop_dma.c
Canal
Opción
SRC
DST
Establecimiento de las Banderas
En función main(), un bucle sin fin while() espera hasta que ambas RTxcomplete y RRxcomplete
son establecidas antes que la llamada función RprocessBuffer() Esta función utiliza el valor de
RprocBuffer para decidir cómo se procesan los contenido en formación RpingIN o RpongIN.
También resetea las banderas RTxcomplete y RRxcomplete.
Así pues, la función main() espera hasta que ambas LTxcomplete y LRxcomplete son establecidas
antes de la llamada función LprocessBuffer().
Las interrupciones generadas en terminación de transferencias son manejadas por las rutinas de
servicio de interrupción, asociadas con la periférica involucrada, la cual es, ya sea
SSI0IntHandler() o SSI1IntHandler(), y estas son definidas en el archivo tm4c123_aic3104_init.c.
tm4c123_aic3104_init ( FS_48000_HZ,
AIC3104_MIC_IN,
I0_METHOD_DMA
PGA_GAIN_6_DB ) ;
GPIO pin PE2 se establece justo antes, y resetea justo después, de la llamada función
Lprocessbuffer. Por lo tanto, la señal en ese pin es un pulso rectangular, la duración de la cual
indica el tiempo tomado por la función ejecutora Lprocessbuffer. En este ejemplo, la duración
del pulso es muy corta ya que ningún procesamiento significante toma lugar en la función. El
pulso rectangular se repite con un periodo igual al del tiempo entre las transferencias DMA
consecutivas, eso es, BUFSIZE periodos de muestra. Un ejemplo del pulso de salida en GPIO pin
PE2 por el programa tm4c123_loop_dma.c se muestra en la Figura 2.6. En este caso, el valor de
la constante BUFSIZE es 256, la frecuencia de muestreo es 48kHz, y por lo tanto, el tiempo entre
los pulsos consecutivos equivale al de 256/48,000=5.33 ms.
Figura 2.6 Pulso en la salida en GPIO pin PE2 por el programa tm4c123_loop_dma.c.
Conectar la salida del generador de señal a ambos canales izquierdos del enchufe (azul)
ENTRADA DE LINEA en el amplificador de audio y un canal en el osciloscopio, y conectar una
sonda de osciloscopio desde otro canal en el osciloscopio en el gancho del alcance del canal
izquierdo (TP2, por sus siglas en inglés) en el amplificador de audio. El alcance selector saltarín
J6 debe encajar. La Figura 2.7 muestra el retraso de aproximadamente 11.7 ms, presentado por
el programa al pulso rectangular de duración 1.0 ms, como se muestra en la Figura 2.8. El
retraso adicional presentado por el uso de DMA-basado e/s es equivalente a aproximadamente
10.7ms. En una frecuencia de muestreo de 48 kHz, modo ping-pong con transferencias DMA de
BUFSIZE = 256 muestras, corresponde al retraso de 2 * 256/48,000=10.67 mx. El valor de la
constante BUFSIZE se define en el archivo tm4c123_aic3104_init.h.
Figura 2.7 El retraso presentado por el uso de DMA –basado e/s en el programa
tm4c123_loop_dma.c. El rastro superior muestra el pulso rectangular de duración 1 ms aplicado
a la ENTRADA DE LINEA, el rastro inferior muestra la salida desde la SALIDA DE LINEA. BUFSIZE =
256, frecuencia de muestreo 48 kHz.
Ejemplo 2.6
Entrada y Salida Básica Utilizando DMA (stm32f4_loop_dma.c).
Los procesadores ARM Cortex-M4 de diferentes fabricantes, los cuales implementan DMA
ligeramente diferente (aunque los principios subyacentes son similares). El programa
stm32f4_loop_dma.c, mostrado en la Lista 2.13, funcionalmente es equivalente al programa
tm4c123_loop_dma.c pero difiere ligeramente porque las diferencias entre las periféricas DMA
en los procesadores TM4C123 y STM32F407.
Cambiando entre amplificadores pingIN, pongIN, pingOUT, y pongOUT son manejados de manera
automática por el mecanismo STM32F4 DMA. Si, por ejemplo, la rx_proc_buffer es igual a PING,
esta indica que la corriente recientemente más completa 3 DMA transferencia ha llenado el
amplificador pingIN y estos datos son disponibles para ser procesados. Si tx_proc_buffer es igual
a PING, este indica que la corriente recientemente más completa 4 DMA transferencia ha escrito
los contenidos del amplificador pingOUT a la periférica I2S y este amplificador se encuentra
disponible para llenarlo con nuevos datos.
Conectar la salida del generador de señal a ambos canales izquierdos del enchufe (verde)
ENTRADA DE LINEA en la tarjeta de audio Wolfson y un canal en el osciloscopio, y conectar otro
canal en el osciloscopio al canal izquierdo del enchufe (rosado) SALIDA DE LINEA en la tarjeta de
audio Wolfson. La Figura 2.9 muestra un retraso de aproximadamente 5.9 ms presentado por el
programa al pulso rectangular de duración 1.0 ms. En contraste, el programa
stm32f4_loop_intr.c presenta un retraso de aproximadamente 560us, como se muestra en la
Figura 2.10. El retraso adicional presentado por el uso de DMA-basado e/s es equivalente a
aproximadamente 5.3 ms. En una frecuencia de muestreo de 48 kHz, modo ping-pong con
transferencias DMA de BUFSIZE = 256 muestras (128 muestras por canal), corresponde al retraso
256/48,000=5.33 ms. El valor de la constante BUFSIZE se define en el archivo
stm32f4_aic3104_init.h.
Figura 2.9 El retraso presentado por el uso de DMA –basado e/s en el programa
stm32f4_loop_dma.c. El rastro superior muestra el pulso rectangular de duración 1 ms aplicado a
la ENTRADA DE LINEA, el rastro inferior muestra la salida desde la SALIDA DE LINEA. BUFSIZE =
256, frecuencia de muestreo 48 kHz.
Ejemplo 2.7
Modificando el Programa tm4c123_loop_intr.c para crear el retraso (tm4c123_delay_intr. c).
Algunos efectos simples y sorprendentes pueden ser alcanzados simplemente al retrasar los
valores de muestreo como tales van pasando desde entrada a salida. El programa
tm4c123_delay_intr.c, como se muestra en la Lista 2.15, demuestra esto.
[Cuadro de fórmulas]: Lista 2.8 Programa tm4c123_delay_intr.c
Una línea de retraso es implementada utilizando la formación buffer para almacenar muestras
como están leídas desde el ADC. Una vez, la formación se encuentra completa, el programa
escribe de nuevo la muestra de entrada almacenada más antigua con la muestra de entrada
actual o la más nueva. Justo antes de volver a escribir de nuevo la muestra de entrada
almacenada más antigua en buffer, el valor de la muestra es mejorada, agregada a la muestra
de entrada actual y escrita en el DAC. La Figura 2.11 muestra una representación del diagrama
de bloque de la operación del programa tm4c123_dealy_intr.c en el cual el bloque marcada T
representa un retraso de T segundos. El valor T es igual al número de muestras almacenadas en
buffer, multiplicado por el periodo de muestreo. La ejecución del programa
tm4c123_delay_intr . c, utilizando un micrófono conectado al enchufe (rosado) ENTRADA DE
MICROFONO en el amplificador de audio como un dispositivo de entrada.
Entrada
Salida
Ejemplo 2.8
Modificando el Programa tm4c123_loop_intr. c para crear una repetición
(tm4c123_echo_intr. c).
Entrada
Salida
Ganancia
Ejemplo 2.9
Modificando el Programa tm4c123_loop_intr. c para crear una repetición
(tm4c123_flanger_intr. c).
Entrada
Salida
Alfa
Figura 2.13 Representación del diagrama de bloque del programa tm4c123_flanger_intr. c.
para leer
Valor de muestra
Tiempo
Magnitud (dB)
Frecuencia (Hz)
Figura 2.14 (a) respuesta del impulso y (b) magnitud de respuesta de frecuencia del flanger
implementado utilizando el programa tm4c123_flanger_intr. c en un instante en donde el retraso
T es equivalente a 104.2 us. Las muescas en la magnitud de respuesta de frecuencia son
frecuencias 4800 y 14,000 Hz.
Valor de muestra
Tiempo
Magnitud (dB)
Frecuencia (Hz)
Figura 2.15 (a) respuesta del impulso y (b) magnitud de respuesta de frecuencia del flanger
implementado utilizando el programa tm4c123_flanger_intr. c en un instante en donde el retraso
T es equivalente a 208.3 us. Las muescas en la magnitud de respuesta de frecuencia son
frecuencias 0, 4800, 9600, 14,400 y 19,200 Hz.
El retraso que varía con el tiempo, implementado por el flanger puede ser ilustrado utilizando el
programa tm4c123_flanger_dimpulse_intr. c y un osciloscopio. En este programa, las muestras
de entrada son generadas dentro del programa en vez de ser leídas por el ADC. La secuencia de
las muestras de entrada utilizadas en un valor distinto de cero seguido por 2047 valores de cero,
y esta secuencia es periódicamente repetida. El efecto es provocar al flanger con secuencia de
tiempo discreto que impulsa separadamente por 2048 periodos de muestra o 42.67 ms. La salida
desde el programa tm4c123_flanger_dimpulse_intr. c comprende la entrada (en la cual pasa a
través directamente) más una versión retrasada y atenuada de la entrada. Figura 2.16 muestra
un ejemplo de la salida desde el programa, capturada utilizada un osciloscopio Rigol DS1052E. El
pulso en el centro de la pantalla corresponde al pulso de la entrada y al pulso de la derecha, el
cual corresponde al pulso retrasado. En el instante de la captura mostrada en la Figura 2.21, el
retraso es igual a aproximadamente 400 us. Cuando el programa está siendo ejecutado, deberías
observar el retraso entre pulsos que varían lentamente. La forma de los pulsos en la Figura 2.21
se explica en el Ejemplo 2.31.
La respuesta de la frecuencia de magnitud, la cual varía con el tiempo, del flanger se encuentra
ilustrado en la Figura 2.17, la cual muestra la salida del programa tm4c123_flanger_intr . c,
modificado para que la señal de la salida sea una secuencia binaria pseudoaleatoria, mostrada
como espectrograma (frecuencia vs. tiempo) utilizando Goldware. Las bandas oscuras en el
espectrograma corresponden a las muescas en las respuestas de la frecuencia en la magnitud.
Una alternativa efectiva de un sonido pseudoaleatorio como señal de entrada es soplar
suavemente en el micrófono.
Figura 2.17 Espectro y espectrograma del flanger de salida por un sonido pseudoaleatroio en la
entrada. En el espectrograma, la x-axis representa el tiempo en segundos y la y-axis representa
la frecuencia en Hz.
Ejemplo 2.10
El programa de bucle con Datos Almacenados en la Entrada dentro del Amplificador
(stm32f4_loop_buf_intr. c).
Los contenidos del archivo de datos pueden ser trazados utilizando MATLAB ® function
stm32f4_logfft(). La Figura 2.18 muestra un ejemplo de los contenidos en formación 1buffer
cuando la frecuencia de la señal de la entrada era 350 Hz. La discontinuidad en la forma de onda
en tiempo t=16ms corresponde al valor del índice 1bufptr en formación cuando el programa en
ejecución fue detenido. Hay que recordar que la formación 1buffer se utiliza como un
amplificador circular en el cual los valores de muestra más viejos son escritos nueva y
continuamente por nuevos. El programa stm32f4_loop_buf_intr. c se utiliza de nuevo más tarde
en este capítulo para poder enfatizar las características del filtro antialiasing del códec.
Valor de muestra
Tiempo
Magnitud (dB)
Frecuencia (Hz)
Figura 2.8 los valores de la muestra almacenados en formación 1buffer por el programa
stm32f4_loop_buf_intr. c , rastrados utilizando MATLAB función stm32f4_logfftt(). La señal de
entrada de la frecuencia fue 350 Hz.
Los siguientes ejemplos tratan con una generación de variedad de diferentes formas de ondas de
salidas análogas, incluyendo sinusodes de diferentes frecuencias, al escribir secuencias
diferentes de valores de muestreo del DACs en los códec WM5102 Y AIC3104. De esta forma, las
características detalladas del DACs son reveladas y los conceptos de muestreo, reconstrucción y
aliasing son ilustrados. Además, el uso de la aplicación shareware Goldwave es presentada. Este
instrumento virtual es una alternativa útil para un analizador de osciloscopio o espectro y se
utiliza otra vez en este capítulo más adelante.
Ejemplo 2.11
La Generación Onda Sinusoidal Utilizando una Tabla de Búsqueda (stm32f4_sine48_intr. c).
El programa stm32f4_sine48_intr. c, tal como se muestra en la Lista 2.23, genera una señal de
salida sinusoidal utilizando una interrupción-basada e/s y un método de tabla de búsqueda
(Figura 2.18). Su operación es lleva a cabo de la siguiente forma. Una tabla de búsqueda de 48-
point es inicializada en formación sine_tabla tal como el valor sine_table[i] es igual a
El DAC en el códec Wm5102 reconstruye una señal de salid análoga sinusoidal desde los valores
de muestreo de salida.
2.6.1 La ejecución del Programa
#define LOOPLENGTH 8
int16_t sine_table[LOOPLENGTH] = {
0, 7071, 10000, 7071, 0, -7071, -10000, -7071} ;
Mientras se llevan a cabo esencialmente las funciones similares, los códec utilizados en las dos
plataformas de hardware diferentes, difieren sutilmente en sus características de manera
funcional. Si estas utilizando la TM4C123 LaunchPad y el amplificador de audio AIC3104, más que
la STM32F407 Descubrimiento y la tarjeta de audio Wolfson, conecta un osciloscopio al enchufe
(negro) ENTRADA DE LINEA en el amplificador de audio. Ejecuta el programa
tm4c123_sine48_intr. c y deberías observar una forma de onda similar como se muestra en la
Figura 2.19. Se encuentra un nivel significante de ruido superpuesto en la onda sinusoidal 1-kHz,
y esto revela algo acerca de las características del DAC AIC3104. Es un sobre muestreo sigma
delta DAC, el cual deliberadamente hace que salga un ruido del (audio) de banda de frecuencia.
El ruido fuera de banda presente en la salida DAC puede ser observado en la frecuencia
dominante, utilizando un espectro analizador o una función FFT en un osciloscopio digital.
Magnitud (dB)
Frecuencia (Hz)
Figura 2.19 (a) sinusoide 1-kHz generada utiliza el programa tm4c123_sine48_intr. c vista
utilizando el osciloscopio Rigol DS1052E conectado a la conexión en el amplificador de audio
(negro) ENTRADA DE SALIDA. (b) Magnitud de FFT de la señal rastreada utilizada MATLAB.
El rastreo mostrado en la Figura 2.19 fue obtenida utilizando un osciloscopio digital Rigol
DS1052E para poder capturar la forma de onda en la salida y luego la magnitud de FFT de los
datos fueron rastreados utilizando MATLAB. Esto muestra claramente ambos tonos 1-kHz y el
ruido fuera de banda arriba 100 kHz. El ruido fuera de banda no es un problema para escuchar
las señales de audio porque los auriculares o las bocinas usualmente no tendrán respuestas de
frecuencias que se extienden tan altas y tampoco el oído humano. Sin embargo, para poder
observar claramente la banda en detalle de señales de audio generadas por un códec AIC3104
utilizando un osciloscopio, es útil agregar un filtro de primer pedido y paso bajo, el cual
comprende un condensador y un resistidor en el camino de la señal SALIDA DE LINEA. Esto puede
llevarse a cabo un puente de encaje J6 o J7 y al observar las señales de salida en los ganchos de
alcance, TP2 y TP3, en el amplificador de audio. La Figura 2.20 muestra la señal de salida
filtrada desde el programa en ambos, el dominio de tiempo y frecuencia para su comparación
con la Figura 2.19.
Magnitud (dB)
Frecuencia (Hz)
Figura 2.20 (a) sinusoide 1-kHz generada utiliza el programa tm4c123_sine48_intr. c vista
utilizando el osciloscopio Rigol DS1052E conectado al gancho de alcance en el amplificador de
audio. (b) Magnitud de FFT de la señal rastreada utilizada MATLAB.
Figura 2.21 Pulso rectangular de salida en el GPIO pin PD15 por el programa stm32f4_sine_intr.
c.
En cualquiera de los ejemplos en este libro, en el cual un osciloscopio es utilizado para observar
una señal de salida desde el códec AIC3104, se recomienda que la sonda del osciloscopio se
encuentre conectada a uno de los ganchos de alcance en el amplificador de audio (TP2 o TP3) y
que los puentes de encaje J6 y J7 encajen de manera correcta.
En contraste, las señales análogas de salida por el códec WM5102 vía la conexión SALIDA DE
LINEA en la tarjeta de audio Wolfson no contiene un ruido fuera de banda como se describe aquí
y las conexiones pueden ser llevadas a cabo directamente desde la conexión (verde) SALIDA DE
LINEA en la tarjeta de audio Wolfson a un osciloscopio (utilizando un 3.5mm Jack plug a RCA
cable plug y un RCA y BNC adaptador).
Ejemplo 2.12
Generación de onda sinusoidal utilizando sinf() llamada función (stm32f4_sine_intr. c).
Las ondas sinusoidales de diferentes frecuencias pueden ser generadas utilizando un método que
involucre una tabla de búsqueda empleada por los programas stm32ff4_sine48_intr. c y
stm32f4_sine8_intr. c. Por ejemplo, una onda sinusoidal de 3-kHz puede ser generada utilizando
el programa stm32f4_sine8_intr. c al cambiar la declaración del programa que se lee
int16_t sine_table[LOOPLENGTH] = {
0, 7071, 10000, 7071, 0, -7071, -10000, -7071} ;
para leer
int16_t sine_table[LOOPLENGTH] = {
0, 7071, 10000, 7071, 0, -7071, -10000, -7071} ;
Sin embargo, el cambiar los contenidos y/o tamaños de la tabla de búsqueda particularmente no
es una forma flexible de generar sinusoides de frecuencias arbitrarias (El ejemplo 2.26
demuestra cómo los diferentes sinusoides de frecuencia pueden ser generados desde una tabla
de búsqueda arreglada).
Construir y ejecutar el programa y experimentar por el cambio del valor asignado a la frecuencia
variable en el rango desde 100.0-3800.0 (editando el programa y reconstruyendo el proyecto
cada vez). La frecuencia de muestreo utilizada en por este programa es 8 kHz. El programa
stm32f4_sine_intr.c utiliza el GPIO pin PD15 para indicar el tiempo tomada para ejecutar la
rutina de servicio de interrupción SPI2_IRQHandler (). El GPIO pin PD15 se establece alto por la
declaración del programa
Al final de la rutina de servicio de interrupción SPI2_IRQHandler (). En otras palabras, hace salir
un pulso rectangular en cada PD15 125 ux y la duración de tal pulso es indicativa del tiempo
tomado para computar cada nuevo valor de muestra de salida. Tal tiempo es determinado
primariamente por el tiempo tomado para ejecutar la declaración de programa
La Figura 2.21 muestra la onda de forma de salida en el GPIO pin PD15. La duración de los pulsos
es de aproximadamente 680 ns. La función sinf () se utiliza porque la función sin ()
computacionalmente es muy cara para ser utilizada en este aplicación. Una alternativa
ligeramente más eficiente es proveída por la función arm_sin_f32 (), definida en la biblioteca
CMSIS DSP. Edita el programa, reemplaza la declaración del programa
con
y deberías encontrar que la duración del pulso de salida en PD15 se reduce aproximadamente a
400 ms. En general, las llamadas funciones trigonométricas definidas en bibliotecas de
matemáticas estándar, deberían ser evitadas en aplicaciones DSP en tiempo real.
Ejemplo 2.13
Sinusoide Buscado Utilizando la Tabla con 8000 Puntos (stm32f4_sweep_intr. c).
Este ejemplo ilustra el uso de una tabla de valores de muestreo arreglada de búsqueda para
poder generar forma de ondas de salida análoga con frecuencia arbitraria ( sin cambiar la
frecuencia de muestreo). La Lista 2.27 es del programa stm32f4_sweep_intr. c, el cual genera
una señal con frecuencia sinusoidal de búsqueda, utilizando una tabla de búsqueda, la cual
contiene 8000 valores de muestreo. Este es un método de la generación de forma de ondas
comúnmente utilizadas en los laboratorios generadores de señal. El título del archivo
sine8000_table . h, generado por utilizar el comando MATLAB
[Cuadro de fórmulas]: Lista 2.15 Lista parcial del título del archivo sine8000_table. H
Ejemplo 2.14
La Generación de los Tonos DTMF Utilizando una Tabla de Búsqueda
(tm4c123_sineDTMF_intr . c).
Un indicador que se ha escalonado a través de cada una de las muestras TABLESIZE singulares,
almacenadas en una tabla de búsqueda en una frecuencia de muestreo de 16 kHz generaría un
tono sinusoidal con igual frecuencia a ( 16000/TABLESIZE ). Un indicador que se ha escalonado a
través de muestras almacenadas en la tabla de búsqueda, incrementadas por el valor STEP,
generaría un tono sinusoidal con igual frecuencia a ( 16000 * STEP/TABLESIZE ). Desde esto, es
posible calcular el tamaño del paso requerido para cualquier frecuencia deseada. Por ejemplo,
para poder generar un sinusoide con frecuencia 770 Hz, el tamaño del paso requerido es STEP =
TABLESIZE * 770/16000 = 24.64. En otras palabras, en cada instante de muestreo, el indicador en
la tabla de búsqueda, debería ser incrementado por 24.60. El valor del indicador, o índice, en la
tabla de búsqueda debe ser un valor entero ( ( int16_t ) ( loopindexlow) ) pero un valor de
indicador con punto flotante, o índice ( loopindexlow ) se mantiene por el programa y es
incrementado por 24.64 en cada instante de muestreo y envuelto aproximadamente a 0.0 cuando
su valor excede de 512.0 utilizando las declaraciones
Loopindexlow + = 24.64 ;
if ( loopindexlow> (float32_t) TABLESIZE ) loopindexlow - = (float32_t ) TABLESIZE ;
En el programa tm4c123_sineDTMF_intr. c, los valores de punto flotante por los cuales, la tabla
de búsqueda indica que son aumentados, son predefinidos utilizando, por ejemplo,
Para poder cambiar el tono DTMF, generado y similar diferentes teclazos, edita el programa
tm4c123_sineDTMF_intr . c y cambia las declaraciones del programa.
Loopindexlow + = STEP_697 ;
Loopindexhi + = STEP_1477 ;
a , por ejemplo
Loopindexlow + = STEP_770 ;
Loopindexhi + = STEP_1209 ;
Ejemplo 2.15
Reconstrucción de Señal, Aliasing, y las Propiedades del Códec WM5102 (stm32f4_sine_intr .
c).
Ejemplo 2.16
Generación onda cuadrada utilizando una tabla de búsqueda (stm32f4_square_intr . c).
Ejemplo 2.17
Generación onda cuadrada utilizando una tabla de búsqueda (tm4c123_square_intr . c).
Una demostración de la características de bajo paso del filtro de reconstrucción, es otorgada por
el programa tm4c123_square_1khz_intr . c. Aquí, la secuencia de los valores de muestra escritos
en el DAC a una frecuencia de muestre de 8 kHz es otorgada por
#define LOOPLENGTH 8
Int16_t square_table [ LOOPLENGHT ] = {
10000, 10000, 10000, 10000,
-10000, -10000, -10000, -10000 } ;
Ejemplo 2.18
Respuesta Impulsiva del Filtro de Reconstrucción WM5102 DAC (stm32f4_dimpulse_intr .c).
Cada transición en la forma de onda generada por el programa stm32f4_square_intr . c puede ser
considerada como representativa del paso de la respuesta del filtro de reconstrucción en el
WM5102 DAC. Desde esto, la respuesta impulsiva del filtro puede ser conjeturado.
Tal respuesta impulsiva se convierte en un interés desde, según con la teoría de sistemas
lineales, caracteriza al filtro. Específicamente, la respuesta impulsiva del WM5102 DAC es igual
al tiempo derivativo de su respuesta de paso, y por inspección de la Figura 2.23, se aparenta que
la respuesta impulsiva tendrá la forma de una (relativamente) oscilación en descomposición
(exponencialmente) lenta. La respuesta impulsiva puede ser ilustrada de forma más directa por
el programa en ejecución stm32f4_dimpulse_intr . c. Este programa reemplaza las muestras de
la onda cuadrada en la tabla de búsqueda utilizada por el programa stm32f4_square_intr . c con
una secuencia discreta de impulso. La Figura 2.28 muestra la forma de onda de salida, generada
por stm32f4_dimpulse_intr. c y su magnitud FFT calculada utilizando un osciloscopio Rigol
DS1052E. La transformación de la respuesta impulsiva de un sistema de tiempo invariante es
igual a su respuesta de frecuencia.
Ejemplo 2.19
Respuesta Impulsiva del Filtro de Reconstrucción AIC3104 DAC (tm4c123_dimpulse_intr .c).
Este programa ilustra la respuesta impulsiva del AIC3104 DAC. Como se ha sugerido por la forma
de onda en salida generada utilizando el programa tm4c123_square_intr . c en el ejemplo
previo, la respuesta impulsiva correspondiente es sutilmente diferente desde aquella del
WM5102 DAC. Las dos respuestas impulsivas diferentes, cada una de la cual corresponde a una
respuesta de frecuencia de bajo paso casi ideal, son representativas de aquellas encontradas en
la mayoría de los códec de audio. A la del WM5102, se le denomina respuesta baja latencia.
Quizá sea tentador observar la respuesta del impulso del códec AIC3104 como no causante y
pensar en el pico central del pulso mostrado en la Figura 2.29 como se corresponde al mismo
tiempo de ese, del impulso que lo está llevando a cabo. Esto, claro, es imposible en la práctica.
Sin saber los trabajos en detalle, del AIC3104 DAC, en todo caso, se aparenta que el impulso, el
cual causa la respuesta mostrada en la Figura 2.29, debe ocurrir antes que cualquier evidencia
de ondulaciones en el pulso y por lo tanto, aproximadamente 1 ms antes su pico. En contraste,
el impulso que causa la respuesta impulsiva del WM5102 DAC, mostrado en la Figura 2.28,
probablemente ocurrida aproximadamente 300 us antes el pico.
Ejemplo 2.20
Generación de Rampa (tm4c123_ramp_intr . c).
La lista 2.38 es del programa tm4c123_ramp_intr . c, el cual genera una rampa, o un diente de
sierra en la forma de onda en la salida. El valor de la muestra de la salida output_left se
incrementa por 2000 cada instante de muestreo hasta que llega al valor 30,000, en el cual el
punto se resesta al valor – 30,000. Construir y ejecutar este programa. La Figura 2.30 muestra la
forma de onda de la salida análoga capturada utilizando un osciloscopio. La salida comprende
componentes harmónicos en frecuencias menos que 4 kHz.
Ejemplo 2.21
Modulación de Amplitud (tm4c123_am_poll. c).
Este ejemplo ilustra los principios básicos de la modulación de amplitud (AM). La lista 2.40 es
del programa tm4c123_am_poll. c, la cual genera una señal AM. La formación baseband sostiene
20 muestras de un ciclo de un coseno de forma de onda con frecuencia de fs/20 = 400 Hz
(frecuencia de muestreo, fs = 8000 Hz). La formación carrier sostiene 20 muestras de cinco ciclos
de una señal del portador sinusoidal con una frecuencia de 5fs/20 = 2000 Hz. Los valores de
muestreo de salida, son calculados al multiplicar la señal de banda base baseband por la señal
portadora carrier. De esta forma, la señal de banda base, modula a la señal portadora. La
variable amp se utiliza para establecer el índice de la modulación.
Construir y ejecutar este programa. Verificar que la salida consista de 2-kHz portador de señal y
dos señales de banda lateral, tal como se muestra en la Figura 2.31. Las señales de banda lateral
se encuentran en la frecuencia de la señal portadora, +/= la frecuencia de una señal portadora,
o a 1600 y 2400 Hz. La magnitud de la banda lateral relativa a la señal portadora puede ser
alterada por cambiar el valor de la variable amp en el archivo de origen. El proyecto necesitará
ser reconstruido para tal cambio para obtener el efecto.
Ejemplo 2.22
La Respuesta de la Frecuencia del AIC3104 DAC Filtro de Reconstrucción Utilizando una
Secuencia Binaria Pseudoaleatoria (tm4c123_prbs_intr . c).
El programa tm4c123_prbs_intr . c, tal como se muestra en la Lista 2.42, genera una secuencia
binaria pseudoaleatoria (PRBS) y escribe esto al AIC3104 DAC. La función prbs (), definida en el
archivo tm4c123_aic3104_init . c, tal como se muestra en la Lista 2.43, utiliza un registro de
desplazamiento con retroalimentación lineal de 16-bit (LFSR) para generar una secuencia binaria
pseudoaleatoria una longitud máxima. El bit significante más menor del registro es utilizado para
determinar cómo una función prbs () retorna como el valor noise_level o el valor –noise_level, en
donde noise_level es un valor entero de 16-bit, el cual es pasado a la función. El valor del LFSR
(lfsr) es inicializado a 0x0001. Cada tiempo la función prbs () se llama, un valor de
retroalimentación (fb) se forma por el modulo – 2 suma de bits 15,14, 3, y 1 en lfsr. Los
contenidos del LFSR son cambiados a la izquierda por un bit y el valor de bit 0 es asignado al
valor del feedback fb. Si el valor de fb es igual a cero, entonces la función retorna el valor –
noise_level. De otro modo, retorna el valor noise_level.
La Figura 2.32 muestra la señal de la salida análoga, generada por el programa mostrado
utilizando un osciloscopio y utilizando Goldware. La densidad espectral del poder teórico del
PRBS es constante a través de todas las frecuencias. Cuando un PRBS es escrito al DAC, el
contenido espectral de la señal de salida por el DAC es indicativo de la respuesta de frecuencia
de magnitud del DAC. En este caso, la respuesta de frecuencia de magnitud es plano, o
constante, en frecuencias de frecuencia de corte del filtro de reconstrucción del DAC, justo
debajo de la mitad de la frecuencia de muestreo.
Figura 2.32 Salida del programa tm4c123_prbs_intr . c, observado utilizando el osciloscopio Rigol
DS1052 y Goldware.
El códec AIC3104 presenta un filtro de-énfasis de primera orden programable que puede ser
cambiado opcionalmente en el camino de la señal justo antes del DAC. El programa
tm4c123_prbs_deemph_intr . c, demuestra su uso (observa la Figura 2.33). El cambio del usuario
SW1 en la TM4C123 LaunchPad puede ser utilizado para habilitar o deshabilitar la función de-
énfasis. Los filtros de-énfasis son habilitando y deshabilitados por escribir a bits 0 (canal
derecho) y 2 (canal izquierdo) en página 0 registro de control 12 (Audio Codec Digital Filter
Control Register) utilizando la función I2CRegWrite ().
[En esta parte se encuentra dos diagramas de la figura 2.33]
El códec AIC3104 también presenta dos filtros IIR de cuarta orden que pueden ser cambiados
opcionalmente en el camino de señales en el canal izquierdo y derecho, justo antes del DAC. El
programa tm4c123_prbs_biquad_intr . c demuestra cómo las características de estos filtros
pueden ser programados por escribir los coeficientes de los filtros en AIC314 página 1 control de
registros 1 a través de 20 (canal izquierdo) y 27 a través de 46 (canal derecho). En este ejemplo,
un filtro de bajo paso elíptico de cuarta orden, es implementado. La Figura 2.35 muestra al PRBS
filtrado en cuanto a señales vistas utilizando un osciloscopio y utilizando Goldwave. Los filtros IIR
son habilitados y deshabilites por escribir a bits 1 (canal derecho) y 3 (canal izquierdo) en página
0 control de registro 12 (Audio Codec Digital Filter Control Register). Las características de estos
filtros y cómo programarlos están descritas con mayor detalle en el Capítulo 4.
Ejemplo 2.23
La Respuesta de la Frecuencia del DAC Filtro de Reconstrucción Utilizando una Ruido
Pseudoaleatorio (tm4c123_prandom_intr . c).
En general, el uso del ruido pseudoaleatorio como señal en la entrada es una técnica simple y
útil para evaluar la respuesta de la frecuencia de magnitud de un sistema.
[Cuadro de fórmulas]: Lista 2.22 Definición de la Función prand (), definida en el archivo
tm4c123_aic3104_init . c
2.8 Aliasing
Los ejemplos precedentes, demuestran que ningún códec, ya fuese el AIC3104 o el WM5102,
pueden generar los componentes de la señal que poseen frecuencias mayores a la mitad de la
frecuencia de muestreo. Sigue que inaconsejable permitir los componentes con señal de entrada
análoga, los cuales tienen frecuencias mayores a la mitad de la frecuencia de muestreo para ser
mostrada en la entrada del sistema DSP. Esto puede ser prevenido al pasar las señales de
entrada análoga a través del filtro antialiasing de bajo paso prior al muestreo. Los filtros de
antialiasing con características similares a aquellas de los filtros de reconstrucción DAC de los
códec AIC3104 y WM5102, los cuales son establecidos en tales dispositivos.
Ejemplo 2.24
Respuesta de paso del filtro antialiasing del códec WM5102 (stm32f4_loop_buf_intr . c).
Para poder investigar la respuesta del paso del filtro antialiasing en el WM5102, conecta un
generador de señal en el enchufe del canal izquierdo (rosado) en ENTRADA DE LINEA en la
tarjeta de audio Wolfson. Ajusta el generador de señal para proporcionar una onda cuadrada en
la salida con frecuencia 270 Hz y con una amplitud de 500 mV. Construye y ejecuta el programa
stm32f4_loop_buf_intr . c, pausa el programa después de pocos segundos. Observa los valores de
muestreo más recientes en la entrada al guardar los contenidos en formación 1buffer al archivo
de datos mientras se escribe
Figura 2.38 Los valores de muestreo leías desde el WM5102 ADC y almacenadas en la formación
1buffer por el programa stm32f4_loop_buf_intr . c.
Figura 2.39 Los valores de muestreo leías desde el WM5102 ADC y almacenadas en la formación
1buffer por el programa stm32f4_loop_buf_intr . c.
Ejemplo 2.25
Demostración de las Características del Códec AIC3104 del Filtro Antialiasing
(tm4c123_sine48_loop_intr . c).
Valor de Muestreo
Tiempo (s)
Figura 2.40 Los valores de muestreo leías desde el AIC3104 ADC y almacenadas en la formación
buffer por el programa tm4c123_sine48_loop_intr . c.
Ejemplo 2.26
Demostración de Aliasing (tm4c123_aliasing_intr . c).
Los filtros de antialiasing tanto análogos como digitales, en los códec AIC3104 y WM5120 no
pueden ser desviados o deshabilitados. Sin embargo, el aliasing puede ser demostrado dentro de
un programa por el muestreo de una señal digital sin tomar como propias las medidas
antialiasing. El programa tm4c123_aliasing_intr . c, se muestra en la Lista 2.49, utiliza una
frecuencia de muestreo de 16 kHz para el códec pero luego testea la secuencia de las muestras
producidas por el ADC en la frecuencia más baja de 8 kHz (muestreo). La secuencia de las
muestras generadas en una frecuencia de 16 kHz por el ADC puede contener componentes de
frecuencia en frecuencias mayores a 4 kHz, y por lo tanto, si esa secuencia de esa muestra es
una muestra en una frecuencia de 8 kHz al simplemente descartar cada muestra de segundo, la
aliasing puede llevarse a cabo.
Para evitar la aliasing, la secuencia de muestreo de la salida a 16 kHz por el ADC puede pasar a
través de un filtro antialiasing digital antes del muestreo. El programa tm4c123_aliasing_intr . c,
utiliza un filtro FIR con 65 coeficientes definidos en el título del archivo lp6545 . h para su
deber. Para propósitos de este ejemplo, es innecesario entender la operación del filtro FIR. Es
suficiente considerar simplemente que el programa demuestra el efecto de muestreo en la
frecuencia de 8 kHz con y sin utilizar un filtro antialiasing.
Con el filtro antialiasing habilitado, las señales con mayores frecuencias que 4 kHz no pasan de
ENTRADA DE LINEA y SALIDA DE LINEA. Pero con el filtro de antialiasing inhabilitado, y al variar
la frecuencia de la señal de entrada, la deberías habilitar para verificar que los sinusoides con
frecuencias entre 4 y 8 kHz son “dobladas hacia atrás” dentro de un rago 0-4 kHz.
Ejemplo 2.27
Identificación del códec AIC3104 de ancho de banda utilizando un filtro adaptativo
(tm4c123_syside_CMSIS_intr. c).
Otra forma de observar el ancho de banda del códec es medir su magnitud de la respuesta de la
frecuencia utilizando el programa tm4c123_sysid_CMSIS_intr . c. Este programa, mostrado en la
Lista 2.51 utiliza un filtro FIR adaptativo y se describe en más detalle en el Capítulo 6. Sin
embargo, no necesitas saber exactamente cómo funciona el programa tm4c123_sysid_CMSIS_intr
. c, para poder utilizarlo. Efectivamente, identifica las características del camino entre salida en
tiempo discreto y entrada en tiempo discreto (puntos A y B en la Figura 2.41).
Escribe
Los coeficientes de filtros adaptativos utilizados por la función CMSIS arm_lms_f32 () son
almacenados en memoria en orden de reversa relativa al sentido por el cual representan la
respuesta de impulso del filtro, y por lo tanto, cuando se utiliza la función MATLAB
stm32f4_logfft (), responde al inmediato
al entrar el valor 1.
Valor de muestreo
Tiempo (s)
Magnitud (dB)
Frecuencia (Hz)
Valor de muestreo
Tiempo (s)
Magnitud (dB)
Frecuencia (Hz)
Valor de muestreo
Tiempo (s)
Magnitud (dB)
Frecuencia (Hz)
Valor de muestreo
Tiempo (s)
Magnitud (dB)
Frecuencia (Hz)
Los rastros que ilustran los ejemplos de la respuesta de frecuencia instantánea del programa
tm4c123_flanger_intr . c en el Ejemplo 2.18, fueron obtenidos utilizando el programa
tm4c123_sysid_flanger_intr . c, una versión sutil modificada del programa
tm4c123_sysid_flanger_intr . c, que incluye un flanger (Figura 2.13) con un retraso arreglado en
el camino de la señal identificada.
Ejemplo 2.28
Identificación del Ancho de banda del Códec AIC3104 Utilizando Dos Amplificadores de Audio
(tm4c123_sysid_CMSIS_intr . c).
Tm4c123_aic3104_init ( FS_8000_HZ,
AIC3104_LINE_IN,
IO_METHOD_INTR
PGA_GAIN_6_DB ) ;
a leer
Tm4c123_aic3104_init ( FS_16000_HZ,
AIC3104_LINE_IN,
IO_METHOD_INTR
PGA_GAIN_6_DB ) ;
Además, cambia el número de coeficientes de filtros adaptivos utilizados desde 256 a 192 por
cambiar la declaración del programa que lee
a leer
Esto es necesario debido al retraso a través de dos sistemas. Conecta los dos amplificadores de
audio juntos, tal como se muestra en la Figura 2.46. Asegúrate de que el programa
tm4c123_loop_intr . c esté siendo ejecutado en una lauchpad antes de que el programa en
ejecución tm4c123_sysid_CMSIS_intr . c por un periodo corto de tiempo en el otro. También,
asegúrate de que el programa tm4c123_loop_intr . c esté utilizando LINEA DE ENTRADA (como se
no se encuentra MICROFONO DE ENTRADA) como su entrada. Luego de hacer ejecutar el
programa y parar este mismo, guarda los coeficientes de los filtros adaptivos 192, firCoeffs32
utilizados por el programa tm4c123_sysid_CMSIS_intr . c para el archivo de datos al escribir
ENTRADA DE LINEA
SALIDA DE LINEA
ENTRADA DE LINEA
SALIDA DE LINEA
TM4C123 Launchpad y amplificador de audio
Programa
tm4c123_loop_intr . c
Programa
Tm4c123_sysid_CMSIS_intr . c
Valor de muestreo
Tiempo (s)
Magnitud (dB)
Frecuencia (Hz)
[En esta parte se encuentra dos diagramas de la figura 2.47]
Figura 2.47
La respuesta del impulso y la frecuencia de magnitud identificadas utilizando el programa
tm4c123_sysid_CMSIS_intr . c con conexiones, tal como se muestran en la Figura 2.46, mostradas
utilizando la función MATLAB tm4c123_logfft (). La frecuencia de muestreo 16,000 Hz, 192
coeficiente de filtro adaptivo.
El retraso en el camino de la señal identificada (9 ms) es mayor a la de la Figura 2.42 (6 ms). Eso
es consistente con el retraso observado utilizando el programa tm4c123_loop_intr . c en el
Ejemplo 2.6. Al utilizar los coeficientes de filtro 192, el filtro adaptivo se encuentra disponible
para identificar una respuesta con impulso de 192/16,000 = 12 ms de largo. El implementar un
coeficiente 192 de filtro adaptivo en una frecuencia de muestreo de 16 kHz solamente es posible
utilizando un procesador TM4C123 con una frecuencia de reloj de 84 MHz. Esto es evidente
desde que el trazo del osciloscopio mostrado en la Figura 2.48, el cual muestra el pulso
rectangular en la entrada GPIO pin PE2 por el programa tm4c123_sysid_CMSIS_intr . c. El GPIO
pin PE2 es mantenido altamente durante la función de la rutina de servicio de interrupción
SSI_interrupt_routine ():
Figura 2.48 Pulso en la salida en GPIO pin PE2 por el programa tm4c123_sysid_CMSIS_intr . c
ejecutando una frecuencia de muestreo de 16 kHz y utilizando coeficientes de filtro adaptivo
192.
Ejemplo 2.29
Generación de Forma de Onda Análoga de Instrumentación DAC de 12-Bit
(stm32f4_sine8_DAC12_intr . c).
El procesador STM32F407 presenta dos DAC de 12-bit, los cuales permiten la comparación que
será hecha con el DAC en el audio de los códec AIC3104 y WM5102. La salida análoga desde uno
de los 12-bit del DAC es enrutado al GPIO pin PA5 en la STM32F407 Descubrimiento.
La función sinc, la cual modula las magnitudes de los componentes de frecuencia discreta, en la
Figura 2.49, se ilustra claramente en las Figuras 2.51 y 2.52. Compara la respuesta de impulso
mostrada en la Figura 2.50 con la de la Figura 2.28 y la señal pseudorandoma mostrada en la
Figura 2.51 con la de la Figura 2.32. Ambos, el DAC en el códec WM5102 y el DAC en el códec
AIC3104 son cercanos para los filtros de bajo paso ideales con las frecuencias cortantes de fs/2
(4 kHz). Las características de bajo paso de DAC 12-bit en la STM32F407 significantemente son
menos pronunciada. Finalmente, compara la forma de onda de salida, mostrada en la Figura 2.52
con la de la Figura 2.24. Para la comparación, los valores de muestreo escritos en el DAC 12-bit
son escritos también en el códec WM5102. Su salida análoga puede ser observada al conectar un
osciloscopio al enchufe (verde) SALIDA DE LINEA en la tarjeta de audio.
Referencias
1. Texas Instruments, Inc., “TLV320AIC3104 Low-Power Stereo Audio Codec for Portable Audio
and Telephony”, Literature no. SLAS510D, 2014.
2. Wolfson Microelectronics plc., “Audio Hub Codec with Voice Processor DSP”, 2013.
3. Texas Instruments, Inc., “Dual-SPI Emulating I2S on Tiva TM TM4C123xMCUs”, Literature no.
SPMA042B, 2013.
Capítulo 3
Los filtros son fundamentales para el procesamiento de señal digital. Comúnmente, esto se
refiere a procesar una secuencia de muestras, las cuales representan una señal en dominio de
tiempo para que se alteren las características del dominio de la frecuencia, y a menudo esto
consiste en atenuar o hacer filtrar componentes de frecuencia seleccionada. Los filtros digitales
son clasificados según su estructura, ya sea no recursiva, filtros de respuesta finita al impulso
(FIR), o como recursiva, filtros de respuesta infinita al impulso (IIR, según sus siglas en inglés).
Este capítulo trata con filtros FIR. Los filtros IIR se encuentran descritos en el Capítulo 4.
Un filtro genérico FIR se muestra en la forma de bloque de diagrama en la Figura 3.1 Las partes
componentes del filtro son:
1. una línea de retraso, o amplificador, en donde un número de muestras de entrada previas x(n-
k) se encuentran almacenadas. En cada instante de muestreo, los contenidos de línea retrasada
son actualizados que las muestras son cambiadas en una posición (para la derecha del diagrama)
y una nueva muestra de entrada x(n) es presentada en el comienzo de la línea de retraso.
3. una junción que suma las salidas de los multiplicadores para formar la presente muestra de
filtro en la salida y(n).
Sea multiplicado por cero valores de muestreo desde la línea de retraso y no contribuirá en nada
con la salida en el instante de muestreo. Por lo tanto, la secuencia de salida y(n) (la unidad de
respuesta de impulso del filtro) comprenderá los coeficientes del filtro h(n).
Aunque es posible para los filtros FIR, aproximarse a las características de filtros análogos en
tiempo continuo, una de sus desventajas es que estos pueden ser utilizados para implementar
características de filtros arbitrarios, las cuales son imposibles de implementar utilizando
circuitos análogos. Por esta razón, y a diferencia de los filtros IIR descritos en el Capítulo 4, su
diseño no se encuentra basado en la teoría de los filtros análogos. Una desventaja de los filtros
FIR es que su implementación puede ser computacionalmente cara. El obtener una característica
de filtro arbitrario para una precisión requerida, puede requerir un gran número de coeficientes
de filtro.
La estructura y la operación de un filtro FIR son simples (y son una parte fundamental para
muchas aplicaciones DSP). Típicamente, la arquitectura interna de un procesador de señal digital
es optimizada (sola instrucción de unidades de ciclo multiplicar-acumular) para computación
eficiente de una suma de productos o una suma de circunvolución. Para la suma de
circunvolución de la Ecuación (3.1) para ser directamente computarizada, un DSP debe tener
suficiente memoria para almacenar N muestras de entrada previa y N coeficientes de filtro y
tener suficiente poder computacional para ejecutar el número requerido de multiplicaciones y
adiciones dentro de un periodo de muestreo. Para N grande, el uso de FFT-basado circunvolución
rápida (descrito en el Capítulo 5) es computacionalmente más eficiente.
La transformada z x (z) de una secuencia x(n) (en tiempo discreto) se define como
3.2
[Ecuación]
La X (z) es una serie de poder en z, la cual contiene varios términos como valores de muestreo
las hay en la secuencia z (n). Para cada término en X (z), el coeficiente que corresponde a
es igual al valor de muestreo nth en la secuencia x (n). En un sistema de tiempo discreto,
corresponde al tiempo t = nT, en donde T es el periodo de muestreo. La X (z) existe únicamente
para valores de z para que las series de poder converjan, esto es, valores de z para
[Ecuación]
3.3
A veces, [Ecuación] se representa como [Ecuación], enfatizando que se evalúa por valores
diferentes de la cantidad compleja [Ecuación] , en donde [Ecuación] .
3.4
Ejemplo 3.1
La Finita Secuencia de la Transformada z x (n) = {3,2,7, -4}
Desde la definicón de la transformada z, la transformada z de la secuencia de lado derecho
(causal).
3.5
Ejemplo 3.2
La Finita Secuencia de la Transformada z x (n) = {3,2,7, -4}
3.6
X (z) existe (converge) para todos los valores de z excepto z = 0 y z = ∞.
Ejemplo 3.3
Secuencia de Impulso Discreta de la Transformada z [Ecuación]
[Ecuación]
3.8
Esta es una secuencia de lado izquierdo (anti causal). Desde la definición de la transformada z
[Ecuación]
3.9
X (z) existe (converge) para todos los valores de z excepto z = ∞
Ejemplo 3.5
La Función Exponencial de la Transformada z [Ecuación]
3.10
[Ecuación]
3.11
[Ecuación]
3.12
La desigualdad [Ecuación] describe el rango de los valores de z, para la cual X (z) existe, esto
es, su región de convergencia (ROC). En este caso en particular, [Ecuación] describe la parte
del plano z, la cual se encuentra afuera del radio del círculo a . X (z) existe (converge) para
[Ecuación] .
Ejemplo 3.6
La Función Exponencial de la Transformada z
Esta secuencia en el lado izquierdo (anti causal) puede aparecer siendo el interés académico
únicamente pero se incluye para realizar un punto importante. En este caso,
[Ecuación]
3.13
Dejando m = -n
[Ecuación]
3.14
La desigualdad [Ecuación] describe el rango de los valores de z, para la cual X (z) existe,
esto es, su (ROC). En este caso en particular, [Ecuación] describe la parte del plano z, la
cual se encuentra dentro del radio del círculo a . X (z) existe (converge) para .
Comparando (3.14) con (3.12), se aparenta que una expresión algebraica similar para X (z)
corresponde a dos secuencias diferentes x (n). Correspondiendo a cada una de estas secuencias
diferentes, es una diferente ROC. La ROC por lo tanto, es una parte integral de la representación
de una señal en el dominio z. Para poder especificar únicamente x (n) desde X (z), debemos
saber su ROC.
Ejemplo 3.7
La Función de Paso Unitario de la Transformada z
La función de paso unitario puede ser vista como una instancia en el Ejemplo 3.5, en donde a =
1, y por lo tanto, X (z) existe (converge) para .
[Ecuación]
3.15
La desigualdad [Ecuación] describe el rango de los valores de z, para la cual X (z) existe, esto
es, su (ROC). En este caso en particular, [Ecuación] describe la parte del plano z, la cual se
encuentra afuera del radio 1.
Ejemplo 3.8
La Función Sinusoidal de la Transformada z [Ecuación]
Esta función es de lado derecho o causal. Una función sinusoidal puede ser representada por
exponenciales complejos según la fórmula de Euler [Ecuación] , esto es,
[Ecuación]
3.16
y por lo tanto, la transformada de z de la secuencia [Ecuación] es dada por
[Ecuación]
3.17
Utilizando el resultado de [Ecuación] con [Ecuación] ,
[Ecuación]
3.18
En el plano z, esta función posee cero en su origen y dos polos conjugados complejos en el
círculo en ángulos +/- . Su ROC es el plano z entero, fuera de, pero no incluyendo, el círculo
unitario.
De forma similar, si se utiliza la fórmula de Euler para expresar [Ecuación] como la suma de dos
exponentes complejos, esto puede ser mostrado que la transformada z de la secuencia es
dada por
[Ecuación]
3.19
Figura 3.2 Polos y ceros y región de convergencia para una secuencia causal [Ecuación] ,
[Ecuación] , trazadas en el plano z.
Figura 3.3 Polos y ceros y región de convergencia para una secuencia anti causal [Ecuación]
[Ecuación] , trazadas en el plano z.
Las dos diferentes ROCS para la transformada z [Ecuación] mostradas en las figuras son
consistentes con las siguientes propiedades ROC.
Las secuencias x (n) de lado derecho (causal) corresponden a las ROCS que se extienden
en el exterior desde un círculo dibujado a través del polo más exterior de X (z), este es,
el polo con la magnitud más grande.
Las secuencias x (n) de lado izquierdo (anti causal) corresponden a las ROCS que se
extienden en el interior desde un círculo dibujado a través del polo más interior de X (z),
este es, el polo con la magnitud más pequeña.
Las secuencias x (n) de ambos lados (no causal) corresponden a las ROCS anulares.
Las Figuras 3.4 a través de la 3.6 ilustran el caso de la transformada z X (z) que posee más de un
polo y para el cual más de dos diferentes ROCs, consistente con las propiedades listadas
anteriormente, son posibles.
[En esta parte se encuentra un diagrama de la figura 3.4]
Plano z
Plano z
[En esta parte se encuentra un diagrama de la figura 3.6]
Un sistema LTY caracterizado por una respuesta impulsiva h (n) es estable BIBO si h (n) es
absolutamente sumable, esto es, si
[Ecuación]
3.20
[Ecuación]
3.21
Si H (z) existe para [Ecuación] , entonces el DTFT de h (n) existe y el sistema es estable BIBO.
En otras palabras, si su ROC incluye el círculo unitario, entonces el sistema representado por H
(z) y h (n) es estable BIBO.
Considera de nuevo el ejemplo de la secuencia (causal) del lado derecho [Ecuación] para la cual
la transformada z, [Ecuación] converge si [Ecuación] . Las Figuras 3.7 a través de la 3.9
muestra regiones posibles de convergencia y secuencias correspondientes x (n) para
a <1, a = 1 y a > 1 .
[En esta parte se encuentra un diagrama de la figura 3.7]
Figura 3.7 Polos y ceros y región de convergencia para, [Ecuación] , trazadas en el plano z.
Secuencia correspondiente [Ecuación] es causal y estable.
Figura 3.8 Polos y ceros y región de convergencia para, [Ecuación] , trazadas en el plano z.
Secuencia correspondiente [Ecuación] es causal e inestable.
Figura 3.9 Polos y ceros y región de convergencia para, [Ecuación] , trazadas en el plano
z. Secuencia correspondiente [Ecuación] es causal e inestable.
Plano z
[En esta parte se encuentra un diagrama de la figura 3.10]
Plano z
Figura 3.11 Polos y ceros y región de convergencia para, [Ecuación] , trazadas en el plano z.
Secuencia correspondiente [Ecuación] es anti causal e inestable.
Plano z
En el caso de los sistemas causales LTI, X (z) pueden ser expresados como un radio de polinomios
en z y como tales, poseen polos y ceros (valores de z por el cual X (z) es igual a cero o ∞). Los
polos y ceros de X (z) están relacionados a la/s región/es de convergencia de X (z). De hecho,
podemos deducir posibles ROCs desde los polos y ceros de X (z) según las reglas listadas
anteriormente. En la mayoría de aplicaciones de ingeniería, nos preocupa y encontraremos,
secuencias causales.
3.1.4.1 Linealidad
3.1.4.2 Cambio
3.22
[Ecuación]
3.23
[Ecuación]
Substituyendo l = (n – m),
3.24
[Ecuación]
3.25
3.1.4.3 Retraso de Tiempo
3.1.4.4 Convulsión
La salida forzada y (n) de un sistema LTY, el cual tiene una respuesta impulsiva h (n) y entrada x
(n) y entrada x (n) es (como explícitamente implementada por un filtro FIR)
3.26
[Ecuación]
3.27
[Ecuación]
3.28
Dejando l = n – m,
[Ecuación]
3.29
Por lo tanto,
[Ecuación]
3.30
Esto es, la transformada z de la circunvolución linear de las secuencias h (n) y x (n) es
equivalente al producto de las transformadas z, H (z) y X (z), de h (n) y x (n) (como se muestra
en la Figura 3.13).
3.31
[Ecuación]
La magnitud de z es dada por [Ecuación] y su fase por . Considera las tres regiones del
plano s que determina la estabilidad del sistema.
3.1.6.1 [Ecuación]
La mitad de la mano izquierda del plano s representa los valores de s que tienen partes reales
negativas, y esto corresponde a los valores de z, los cuales tienen magnitudes menos que una
unidad [Ecuación] . En otras palabras, la mitad de la mano izquierda del plano s, traza a la
región del plano z complejo, dentro del círculo unitario como se muestra en la Figura 3.3. Si los
polos de una función de transferencia z se localizan dentro de un círculo unitario, entonces un
sistema causal representado por la función de transferencia z, será estable.
3.1.6.2 [Ecuación]
La mitad de la mano derecha del plano s representa los valores de s, que tienen partes reales
positivas, y esto corresponde a los valores de z, los cuales tienen magnitudes mayores que una
unidad [Ecuación] . En otras palabras, la mitad de la mano derecha del plano s, traza a la
región del plano z complejo, fuera del círculo unitario como se muestra en la Figura 3.4. Si los
polos de una función de transferencia z se localizan fuera de un círculo unitario, entonces un
sistema causal representado por la función de transferencia z, será inestable.
Axis imaginaria
Plano s
Axis imaginaria
Plano z
3.1.6.3 [Ecuación]
El axis imaginario en el plano s, traza el círculo unitario en el plano z. Si los polos de una función
de transferencia z, se encuentra en el círculo unitario en el plano z, entonces un sistema causal
representado por una función de transferencia z, será una respuesta oscilatoria y esto no se
considera estable.
Esta vista de la relación entre la ubicación de los polos de sistema en el plano z y la estabilidad
del sistema, claro, consistente con consideración de cualquiera o no, la ROC incluye el círculo
unitario como se describe anteriormente. Para sistemas causales, la ROC se extiende en el
exterior desde el polo más exterior, y para obtener estabilidad, la ROC debe incluir el círculo
unitario.
3.1.7 Ecuaciones Diferentes
Un filtro digital es representado por una ecuación de diferencia en una forma similar a la por la
cual un filtro análogo es representado por una ecuación diferencial. Una ecuación diferencial
puede ser resuelta utilizando transformaciones Laplace, en donde una ecuación de diferencia
puede ser resuelta utilizando transformaciones z. Para poder realizar esto, las transformaciones
z de un término x (n - k), el cual corresponde a la k th derivativa con respecto al tiempo
de señal análoga x (t), debe ser encontrada. Desde esta definición, la transformada z de un lado
derecho, la secuencia causal es
[Ecuación]
3.32
La transformada z de x (n – 1), la cual corresponde a la derivativa en primer orden dx (t) / dt,
es
3.33
[Ecuación]
En donde x ( -1) representa la condición inicial asociada con la ecuación de diferencia de primer
orden. De forma similar, la transformada z de (n – 2), la cual corresponde a la derivativa de
segundo orden [Ecuación] , es
[Ecuación]
3.34
En donde x ( -2) y x ( -1) representan las dos condiciones iniciales asociadas con una ecuación
diferencia de segundo orden. En general,
[Ecuación]
3.35
Si las condiciones iniciales son todas cero, entonces x ( -m) = 0 para m = 1, 2, … , k y la Ecuación
(3.35) se reduce a
[Ecuación]
3.36
3.1.8 Respuesta de Frecuencia y la Transformada z
[Ecuación]
3.37
Tal como se muestra en la Figura 3.15, se encuentran las respuestas de frecuencia de magnitud
de filtros de paso de banda, paso alto y paso bajo y paro de banda ideal. Existen algunas de las
características de filtro más comunes, utilizadas en un rango de aplicaciones.
Figura 3.15 Respuestas de frecuencia de magnitud de filtro ideal. (a) Paso bajo (LP). (b) Paso
alto (HP). (c) Paso de banda (BP). (d) Paro de banda (BS).
3.2.1 Método de Ventana del Diseño del Filtro FIR
La ventana, o la serie de Fourier, aproximada al diseño del filtro FIR, comprenden tres pasos
básicos.
Si la respuesta de frecuencia deseada del filtro, se especifica como función continua (periódica)
de frecuencia, la forma del análisis inverso de Fourier, el cual rendirá una respuesta impulsiva
en tiempo discreto del filtro, será la transformación inversa de Fourier en tiempo discreto. En
general, la inversa DTFT, aplicada a la respuesta de frecuencia continua, rendirá una secuencia
infinita en el dominio de tiempo. La multiplicación por una función de ventana finita, truncará
aquella secuencia. Una función de la ventana cónica simétrica, reducirá una onda (variación de
ganancia) en la respuesta de frecuencia resultante. Desde que la respuesta impulsiva de un filtro
FIR es discreta, su respuesta de frecuencia será periódica y por lo tanto, su respuesta de
frecuencia deseada, necesita ser específica por solamente un periodo (2 pi radian de frecuencia
normalizada [símbolo] ).
Un número de funciones en cuanto a ventanas cónicas, son utilizadas en el diseño del filtro FIR.
Todo tiene el efecto de reducir la magnitud de variaciones de ganancia en la respuesta de la
frecuencia de filtro a costa de una transición menos aguda entre el paso y las bandas de paro.
Estos efectos se relacionan a la diferencia en magnitud entre el pico y el lóbulo lateral, y la
anchura del lóbulo central, del DTFT de la función de ventana (discreta) misma.
En un programa computacional, es más probable que los coeficientes de los filtros FIR h(n) y las
funciones de ventana w (n) serán indexados [Ecuación] . Alternativamente, el índice n puede
ser considerado por un rango [Ecuación] . Los siguientes ejemplos involucran el tipo 1 de los
filtros FIR, esto es, los filtros FIR que poseen coeficientes N en donde la N es impar,
y [Ecuación] . El orden de tales filtros es (N – 1).
Las funciones de ventana, descritas en lo que a continuación se presentan entre las más
utilizadas comúnmente. Una ventana rectangular simplemente trunca un IIR para rendir un set
finito de coeficientes de filtro FIR.
Ventana Rectangular
3.38
Comparada con otras funciones de ventana, una ventana rectangular posee un lóbulo central
estrecho (correspondiendo una transición aguda entre el paso y el paro de bandas) pero su
primer lóbulo solamente es de 13 dB menos que el pico de su lóbulo principal central.
Ventana Hamming
[Ecuación]
3.39
Ventana Hanning
La función de la ventana Hanning es
3.40
Ventana de Blackman
Ventana de Kaiser
La ventana de Kaiser es muy popular para utilizarla en un diseño de filtro FIR. Posee un
parámetro variable para controlar el tamaño del lóbulo relativo al lóbulo principal. La función de
la ventana Kaiser es
[Ecuación]
3.42
[Ecuación]
3.43
El cual converge rápidamente. Un intercambio entre la magnitud del lóbulo y la anchura del
lóbulo principal puede ser logrado al cambiar la longitud de la ventana, n, y el valor del
parámetro a.
Ejemplo 3.9
Diseño de un Filtro FIR de Bajo Paso Ideal Utilizando el Método Ventana
La característica de un filtro FIR de Bajo Paso Ideal se muestra en la Figura 3.16, este es descrito
por
[Ecuación]
3.44
Magnitud
Frecuencia
Figura 3.16 La respuesta de la frecuencia de bajo paso ideal definida por un rango de frecuencia
normalizado .
Este resultado se ilustra en la Figura 3.17, para [Ecuación] , por el rango [Ecuación]
. Para implementar un filtro FIR, la respuesta de impulso h (n) debe ser truncada por la
multiplicación con la función de ventana de extensión finita. La Figura 3.18 muestra el resultado
de la truncada utilizando una ventana rectangular de longitud N = 33 [Ecuación] . Esto tiene
un efecto de introducir variaciones de ganancia ( onda ) en una respuesta de frecuencia
correspondiente, tal como se muestra en la Figura 3.19. La respuesta de frecuencia continua (
periódica ) se encuentra al tomar la ( más adelante ) DTFT de la respuesta impulsiva truncada,
tal como se muestra en la Figura 3.18.
Figura 3.17 Sesenta y uno del número infinito de los valores en tiempo discreto de la respuesta
impulsiva obtenida al tomar la inversa DTFT de una respuesta de frecuencia de bajo paso ideal
de la Figura 3.16.
Magnitud
Frecuencia
Figura 3.19 La respuesta de frecuencia de magnitud periódica y continua, obtenida al tomar la
DTFT de la respuesta impulsiva truncada, tal como se muestra en la Figura 3.18 (trazada en
contra de la frecuencia normalizada).
Magnitud
Frecuencia
Figura 3.22 Los coeficientes del filtro de la Figura 3.17 multiplicada por la ventana Hanning de la
Figura 3.20.
La Figura 3.23 muestra las respuestas de frecuencia de magnitud de las Figuras 3.19 y 3.21
trazadas juntas en una escala logarítmica. Esto enfatiza el lóbulo principal más ancho y suprime
los lóbulos laterales asociados con la ventana Hanning.
Magnitud (dB)
Frecuencia
Figura 3.23 las respuestas de frecuencia de magnitud de las Figuras 3.19 y 3.21 trazadas juntas
en una escala logarítmica, en contra de la frecuencia normalizada.
Finalmente, es necesario cambiar los coeficientes del filtro en dominio de tiempo. Las figuras
precedentes muestran las respuestas de frecuencia de magnitud que son hasta funciones de
frecuencia y para las cuales el cambio de la fase cero se especifican. Estas corresponden a
coeficientes filtros en real valores, los cuales son hasta funciones de tiempo pero no son
causales. Esto se puede cambiar al introducir un retraso e indicación de coeficientes desde 0 a
32 más que desde -16 a 16. Esto no tiene ningún efecto en la magnitud pero introduce un cambio
en una fase linear en la respuesta de la frecuencia del filtro.
3.2.3 Diseño de Filtros FIR de Paso Alto, Paso de Banda y Paro de Banda Utilizando el Método
de Ventana
La característica del filtro de paso alto ideal, la cual se muestra en la Figura 3.24 se describe por
3.46
[Ecuación]
En el rango [Ecuación]
.
[Ecuación]
3.47
para [Ecuación] .
La característica del filtro de paso de banda ideal, la cual se muestra en la Figura 3.25 se
describe por
[Ecuación]
3.48
En el rango [Ecuación] .
[En esta parte se encuentra un diagrama de la figura 3.25]
La característica del filtro de paro de banda ideal, la cual se muestra en la Figura 3.26 se
describe por
3.50
[Ecuación]
En el rango [Ecuación] .
[Ecuación]
3.51
para [Ecuación] .
Los filtros del paso alto, paso de banda y paro de banda pueden ser diseñados utilizando el
método de la ventana descritos para el filtro de paso bajo, pero el sustituir las Ecuaciones
(3.47), (3.49) o (3.51) para la Ecuación (3.45).
Los siguientes ejemplos ilustran la implementación en tiempo real de los filtros FIR utilizando C y
las funciones desde la biblioteca DSP CMSIS para el procesador ARM Cortex-M4. Diferentes
métodos severos de valorar la respuesta de frecuencia de magnitud de un filtro son presentados.
Ejemplo 3.10
Filtro de Media Móvil ( stm32f4_average_intr . c ) .
3.52
en donde la x (n) representa la n th muestra de una señal de entrada y y (n), la n th muestra del
filtro de salida. El filtro de media móvil es un ejemplo de circunvolución utilizando un filtro muy
simple de kernel, o respuesta impulsiva, comprimiendo los coeficientes N cada cual es igual a
1/N. La Ecuación (3.52) puede ser pensada como un caso particularmente simple de una suma de
circunvolución más general, implementada por un filtro FIR e introducida en la Sección 3.1, esto
es,
[Ecuación]
3.53
en donde los coeficientes del filtro FIR h (i) son muestras de una respuesta de impulso del filtro,
y en caso de mover el filtro de media, cada uno es igual a 1/N. Hasta en donde se sabe en
cuando a la implementación, en n th el instante de muestreo, podríamos
1. Multiplicar N pasado las muestras de entrada individualmente por 1/N y la suma de productos
N,
3. Mantener una media móvil al agregar una muestra nueva de entrada (multiplicada por 1/N) a
y sustraer el ( n +N + 1 ) th la muestra de entrada ( multiplicada por 1/N) desde una ejecución
total.
[Ecuación]
3.54
es una instancia de una expresión general para un filtro recursivo o IIR
[Ecuación]
3.55
El programa stm32f4_average_intr . c, mostrado en la Lista 3.11, utiliza las primeras de estas
opciones, aun así no pudiere ser el más eficiente computacionalmente. El valor de N definido
cerca del comienzo del archivo de origen, determina el número de las muestras de entrada
previas a ser medias.
[Cuadro de fórmulas] Lista 3.1 Programa stm32f4_average_intr . c.
Varios métodos diferentes existen por el cual las características de filtros de media móvil de
cinco puntos pueden ser demostrados. Un archivo de test mefsin.wav contiene una grabación de
voz corrompida por la adición de un tono sinusoidal. Escucha a este archivo utilizando Goldware,
Windows Media Player, o similar. Entonces conecta la tarjeta de sonido de la Pc en el enchufe
EN LÍNEA (verde) en la fuera de línea en la tarjeta de audio Wofson y escucha la señal de test
filtrada. Con el programa stm32f4_average_intr . c ejecución, necesitarás encontrar que el tono
sinusoidal ha sido bloqueado y que los sonidos de voz apagada. Ambas observaciones son
consistentes con el filtro teniendo una respuesta de frecuencia de paso bajo.
Un método más rigoroso de valorar la respuesta de frecuencia de magnitud del filtro es utilizar
un generador de señal y un osciloscopio o analizador espectral para medir su ganancia en
frecuencias individuales diferentes. Utilizando este método, es para identificar directamente dos
muescas distintas en la respuesta de frecuencia de magnitud a 1600 Hz (correspondiente al tono
en el archivo de test mefsin.wav) y a 3200 Hz.
[Ecuación]
3.56
Evaluar el rango de la frecuencia [Ecuación] , en donde [Ecuación] , es frecuencia en
radians por segundo, y T, es el período de muestreo en segundos. En este caso,
[Ecuación]
3.57
y por lo tanto
[Ecuación]
3.58
La respuesta de magnitud teórica del filtro, es ilustrada en la Figura 3.27. Esta es la magnitud de
un Dirichlet, o sinc periódico, función.
Magnitud (dB)
Frecuencia (Hz)
Figura 3.27 La respuesta de frecuencia de magnitud teórica de cinco puntos del filtro de media
móvil (frecuencia de muestreo 8 kHz).
Ejemplo 3.11
Filtro de Media Móvil con un Ruido Pseudo Aleatorio Generado Internamente como Entrada
(stm32f4_average_prbs_intr .c).
Figura 3.28 La respuesta de frecuencia de magnitud del filtro de media móvil de cinco puntos
demostrados utilizando el programa stm32f4_average_prbs_intr . c y mostrado utilizando (a)
osciloscopio Rigol DS1052E (trazo de hasta abajo) y (b) Goldwave.
Ejemplo 3.12
Identificación de un Filtro de Media Móvil con la Respuesta de Frecuencia del Filtro
Utilizando un Filtro Adaptativo ( tm4c123_sysid_CMSIS_intr . c ) ).
EN LÍNEA
FUERA DE LÍNEA
EN LÍNEA
FUERA DE LÍNEA
Programa tm4c123_average_intr . c
Programa tm4c123_sysid_CMSIS_intr . c
Figura 3.29 Conexión del diagrama para el uso del programa tm4c123_sysid_CMSIS_intr .c para
identificar las características de un filtro de media móvil implementado utilizando dos conjuntos
de hardware.
Deberías observar algo similar a lo que se muestra en las Figuras 3.30 y 3.31, esto es, la
respuesta impulsiva y la respuesta de frecuencia de magnitud identificadas por el filtro
adaptativo.
[En esta parte se encuentra un diagrama de la figura 3.30]
Valor de muestra
Tiempo (s)
Figura 3.30 La respuesta impulsiva del filtro de media móvil de cinco puntos identificados
utilizando dos launchpads y amplificadores de audio y los programas tm4c123_sysid_CMSIS_intr .
cy
Magnitud (dB)
Frecuencia (Hz)
Figura 3.31 La respuesta de frecuencia de magnitud del filtro de media móvil de cinco puntos
identificados utilizando el programa dos conjuntos de hardware y programas
tm4c123_sysid_CMSIS_intr .c y tm4c123_average_intr . c.
La respuesta impulsiva mostrada en la Figura 3.30 difiere desde la respuesta impulsiva teórica
(rectangular) del filtro de media móvil porque lo combina con las respuestas de la reconstrucción
y los filtros de antialising en dos códec AIC3104 y el ac acoplamiento de las conexiones EN LÍNEA
y FUERA DE LÍNEA en los amplificadores de audio. Las oscilaciones de antes y luego de las
transiciones en la forma de onda son similares a las aquellas identificadas en el Ejemplo 2.52 y
mostradas en la Figura 2.47.
Ejemplo 3.14+
Identificación de la Respuesta de Frecuencia del Filtro de Media Móvil Utilizando un Solo
Amplificador de Audio (tm4c123_sysid_average_CMSIS_intr . c).
EN LÍNEA
FUERA DE LÍNEA
EN LÍNEA
FUERA DE LÍNEA
#define N 5
a leer
#define N 11
Construye y ejecuta el programa y verifica que la respuesta de frecuencia del filtro haya
cambiado, tal como se muestra en la Figura 3.33. Alternativamente, puedes realizar un cambio
similar al número de puntos en el filtro de media móvil en el programa
tm4c123_sysid_average_CMSIS_intr . c.
[En esta parte se encuentra un diagrama de la figura 3.33]
Figura 3.33 La respuesta de frecuencia de magnitud de un filtro de media móvil de once puntos
implementada utilizando el programa tm4c123_average_prbs_intr .c y demostrado utilizando
Goldwave.
La respuesta de frecuencia del filtro de media móvil de once puntos posee la misma forma que
la del filtro de media móvil de cinco puntos pero las muescas de la respuesta de la frecuencia
ocurren en un entero de múltiples de (8000/11) Hz esto es en 727, 1455, 2182, y 2909 Hz.
La respuesta de la frecuencia del filtro puede cambiarse por los valores relativos de los
coeficientes. Modifica el programa tm4c123_sysid_average_CMSIS_intr . c de nuevo, cambiar el
comando preprocesador y las declaraciones de programa que leen
#define N 11
float h [N] ;
a leer
#define N 5
float h [N] = {0.0833, 0.250, 0.333. 0.2500, 0.0833} ;
Figura 3.34 Respuesta de frecuencia de magnitud de filtro de media móvil de cinco puntos con
una ventana Hanning implementada, utilizando el programa stm32f4_average_prbs_intr . c y
demostrados utilizando Goldwave.
El punto N de la ventana Hanning se describe por la ecuación
[Ecuación]
3.59
Y por lo tanto, para n = 0 y n = N, w (n) = 0. Ya que no existe punto en incluir dos coeficientes
con valor de cero en la operación de filtración FIR, en este ejemplo, los cinco valores sin cero de
la función de la ventana Hanning de siete puntos, más que los cinco valores, incluyendo los dos
valores de cero, de la función de la ventana Hanning de cinco puntos, han sido utilizados.
El punto más importante, o quizá obvio, ilustrado por este ejemplo, sin embargo, es que un filtro
FIR de coeficiente cinco puede demostrar características de respuesta de frecuencia diferentes,
dependiendo en los valores de sus coeficientes. La respuesta de frecuencia de magnitud teórica
del filtro puede ser hallada al tomar el DTFT de sus coeficientes.
[Ecuación]
3.60
Por tanto,
[Ecuación]
3.61
Las respuestas de frecuencia medidas del filtro de cinco puntos de su versión de ventana puede
ser interpretada como se demuestran las características del dominio de frecuencia de la ventana
rectangular y Hanning, tal como se discute en la Sección 3.2.2. Especificamente, la ventana de
Hanning posee un lóbulo principal más amplio y relativamente más pequeños lóbulos laterales
que una ventana rectangular.
Ejemplo 3.14
Filtro FIR con Coeficientes de Filtro Específicos en Archivos de Encabezado Separados
(stm32f4_fir_intr . c y tm4c123_fir_intr . c).
#include ave5.h
a leer
#include lp55.h
# include ave5.h
a leer
#include bs2700 .h
Figura 3.35 Ventana MATLAB fdatool correspondiente para diseñar el filtro centrado a 2700 Hz
con paro de banda FIR.
Figura 3.36 Ventana MATLAB fdatool correspondiente para diseñar el filtro centrado a 1750 Hz
con paso de banda FIR.
3.3.2 Generar Archivos de Encabezamiento con Coeficiente de Filtro FIR Utilizando MATLAB
Ejemplo 3.15
Implementación FIR con el Ruido Pseudo Aleatorio como Entrada
(tm4c123_fir_prbs_intr . c).
Construir y ejecutar el programa y verificar que la señal de la salida sea un ruido pseudo
aleatorio filtrado por un filtro de paro de banda FIR centrado a 2700 Hz. Esta señal de salida se
muestra utilizando GoldWave y utilizando la función FFT de un osciloscopio Rigol Ds1052E en la
Figura 3.37.
Editar el archivo origen C tm4c123_fir_prbs_intr . c para incluir y testear los diferentes archivos
de coeficiente representando diferentes filtros FIR. Cada uno de los siguientes archivos de
coeficiente, excepto comb14.h, contiene 55 coeficientes.
La Figura 3.38 (a) muestra el ruido de la salida filtrado por un filtro FIR con dos bandas de paso,
utilizando el archivo de coeficiente pass2b.h. La Figura 3.38 (b) muestra que el ruido de la salida
filtrado por un paso alto de un filtro FIR utilizando el archivo de coeficiente hp55.h. En casos con
filtros de paso alto y paro de banda en particular, la característica de paso bajo del filtro de
reconstrucción en el códec AIC3104 es aparente.
Ejemplo 3.16
Filtro FIR con un Ruido Pseudo aleatorio Generado Internamente como Entrada y Salida
Almacenado en Memoria (stm32f4_fir_prbs_buf_intr . c ).
Este ejemplo extiende al anterior al almacenar las 256 muestras más recientes en la salida en
memoria. El programa stm32f4_fir_prbs_buf_intr . c se muestra en la Lista 3.23. El archivo del
coeficiente bp1750.h representa un coeficiente 81 de filtro de paso de banda centrado a 1750
Hz.
Construir y ejecutar el programa. Verificar que la señal de la salida sea un ruido con banda
limitada. Luego para el programa y guarda los contenidos en formación ynbuffer al archivo de
datos al escribir
Magnitud (dB)
Frecuencia (Hz)
Valor de la Muestra
Tiempo
Figura 3.41 muestra la magnitud del FFT de los coeficientes de filtro pb1750.h para
comparación.
Magnitud (dB)
Frecuencia (Hz)
Figura 3.41 Magnitud del FFT de los coeficientes de filtro utilizados en el programa
stm32f4_fir_prbs_buf_intr . c.
Ejemplo 3.17
Efectos en la Voz o Música Utilizando Tres Filtros de Paso Bajo FIR
(tm4c123_fir3lp_intr . c).
Como se dijo, el programa configura el códec AIC3104 para aceptar la entrada desde el enchufe
(azul) EN LÍNEA en el amplificador de audio. Para testear efecto de los filtros utilizando un
micrófono como un dispositivo de entrada, cambia la declaración del programa que lee
Tm4c123_aic3104_init (FS_8000_HZ,
AIC3104_LINE_IN,
I0_METHOD_INTR,
PGA_GAIN_6_DB ) ;
a leer
tm4c123_aic3104_init (FS_8000_HZ,
AIC3104_MIC_IN,
I0_METHOD_INTR,
PGA_GAIN_6_DB ) ;
Figura 3.42 Una onda cuadrada de 200 Hz pasada a través de tres diferentes filtros de paso bajo
implementados utilizando el programa tm4c123_fir3lp_intr . c.
La respuesta de la frecuencia de magnitud de los tres diferentes filtros puede ser observada
utilizando Goldwave y al cambiar la declaración del programa que lee
X [0] = input_left ;
a leer
Ejemplo 3.18
Implementación de Cuatro Diferentes Filtros: Paso Bajo, Paso Alto, Paso de Banda, y Paro de
Banda (tm4c123_fir4types_intr . c ).
Este ejemplo es muy similar al previo, ya que ilustra los filtros FIR de efectos de paso bajo, paso
alto, paso de banda y paro de banda. El tipo del filtro puede ser cambiado mientras que el
programa tm4c123_fir4types_intr . c se ejecuta utilizando el switch SW1 en la launchpad. Todos
los filtros de coeficiente que son cuatro 81 fueron diseñados utilizando la función MATLAB. Estos
son
Como se muestra en el previo ejemplo, los efectos de los cuatro filtros diferentes en la entrada
musical son particularmente llamativos. La Figura 3.43 muestra la respuesta de la frecuencia de
magnitud del paro de banda FIR centrado en un filtro de 790 Hz, testeado utilizando el archivo
stereonoise.wav utilizado a través de una tarjeta de sonido en una PC como entrada.
Ejemplo 3.19
Dos Filtros con Muescas para Recuperar una Grabación con Voz Corrompida
(tm4c123_notch_2_intr . c).
Este ejemplo ilustra el uso de dos filtros FIR de muescas (paro de banda) en series para
recuperar una grabación con una voz corrompida por la adición de dos señales sinusoidales en
frecuencias de 900y 2700 Hz. El programa tm4c123_notch2_intr .c se muestra en la Lista 3.28. El
archivo de cabecera notch2_coeffs. h contiene los coeficientes para dos filtros FIR de muesca
(paro de banda) en formaciones h900 y h2700. La salida del primer filtro con muesca, centrado
en 900 Hz, se utiliza como entrada en el segundo filtro con mueca, centrado a 2700 Hz.
Construido y ejecutar el programa. El archivo corrupt.wav contiene una grabación con voz
corrompida por la adición de 900 y 2700 Hz tonos sinusoides. Escucha a este archivo utilizando
GoldWave, Windows Media Player, o similar. Luego conecta la tarjeta de sonido en la salida de la
PC al enchufe (azul) EN LÍNEA en el amplificador de audio y escucha a la señal de testeo filtrada
en las conexiones (negro) FUERA DE LÍNEA o (verde) HP SALIDA. El switch SW1 en la launchpad
puede ser utilizada para seleccionar la salida de ya sea los primeros o segundos filtros de
muesca. Compara estos resultados de este ejemplo con aquellos obtenidos en el Ejemplo 3.10 en
el cual una muesca en la respuesta de frecuencia de magnitud de un filtro de media móvil fue
explotado para poder filtrar un tono sinusoide no deseado. En este caso, la voz filtrada puede
sonar más brillante ya que los filtros de muesca utilizados aquí no poseen característica en
general de paso bajo. La Figura 3.44 muestra la salida del filtro utilizando un ruido pseudo
aleatorio como una señal de entrada.
Ejemplo 3.20
Codificación de la Voz Utilizando Filtro y Modulación (tm4c123_scrambler_intr . c).
Este ejemplo ilustra una codificación y decodificación de un esquema de voz. El enfoque hace
uso de algoritmos básicos para filtrar y modular. La modulación fue presentada en el ejemplo AM
en el Capítulo 2. Con una voz en la entrada, la resultante salida es una voz codificada. La voz
decodifcada original es recuperada cuando la voz codificada se utiliza como entrada a un sistema
segundo ejecutando el mismo programa. El método de codificación utilizado es comúnmente
referido a una inversión de frecuencia. Toma un rango de audio, en este caso 300 Hz a 3 kHz, y
“dobla” su cercanamente señal carrier 3.3 kHz. La inversión de frecuencia de obtiene al
multiplicar (modular) la entrada de audio por la señal carrier, causando un cambio en la
frecuencia espectra con bandas laterales superiores e inferiores. En la banda lateral inferior, la
cual representa un rango de voz audible, los tonos bajos son tonos altos, y viceversa.
3 kHz Filtro LP
A Multiplicador B
3 kHz Filtro Lp
C Salida
Entrada
3.3 kHz
generador sinusoidal
Construir y ejecutar el programa. Primero, testea el programa utilizando una onda sinusoidal de
2 kHz como entrada. La salida resultante será una señal de banda lateral más baja, a 1.3 kHz. La
señal de la banda lateral superior en 5.3 kHz es filtrada por el segundo filtro de paso bajo. Por la
variación de la frecuencia de la entrada sinusoidal, deberías permitir el verificar que las
frecuencias de entrada en el rango 300-300 Hz aparecen como frecuencias de salida en el rango
invertido 3000-300 Hz.
Un segundo sistema hardware ejecutándose al mismo tiempo puede ser utilizado para recuperar
la señal original (simulando el final recipiente). Utiliza la salida de la primera tarjea de audio
como entrada en la segunda. Para poder testear la codificación y decodificación utilizando la voz
desde un micrófono como la entrada, cambia la declaración del programa que lee
tm4c123_aic3104_init (FS_8000_HZ,
AIC3104_LINE_IN,
I0_METHOD_INTR,
PGA_GAIN_6_DB ) ;
a leer
tm4c123_aic3104_init (FS_8000_HZ,
AIC3104_MIC_IN,
I0_METHOD_INTR,
PGA_GAIN_6_DB ) ;
en el extremo de transmisión.
Ejemplo 3.21
Filtro FIR implementado utilizando DMA-basado en e/s (tm4c123_fir_dma.c y
stm32f4_fir_dma. c.)
Ejemplo 3.22
Filtro FIR implementado utilizando una Función Biblioteca CMSIS DSP
(tm4c123_fir_prbs_CMSIS_dma. c y stm32f4_fir_prbs_CMSIS_dma. c ).
Ejemplo 3.23
Comparación de los Tiempos de Ejecución para Tres Diferentes Implementaciones de Filtro
FIR
(tm4c123_fir3ways_intr . c).
Un método directo para medir el tiempo tomado para calcular cada muestra de salida con filtro
FIR es para alternar una salida GPIO pin establecida en alto en la declaración del programa
inmediatamente precediendo computación y restableciéndolo en bajo en la declaración del
programa inmediatamente siguiendo a la computación. La mayoría del ejemplo en los programas
en este capítulo lleva a cabo esto. En la TM4C123 Launchpad, GPIO pin PE2 se utiliza, y en la
STM32F407 Descubrimiento, GPIO pin PD15
se utiliza.
[En esta parte se encuentra dos diagramas de la figura 3.46]
Figura 3.46 Pulsos en la salida en GPIO pin PE2 por los programas tm4c123_fir_prbs_intr . c y
tm4c123_fir_prbs_dma. c.
La duración de los pulsos en la salida en GPIO pin PE2 por el programa tm4c123_fir_prbs_dma. c,
el cual utiliza DMA-basado e/a, indica el tiempo tomado para calcular un bloque de la salida
BUFSIZE en los valores de muestreo. Estos pulsos se repiten cada BUFSIZE * us. Mientras más
alto, así será el orden del FIR implementado por este programa (como se determina por el
archivo de cabecera de coeficiente utilizado), mientras más tardado tome calcular la salida
BUFSIZE en los valores de muestreo. La duración del pulso mostrado en la Figura 3.46 es de 3.52
ms, de lo cual, dado que el valor de BUFSIZE en este ejemplo es igual a 256, representa el
tiempo de 13.7 us para calcular el valor de cada muestra de salida.
Las declaraciones del programa utilizadas para implementar la operación de filtración FIR,
afecta su tiempo de ejecución. El programa tm4c123_fir3ways_intr . c, mostrado en la Lista
3.35, otorga al usuario la opción de cambiar entre diferentes implementaciones del filtro FIR
mientras que el programa está siendo ejecutado. Al utilizar el switch SW1 del usuario en la
TM4C123 LaunchPad, el usuario puede ciclar a través de tres alternativas.
El primer método de implementación es directo y utiliza dos curvas separadas. La primer curva
se utiliza para poder calcular la suma de la convulsión de las muestras de entrada previas de N,
almacenadas en la línea de retraso del filtro x y su filtro N, coeficientes , poniendo el resultado
en yn. La segunda curva
Construir y ejecutar el programa y observar los pulsos de salda en GPIO pin PE2 utilizando un
osciloscopio. Presiona el switch user SW1 en la launchpad para ciclar a través de tres diferentes
métodos de implementación. En caso de un filtro FIR coeficiente 18, definido en el archivo de
cabecera bp1750. H, los tres diferentes métodos de implementación toman 13.7, 16.0, y 10.2 us
para calcular cada valor de muestreo de salida.
Ejemplo 3.24
Comparación de los Tiempos de Ejecución para los Filtros FIR Implementados en C utilizando
la función de biblioteca CMSIS DSP arm_fir_f32 ().
La función biblioteca CMSIS DSP arm_fir_f32 () es un método eficiente para implementar un filtro
FIR y fue demostrado en el Ejemplo 3.32. La duración de la salida del pulso en GPIO pin PE2 por
el programa tm4c123_fir_prbs_CMSIS_dma. c es 936 us ( BUFSIZE = 256 ), indicando que toma
aproximadamente 3.6 us para calcular el valor de cada muestra de salida. Es más eficiente
computacionalmente hablando, implementar un filtro FIR utilizando DMA-basado e/a para
proveer bloques de datos en la entrada para la función biblioteca CMSIS
arm_fir_f32 (). Sin embargo, este enfoque se lleva a cabo en mayor retraso en tiempo real
(latencia) que a un enfoque de muestra por muestra con interrupción basada.
Capítulo 4
Filtros de Respuesta Infinita al Impulso
El filtro FIR, visto en el Capítulo 3 no posee un equivalente análogo. En este capítulo, vemos el
filtro de respuesta infinita al impulso (IIR) que, comúnmente, hace uso del vasto conocimiento,
el cual existe concerniente con los filtros análogos. El procedimiento de diseño descrito en este
capítulo, involucra la conversión de un filtro análogo a un filtro discreto de equivalencia. Ya sea
la técnica de transformación invariancia o bilineal (BLT) puede ser utilizada para hacer efectuar
tal conversión. Ambos procedimientos de convertir la función de transferencia de un filtro
análogo en el dominio s en una función equivalente de transferencia en tiempo discreto en el
dominio z.
4.1 Introducción
4.1
[Ecuación]
o, equivalentemente,
[Ecuación]
4.2
Esta ecuación recursiva con diferenciación, representa a un filtro IIR. La salida y (n), en instante
n, no depende solamente en la entrada actual x (n), en instante n, y en entradas pasadas x ( n-1
), x ( n-2 ), …, x ( n-M ), pero también en salidas pasadas y ( n-1 ), y ( n-2 ),…
y ( n-N ). Si asumimos todas las condiciones iniciales para que sean cero en Ecuación ( 4.2 ), su
transformada z es
4.3
[Ecuación]
Varias estructuras diferentes pueden ser utilizadas para representar un filtro IIR.
Utilizando la estructura de forma directa I, mostrada en la Figura 4.1, el filtro en Ecuación ( 4.2
) puede ser realizada. Para un filtro N th-order, esta estructura contiene elementos de retraso
2N, cada uno representado por un bloque marcado z-1. Por ejemplo, un filtro de segunda orden
con N = 2 contendrá cuatro elementos de retraso.
La estructura de forma directa II, mostrada en la Figura 4.2 es una de las estructuras
comúnmente más utilizadas para representar un filtro IIR. Requiere la mitad de la cantidad de
elementos de retraso como forma directa I. Por ejemplo, un filtro de segundo orden requiere dos
elementos de retraso, como el contrario de cuatro con la estructura de forma directa I. Desde el
diagrama de bloque de la Figura 4.2, se puede observar que
4.6
[Ecuación]
y que
4.7
[Ecuación]
Tomando las transformadas z de las Ecuaciones ( 4.6 ) y ( 4.7)
[Ecuación]
4.8
y por lo tanto,
[Ecuación]
4.9
y
[Ecuación]
4.10
Así
[Ecuación]
4.11
Las cuales son similares a la Ecuación ( 4.5 )
La estructura del filtro IIR de forma directa puede ser representada por Ecuaciones de
diferenciación ( 4.6 ) y ( 4.7 ), tomando lugar de la Ecuación ( 4.2 ). Las ecuaciones ( 4.6 ) y (
4.7 ) pueden ser utilizadas para implementar un filtro IIR en un programa de computación.
Inicialmente, w (n), w ( n-1 ), w ( n-2 ), … son establecidas en cero. En el instante n, una nueva
muestra x (n) es adquirida. La ecuación ( 4.6 ) se utiliza para resolver para w (n) y luego la salida
y (n) se calcula utilizando la Ecuación ( 4.7 ).
La estructura de transposición de forma directa II, mostrada en la Figura 4.3 es una versión
modificada de la estructura de forma directa II y requiere el mismo número de elementos de
retraso.
Desde la inspección del diagrama de bloque, es aparente que la salida del filtro puede ser
calculada utilizando
4.12
[Ecuación]
4.13
[Ecuación]
y
[Ecuación]
4.14
y de la misma manera hasta que finalmente
[Ecuación]
4.15
Utilizando la Ecuación ( 4.13 ) para hallar w0 ( n-1 ),
[Ecuación]
4.16
La Ecuación ( 4.12 ) se convierte en
[Ecuación]
4.17
[Ecuación]
4.18
La Ecuación ( 4.12 ) se convierte en
[Ecuación]
4.19
Continuando con este procedimiento hasta que la Ecuación ( 4.15 ) haya sido utilizada, puede ser
mostrada que la Ecuación ( 4.12 ) es equivalente a la Ecuación ( 4.2 ) y por lo tanto, el diagrama
de bloque de la Figura 4.3 es equivalente a aquellos de las Figuras 4.1 y 4.2. La estructura
transpuesta implementa los ceros del primer filtro y luego los polos, en donde la estructura de
forma directa II implementa los polos de primero.
4.2.4 Estructura/Desarrollo en Cascada
[Ecuación]
4.20
en términos de funciones de transferencia de primer y segundo orden, Hi (z). Esta estructura de
cascada (o series) se muestra en la Figura 4.4. Una función de transferencia en general puede
ser representada con funciones de transferencia de cascada. Para cada sección, ya sea la
estructura de forma directa II o su versión de transposición puede ser utilizada. La Figura 4.5
muestra una estructura IIR de cuarto orden en términos de dos formas directas II en secciones de
segundo orden en cascada. La función de transferencia H ( z ), en términos de funciones de
transferencia de segundo orden en cascada, en este caso pueden ser escritas como
[Ecuación]
4.21
Figura 4.5 Filtro IIR de cuarto orden con dos secciones en cascada de forma directa II.
[Ecuación]
4.22
Como puede ser verificada en la Figura 4.5. Desde un punto de vista matemático, el orden
correcto de los factores de numerador y denominador no afecta el resultado de salida. Sin
embargo, desde un punto de vista práctica, el orden correcto de cada sección de segundo orden
puede minimizar el ruido de cuantificación. Observa que la salida de la primera sección, y1 (n),
convierte la entrada a la segunda sección. Con un resultado de salida intermedia, almacenada en
uno de los registros, un truncamiento prematuro de la salida intermedia se convierte en
negigible. Un ejemplo de programación, más adelante en este capítulo ilustraremos la
implementación de un filtro IIR utilizando una forma directa de secciones de cascada de segundo
orden II.
4.2.5 Estructura de Forma Paralela
[Ecuación]
4.23
la cual puede ser obtenida utilizando una expansión de fracción parcial (PFE) de la Ecuación (
4.11 ). Esta estructura de forma paralela se muestra en la Figura 4.6. Cada una de las funciones
de transferencia pueden ser ya sea de función de primera o segunda orden.
[Ecuación]
4.24
Por ejemplo, la función de transferencia de cuarto orden, H (z) en Ecuación ( 4.94 ) se convierte
[Ecuación]
4.25
Esta estructura paralela de cuarto orden se representa en términos de dos secciones de forma
directa II como se muestra en la Figura 4.7. Desde tal figura, la salida y (n) puede ser expresada
en términos de la salida de cada sección, o
[Ecuación]
4.26
Típicamente, los filtros de N th-orden son implementados como secciones de cascadas de
segundo orden.
Este método de diseño de filtro IIR se basa en el concepto de trazar cada polo del plano s de un
filtro en tiempo continuo a un polo de plano z correspondiente, utilizando la sustitución
[Fórmula] para ( s+Pk ) en H (s). Esto puede lograrse por varios métodos diferentes. La PFE de H
(s) y la sustitución [Fórmula] para ( s+Pk ) puede involucrar mucha manipulación algebraica. Un
método equivalente de crear la transformación es usar tablas de Laplace y transformaciones z.
Generalmente, las tablas de la lista de transformaciones Laplace de las funciones de
transferencia con dominio s, y sus respuestas de impulso correspondiente. Las tablas de las
transformaciones z pueden ser utilizadas para hallar la función correspondiente de la
transferencia z a una respuesta impulsiva. El método se refiere al impulso invariante por la
equivalencia de las respuestas impulsivas del filtro digital (descrita por la función de
transferencia z) y el prototipo análogo (descrito por la función de transferencia s). La relación
específica entre las dos respuestas impulsivas es que una comprende muestras de una versión
escalada de la otra. El desempeño de los dos filtros pueden diferir, sin embargo, dependiendo en
cuán bien detallado de la respuesta impulsiva continua del prototipo análogo es representado
por su forma de muestreo. Como será ilustrado en la Sección 4.5 si la frecuencia de muestreo del
filtro digital no es lo suficientemente alto para capturar la respuesta de impulso en tiempo
continuo en detalle, entonces las características de frecuencia alta del filtro de prototipo no
pueden ser reproducidas en la implementación digital.
La BLT [por sus siglas en inglés] es la técnica comúnmente más utilizada para transformar un
filtro análogo en un filtro digital. Provee rastreo uno a uno desde el plano análogo s al plano
digital z, utilizando la sustitución
[Ecuación]
4.27
La constante k en Ecuación ( 4.27 ) comúnmente es elegida como K = 2/T, en donde T representa
el período de muestreo en segundos, del filtro digital. Otros valores para K pueden ser
seleccionados, como se describe en la sección 4.4.1. La BLT permite lo siguiente:
1. la región izquierda en el plano s, correspondiente a < 0, traza dentro del círculo unitario en
el plano z.
2. La región derecha en el plano s, correspondiente a < 0, traza fuera del círculo unitario en el
plano z.
3.La axis imaginaria en frecuencias análogas y digitales, respectivamente. Con s = j A y
[Ecuación], Ecuación ( 4.27 ) se convierte
[Ecuación]
4.28
Utilizando la fórmula de Euler para seno y coseno en términos de funciones exponenciales
complejas, [símbolo] A en la Ecuación (4.28) se transforma
[Ecuación]
4.29
A lo cual se relaciona con la frecuencia análoga [símbolo] A a la frecuencia digital [símbolo] D.
Esta relación se traza en la Figura 4.8 para valores positivos de [símbolo] A. La comprensión no
linear del rango de frecuencia análoga entera al rango de frecuencia digital desde cero a
[símbolo] s/2 se refiere como frecuencia deformada [Ecuación].
Figura 4.8 Relación entre frecuencias análogas y digitales, [símbolo] A y [símbolo] D, debido a la
frecuencia deformada en la transformada bilineal.
[Ecuación]
4.30
H (s) puede ser elegida según con la teoría de diseño de filtro análogo, por ejemplo,
Butterworth, Chebyshev, Bessel, o elíptica. Es común escoger K = 2/T. Alternativamente, es
posible antes deformar la respuesta de frecuencia de filtro análogo en tal forma que la
transformada bilineal trasca una frecuencia análoga [símbolos], en el rango [símbolos] para
exactamente la misma frecuencia digital [símbolos]. Esto se logra al escoger
[Ecuación]
4.31
4.5 Ejemplos de Programación
Los ejemplos en esta sección introducen e ilustran la implementación de filtros IIR. Muchos
enfoques diferentes para diseñar filtros IIR son posibles, y más a menudo, los filtros IIR son
diseñados con el aid de herramientas software. Antes de utilizar tal paquete de diseño, y para
poder apreciar de mejor forma lo que tal paquetes realizan, un ejemplo simple será llevado a
cabo para ilustrar algunos de los principios básicos de diseño de filtro IIR.
[Ecuación]
4.32
Magnitud (dB)
Frecuencia (Hz)
Fase
Frecuencia (Hz)
Figura 4.9 (a) Respuesta de frecuencia de magnitud del filtro H (s). (b) Respuesta de fase de
filtro H (s).
Utilizando MATLAB ®, los coeficientes de esta función con transferencia s puede ser generada al
escribir
Empezando con la función de transferencia del filtro de la Ecuación (4.32), podemos hacer uso
de la transformación par Laplace
[Ecuación]
4.33
(la función de transferencia s del filtro es igual a la transformada Laplace de su respuesta
impulsiva) y usar los valores
[Ecuación]
Por lo tanto, la respuesta impulsiva del filtro en este ejemplo es dada por
[Ecuación]
4.34
La transformada z par
[Ecuación]
4.35
Rinde la siguiente función de transferencia en tiempo discreto cuando sustituimos por [símbolo],
A, a y establecemos ts = 0.000125 en Ecuación (4.35).
[Ecuación]
4.36
Desde H (z), la siguiente ecuación de diferencia puede ser derivada.
[Ecuación]
4.37
Con la referencia a la Ecuación (4.2), podemos observar que a1 = 0.71624315, a2 = -0.879131, b0
= 0.0000, y b1 = 0.48255.
Para poder aplicar el método invariante impulsivo utilizando MATLAB, tipo
>> [ b, a ] = cheby1 ( 2, 2, 2 * pi * 1500, ‘s’ ) ;
>> [bz, az] = impinvar ( b, a, 8000 ) ;
Este filtro en tiempo discreto posee la propiedad, la cual es una respuesta impulsiva en tiempo
discreto h (n) es igual a las muestras de respuesta impulsiva en tiempo continuo h (t), (escalada
por un período de tiempo, ts), como se muestra en la Figura 4.10. Aunque es evidente en la
Figura 4.10 que la respuesta impulsiva en tiempo discreto h (n) decae más o menos a cero, esta
secuencia no es finita. Quizá vale resaltar que, contraintuitivamente, la definición de un filtro
IIR no es que su respuesta impulsiva es finita en duración pero en vez, esto hace uso de valores
de muestreo previos en la salida para poder calcular su salida actual. En teoría, es posible para
un filtro IIR tener una respuesta finita impulsiva. Mientras que la respuesta impulsiva de un filtro
FIR es dada explícitamente por su set finito de coeficientes, los coeficientes de un filtro IIR son
utilizados es una ecuación recursiva (4.1) para determinar su respuesta impulsiva.
Amplitud
Tiempo (ms)
Figura 4.10 Respuestas impulsivas h (t) (escaladas por un período de muestreo ts) y h (n) de filtro
en tiempo continuo H (s) y su implementación digital invariante impulsiva.
Ejemplo 4.1
Implementación de un Filtro IIR Utilizando Secciones de Forma Directa de Segunda Orden de
Cascada II (stm32f4_iirsos_intr. c).
[Ecuación]
4.38
Y
[Ecuación]
4.39
Con referencia a la Figura 4.5 y la (4.18), los coeficientes son almacenados por el programa
como un [ i ] [ 0 ], a [ i ] [ 1 ], a [ i ] [ 2 ], b [ i ] [ 0 ], b [ i ] [ 1 ], y b [ i ] [ 2 ], respectivamente.
w [ i ] [ 0 ] y w [ i ] [ 1 ] corresponden a wi ( n-1 ) y wi ( n-2 ) en Ecuaciones (4.38) y (4.39).
[Cuadro de fórmulas]: Lista 4.1 programa del filtro IIR utilizando secciones de segunda orden
en cascada (stm32f4_iirsos_intr. c)
Ejemplo 4.2
Implementación de un Filtro IIR Utilizando Secciones de Forma Directa Transpuesta de
Segunda Orden de Cascada II (stm32f4_iirsostr_intr. c).
Una estructura de forma directa transpuesta II puede ser implementada utilizando el programa
stm32f4_iirsos_intr. c simplemente al reemplazar las declaraciones del programa
Ejemplo 4.3
Estimando la Respuesta de la Frecuencia de un Filtro IIR Utilizando el Ruido Pseudo aleatorio
como Entrada (tm4c123_iirsos_prbs_intr. c).
Ejemplo 4.4
Estimando la Respuesta de la Frecuencia de un Filtro IIR Utilizando una Secuencia de
Impulsos como Entrada (tm4c123_iirsos_delta_intr. c).
La Figura 4.13 muestra la señal de salida análoga generada por el programa, capturada
utilizando un osciloscopio Rigol DS1052E conectado a uno de los ganchos de alcance en el
amplificador de audio. El trazo superior muestra la respuesta impulsiva en dominio de tiempo
del filtro ( 500 us por división ) y el trazo inferior muestra el FFT de la respuesta impulsiva sobre
un rango de frecuencia de 0-12 kHz. La forma de onda en la salida es formada ambos, al filtro IIR
y por el filtro de reconstrucción del códec AIC3104. El filtro de reconstrucción del códec es
responsable para la rueda más allá de la ganancia en frecuencias arriba de 4 kHz. Debajo de tal
frecuencia, menos en frecuencias más altas que 1.5 kHz, menos pronunciadas de la ganancia
debido al filtro IIR es discernible. En el trazo superior, las características del filtro de
reconstrucción del códec son evidentes en el timbre ligero que precede la mayor parte de la
forma de onda de la repuesta impulsiva. Detén el programa y guarda los contenidos en formación
response. La Figura 4.14 muestra la magnitud del FFT de los contenidos en formación trazados
utilizando la función MATLAB tm4c123_logfft ().
Figura 4.13 Salida del programa tm4c123_iirsos_delta_intr. c utilizando el archivo del coeficiente
impinv. , visto utilizando la función FFT de un osciloscopio Rigol DS1052E.
[En esta parte se encuentra un diagrama de la figura 4.14]
[Diagrama]
Magnitud (dB)
Frecuencia (Hz)
En este ejemplo, la respuesta de frecuencia de magnitud del filtro prototipo análogo será
doblado hacia atrás en sí mismo sobre el punto 4000 Hz punto, y esto puede ser verificado
utilizando la función MATLAB freqz (), la cual valora la respuesta de frecuencia de un filtro
digital. Tipo
en la línea de comando MATLAB para poder observar la respuesta de frecuencia teórica del
filtro, y compararlo con la Figura 4.14.
El método de transformación bilineal al convertir un diseño del filtro análogo en tiempo discreto
es relativamente directo, a menudo involucra menos manipulación algebraica que el método
invariante impulsivo. Esto se logra al realizar la sustitución
[Ecuación]
4.40
[Ecuación]
4.41
Aplicando esto a la función de transferencia s de (4.32) resultados en la siguiente función de
transferencia z.
[Ecuación]
4.42
[Ecuación]
4.43
Esto puede ser logrado en MATLAB al escribir
Las características del filtro pueden ser examinadas al cambiar el archivo del coeficiente
utilizado por los programas stm32f4_iirsos_intr. c, tm4c123_iirsos_prbs_intr. c, y
tm4c123_iirsos_delta_intr. c desde impinv.h a bilinear. h. En cada caso, cambia la línea que lee
A leer
#include “bilinear. h”
antes de construir, cargar y ejecutar programas. Las Figuras 4.15 a través de la 4.18 muestra
resultados obtenidos utilizando los programas tm4c123_iirsos_prbs_intr. c y
tm4c123_iirsos_delta_intr. c con archivo de coeficiente bilinear. h. La atenuación proveída por
este filtro en frecuencias altas es mejor que en el caso invariante impulsivo. De hecho, la
atenuación en frecuencias mayores a 2000 Hz es significantemente mayor que esas de filtro
prototipo.
[Diagrama]
Magnitud (dB)
Frecuencia (Hz)
[Ecuación]
4.44
y
[Ecuación]
4.45
en donde [símbolo] D es la frecuencia en la cual la ganancia compleja del filtro digital es igual al
de la ganancia compleja de un filtro análogo en frecuencia [símbolo] A. Esta relación entre
[símbolo] D y [símbolo] A se ilustra en la Figura 4.19. Consecuentemente, no existe problema con
el aliasing como se ve en el caso de la transformación invariante impulsiva. Sin embargo, como
resultado de la frecuencia formada inherente en la transformada bilineal, en este ejemplo, la
frecuencia cortante del filtro en tiempo discreto obtenido no es 1500 Hz sino 1356 Hz. La Figura
4.19 también muestra que la ganancia del filtro análogo en frecuencia de 4500 Hz es igual a la
ganancia del filtro digital en frecuencia de 2428 Hz y que la frecuencia digital 1500 Hz
corresponde a la frecuencia análoga de 1702 Hz. Si hubiésemos deseado crear el filtro digital que
tuviese frecuencia cortante de 1500 Hz, hubiésemos podido aplicar la Ecuación de la
transformada bilineal (4.35) a un prototipo análogo teniendo la frecuencia cortante de 1702 Hz.
Esta técnica se refiere a la deformación del prototipo de diseño análogo y se utiliza por default
con MATLAB en el diseño del filtro y herramienta de análisis fdatool, descrita en la sección
siguiente. Un filtro digital con una frecuencia cortante de 1500 Hz puede ser obtenida al aplicar
la transformada bilineal al filtro análogo.
[Ecuación]
4.46
Esto es
[Ecuación]
4.47
El filtro análogo representado por la Ecuación (4.46) puede ser producido utilizando el comando
MATLAB
para rendir el resultado dado por la Ecuación (4.47). Alternativamente, la deformación del
diseño del filtro análogo considerado previamente puede ser combinado con la aplicación de la
transformada bilineal al escribir
MATLAB provee un diseño de filtro y herramienta de análisis, fdatool, el cual hace el cálculo de
los valores de coeficientes del filtro IIR simples. Los coeficientes pueden ser exportados al
espacio de trabajo MATLAB en forma directa II, formato de sección de segunda orden, función
MATLAB
Ejemplo 4.5
Filtro IIR de Paso Bajo Elíptico de Cuarta Orden Diseñado Utilizando fdatool.
>> fdatool
en la ventana de comando MATLAB. Entrar en los parámetros para un filtro IIR de paso bajo
elíptico de cuarta orden con una frecuencia cortante de 800 Hz, 1 dB de onda en la banda de
paso, y 50 dB de atenuación de banda de paro. Haz clic en Design Filter y luego observa a las
características del filtro utilizando las opciones desde Analysis menu (Figura 4.20).
Por default, fdatool utiliza el método de transformada bilineal de diseño del filtro digital, el cual
empieza desde un prototipo análogo. La Figura 4.21 muestra el uso de fdatool para diseñar el
filtro Chebyshev considerado en los ejemplos precedentes. Nota que la respuesta de la
frecuencia de magnitud decrece más y más rápidamente con aproximación de frecuencia de
media frecuencia de muestreo, y compara esto con la Figura 4.16. Esta es una característica de
filtros diseñados utilizando la transformada bilineal.
Para poder implementar un filtro diseñado utilizando fdatool, lleva a cabo los siguientes pasos:
a leer
#include “elliptic. h”
Valor de Muestreo
Tiempo (s)
Magnitud (dB)
Frecuencia (Hz)
Figura 4.22 Respuesta de frecuencia de magnitud y respuesta impulsiva del filtro implementadas
por el programa tm4c123_iirsos_delta_intr. c, utilizando archivo de coeficiente elliptic. h,
trazado utilizando la función MATLAB tm4c123_logfft ().
Ejemplo 4.6
Diseño de Filtro de Paso de Banda Utilizando fdatool.
La Figura 4.24 muestra el fdatool utilizado para diseñar un Chebyshev de 18 orden tipo 2, filtro
de paso de banda IIR centrado a 2000 Hz. El archivo del coeficiente del filtro bp2000. h es
compatible con los programas tm4c123_iirsos_intr. c, tm4c123_iirsos_delta_intr. c, y
tm4c123_iirsos_prbs_intr. c. Las Figuras 4.25 y 4.26 muestran la salida desde el programa
tm4c123_iirsos_prbs_intr. c utilizando estos coeficientes.
Ejemplo 4.7
Implementación del Filtro IIR Utilizando la Función CMSIS arm_biquad_cascade_f32 ()
(stm32f4_iirsos_CMSIS_intr. c).
Este ejemplo demuestra el uso de la biblioteca CMSIS DSP IIR función de filtración
arm_biquad_cascade_df1_f32 ().
Como se dijo anteriormente, el programa implementa el filtro de paso bajo elíptico de cuarta
orden usado en el Ejemplo 4.5, leyendo los coeficientes del filtro desde el archivo de cabecera
elliptic. h.
Dentro de la función SPI2_IRQHandler (), el valor del nuevo canal izquierdo de una muestra de
entrada se copia a float32_t variable xn.
Cada etapa de Segundo orden de un filtro se representa por cinco valores de coeficiente, de tipo
float32_t, almacenados en formación coeffs para poder b0, b1, b2, -a1, -a2. Esos valores
corresponden a la función de transferencia de la fórmula
[Ecuación]
4.48
La estructura del filtro arm_biquad_casd_inst_df1 mantiene trazo del estado interno de cada de
las etapas del fitro IIR de segundo orden NUM_SECTIONS, esto es, almacena y actualiza previos
valores de muestras de entrada y salida x ( n-1 ), x ( n-2 ), y ( n-1 ), y y ( n-2 ).
xn = ( float32_t ) ( left_in_sample ) ;
es reemplazada por
para poder utilizar internamente un ruido pseudo aleatorio generado como entrada y habilitar
las características del filtro para que sea observado utilizando un osciloscopio o Goldwave sin la
necesidad de una señal de entrada aplicada externamente.