You are on page 1of 11

FILTRO PASA BAJO

SEALES DISCRETAS: Una seal discreta o seal de tiempo discreto x(k) solamente est definida en ciertos instantes discretos de tiempo, de manera que entre cada instante y el siguiente no est definida dicha seal. Una seal de tiempo discreto tambin se puede por lo tanto representar como una lista o secuencia de valores {x(1), x(2), x(3),}. FILTRO DIGITAL IIR (RESPUESTA AL IMPULSO INFINITO) Es un tipo de filtro digital que si su entrada es un impulso (una delta de Kronecker) la salida ser un nmero ilimitado de trminos no nulos, es decir, que nunca volver a un estado de reposo. Para obtener la salida se emplean valores de la entrada actual y anterior y, adems, valores de salida anteriores que son almacenados en memoria y realimentados a la entrada. Tambin se llaman filtros digitales recursivos. Su expresin en el dominio discreto es:

El orden del filtro est dado por el mximo entre P y Q. Una de las posibles estructuras para un filtro IIR es la siguiente:

Se puede ver cmo la salida y(k) es introducida de nuevo en el sistema. La transformada Z del mismo es:

Vemos que ahora tenemos un denominador, es decir, ceros adems de polos, que son los causantes de las posibles inestabilidades que pueden comprometer la estabilidad y causalidad del sistema. Las ventajas de los filtros IIR respecto a los FIR es que pueden conseguir una misma respuesta empleando un nmero de coeficientes en el filtro mucho menor, requiriendo un menor tiempo de clculo. El inconveniente es, adems de la inestabilidad ya comentada, la introduccin de desfases en la seal, que pueden ser compensados pero a costa de aadir ms coeficientes al filtro. EL PROCESO DE MUESTREO El proceso a travs del cual una seal continua x(t) es transformada en una seal discreta equivalente x(k) consiste simplemente en la toma de muestras de la seal continua en instantes discretos de tiempo k denominados instantes de muestreo k = {,-1,0,1,2,3,}. Para realizar dicho proceso es necesaria una seal adicional que marque el ritmo de la toma de muestras, idealmente dicha seal p(t) es un tren de impulsos con una frecuencia fs= 1/Ts denominada frecuencia de muestreo (en hertz). Tambin es usual considerar dicha frecuencia en radianes/seg. El muestreo puede ser uniforme (Ts constante) p s = 2o/T s o no uniforme (Ts variable), a Ts se le llama tambin el periodo de muestreo.

Un sistema muestreador consiste simplemente en un switch que se cierra en el momento marcado por el tren de impulsos y en todos los dems instantes permanece abierto. En una computadora digital este proceso tiene lugar en un mdulo de adquisicin de datos, o convertidor analgico-digital dado que este proceso de conversin consume un tiempo significativo, cada muestra de la seal continua deber ser congelada mientras dura su conversin, este congelamiento se denomina retencin.

DISEO DE FILTROS IRR MEDIANTE MATLAB La herramienta de Procesamiento Digital de Seales de MATLAB proporciona muchas funciones tiles para el diseo y anlisis filtros digitales IIR (ejem. Butterworth, Chebyshev tipo I y II, y filtros elpticos) dado un conjunto de especificaciones (ejem. pasa- y rechazo- de banda). Filtrar una seal digital

involucra formar una suma de pesos de las entradas pasadas y las muestras de salida:

Por lo tanto, una etapa crucial en el diseo de filtros IIR es el clculo de los coeficientes. Para los clsicos filtros digitales IIR, los pasos involucran en cada estado pueden ser resumidos de la siguiente forma:
Por ejemplo, la sintaxis de MATLAB para crear un filtro pasa bajas, pasa altas, pasa banda o rechazo de banda con caractersticas Butterworth es (pasos 1 y 2): [b, a] = butter (N, Wc, options) El primer comando calcula los coeficientes del numerador y el denominador de un filtro discreto en tiempo Butterworth, de orden N con una frecuencia de corte de 3 dB, Wc , normalizado a la frecuencia de Nyquist. Los coeficientes del numerador y denominador de el filtro son calculados y visualizados en los vectores b y a, respectivamente, en potencies negativas ascendentes de z. Si la palabra options es dejada fuera, el filtro pasa bajas ser tomado como default al menos que Wc sea un vector de frecuencias, en cuyo caso el filtro pasa bandas es tomado como default. Para filtros pasa altas y pasa banda, las palabras high y stop son usadas como opciones. Para filtros pasa banda y rechazo de banda, Wc es un vector de dos elementos que especifica las frecuencias de corte: W c = [ c1 , c2 ] Donde c1 < < c2 es la banda de paso (filtros pasa banda) o rechazo de banda (filtros rechazo de banda). Codigo MATLAB T=1/1000; % Frecuencia de la seal t=(0:99)*.001; %tiempo de muestreo f=10; %frecuencia 1 f1=100; %frecuencia 2

x=2.5 + 2*sin(2*pi*f*t) + .5*sin(2*pi*f1*t); % Seal con ruido creada x=round((x/5)*1024); % Redondeo y normalizando a 10 bits los datos [num,dem]=butter(2,20/500,'low'); %Diseo del filtro pasa bajas tipo Butterworth y=filter(num,dem,x); % Seal filtrada plot(t,x,t,y) % Graficacin de la seal original y filtrada

legend('seal original','seal filtrada')

CODIGO DE LA SEAL CON RUIDO


