Universidad Nacional Mayor De San Marcos. Solis Chávez, Cruz Ccocha.
Filtros digitales con PIC 1
FILTROS DIGITALES CON PIC´S
Carlos Andrés Solis Chávez 1 y Kevin André Cruz Ccocha 2
Facultad de Ingeniería Electrónica y Eléctrica, Universidad Nacional Mayor De San Marcos
analizaran más en detalle en el presente proyecto, diseñar el
Resumen—La finalidad del presente proyecto, será la filtro para que se aproxime al filtro ideal no es una tarea sencilla
implementación de un filtro digital pasa bajo utilizando un y depende de muchos aspectos: el orden del filtro (el retardo
microcontrolador PIC, en el cual primero se realizara la máximo usado por la ecuación en diferencias se llama orden del
conversión analógica a digital de la señal de entrada y filtro[5]), las ventanas que se encargan de mejorar y suavizar
posteriormente se usara la función de transferencia de un la respuesta espectral de los filtros FIR, la capacidad del
filtro digital pasa bajo en su forma de ecuaciones en procesador de señales a utilizar que en nuestro caso será un
diferencias, ya que el filtro a utilizar será un filtro FIR microcontrolador PIC, etc.
(respuesta finita al impulso), para procesar la señal. Un aspecto muy importante a tener en cuenta es la respuesta de
Nos ayudaremos de la herramienta de MATLAB “fdatool” fase de este sistema a implementar, es decir para que nuestro
filtro se asemeje al ideal debería tener fase lineal, si nuestro
para poder ver el diseño de nuestro filtro. También se
filtro no es lineal diremos que el sistema produce distorsión de
realizara la simulación del procesado de una señal
fase, la linealidad de fase es importante en comunicaciones,
utilizando el filtro diseñado. audio y otras aplicaciones en las que las relaciones temporales
entre las diferentes frecuencias son críticas. Con un filtro FIR
Palabras claves— Filtro digital, microcontrolador, PIC, se puede obtener más fácilmente una característica de fase
FIR, ecuaciones en diferencias. lineal. [1]
Abstract —The purpose of this project is to implement a
digital low pass filter using a PIC microcontroller, which
first perform analog to digital conversion of the input signal II. MARCO TEÓRICO
and then the transfer function of a digital filter was used low
pass in form of difference equations, since the filter to be El diseño de los filtros FIR, es relativamente simple y utiliza
used is an FIR (finite impulse response) filter to process the estructuras ya definidas para cada tipo de filtro. Los filtros
signal. Simulating the processing of a signal using the filter pueden ser de cinco naturalezas: Pasa bajas, pasa altas, pasa
designed is also performed. bandas, rechaza banda, y multibanda. Para el tratamiento de los
filtros se debe tener presente las siguientes consideraciones:
Key words— Digital filter, microcontroller, PIC, FIR,
difference equations. Los cálculos de los filtros se hacen en radianes y no en hercios.
La frecuencia de muestreo en hercios Fs, es equivalente a una
frecuencia en radianes/segundo de 2π.
I. INTRODUCCIÓN La máxima frecuencia tratada por los filtros es Fs/2, o π
Radianes.
a teoría del filtrado de señales abarca una amplia La relación que existe entre radianes y hercios es:
variedad de aplicaciones donde resulta de interés Ω = 2πF, y F = Ω/2π.
cambiar las amplitudes relativas de las componentes de Las frecuencias de corte de los filtros se denotan como Ωc, y
frecuencia en una señal, o quizás eliminar por completo algunas Fc.
componentes de frecuencia, proceso conocido como filtrado. La frecuencia de corte se calcula como Ωc = 2 π Fc / Fs.
Los sistemas diseñados para dejar pasar algunas frecuencias y La banda de transición del filtro se denota como dW en
atenuar de manera significativa o eliminar por completo otras radianes/segundo y dF en hercios.
se conocen como filtros selectivos en frecuencia. Hay que tener El orden de los sistemas FIR se denota como M.
en cuenta muchas características de estos filtros selectivos en Se recomienda usar un número impar para M.
frecuencia: ¿Qué tan efectivo es el filtro al dejar pasar las
frecuencias en la banda pasante? ¿Qué tan efectivo es al atenuar Los filtros pasa bajas se caracterizan por tener una frecuencia
frecuencias en la banda de supresión? ¿Qué tan rápida es la de corte a partir de la cual las frecuencias inferiores son
transición cerca de la frecuencia de corte?, etc. Estas permitidas, y las frecuencias superiores son atenuadas. La
características involucran una comparación de las función de transferencia h(n), para este filtro es:
características de un filtro real con un la de un filtro de
comportamiento idealizado. En la caso de filtros FIR que se
1 2
Carlos Andrés Solis Chávez (andres_piscis95@[Link]) Kevin André Cruz Ccocha (sagitario_13_u@[Link] )
Universidad Nacional Mayor De San Marcos. Solis Chávez, Cruz Ccocha. Filtros digitales con PIC 2
La respuesta espectral de la ventana Rectangular en escala
logarítmica es la siguiente:
𝑠𝑒𝑛(Ωc n)
,𝑛 ≠ 0
ℎ(𝑛) = { 𝜋𝑛
Ωc
,𝑛 = 0
𝜋
(1)
Ventanas:
Las ventanas se aplican a las funciones de transferencia h(n), el
objetivo de las ventanas es mejorar y suavizar la respuesta
espectral de los filtros FIR. Las ventanas de mayor uso son las
siguientes:
Rectangular
Hamming
Fig.3: Respuesta en frecuencia de la ventana rectangular
Hanning
La ventana Rectangular ofrece una atenuación del fenómeno
Blackman
Gibbs de -13dB.
El filtro pasabajo mostrado anteriormente es un filtro FIR con
[2]
ventana rectangular. Estos filtros tienen la menor transición en
la frecuencia de corte, lo que los hace más cercanos a los filtros
ideales, sin embargo está propiedad produce en los filtros III. PROCEDIMIENTO
sobresaltos y oscilaciones en el espectro. Este efecto es Realizaremos el diseño de un filtro digital FIR, implementando
conocido como: fenómeno Gibbs. Este efecto puede apreciarse un microcontrolador PIC18f452[7], utilizando lenguaje C y
en la siguiente gráfica: realizando la programación respectiva en el programa MikroC
PRO.
Implementaremos el siguiente circuito:
Fig.1: Fenómeno de Gibbs
La ventana Rectangular ofrece una banda de transición igual a
la siguiente relación: dW = 1,8π/M
Una ventana rectangular ofrece un patrón lineal, y constante.
Se debe recordar que al realizar el cálculo de un filtro FIR, por Fig.4: Circuito a implementar
defecto ya se encuentra con una ventana de este tipo.
La aplicación de las ventanas involucra la creación de una Procedimiento para implementar el filtro:
nueva función de factores w(n), que posteriormente debe ser 1. Determinar la frecuencia máxima, por ejemplo, F Hz de la
multiplicada término a término con la función de transferencia señal a filtrar.
h(n), para crear la función h(n) definitiva. 2. Elija una frecuencia de muestreo (Fs. ≥ 2F Hz) .
Una ventana Rectangular se representa por medio de la 3. Decidir sobre las características de los filtros necesarios.
siguiente función w(n): 4. Introduzca las características del filtro utilizando los
coeficientes.
6. Añadir los coeficientes el archivo de inclusión.
7. Construir y generar el código HEX.
8. Transferir el programa al microcontrolador PIC18.
9. Ejecute el programa y comprobar el filtro con sus
características.
[8]
Para la reconstrucción de la señal procesada que en el circuito
es una señal senoidal, se configuran 10 bits de salida, para hacer
un convertidor DA, por medio de un arreglo R-2R.
Fig.2: Ventana rectangular Se usará la interrupción por TIMER 0, para crear el periodo de
Universidad Nacional Mayor De San Marcos. Solis Chávez, Cruz Ccocha. Filtros digitales con PIC 3
muestreo, y por defecto la frecuencia de muestreo. h(-3)=0.0864308262744764
El siguiente código fuente muestra un ejemplo del muestreo de h(-2)=0.158173992108178
la señal por medio del TIMER 0: h(-1)=0.212237065988464
//Declaración de varíales. h(0)=0.232320416318186
float x0, y0; h(1)=0.212237065988464
unsigned int YY; h(2)=0.158173992108178
//Declaración de la función de interrupciones. h(3)=0.0864308262744764
void interrupt ( void ) h(4)=0.0175345019583181
{ h(5)=-0.0309497847516785
if( INTCON.F2 ) h(6)=-0.0501329294124475
{ h(7)=-0.0419431579233366
TMR0L=135; h(8)=-0.0171035387965417
//Timer0 con periodo de 774,4u segundo.
// Fs = 1291,32 kHz.
//Adquisición de una muestra de 10 bits en, x[0]. Se debe tener presente que para fines de programación los
x0 = (float)(ADC_Read(0)-512.0); valores de n no pueden ser negativos, por esta razón se debe
// iniciar el vector en 0, y para usarlo en el código en lenguaje C,
//Espacio para procesar la señal. se implementa de la siguiente manera:
// const float h[]=
//Reconstrucción de la señal: y en 10 bits. {
YY = (unsigned int)(x0+512); -0.0171035387965417, //h(0)
PORTC = (YY>>8)&3; -0.0419431579233366, //h(1)
PORTB = YY&255; -0.0501329294124475, //h(2)
INTCON.F2=0; -0.0309497847516785, //h(3)
} 0.0175345019583181, //h(4)
} 0.0864308262744764, //h(5)
void main( void ) 0.158173992108178, //h(6)
{ 0.212237065988464, //h(7)
//Inicio del puerto B como salida. 0.232320416318186, //h(8)
TRISB = 0; 0.212237065988464, //h(9)
PORTB = 0; 0.158173992108178, //h(10)
TRISC = 0; 0.0864308262744764, //h(11)
PORTC = 0; 0.0175345019583181, //h(12)
//Se configura el TIMER 0, su interrupción. -0.0309497847516785, //h(13)
INTCON = 0b10100000; -0.0501329294124475, //h(14)
T0CON = 0b11000101; -0.0419431579233366, //h(15)
while(1)//Bucle infinito. -0.0171035387965417 //h(16)
{ };
}
} El programa definitivo con la función de transferencia h(n), será
de la siguiente forma:
Ahora diseñamos nuestro filtro digital pasa bajos FIR, con:
Fs=1291.32 kHz. #define M 17
Fc=150 hz. //Función de trasferencia h[n]
Utilizaremos una ventana rectangular. const float h[]=
Se determina la frecuencia de corte digital: {
Ωc = 2 π Fc / Fs = 2 π 150 / 1291,32 = 0,72985 -0.0171035387965417, //h(0)
Utilizando la función de transferencia de nuestro filtro digital -0.0419431579233366, //h(1)
pasa bajo de la ecuación (1), encontramos los coeficientes del -0.0501329294124475, //h(2)
filtro, recordemos que nuestro filtro es de orden 17. -0.0309497847516785, //h(3)
0.0175345019583181, //h(4)
h(-8)=-0.0171035387965417 0.0864308262744764, //h(5)
h(-7)=-0.0419431579233366 0.158173992108178, //h(6)
h(-6)=-0.0501329294124475 0.212237065988464, //h(7)
h(-5)=-0.0309497847516785 0.232320416318186, //h(8)
h(-4)=0.0175345019583181 0.212237065988464, //h(9)
Universidad Nacional Mayor De San Marcos. Solis Chávez, Cruz Ccocha. Filtros digitales con PIC 4
0.158173992108178, //h(10) IV. DISEÑO DEL FILTRO EN MATLAB
0.0864308262744764, //h(11) Usando la herramienta de MATLAB “fdatool” podremos
0.0175345019583181, //h(12) analizar las diferentes características de nuestro filtro diseñado.
-0.0309497847516785, //h(13) Colocamos en la ventana de comandos de MATLAB: fdatool,
-0.0501329294124475, //h(14) y se abrirá la ventana del programa.
-0.0419431579233366, //h(15) Introducimos los coeficientes antes hallados de nuestro filtro
-0.0171035387965417 //h(16) FIR, también definimos nuestra frecuencia de muestreo de
}; 1291.32kHZ.
//Declaración de varíales. Ahora ya podemos ver las distintas características de nuestro
float x0, y0; filtro diseñado como la magnitud de la respuesta en frecuencia,
float x[M]; la fase de la respuesta en frecuencia, el retardo de grupo, retardo
unsigned int YY; de fase, respuesta al impulso, respuesta al esca
unsigned short i;
//Declaración de la función de interrupciones. lón, diagrama de polos y ceros y la información del filtro.
void interrupt ( void ) Veamos:
{
if( INTCON.F2 ) [Link] DE LA RESPUESTA EN FRECUENCIA
{
TMR0L=135;
PORTC.F7=1;
//Timer0 con periodo de 774,4u segundo.
// Fs = 1291,32 Hz.
//Corrimiento continuo de la señal x[n]
for( i=M-1; i!=0; i-- )x[i]=x[i-1];
//Adquisición de una muestra de 10 bits en, x[0].
x[0] = (float)(ADC_Read(0)-512.0);
//Convolución continúa.
y0 = 0.0; for( i=0; i<M; i++ ) y0 += h[i]*x[i];
//Reconstrucción de la señal: y en 10 bits.
YY = (unsigned int)(y0+512.0);
PORTC = (YY>>8)&3; Vemos que a la frecuencia de corte de nuestro filtro pasa bajos
PORTB = YY&255; que es de 150 HZ hay una atenuación de aproximadamente -
PORTC.F7=0; 6.5dB. Este filtro presenta una atenuación de en la banda de
INTCON.F2=0; transición.
}
}
void main( void ) [Link] DE LA RESPUESTA EN FRECUENCIA
{
//Inicio del puerto B como salida.
TRISB = 0;
PORTB = 0;
TRISC = 0;
PORTC = 0;
//Se configura el TIMER 0, su interrupción.
INTCON = 0b10100000;
T0CON = 0b11000101;
while(1)//Bucle infinito.
{
}
} El filtro presenta una característica de fase lineal en la banda
pasante, es muy importante que tenga esta característica para
Por limitaciones de velocidad en este microcontrolador, y que no exista una distorsión a la salida. Con este tipo de filtros
teniendo presente la frecuencia de muestreo de 1291,32Hz no FIR se puede aproximar a una respuesta de fase lineal, en
es posible usar un orden del filtro superior a 17. Sin embargo es contraste de lo que sucede con los filtros IIR y también los filtro
posible usar órdenes menores como; 15, 13, 11, 9, 7, 5, o 3. [2] analógicos.
Universidad Nacional Mayor De San Marcos. Solis Chávez, Cruz Ccocha. Filtros digitales con PIC 5
[Link] DE POLOS Y CEROS La frecuencia de corte usada para hallar los coeficientes y la
frecuencia de muestreo es de 150HZ
Con estos valores nos sale una frecuencia de corte de 42HZ en
donde la atenuación es de -3dB.
Luego de realizar varias modificaciones, sin resultado
aparente, nos dimos cuenta que la frecuencia de oscilación del
cristal era un punto muy importante a tener en cuenta, es por
eso que cambiamos de cristal a un valor mas exacto de
10Mhz. Ahora con este cambio la frecuencia de muestreo,
resulto ser de 150 HZ como lo esperado en la simulación en
Matlab. Veamos nuestros datos experimentales:
Los filtros FIR son estables (la energía de su respuesta La señal de entrada será una onda senoidal, la cual variaremos
impulsional esta acotada), por lo que los polos de estos filtros la frecuencia para poder observar a la salida su atenuación.
FIR causales deben estar siempre en el interior del circulo
unidad. Su función de transferencia en principio solo tendrá F(Hz) Vpp-in Vpp-out Atenuación
términos en el numerador. De ahí que los filtros FIR también Frecuencia 150 1.4v 980mv -3.09dB
sean conocidos como filtros “todo ceros”. Sin embargo este De corte
nombre puede inducir a confusiones, por lo que no es muy Pico 100 1.4v 1.5v +0.6dB
usado. La ubicación de todos los polos en el origen es máximo
característica de los filtros FIR. Además un filtro FIR presenta banda
siempre igual número de polos que de ceros, aunque esta pasante(max
característica no es exclusiva de este tipo de filtros. [3] rizado)
Como podemos ver nuestro filtro presente 16 polos en el origen, 1er lóbulo 240 1.4v 380mv -10.8dB
16 ceros. Tiene todos los polos dentro de la circunferencia lateral
unidad por lo que el filtro es estable. 2do lóbulo 300 1.4v 340mv -12.29dB
lateral
D. INFORMACIÓN DEL FILTRO 3er lóbulo 370 1.4v 320mv -12.81 dB
lateral
4to lóbulo 450 1.4v 300mv -13.6 dB
lateral
VI. CONCLUSIONES
Los filtros digitales tienen un papel muy importante en el
procesado digital de señales, y vemos que estos se prefieren por
El filtro es estable, de orden 17 y presenta una característica de sobre los filtros analógicos por diversos motivos: Los filtros
fase lineal en la banda pasante. digitales presentan características que son imposibles de
conseguir con filtros analógicos, como por ejemplo la respuesta
en fase lineal. El desempeño de estos filtros no varía con las
V. RESULTADOS EXPERIMENTALES condiciones ambientales como sí ocurre con los filtros
La frecuencia de corte experimental resulto ser de 42 Hz. analógicos. Las características del filtro se pueden ajustar a
Este resultado difiere del teórico y simulado en Matlab por las voluntad (filtro adaptativo), etc. [6]
siguientes razones: También estos filtros digitales pueden usarse a muy bajas
La frecuencia dada por el cristal es distinta de la que está frecuencias, como las que se encuentran en aplicaciones
configurado el Pic para la frecuencia de muestreo: biomédicas, donde el empleo de filtros analógicos es poco
La frecuencia del cristal es teóricamente de 10.5MHz pero en práctico por los valores elevados de componentes pasivos
los datos experimentales es de 11.2Mhz .Eso afecta por lo (bobinas y condensadores), además estos filtros digitales
siguiente: pueden trabajar sobre un amplio rango de frecuencias
Tm=(256-K)*PS*4/F.O cambiando la frecuencia de muestreo.
Hay que tener en cuenta también la frecuencia de Nyquist (que
Tm=periodo de muestreo fija el ancho de banda útil) queda definida por el proceso de
K: Timer del pic, donde comienza a contar a partir del hasta conversión A/D y D/A, velocidad del procesador, cantidad de
PS=pre escalamiento, en nuestro caso es 64 operaciones a ejecutar por unidad de tiempo, etc. Esto último se
F.o=Con pll interno seria de 4*10.5Mhz=42Mhz incrementa a medida que aumenta la exigencia de las
Universidad Nacional Mayor De San Marcos. Solis Chávez, Cruz Ccocha. Filtros digitales con PIC 6
características de respuesta del filtro (filtros muy abruptos).
En nuestro caso escogimos trabajar con un filtro digital FIR
porque es un filtro más estable y se puede conseguir una
característica de fase lineal.
REFERENCIAS
[1] Alan V. Oppenheim, Allan S. Willsky y S. Hamid Nawab,
“Señales y Sistemas”, Pretience Hall, Hispanoamericana,
pp.236-237 ,1998
[2] Juan Ricardo Clavijo Mendoza. Chen, “Diseño y
simulacion de sistemas microcontrolados en lenguaje C”,
Colombia, pp. 192–206 , 2011
[3] Eduard Bertran Albertí, “Procesado de señales:
Fundamentos para comunicaciones y control.” ,vol.2, Pico máximo banda pasante (max rizado)
Universidad Politécnica de Cataluña, pp.308-309,2010
[4] D. Gonzalez, Student Member, IEEE, y A. M. Airabella,
Student Member, IEEE “Comparación de filtros FIR de
fase lineal, Método Óptimo y de Ventanas.”. Universidad
Nacional de San Luis, Argentina. Disponible :
[Link]
TE06_05.pdf .
[5] “Introduccion a la teoria del procesamiento de sistemas
digitales de audio,” Disponible:
[Link]
esentaciones/[Link] .
[6] Jaime Cors Flamburry “Filtro digital pasabajo con PIC”
Disponible en:
[Link]
Bajos-Con-PIC#download
[7] Microchip technology inc., “PIC18FXX2 Data Sheet”. Frecuencia de corte
Disponible en:
[Link]
[Link] .
[8] [Link] Ramu, “Implementing FIR and IIR Digital
filters using PIC18 microcontrollers”. Microchip
Technology Designs, India. Disponible en:
[Link]
[Link]
ANEXO
Circuito implementado ( filtro pasabajo)
Desfasaje de pi radianes a una frecuencia de 50 hz.
Universidad Nacional Mayor De San Marcos. Solis Chávez, Cruz Ccocha. Filtros digitales con PIC 7
CUESTIONES PLANTEADAS POR EL PROFESOR : La señal a la salida del filtro estaba distorsionada, ¿a qué se
debía este problema?
El orden del filtro FIR depende de la frecuencia de Error de offset:
muestreo o ¿está relacionado? En un DAC real la señal análoga se encuentra desplazada
respecto del valor que le corresponde a uno ideal.
Según el teorema de muestreo de Nyquist, hay que muestrear al Este corrimiento equivale a que para una entrada digital igual a
menos al doble de la frecuencia de la mayor componente cero se tiene un valor de la tensión de salida del conversor (error
espectral de la señal. Si no se cumple esta condición no se podrá de cero).
reconstruir la señal. Este error es fácilmente compensable mediante las prácticas
habituales de corrección de offset en AO (Amplificador
El problema surge porque nos da la frecuencia mínima a la cual Operacional)
tenemos que muestrear, entonces si usamos esta frecuencia de
muestreo mínima tendríamos que poner un filtro pasabajo de Sucedía este problema en el conversor digital análogo porque,
pendiente de corte infinita es decir la banda de transición debe el voltaje offset del generador de señales no estaba calibrado
ser cero, y esto no se puede lograr con un filtro real FIR de orden adecuadamente, lo que hicimos fue disminuir un poco este
N. voltaje y la señal de salida ya no estaba tan distorsionada.
Es por eso que cuando más elevemos la frecuencia de muestreo
menor será el orden del filtro que tendremos que usar ya que el
orden del filtro determina la pendiente en la banda de rechazo.
Ya que cuando mayor es el orden, en el método de las ventanas,
el ancho de esta ventana aumentara, es decir habrá mas
coeficientes del filtro, por lo tanto por la propiedad de
escalamiento de la transformada de fourier si expandimos la
señal en el tiempo, en frecuencia el espectro se comprime, y los
lóbulos serán más estrechos, mejorando la atenuación.
La frecuencia de corte experimental no era la hallada en
simulación.
La frecuencia de corte experimental resulto ser de 42 Hz. En la imagen podemos ver como corrigendo el voltaje de offset
Este resultado difiere del teórico y simulado en Matlab por las el circuito R 2R del DAC trabaja de una manera adecuada,
siguientes razones: entregando una señal más limpia.
La frecuencia dada por el cristal es distinta de la que está
configurado el Pic para la frecuencia de muestreo: Aparte de este error en el offset del generador de señales. Para
La frecuencia del cristal es teóricamente de 10.5MHz pero en poder obtener una señal sin distorsión, se necesita un filtro a la
los datos experimentales es de 11.2Mhz .Eso afecta por lo salida, ya que la señal al ser muestreada variara su espectro de
siguiente: frecuencia.
Tm=(256-K)*PS*4/F.O
Tm=periodo de muestreo
K: Timer del pic, donde comienza a contar a partir del hasta
PS=pre escalamiento, en nuestro caso es 64
F.o=Con pll interno seria de 4*10.5Mhz=42Mhz
La frecuencia de corte usada para hallar los coeficientes y la
frecuencia de muestreo es de 150HZ
Con estos valores nos sale una frecuencia de corte de 42HZ en
donde la atenuación es de -3dB.
Luego de realizar varias modificaciones, sin resultado aparente,
nos dimos cuenta que la frecuencia de oscilación del cristal era
un punto muy importante a tener en cuenta, es por eso que
cambiamos de cristal a un valor más exacto de 10Mhz. Ahora
con este cambio la frecuencia de muestreo, resulto ser de 150
HZ como lo esperado en la simulación en Matlab.