Post on 03-Feb-2018
Diseño e
implementación de
Filtros Digitales
Mg. Ing. Luis Romero
Dr. Ing. Vicente Mut
Dr. Ing. Carlos Soria
Año 2011
Introducción
Un buen diseño de un filtro digital y su
eficiente implementación en hardware y/o
software es una tarea fundamental en
muchas áreas.
La implementación de filtros digitales en
hardware se realiza a través de dispositivos
microcontroladores, como ser PICs y DSPs.
Estos dispositivos deben ser programados en
lenguaje Assembler y/o lenguaje C.
Contenidos
DSP
Definición y descripción del hardware.
Entorno de Programación
Descripción del entorno de Visual DSP.
Análisis y diseño de filtros
Etapa de simulación en Matlab.
Diseño e implementación de filtros en C
Implementación de los filtros en el DSP
DSP - Definición
Un Procesador Digital de Señales o DSP es:
un sistema basado en un procesador o
microprocesador ,
que posee un juego de instrucciones, un hardware y
un software optimizados para aplicaciones que
requieran operaciones numéricas a muy alta
velocidad.
Debido a esto es especialmente útil para el
procesado y representación de señales
analógicas en tiempo real.
DSP – Aplicación de Filtrado
Si bien puede trabajar con
señales analógicas, por ser
un sistema digital necesitará
un conversor A/D a la
entrada y uno D/A a la salida.
Previo a la conversión, existe un filtro anti-aliasing para
poder muestrear correctamente la señal analógica.
Igualmente a la salida, existirá un filtro anti-aliasing para la
recomposición de la señal analógica.
DSP – Características del
ADSP-21992
Arquitectura Harvard
Instrucciones de 16 bits con 160 MIPS
Conversor A/D de 8 canales con una
resolución de 12 bits
Bloques de memoria RAM para
programa y datos
Salidas PWM
ALU
CPUMemoria de Programa
Memoria de Datos
I/O
Puertos I/O programables
Timers de alta precisión
Interrupciones programables por software
Comunicación serial – RS 232
Conversor D/A
DSP – Conversor A/D
Señal de entrada analógica [-1,1]V
Conversor A/D 12 bits
Frecuencia máxima 80 KHz
Visual DSP: Lenguaje de
Programación
Emplea un híbrido entre Assembler y C
Con esto logra: Eficiencia y memoria de programa
Portabilidad
Tiempo de desarrollo
Funciones de librerías C estándar: cos, sin de math.h
Funciones de librerías DSP: operaciones con matrices, convolución, transformada discreta de Fourier, etc.
Funciones de lectura y escritura de registros: sysreg_read y sysreg_write para registros no mapeados en memoria, y io_space_read y io_space_write para registros mapeados en memoria
Visual DSP: Entorno y archivos
Tipo de Archivos:
Workspace: *.vdw
Project: *.dpj – Contiene archivos:
*.h: declaración de vbles. y fciones.
*.dsp - *.c: implementación de fciones.
*.ldf: utilizado por el enlazador (linker)
Proceso de Compilación y Enlace:
Archivos Compilador Enlazador Cargador
*.c
*.h
*.dsp
*.dpj *.dxe
Visual DSP: Procedimiento
2. Generar el archivo ejecutable (a) y cargarlo
en la memoria RAM del Kit ADSP-21992 (b)
3. Ejecutar el programa cargado
2-(a) 2-(b) 3
Visual DSP: Visualización de
datos
Variables que se
grafican:
x: señal de entrada
y1: salida filtro FIR
y2: salida filtro IIR
Cantidad de puntos:
4096
Visual DSP: Exportar datos
Para exportar los datos a Matlab, hacer click
con el botón derecho sobre el cuadro de la
imagen. Luego exportar como archivo *.txt
Pasos de la Práctica
1) Adquisición de datos.
2) Análisis espectral.
3) Período de muestreo.
4) Diseño de filtros digitales (IIR, FIR).
5) Análisis de estabilidad, respuesta impulsiva y respuesta en frecuencia de los filtros FIR e IIR diseñados.
6) Implementación del filtro.
7) Análisis del resultado obtenido.
Matlab: Análisis de datos
En el entorno de Matlab se realizará la visualización de
los datos digitalizados, y se analizará el contenido
frecuencial de los mismos para ajustar la frecuencia de
muestreo
La rutina a emplear es:
[t,x,y1,y2]=dspFiltro(ts) (en la ventana que se abre elegir Archivo: *.txt)
PARAMETROS – ts: periodo de muestreo
SALIDA –t: tiempo
x: señal
y1: señal filtrada FIR
y2: señal filtrada IIR
Matlab: Análisis de datos
Análisis Espectral
Comandos Matlab
SF=125;
F=0:0.5:SF/2;
H = freqz(x,[1 zeros(1,length(x)-1)],F,SF);
plot(F,abs(H)),grid
plot(F,unwrap(angle(H))),gridFrecuencia [Hz]
abs(X)
Recordar que Frecuencia de Nyquist = 2 fmax
En la práctica SF es 5 o 10 fmax
Visual DSP: Modificación de SF
Archivo: SPI_dac.dsp
//Timer: 1 Khz
.VAR Pmuestreo = 0x000a; (valor en hexadecimal del divisor
de tiempo)
//Ejemplo: Pmuestreo = 0x0002; entonces la Frecuencia
muestreo será 1000/Pmuestreo=500 Hz
Diseño de Filtros en Matlab: FIR
[hw] = firwind(TY,A,SF,FP,FS,WIND)
TY= Tipo de filtro, por ejemplo pasa-banda ‘bp’
A= vector con la atenuación en la banda de paso y de rechazo en DB
SF: frecuencia de muestreo en Hz
FP: banda de paso
FS: banda de rechazo
WIND: tipo de ventana, por ejemplo 'hamming'
Ejemplo: hw = firwind(‘lp',[2 30],125,5,30)
hw contiene los coeficientes del filtro FIR
La banda de paso se debe seleccionar de acuerdo a la aplicación particular.
Dada una banda de paso, la banda de rechazo y las atenuaciones respectivas
definen el orden del filtro.
[N,D]= dfdiir(TY,TY1,TY2,A,SF,FP,FS)
TY= Aproximación utilizada, por ejemplo transformación bilineal
TY1= Tipo de filtro, por ejemplo pasa-banda ‘bp’
A= vector con la atenuación en la banda de paso y de rechazo en DB
SF: frecuencia de muestreo en Hz
FP: banda de paso
FS: banda de rechazo
Ejemplo: [N,D] = dfdiir('bw','lp','trap',[2 30],125,5,30)
N y D son los coeficientes de los polinomios num. y den. del filtro IIR
La banda de paso se debe seleccionar de acuerdo a la aplicación particular.
Dada una banda de paso, la banda de rechazo y las atenuaciones respectivas
definen el orden del filtro.
Diseño de Filtros en Matlab: IIR
Análisis de Filtros Diseñados
Estabilidad de filtros IIR:roots (DEN)
ans =
0.7992 + 0.1667i
0.7992 - 0.1667i
¿Es el filtro estable?
Espectro en frecuencia[H,W]=freqz(N,D);
F=W/(2*pi);
plot(F.*SF,abs(H)),grid
dB=20log Vs/Ve
Visual DSP: Carga de filtros
diseñados
Archivo: main.h
//puntos del filtro FIR
#define N 12
//orden+1 del numerador del filtro IIR
#define NUM 3
//orden+1 del denominador del filtro IIR
#define DEN 3
// maximo entre N y NUM
#define MAX 12
Archivo: main.c
// COEFICIENTES DEL FILTRO FIR
double pm a1[] = {
}
// COEFICIENTES NUMERADOR DEL FILTRO IIR
double a[] = {
};
// COEFICIENTES DENOMINADOR DEL FILTRO IIR
double b[] = {
};
Señal medida y filtrada
Señal con ruido (azul)
Señal filtrada por IIR (verde)
Señal filtrada por FIR (rojo).
Análisis de Eficiencia de los
Fitlros
• Para determinar la eficacia del filtrado,
realizaremos el análisis de las siguientes
auto-correlaciones:• Señal de entrada
• Salida FIR
• Salida IIR
• Diferencia salida FIR con señal de entrada
• Diferencia salida IIR con señal de entrada
• Comando a emplear:
plot(xcorr(x,x,coeff)),grid