#include <18f2550.h> /*Definicin del dispositivo PIC que se va a emplear */ #fuses HS, NOWDT,NOMCLR /* Configuracin del dispositivo */ #use delay(clock = 8MHZ) /* Configuracin del oscilador que se va a emplear */

/* Cargamos la cadena obtenida en matlab en un arreglo de 16 bits */ int16 k=0, x[100] = { 512,598,661,686,674,639,603,589,612,671,753,833,890,908,888,843,798,77 4,785, 833,902,969,1012,1016,981,922,861,821,817,849,902,953,980,968,918,843,7 67,713, 695,713,753,792,807,784,723,639,554,491,466,478,512,546,558,533,470,385, 301, 240,217,232,271,311,329,311,257,181,106,56,44,71,122,175,207,203,163,102 ,43, 8,12,55,122,191,239,250,226,181,136,116,134,191,271,353,412,435,421,385, 350, 338,363,426};

#INT_TIMER0 /* Habilitacin del timer0 para desbordamientos cada 1ms para la activacin del PWM*/ void subrutina_timer0() { set_timer0(63536); set_pwm1_duty(x[k]); /* Los datos guardados en el arreglo de 16 bits sern los que el PWM recreara*/ k = (k < 99) ? (k+1) : 0; /* Cuando los 100 datos de la cadena terminen se resetea y empieza de nuevo*/ } void main() { setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1); /*Configuracin del timer 0*/ setup_timer_2(T2_DIV_BY_1,255,1); /*Configuracin del timer 2 que controla el PWM con una resolucin de 100 bits*/ setup_ccp1(CCP_PWM); /*Configurando la salida PWM*/ enable_interrupts(INT_TIMER0); /*Habilitando el timer 0*/ enable_interrupts(GLOBAL); /*Habilitacin global de las interrupciones*/ while(TRUE); /*Ciclo infinito para la constante funcionalidad del Microprocesador*/ }

FILTRADO DE LA SEAL
#include <18f2550.h> /*Definicin del dispositivo PIC que se va a emplear */ #fuses HS, NOWDT,NOMCLR /* Configuracin del dispositivo */ #device adc=10 /*Configurando el ADC a 10 bits*/ #use delay(clock = 8MHZ) /* Configuracin del oscilador que se va a emplear */

int16 x,x1=0,x2=0,y,y1=0,y2=0; /*Definicin de variables a utilizar de 16 bits*/

#INT_TIMER0 /*habilitacin del timer 0 para cada 1 ms*/ void subrutina_timer0() { set_timer0(63536); /*posicionando el timer para desbordamientos cada 1 ms*/ x = read_adc();/*Lectura del ADC, y asignando dato ledo a una variable*/ y = 1.823*y1 - .8372*y2 + .003622*x + .007243*x1 + .003622*x2; set_pwm1_duty(y); /*Dato enviado al PWM a travs de la ecuacin anterior*/ x2=x1; /*Retardos de las variables*/ x1=x; y2=y1; y1=y; } void main() { setup_adc_ports(AN0|VSS_VDD); /*Configuracin del puerto a usarse como ADC*/ setup_adc(ADC_CLOCK_INTERNAL); /*Configuracin del reloj interno del ADC*/ set_adc_channel(0); /*Habilitando la lectura por el AN0*/ setup_timer_2(T2_DIV_BY_1,255,1); /*Configuracin del timer2 para el PWM*/ setup_ccp1(CCP_PWM); /*Configuracin general del PWM*/ setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1); /*Configuracin del timer0*/ enable_interrupts(INT_TIMER0); /*Habilitacin general de las interrupciones*/ enable_interrupts(GLOBAL); while(TRUE); }

CODIGO MATLAB PARA OBTENER LA SEAL.


Ao = analoginput('winsound'); addchannel(Ao,1:2); set(Ao,'SampleRate',11025) set(Ao,'SamplesPerTrigger',22050) start(Ao) wait(Ao,6); data = getdata(Ao); 'conectar a la siguiente seal y pulsar enter para continuar' pause clc; Aii = analoginput('winsound'); addchannel(Aii,1:2); set(Aii,'SampleRate',11025) set(Aii,'SamplesPerTrigger',22050) start(Aii) wait(Aii,6); data1 = getdata(Aii); subplot(2,1,1); plot(data); xlabel('Samples') ylabel('Signal (Volts)') title('SEAL CON RUIDO','FontWeight','bold','FontSize',20); subplot(2,1,2); plot(data1); xlabel('Samples') ylabel('Signal (Volts)') title('SEAL FILTRADA','FontWeight','bold','FontSize',20); grid on delete(Ao) clear Ao delete(Aii) clear Aii

HARDWARE USADO

PC
RESULTADOS OBTENIDOS.

CONCLUSIONES. Se aprendi el diseo de filtros digitales pasa bajo en el software de matlab y su respectiva implementacin en microcontroladores pic 18f2550.

UNIVERSIDAD NACIONAL SAN ANTONIO ABAD DEL CUSCO

FACULTAD DE ING.ELECTRICA, ELECTRONICA, MECANICA Y MINAS CARRERA PROFECIONAL DE ING. ELECTRONICA

TEMA: DISEO DE UN FILTRO PASA BAJO EN MATLAB Y SU INPLEMENTACION EN UN PIC 18F2550

FACTOR DE POTENCIA

CURSO: DOCENTE: ALUMNO:

PROCESAMIENTO DIGITAL DE SEALES ING. ROGER JESUS COAQUIRA CASTILLO GESELL CABEZAS VARGAS 080232

CUSCO-PERU

You might also like