Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de Puebla
Procesamiento de Señales II
Profesor:
Dr. Héctor Santiago Ramı́rez
Filtros FIR
en la tarjeta de desarrollo
DSK6713
Equipo:
Garcia Rosas Andrea
Diaz Huesca Eduardo
Soto Quechol Sandra Luz
Rubı́n Alvarado Abel Alejandro
RV
Puebla, Pue., 25 Septiembre 2016
Introducción
La tarjeta de desarrollo TMS320C6713 es una excelente plataforma de desa-
rrollo inicial de aplicaciones, pues brinda herramientas muy sofisticadas para
la ejecución de algoritmos muy complejos disponibles para diseñadores con una
gran experiencia en el área de procesamiento digital de señales. Además, provee
de herramientas esenciales para desarrollar aplicaciones básicas para aquellos
que son principiantes en ésta.
Objetivo
General
El alumno diseñará e implementará Filtros de Respuesta Finita al Impulso
(FIR) en la tarjeta de desarrollo C6713DK.
Particulares
1. Diseñar Filtros de Respuesta Finita al Impulso (FIR) en Matlab.
2. Implementar filtros digitales en el DSK de TI TMS320C6713.
3. Realizar el filtrado digital de una señal de sonido.
Pasa-bajas:
• Borde Banda de Paso: Fp=400 Hz
• Borde Banda de Rechazo: Fs=800 Hz
Pasa-banda:
• Bordes Banda de Paso: Fp1=800 Hz y Fp2=1600 Hz
• Bordes Bandas de Rechazo: Fs1=400 Hz y Fs2=2000 Hz
Pasa-altas
• Borde Banda de Paso: Fp=2000 Hz
• Borde Banda de Rechazo: Fs=1600 Hz
Marco teórico
Filtro FIR
Un filtro digital emplea un procesador digital que efectúa operaciones ma-
temáticas en valores muestreados de la señal. El procesador puede ser de propósi-
to general, tal como cualquier ordenador personal, un chip DSP (procesador
digital de señales) especializado. La señal de entrada analógica debe ser mues-
treada y digitalizada usando un ADC (conversor analógico digital).
El resultado son números binarios que representan los valores sucesivos mues-
treados. Estos son transferidos al procesador, el cual efectúa operaciones ma-
temáticas en ellos. Las operaciones pueden ser desde filtros de promediado de la
muestra actual con alguna delas anteriores hasta multiplicaciones por constantes
de los valores de entrada o de instantes anteriores almacenados en memoria.
Funcionamiento de un filtro digital
Los filtros FIR (Finite Impulse Response), llamados ası́ porque su respuesta
al impulso se da en un número finito de muestras, son filtros del tipo no recur-
sivo, por tal motivo estos filtros al no tener retroalimentación no tienen polos,
y por lo tanto siempre son estables. Estos filtros son muy utilizados en proble-
mas de filtrado donde hay un requerimiento de caracterı́stica de fase lineal en
la banda de paso del filtro. Su requerimiento en cuanto a recursos es mayor y
dada la mayor cantidad de operaciones estos filtros son más sensibles a errores.
Estos filtros no tienen una contraparte analógica.
Los filtros FIR son estables puesto que solo tienen polos, es decir, elementos
en el numerador en su función de transferencia. Tienen además la ventaja que
pueden diseñarse para ser de fase lineal, es decir, no introducen desfases en la
señal, a diferencia de los IIR o los filtros analógicos, por este motivo tienen
interés en audio.
Fdatool
Es una herramienta gráfica de diseño de filtros, de Matlab, muy sencilla y
práctica. Para abrirla basta con escribir fdatool en la ventana de comandos. La
ventana que aparece es la siguiente:
Desarrollo de la práctica
Se diseño bajo la herramienta FDATOOL los diversoso filtros solicitados pa-
ra el sistema los cuales se muestren en las siguientes figuras:
[1] Chassaing, R. Digital Signal Processing and Aplications with the C6713
DSK, Ed. John Wiley and Sons.
[2] Ingle, V. K., and Proakis, J. G. (n.d.). Digital Signal Processing Using
MATLAB., Ed. Bookware Companion Series.
[3] McGraw Hill Interamericana de España. Lenguaje ANSI C. Guı́a
de referencia. Retrieved from Online Learning Center: http :
//www.mhe.es/universidad/inf ormatica/8448145127/archivos/apendiceg eneral2 .pdf
10
Índice de figuras
11
Apéndice A
12
interrupt void c_int11() // Rutina de servicio de interrupción
{
int k; // Variable para ı́ndices de los arreglos
float y_I=0, y_D=0,y_II=0, y_DD=0,y_III=0, y_DDD=0,y_D4,y_I4; //
Variables temporales para cálculo de la salida
x_I[0]=entrada.canal[0]; //
Canal izquierdo y derecho son almacenados
x_D[0]=entrada.canal[1]; //
al inicio del registro de corrimiento
x_II[0]=x_I[0];
x_III[0]=x_I[0];
x_DD[0]=x_D[0];
x_DDD[0]=x_D[0];
for (k=0;k<CL;k++)
{
y_II += x_II[k]*C[k]; // Algoritmo FIR para
y_DD += x_DD[k]*C[k]; // ambos canales
}
for (k=CL-1;k>0;k--) // Corrimiento de los datos para registro medias
{ // de corrimiento
x_II[k] = x_II[k-1];
x_DD[k] = x_DD[k-1];
}
for (k=0;k<DL;k++)
{
y_III += x_III[k]*D[k]; // Algoritmo FIR para
y_DDD += x_DDD[k]*D[k]; // ambos canales
}
for (k=DL-1;k>0;k--) // Corrimiento de los datos para registro altas
{ // de corrimiento
x_III[k] = x_III[k-1];
x_DDD[k] = x_DDD[k-1];
}
y_I4=volumen*(alta*y_III/10+media*y_II/10+baja*y_I/10)/10+.1;
//ecualizacion canal izquierdo
y_D4=volumen*(alta*y_DDD/10+media*y_DD/10+baja*y_D/10)/10+.1;
//ecualizacion canal derecho