Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Esta expresin se ha obtenido con el programa Matlab para un filtro con las
siguientes especificaciones:
|H(f)|
Filtro de Chebyshev.
Frecuencia de muestreo (fm): 4 khz.
Frecuencia de pasabanda (fp): 1 Khz.
Rizado en la banda pasante: 0,5db.
Pasabanda
Banda de transicin
Parabanda
2
fp
fs
Se pide:
4.2.1. Configuracin del convertidor analgico digital.
4.2.3. Variables que se utilizarn para implementar el filtro.
4.2.4. Diseo de la rutina de interrupcin peridica con el periodo requerido por el filtro
de Tm= 1/fm.
4.2.1. Configuracin del convertidor analgico digital.
- Registro ADCON0= 0b01000001
Los coeficientes son valores constantes que se declararn como vectores fijos (irn
en memoria de programa no de variables). Se distinguirn entre los coeficientes de las
entradas (a) y de las salidas (b). El ensamblador de estos dos vectores sera el siguiente:
const float a[4]= {0.15892, 0.47676,
const float b[4]= {1.0
, 0.12678,
0.47676, 0.15892
-0.52388, 0.12678
};
};
Serie 74HCxx
---------------------------------------------------------------
// Preparamos TMR0
// Bajamos la bandera. Evento: desbordamiento de TMR0
}
}
La rutina Filtro() recibir del registro ADRESH el valor digital de la nueva conversin
A/D del pin AN1 (los 8 bits de ms peso). Este valor es x(n) y se obtendr leyendo el
registro ADRESH. A partir de este valor esta rutina calcular el nuevo valor de y(n). La
conversin A/D de la seal as como el filtrado digital de dicha seal llamada a la rutina
Filtro- deben hacerse de forma peridica por lo que estas tareas han de realizarse desde la
interrupcin del TMR0I.
La rutina Filtro es la sucesin de ciertas multiplicaciones, sumas y restas para
resolver la ecuacin:
//================================
// filtro()
//================================
void filtro()
{
// -------------------------------------------// Actualizamos las entradas
// -------------------------------------------xn[3]= xn[2];
// x(n-3)= x(n-2)
xn[2]= xn[1];
// x(n-2)= x(n-1)
xn[1]= xn[0];
// x(n-1)= x(n)
xn[0]= ADRESH;
// x(n) = valor convertido (8 bits ms significativos)
// -------------------------------------------// Actualizamos las salidas excepto y(n) -> Objetivo de este algoritmo
// -------------------------------------------yn[3]= yn[2];
// y(n-3)= y(n-2)
yn[2]= yn[1];
// y(n-2)= y(n-1)
yn[1]= yn[0];
// y(n-1)= y(n)
yn[0]= b[1]*yn[1]+b[2]*yn[2]+b[3]*yn[3]+a[0]*xn[0]+a[1]*xn[1]+a[2]*xn[2]+a[3]*xn[3];
if (yn[0]<0.0) yn[0]=0.0;
Problema 16
Serie 74HCxx
- El resultado de cada iteracin implica que la salida y(n) ser un dato similar al
de la entrada x(n) pero de 8 bits sin signo (positivo).
El mejor valor para las restricciones indicadas es 128. La ecuacin del filtro con
coeficientes enteros quedara de la siguiente manera:
y(n)=
1
( 16.y(n-1) - 67.y(n-2) + 16. y(n-3) + 20. x(n) + 61.x(n-1) + 61.x(n-2) + 20.x(n-3) )
128
1
(b1.y(n-1) - b2.y(n-2) + b3. y(n-3) + a0. x(n) + a1.x(n-1) + a2.x(n-2) + a3.x(n-3) )
128
Si se representa la curva caracterstica del filtro con los coeficientes originales y con los
coeficientes enteros se aprecia que es muy similar y no se ha perdido mucha informacin
debido a la discretizacin.
Frecuencia normalizada (Chebyshev)
20
-20
Amplitud - dB
-40
-60
Coeficientes
enteros
-80
-100
-120
Coeficientes
con
decimales
-140
-160
0.5
1.5
2.5
3.5
En la siguiente figura se muestra como quedara el resultado despus de sumar todos los
productos de la expresin de y(n) pero antes de dividirlo entre 128. Se sabe que dividir por un
nmero potencia de 2 equivale a tantos desplazamientos a la derecha del registro como valor
tenga la potencia. El nmero 128 es 27 lo que implica que dividir por l es lo mismo que
realizar 7 desplazamientos a la derecha de la variable que contiene el resultado.
0
Byte alto
Byte bajo
Resultado de 16 bits
Problema 16