You are on page 1of 92

UNIVERSIDAD SURCOLOMBIANA FACULTAD DE INGENIERA, PROGRAMA DE ELECTRNICA

PRCTICAS DE DIGITAL SIGNAL PROCESSING - DSP PROFESOR: Esp., Ing., RAMIRO PERDOMO RIVERA

CURSO B-2012

UNIVERSIDAD SURCOLOMBIANA FACULTAD DE INGENIERA, PROGRAMA DE ELECTRNICA Laboratorio de Procesamiento Digital de Seales

Prctica 1 REPASO DE SEALES Y SISTEMAS


Esta prctica pretende introducir los conceptos necesarios para comenzar a trabajar con DSP en MATLAB. Se supone un conocimiento bsico del manejo de vectores y matrices en MATLAB, adquirido en semestres anteriores.

1 DSP en MATLAB 1.1 Introduccin Objetivo: reforzar los conceptos de las clases de teora sobre DSP, comenzar a introducir seales en MATLAB, hacer operaciones con ellas y representar graficas. Implementar sistemas muy sencillos. Ms en particular, en esta prctica se introducirn los conceptos de vector de valores y vector base de tiempos y se utilizaran para representar algunas seales bsicas. Despus, se exploraran las operaciones elementales con seales (suma, producto, desplazamientos...). Por ltimo, se introducir el concepto de sistema comparndolo con el concepto de "funcin de MATLAB". La prctica propone ejercicios de dificultad creciente. Los primeros ejercicios de cada tipo se explican muy detalladamente en el enunciado, los siguientes deben ser resueltos por los alumnos utilizando los conocimientos de teora y los que se han ido obteniendo en ejercicios anteriores. Duracin: Una o dos sesiones.

1.2 Seales en MATLAB 1.2.1 Limitaciones de MATLAB Antes de nada, ntese que en MATLAB (como en cualquier otro simulador informtico), es imposible introducir funciones de variable continua ya que se trabaja con conjuntos discretos de valores (vectores y matrices). Por tanto, para poder trabajar con seales continuas vamos a necesitar tomar un conjunto "representativo" de valores. Eso significa que nuestra seales van a ser conjuntos de valores tornados de la verdadera seales continua en instantes determinados, generalmente se tratara de instantes equiespaciados (muestreo uniforme). No vamos a estudiar aqu las propiedades y consecuencias del proceso de muestreo. Solamente comentaremos que el espacio temporal entre muestras deber ser lo "suficientemente pequeo".

Figura 1.- Proceso de muestreo 1.2.2 Representacin de una Seales Bsica En este apartado vamos a representar una seal es muy simple. Vamos a empezar por una sinusoide, esto es: x(t) = sen(w0t). Vamos a tomar el valor de frecuencia angular de 2 w0 = Tc/4 rad/seg. Esto corresponde con un periodo de T0 = o = 8 seg y con una fo = 1 o = = 0.125 Hz To 2

frecuencia hertziana de

Intentaremos iniciar con este apartado una buena costumbre. Vamos a almacenar los valores de x(t) en un vector x al que Llamaremos "vector de valores". En paralelo crearemos otro vector con los valores de la variable t. Este vector (t) lo llamaremos "vector de base de tiempos" o, simplemente, "base de tiempos". Ntese que el contenido de t(l) es un instante de tiempo (en segundos) y x(l) es el valor (voltios) que toma la seal en ese instante (lo mismo para t(2) y x(2)... ). Ntese tambin que la seales en MATLAB es el conjunto de los dos vectores (t y x).

Vamos a representar la seal de inters entre -10 y 10 segundos. Vamos a tomar como incremento 0.1. En estas condiciones la base de tiempos la podemos crear as: t = -10:0.1:10; Y el vector de valores: wo = pi/4; x = sin(wo*t); % Ntese el uso de la notacin: % "seno de un vector''. Para hacer una representacin grafica usaremos la funcin plot. plot(t,x); Y tendramos que obtener una grafica similar a esta:

Figura 2.- Grafica de la funcin senoidal. Pregunta 1.- Utilizando la herramienta lupa" de las graficas de MATLAB, intente medir el periodo de esta seales. Respuesta: 1.2.6 Representacin de Otras Seales En este apartado se les pide que representen otras seales sencillas y no se les da el problema resuelto como en el apartado anterior. Vamos a representar todas entre 5 y 10 segundos con incrementos de 0.05. Fjense que al tratarse de representaciones con las mismas caractersticas temporales, pueden usar la misma base de tiempos para todos los casos. A continuacin se indican las seales a representar y los resultados que se deberan obtener. x(t) = u(t) (seales "escaln unitario'5).

Figura 6.- Escaln unitario.

Pregunta 2.- Las grficas de sinusoides amortiguadas incluyen representacin de la envolvente de la curva (en lnea roja discontinua). Como haramos para incluir esta representacin? 1.6 Operaciones Simples con Seales Ahora vamos a hacer algunas Operaciones simples con una seal definida por su grafica. Vamos a comenzar introduciendo en MATLAB la seal x(t) dada por este dibujo:

Figura 16.- Seal definida por una grafica. En principio, nos vale cualquier base de tiempos que abarque desde el 2 hasta el 2. Vamos a darle un poco de margen por ambos lados y la hacemos de 6 a 6 con incrementos de 0.05. t = -6:0.05:6; Hay que calcular la ecuacin para la recta que va entre t = -2 y t = 0. Esta recta tendr la ecuacin tpica: r(t) = mt+b donde: m es la pendiente. Al tratarse de una recta creciente debe resultar positiva. El valor de m se puede calcular como la tangente del ngulo que forma la recta con y1 y 0 1 0 1 m= = = x1 x0 0 ( 2 ) 2 el eje horizontal (eje t). En este caso: b es el trmino independiente. Se puede calcular conociendo m y cualquier punto de la recta, por ejemplo r(-2) = 06 o r(0) = 1 (con este ltimo obtenemos una ecuacin extremadamente simple que resulta b = 1). De hecho, el trmino independiente de una recta siempre es igual al punto en que corta al eje vertical (cuidado con esta propiedad porque, a veces, no es posible ver el punto de forma tan trivial como en este caso). Por tanto, x(t) entre 2 y 0 (y solo entre 2 y 0) es igual a la expresin: t/2+1. Por supuesto, x(t) es igual a 1 entre 0 y 2 e igual a cero en el resto de intervalos. Veamos como crear el vector de seal. L length (t); % Averiguar la longitud x = zeros(1,L); % Primero todo ceros pi = f ind(t=-2) ; % Busco el -2 p2 = find(t=0) ; % Busco el 0 p6 = find(t==2) ; % Busco el 2 % Con el incremento elegido; -2, 0 y 2 estarn % en la base de tiempos x(pl:p2) = t(pl:p2)/2+l; % Parte de recta creciente x(p2:p6) = 1; % Parte constante % x en t=0 lo hemos calculado con dos frmulas % dando el mismo resultado

Figura 17.- Resultado de introducir x(t) en MATLAB. Una vez que tenemos la seal x(t) en MATLAB vamos a realizar algunas operaciones simples con: a) Traslacin: calcular y representar xi(t) = x(t-6). Para este apartado veremos dos soluciones: EJECUTE LAS DOS Y FJENSE BIEN EN LA DIFERENCIA DE MTODO . Solucin 1: Sabemos que la seal es la misma pero todos los puntos se trasladaran de tiempo t a tiempo t+6. Esto es: basta con sumar 6 a la base de tiempos. tl = t + 6; xl = x; Solucin 2: Movemos el vector de valores 6 unidades de tiempo hacia delante (y hacemos crecer la base de tiempos). t__aux = 0.05:0.05:6; % Tres unidades de tiempo % No empieza en cero porque lo vamos a % aadir por la derecha L6 = length(t_aux); % Averiguar cuantos valores son los 6 segundos x__aux = zeros (1,L6) ; % Ceros para poner por la izda xl = [x__aux x] ; % Los valores son los mismos % (con ceros por delante) tl = [t max(t)+t_aux]; % Crear nueva base de tiempos

Figura 18.- Seal desplazada 6 segundos. b) Escalado : calcular y representar x2(t) = x(2t). Sabemos que la serial es la misma pero "comprimida" (a la mitad). Por tanto, el punto situado en t pasara a t/2. Esto es: basta con dividir por 2 la base de tiempos.

t2 = t/2; % Tres unidades de tiempo x2 = x;

Figura 19.- Seal comprimida a la mitad. Ntese que haciendo esto hemos dividido por dos el "incremento temporal'' de la base de tiempos (los tiempos ahora estn separados 0.025 segundos). c) Reflexin: calcular y representar x6(t) = x(-t). Ahora se trata de que el punto situado en t pasar a -t. La primera idea es cambiar de signo la base de tiempos. Eso es correcto pero no es suficiente porque tanto la base de tiempos como el vector de valores estn en orden inverso al que debieran. Eso debemos resolverlo invirtiendo ambos vectores. t6 = -t; % Base de tiempos invertida x6 = x; % Los valores son los mismos final = length(t6); t6 = t6(final:-!:!); x6 = x6(final:-!:!); % Invertir

Figura 20.- Seal reflejada. d) Sumar: sumar x(t) y Xj(t) (la seal del apartado a). Para sumar dos seales no hay mas que sumar los valores pero DEBEMOS TENER IA MISMA BASE DE TIEMPO PARA AMBAS SEALES Si conservamos las variables xl y tl tenemos mucho hecho (se refiere a las variables del apartado a, solucin 2). Viendo que tl es la misma base de tiempos de x pero extendida 6 unidades de tiempo no hace falta mas que extender igualmente la base de tiempos de x (y aadir el nmero adecuado de ceros a los valores de x). Lextra = length(t1) - length(t); %Diferencia de longitudes temporales (en nmero de valores) t = t1 % Extendemos la base de tiempo de x x = [x zeros(1,Lextra)]; % Aadimos ceros a x t4 = t; x4 = x+x1; % Calcular la seal suma (x4)

Figura 21 Seal suma Pregunta 6 Si les da tiempo, generar la seal x(t) de la figura y calculen y representen las seales: x1 = x(t-2), x2 = x(t/6), x6 = x(-t), x4 = x(t) - x1(t)

1.4 Concepto de Sistema Ahora vamos a realizar en MATLAB un par de sistemas sencillos. Hemos definido un sistema como cualquier ente capaz de transformar seales, es decir, que realiza operaciones sobre las seales. Para afianzar la idea de que un sistema transforma seales vamos a emplear el concepto de funcin de MATLAB, para crear nuestros primeros sistemas. Un sistema lo vamos a definir como una funcin que podemos crear con el editor de MATLAB ( o con cualquier otro editor) utilizando un encabezamiento del tipo: Function [y, ty] = nombre(x, tx) % % Instrucciones que generen y y ty % ( a partir de x y de tx) % %Estas instrucciones se graban en Nombre.m Obsrvese que hemos querido reforzar la idea de que una seal en MATLAB es una base de tiempos y un vector de valores. La funcin recibe como argumentos los dos vectores de la seal x(t) (entrada) y devuelve como resultados los dos vectores de la seal y(t) (salida). Por ejemplo, para implementar el sistema que eleva al cuadrado (y(t)= [x(t)] 2 podemos usar la funcin: function [y,ty] = Cuadrado (x , tx) ty = tx; % La base de tiempos es la misma y = x.A2; % Los valores se elevan al cuadrado

Si conservamos las variables t y x del apartado anterior podemos probar esta funcin: [y, ty] = Cuadrado (x , t) ; % Fjense en la diferencia entre el nombre % de la variable t y el del argumento tx Obtenemos la siguiente seal (recordemos que habamos extendido la base de tiempos hasta t=6):

Figura 22.- Seal del apartado 4 elevada al cuadrado. Ejercicio: crear una funcin que desplace la seal de entrada to unidades de tiempo hacia la derecha (es decir: implementen el sistema: y(t) = x(t-to)). Ntese que la funcin deber recibir al menos to como parmetro de entrada adicional, con lo que el encabezado ser: function [y,ty] = Desplazamiento (x,tx,tO) Nota.- Probablemente, tambin ser necesario conocer el incremento temporal que existe entre los valores de la base de tiempos de entrada. Podemos aadirlo como parmetro pero ,Podemos deducirlo a partir de tx? Bibliografa [1] C. Burrus, J. McClelland, A. Oppenheim, T. Parks, R. Schafer, and H. Scuessler, editors. Computer-based exemses for Signal Processing using MATLAB. Prentice-Hall, 1994 [2] John Eaton. Octave Documentation. GNU, 1997 (En fotocopiadora). [6] A.V. Oppenheim and R.W. Schafer, Discrete-Time Signal Processing. Prentice-Hall, 1989. [4] A.V. Oppenheim, A.S. Willsky, and I.T. Young. Signals and Systems. Prentice-Hall, 1986.

UNIVERSIDAD SURCOLOMBIANA FACULTAD DE INGENIERA, PROGRAMA DE ELECTRNICA Laboratorio de

Procesamiento Digital de Seales Prctica 2


OBJETIVO

Esta prctica pretende reforzar los conocimientos adquiridos en clase de teora sobre la convolucin. La convolucin se puede ver como una operacin entre seales que adems es el fundamento de todos los sistemas lineales e invariantes (ya que todo sistema LTI se puede formular como una convolucin). Al realizar esta prctica se encontraran con una serie de ejercicios de clculo de convolucin que tendrn que realizar con ayuda del computador. Lo ms conveniente (como se les irn recomendando a lo largo del texto), es comprobar los resultados de esos ejercicios con los resultados que pueden obtener analticamente. 2 La Integral de Convolucin en Tiempo Continuo 2.1 Introduccin Objetivo: reforzar los conceptos tericos sobre convolucin, comprender las limitaciones del computador para trabajar con las seales y su convolucin, comparar los resultados del computador con los analticos. La prctica propone ejercicios sobre convolucin de dificultad creciente. Los primeros ejercicios se explican muy detalladamente en el enunciado, los siguientes deben ser resueltos por los alumnos utilizando los conocimientos de teora y los que se van ido obteniendo de ejercicios anteriores. Duracin: Una o dos sesiones. 3.2 Convoluciones de Seales Sencillas 3.2.1 Convolucin de Seales Finitas Vamos a calcular la convolucin entre dos seales x(t) y h(t) que, en este caso, van a ser iguales. x y h van a ser (ambas) un pulso rectangular centrado en t=0, de amplitud 1 y que

se extender desde t=-l a t=l. Si dibujamos esa seal antes de intentar introducir en MATLAB, k grafica seria:

Vamos a ver ahora (aunque esta parte pertenece a la prctica anterior) como generada en MATLAB: t = -5:0.1:5; % Base de tiempos (comn) L = length (t); % Longitud pi = find(t==-l); p2 = find(t==l); % Localizar los puntos x = zeros(1,L); x(pl:p2) = 1; % Pulso entre -1 y 1 h = x; % h es igual a x Despus de esto podemos representar x (o h) con plot(tpc) obteniendo:

Y ahora implemente elaborando un programa en MATLAB que realice la funcin "Convolucin" con la instruccin Function para calcular y(t)=x(t)*h(t). Ntese que el resultado es una seal que nos viene dada con un vector de valores y una nueva base de tiempos. Si representamos el resultado con un plot, obtendremos:

Pregunta 1.- Comprueben analticamente el resultado de esta convolucin calculndola como se vi en su asignatura Seales y Sistemas.

Como segundo ejercicio, deben realizar la convolucin de las siguientes seales: --x(t): pulso triangular centrado en t=0, altura 1, entre t=-2 y t=2. - h(t): pulso rectangular de altura 1, entre t=0 y t=2. Las seales descritas son (grficamente):

Ntese que para generar el tringulo es necesario calcular las ecuaciones de dos rectas (recuerden como se hizo en la practica anterior). Los resultados en MATLAB debern ser

Pregunta 2.- Comprueben analticamente el resultado de esta convolucin calculndola como hemos visto en clase de teora. 2.6.2 Convolucin con Seales Infinitas La convolucin donde intervienen seales infinitas en tiempo son imposibles de calcular en MATLAB ya que no se puede tener un vector de valores de tamao infinito. Sin embargo, vamos a hacer algunos ejemplos donde veremos que si es posible hacer clculos aproximados. Empezaremos por una seal que podramos llamar "cuasi-fmita" como es el caso de 3 3 2t h(t ) = e u (t ) 2 "cuasi-finita" porque a partir de t~2 sus valores son prcticamente nulos). Lo llamamos h(t) porque la intencin es interpretarlo como un sistema que va a recibir varias entradas, esto es: vamos a hacer convolucin de esta seal con varias seales x(t) diferentes. Como curiosidad interesante, esta seal es la respuesta al impulso de un sistema definido por un circuito lineal, se trata del siguiente circuito RC (donde el producto RC, llamado constante de tiempo, debe valer 2/6 segundos):

Vamos a empezar haciendo la convolucin de h(t) con el pulso del apartado anterior. Esto es:

Para resolver este problema deben decidir hasta que valor de t van a tomar valores de la exponencial (debe ser un valor donde h(t) ya sea muy pequeo). Los resultados en MATLAB deben ser

Pregunta 6.- Comprueben analticamente el resultado de esta convolucin calculndola como hemos visto en clase de teora.

Pregunta 4.- Este ejercicio tambin se puede resolver analticamente utilizando la teora de circuitos que estudiaron en la primera parte de la carrera. Se trata de un circuito RC en rgimen transitorio. La entrada, x(t), pasa de 0 a 1 en el instante t=0 provocando que i(t) deje de ser nula y que el condensador se empiece a cargar. Si no cambiara nada, la situacin en tiempo infinito seria de tensin de salida 1 y corriente 0 (condensador a tope de carga). Sin embargo en t=2, con el condensador a media carga, x(t) baja a 0 generando un segundo transitorio. En ese segundo transitorio el condensador se descargara llegando a tensin nula en el infinito (descarga total). Comprueben que si resuelve el circuito usando las leyes de Kirchoff (y las ecuaciones diferenciales que generan), el resultado para y(t) es el mismo. Ahora vamos a cambiar la seal de entrada por x(t)=u(t). Ntese que vamos a aumentar considerablemente la complicacin porque se trata de dos seales infinitas y, adems, la x(t) no tiende a cero como si hace la h(t). No queda ms remedio que truncar la seal u(t) y, aunque escojamos un valor grande, realmente vamos a convertir x(t) en un pulso finito (como el del ejercicio anterior). A continuacin, presentamos los resultados de truncar u(t) en t=5 (final de nuestra base de tiempos). Vase lo parecidos que son los resultados con los del ejercicio anterior.

Para interpretar estas grficas (intentando saber que es correcto y que no) podemos recordar el circuito de la figura 6. Si la entrada es u(t) tendremos un nico transitorio que acaba con la carga completa del condensador y el potencial de salida a 1. Es decir: y(t) alcanza asintoticamente el valor 1 y nunca decrece. El decrecimiento a partir de t=5 que se ve en la figura 9 se debe a la aproximacin de cortar u(t) a partir de t=5. Si suponemos que u(t) se trunca hasta tiempo to, pueden dibujar las graficas de h(t) y x(t- t) y comprobar que no hay diferencia en el resultado de convolucin hasta t=to. (a partir de ese punto comienzan los errores que podemos llamar "efectos de borde" ya que se deben a que toda seal simulada debe tener un final o borde). Pregunta 5.- Dibujar las seales h(T) y x(t- t) como se propone en el prrafo anterior (consideren x(t) truncada en un instante genrico t=to).

Pregunta 6.- Calcular analticamente la convolucin de x(t) y h(t) (sin truncar ninguna seal) y compruebe que la grafica de MATLAB solo es correcta hasta t=5. Pregunta 7.- Calcular y(t) utilizando teora de circuitos. E1 resultado debe ser idntico al de la pregunta 6. 2.6.6 Convolucin con Seales Peridicas Vamos a terminar la prctica con un ejemplo de seales peridicas. Mantendremos h(t) igual a la del apartado anterior (seal exponencial que adems es respuesta al impulso de un circuito RC) y haremos x(t) = cos(2ftt). Cuando una de las dos seales de una convolucin es peridica, el resultado es peridico con el mismo periodo (no vamos a ver el caso en que las dos seales no 2 To = =1 2 sean peridicas). En este caso, x(t) es peridica con periodo fundamental seg con lo que la salida y(t) tambin deber serlo. Ntese que si interpretamos la convolucin como el calculo del potencial de salida de un circuito, este caso es un ejemplo de anlisis en rgimen senoidal permanente (que podra resolverse utilizando fasores). El problema de resolver esta convolucin utilizando MATLAB es muy parecido al del ejercicio anterior. Esto es: all donde trunquemos el coseno van a aparecer problemas ya que es una seal infinita y nos estamos quedando con un trozo. Tomando el coseno entre t=-5 y t=5 se obtiene (en MATLAB):

En la grfica anterior solo podemos fiarnos de los resultados entre t= -4 y t=4 (aproximadamente). En este rango vemos que la seal de salida es peridica de periodo 1. Es ms: la salida es tambin un coseno, esa es una propiedad de los sistemas LTI que todava no hemos visto: la respuesta a un coseno siempre es otro coseno (donde puede cambiar la amplitud y la fase). Pregunta 9.- Utilicen la tcnica de los fasores para calcular la salida del circuito de la figura 6. Entre t= -4 y t=4 debera ser igual a la grfica de MATLAB. Pregunta 10.- De donde hemos sacado el intervalo de valores fiables: t= -4 y t=4? Consejo: dibujar x(t-i) y h(i) y ver en que rango de t el dibujo es equivalente al que se tendra con un coseno infinito. Ntese que es aproximado y que suponer que va de -4 a 4 es equivalente a suponer que la exponencial ya esta muy debilitada en t=l.

Pgina 17

Bibliografa [1] C. Burrus, J. McClelland, A. Oppenheim, T. Parks, R. Schafer, and H. Scuessler, editors. Computer-based exemses for Signal Processing using MATLAB. Prentice-Hall, 1994 [2] John Eaton. Octave Documentation. GNU, 1997 (En fotocopiadora). [6] A.V. Oppenheim and R.W. Schafer, Discrete-Time Signal Processing. Prentice-Hall, 1989. [4] A.V. Oppenheim, A.S. Willsky, and I.T. Young. Signals and Systems. Prentice-Hall, 1986.

Pgina 18

UNIVERSIDAD SURCOLOMBIANA FACULTAD DE INGENIERA, PROGRAMA DE ELECTRNICA

Laboratorio de

Procesamiento Digital de Seales Prctica 3


MUESTREO INTERPOLACIN Y ALIASING OBJETIVO: Observar el muestreo de una seal y el efecto conocido como Alising. MATERIAL Y EQUIPO: Computadora con MATLAB FUNDAMENTOS TEORCOS Si la frecuencia ms alta contenida en una seal analgica xa(t) es Fmax y la seal se muestrea a una tasa Fs >2 Fmax, entonces xa(t) se puede recuperar totalmente a partir de sus muestras mediante la siguiente funcin:

Si el criterio no es satisfecho, existirn frecuencias cuyo muestreo coincide con otras (el llamado aliasing).

Pgina 19

DESARROLLO: 1. Simular el muestreo de la seal y(t) a una frecuencia de muestreo de 10 Hz y graficarla.

2. Recuperar la seal analgica y(t) utilizando las muestras obtenidas en el punto 1 y aplicando la sumatoria de funciones de interpolacin.

3. Simular el muestreo de una onda sinusoidal pura de 300 Hz. Utilizar una frecuencia muestreo de 800 Hz. 4. Simular el muestreo de las ondas sinusoidales puras cuyas frecuencias se indican en los incisos a, b, c, d y e a una frecuencia de muestreo de 800 Hz. a. b. c. d. e. 125 Hz 215 Hz 305 Hz 395 Hz 500 Hz

de

Observar los cambios en las formas de onda de la seal muestreada y la seal recuperada. Graficar en la misma ventana la seal original, la seal muestreada y la seal recuperada. 5. Repetir el punto anterior pero ahora con un periodo de muestreo de 1 ms y con las frecuencias de a. 7525 Hz b. 7650 Hz c. 7775 Hz d. 7900 Hz Observar los cambios en las formas de onda de la seal muestreada y la seal recuperada. Graficar en la misma ventana la seal original, la seal muestreada y la seal recuperada. Pgina 20

6. Encontrar tres seales diferentes que tengan la misma representacin discreta. 7. Establecer conclusiones PROGRAMA DE APOYO %Practica 2. Procesamiento Digital de Senales %Muestreo e interpolacion %Limpiar variables, funciones, ventana de comandos y figuras clear; clc; clf %Constantes f1=4.7 %Armnico de mayor frecuencia de la seal f2=2 %frecuencia de la seal M=3 %Limite superior de la amplitud para la grafica m=-3 %Armnico de menor

%Limite inferior de la

%amplitud para la grafica a=-1 %Tiempo de inicio de la seal b=1 %Tiempo final de la seal fs=10 %frecuencia de muestreo ab=b-a %Intervalo de la seal %Crear el vector de tiempo cuasicontinuo fc=100*f1 %Frecuencia usada para visualizar la seal como analgica tc=1/fc; t=[a:tc:b]; %Crea el vector de tiempo de seal muestreada ts=1/fs; td=[a:ts:b]; %Seal a interpolar yc=sin(2*pi*f1*t)+sin(2*pi*f2*t); %Seal muestreada yd=sin(2*pi*f1*td)+sin(2*pi*f2*td); %Graficar ambas seales subplot(2,1,1) stem(td,yd,'o') title('Seal muestreada') axis([a,b,m,M]) subplot(2,1,2) %Dos cuadros de figura en vertical plot(t,yc) title('Seal original') axis([a,b,m,M]) hold on %Rutina para recuperar la seal original a partir de la muestreada [xm,xn]=meshgrid(t,td);

Pgina 21

aux=(pi/ts)*(xm-xn)+eps; yi=yd*(sin(aux)./(aux)); %Grafica de la seal recuperada plot(t,yi,'r') title('Seal recuperada') axis([a,b,m,M]) hold off CONCLUSIONES Bibliografa [1] C. Burrus, J. McClelland, A. Oppenheim, T. Parks, R. Schafer, and H. Scuessler, editors. Computer-based exemses for Signal Processing using MATLAB. Prentice-Hall, 1994 [2] John Eaton. Octave Documentation. GNU, 1997 (En fotocopiadora). [6] A.V. Oppenheim and R.W. Schafer, Discrete-Time Signal Processing. Prentice-Hall, 1989. [4] A.V. Oppenheim, A.S. Willsky, and I.T. Young. Signals and Systems. Prentice-Hall, 1986.

Pgina 22

UNIVERSIDAD SURCOLOMBIANA FACULTAD DE INGENIERA, PROGRAMA DE ELECTRNICA Laboratorio de

Procesamiento Digital de Seales Prctica 4 CUANTIZACIN


OBJETIVO: Analizar la relacin entre el ruido de cuantizacin, la frecuencia de muestreo y el paso de cuantizacin. MATERIAL Y EQUIPO: Computadora con MATLAB INTRODUCCIN: La cuantizacin se refiere al proceso en el que una seal analgica se aproxima a una seal que puede tomar solamente un nmero finito de valores. La seal digital resultado de la cuantificacin es diferente a la seal analgica que la origin debido a lo que se conoce como error de cuantificacin. El error de cuantificacin se interpreta como un ruido aadido a la seal tras el proceso de decodificacin digital. La cuantificacin no tendr ninguna consecuencia si el ruido aadido con la cuantificacin se mantiene por debajo del ruido presente en la seal analgica original.

DESARROLLO: Hacer un programa en MATLAB que simule la conversin analgica a digital y que recupere la seal original a partir de la seal digital con la sumatoria de Pgina 23

funciones de interpolacin. (Analizar el programa que aparece al final de este documento). Trabajar con la seal definida por:

3. Muestrear la seal a una frecuencia 3 veces mayor a la del armnico de mayor frecuencia y luego digitalizar con una resolucin de 1 unidad. Graficar el muestreo de la seal y su digitalizacin. 4. Reconstruir la seal analgica a partir de sus muestras digitalizadas y compararla con la seal original. Usar una frecuencia de muestreo 3 veces mayor a la del armnico mas alto. 5. Hacer una grafica de la magnitud del error de cuantizacin. Hacer una resta entre la sea muestreada la seal digitalizada. 6. Aumentar la frecuencia de muestreo 20 veces ms y observar si se reduce la magnitud del error. Se debe incrementar la frecuencia de muestreo a 60 veces mayor que el armnico mayor. 7. Regresar ahora a la frecuencia de muestreo anterior (3 veces mayor a la del armnico de mayor frecuencia) y mejorar la resolucin en un factor de 20, es decir usar una resolucin de 0.05 unidades. Observar lo que sucede con la magnitud del error. 8. Simular un la digitalizacin de un convertidor A/D de 3 bits con niveles entre 0 y 5 Volt. 9. Anotar conclusiones CONCLUSIONES Bibliografa [1] C. Burrus, J. McClelland, A. Oppenheim, T. Parks, R. Schafer, and H. Scuessler, editors. Computer-based exemses for Signal Processing using MATLAB. Prentice-Hall, 1994 [2] John Eaton. Octave Documentation. GNU, 1997 (En fotocopiadora). [6] A.V. Oppenheim and R.W. Schafer, Discrete-Time Signal Processing. Prentice-Hall, 1989. [4] A.V. Oppenheim, A.S. Willsky, and I.T. Young. Signals and Systems. Prentice-Hall, 1986.

Pgina 24

UNIVERSIDAD SURCOLOMBIANA FACULTAD DE INGENIERA, PROGRAMA DE ELECTRNICA Laboratorio de

Procesamiento Digital de Seales Prctica 5 OPERACINES CON SEALES


OBJETIVO: Realizar operaciones con seales digitales de audio. MATERIAL Y EQUIPO: Computadora con MATLAB Audifonos INTRODUCCIN: En muchas ocasiones es necesario considerar seales que son el resultado de una pequea transformacin de otra seal. Un tipo importante de este tipo de transformacin en el tiempo es el corrimiento en el tiempo donde la seal original es desplazada en el eje del tiempo, ya sea para atrasarla o adelantarla; para una seal discreta equivale a un corrimiento en la variable independiente n y se representa como x[n-no] (no es el corrimiento). Otro es la inversin en el tiempo donde la seal es vista como una reflexin en el en n=0 y se representa como x[-n]. Adems de estas operaciones estn las suma, resta y multiplicacin entre seales. DESARROLLO: 1. Guardar los archivos de texto con el sonido digitalizado en la carpeta

work de MATLAB.

2. Abrir uno de los archivos para verificar que se trata de datos numricos.

Enseguida se muestra el contenido del archivo

3. Cargar los datos del sonido digitalizado (archivo de texto) al workspace

de MATLAB. Usar la funcin load. Guardar en una variable con el mismo nombre . Se muestra el ejemplo con el archivo datop.

Despus de hacer esto debe aparecer la variable en la workspace

ventana

4. Generar el vector np, nd, nde, ns correspondiente al tiempo de las

variables. Deben tener el mismo nmero de elementos que los que tiene la variable. La variable datop tiene 14001 elementos. Esto se puede ver en la ventana workspace

Entonces el vector de tiempo debe tener 14001 elementos y se genera con la siguiente instruccin

Despus de esto debe aparecer una nueva variable llamada np en el workspace

5. Graficar cada una de las seales usando la funcin stem (usar puntos en la

grafica). Enseguida se muestra el ejemplo para la grfica de datop vs np.

Con esto se obtiene la siguiente grfica

6. Reproducir las seales como sonido a una frecuencia de muestreo de

8000 Hz utilizando la funcin de MATLAB sound(seal, Fs). Fs es la frecuencia de muestreo, en este caso Fs=8000.
7. Reproducir las mismas seales con una frecuencia de muestreo de 5000 y

observar la diferencia en el sonido. Anotar lo que sucede y dar una explicacin. 8. Reproducir las mismas seales con una frecuencia de muestreo de 13000 y observar la diferencia en el sonido. Anotar lo que sucede y dar una explicacin. 9. Obtener la suma de las cuatro seales y guardarla en una variable con nombre datosuma. 10. Graficar la seal datosuma y reproducirla como sonido. 11. Realizar las operaciones necesarias para concatenar las cuatro seales en el mismo orden que en (1) dndoles un espaciamiento de 2000 muestras y guardarlas en la seal datosconcatenados. Graficar y reproducir. 12. Invertir la seal datosconcatenados y guardalos en invertida. 13. Graficar y reproducir la seal invertida CONCLUSIONES

UNIVERSIDAD SURCOLOMBIANA FACULTAD DE INGENIERA, PROGRAMA DE ELECTRNICA Laboratorio de

Procesamiento Digital de Seales PRCTICA 6 RESPUESTA DEL SISTEMA


OBJETIVO Obtener la respuesta de un sistema discreto por medio de la convolucin y la evaluacin directa de las ecuaciones de diferencias. MATERIAL Y EQUIPO: Computadora con MATLAB INTRODUCCIN: La convolucin discreta es una operacin matemtica entre dos seales discretas (el smbolo de la operacin es un * asterisco) que tiene gran importancia en procesamiento digital de seales ya que la respuesta y[n] de un sistema lineal e invariante en el tiempo se puede obtener a partir de su respuesta al impulso h[n] y la seal de entrada x[n].

La convolucin discreta est definida por la sumatoria

Un sistema discreto lineal e invariante en el tiempo puede ser descrito matemticamente por una ecuacin de diferencias de coeficientes constantes de la forma,

Esta ecuacin describe la relacin entre la seal de salida y la seal de entrada. Se puede ver que estn involucrados los valores de instantes actuales as como de instantes anteriores tanto para la seal de entrada como para la de salida. De esta expresin se puede despejar el valor actual de la seal de salida y[n] con lo que se obtiene,

Donde se puede ver que la ecuacin de diferencias da una forma recursiva para obtener la salida actual del sistema utilizando los valores de la seal de entrada previos as como el actual y tambin los valores previos de la misma seal de salida. MATLAB cuenta con una funcin que evala este tipo de ecuacin de diferencias dada una cierta seal de entrada. La funcin se denomina FILTER. FILTER filtro digital. Y = FILTER(B,A,X) filtra los datos del vector X con el filtro descrito por los vectores A y B. La funcin FILTER evala la siguiente ecuacin de diferencias. a(1)*y(n) + a(2)*y(n-1) + a(3)*y(n-2) + ... = b(1)*x(n) + b(2)*x(n-1) + b(3)*x(n-2) + ... Donde B=[b(1) b(2) ], A=[a(1) a(2) ], X= seal de entrada DESARROLLO: 1. Hacer una funcin que calcule la convolucin de dos funciones. 2. Obtener la convolucin de x[n] y y[n] definidas a continuacin.

3. La respuesta al impulso de un sistema discreto lineal e invariante en el tiempo es h[n]. Qu respuesta tendr este sistema si se le aplica la seal x[n] definida a continuacin? (Utilizar la convolucin).

Solucin

4. Hacer una funcin que genere una secuencia exponencial del tipo a . n (ejemplo 0.7 ). 5. Obtener la respuesta de un sistema discreto lineal e invariante cuando la entrada es x[n]. La respuesta al impulso del sistema es h[n]. Graficar la seal de entrada, la seal de salida y la respuesta al impulso del sistema.

8. Un sistema esta descrito por la ecuacin de diferencias donde x[n] es la entrada y y[n] es la salida. Calcular y graficar la respuesta al impulso y al escaln unitario. 9. Se tiene un diferenciador digital descrito por: Obtener la respuesta de este sistema para las siguientes entradas Pulso rectangular Pulso triangular pulso sinusoidal CONCLUSIONES: Bibliografa [1] C. Burrus, J. McClelland, A. Oppenheim, T. Parks, R. Schafer, and H. Scuessler, editors. Computer-based exemses for Signal Processing using MATLAB. Prentice-Hall, 1994 [2] John Eaton. Octave Documentation. GNU, 1997 (En fotocopiadora). [6] A.V. Oppenheim and R.W. Schafer, Discrete-Time Signal Processing. Prentice-Hall, 1989. [4] A.V. Oppenheim, A.S. Willsky, and I.T. Young. Signals and Systems. Prentice-Hall, 1986.

UNIVERSIDAD SURCOLOMBIANA FACULTAD DE INGENIERA, PROGRAMA DE ELECTRNICA Laboratorio de

Procesamiento Digital de Seales Prctica 7 DESARROLLO EN FRACCIONES PARCIALES Y GRAFICAS DE POLOS Y CEROS
OBJETIVO: Obtener el desarrollo de fracciones parciales y las graficas de polos y ceros con ayuda de MATLAB. MATERIAL Y EQUIPO: Computadora con MATLAB INTRODUCCIN: Una operacin que debe hacerse con frecuencia en el clculo de la respuesta del sistema es el desarrollo en fracciones parciales, para que permita el uso de tablas de transformadas. Para esta operacin se cuenta con la funcin de MATLAB residuez. Las grficas de polos ceros de la funcin de transferencia son muy importantes ya que nos dan informacin sobre la dinmica del sistema. MATLAB cuenta con la funcin zplane que permite realizar este tipo de grficas de forma simple introduciendo los coeficientes de la funcin de transferencia DESARROLLO: Hacer el desarrollo en fracciones parciales y las grficas de polos y ceros de las siguientes funciones.

UNIVERSIDAD SURCOLOMBIANA FACULTAD DE INGENIERA, PROGRAMA DE ELECTRNICA Laboratorio de

Procesamiento Digital de Seales Prctica 8 RESPUESTA EN FRECUENCIA


OBJETIVO: Aplicar las funciones de MATLAB para obtener la respuesta en frecuencia de sistemas discretos. MATERIAL Y EQUIPO: Computadora con MATLAB INTRODUCCIN: Una de las caractersticas de un sistema lineal e invariante en el tiempo es que la respuesta en estado estacionario del sistema a una entrada sinusoidal es otra seal de tipo sinusoidal; la diferencia entre estas es solamente de magnitud y fase. Si conociramos la forma en que afecta el sistema a una entrada sinusoidal de cualquier frecuencia podramos determinar su respuesta a cualquier seal de entrada ya que todas las seales se pueden considerar como una combinacin lineal de seales sinusoidales. Por eso resulta conveniente caracterizar a los sistemas con su respuesta en frecuencia, es decir con la informacin sobre el cambio que produce en la magnitud y en la fase de las seales sinusoidales de entrada antes de llevarlas a la salida. DESARROLLO: Obtener la respuesta en frecuencia y la respuesta al impulso de los siguientes sistemas. Utilizar preferentemente la funcin FVTOOL a)

b)

c)

CONCLUSIONES:

Bibliografa [1] C. Burrus, J. McClelland, A. Oppenheim, T. Parks, R. Schafer, and H. Scuessler, editors. Computer-based exemses for Signal Processing using MATLAB. Prentice-Hall, 1994 [2] John Eaton. Octave Documentation. GNU, 1997 (En fotocopiadora). [6] A.V. Oppenheim and R.W. Schafer, Discrete-Time Signal Processing. Prentice-Hall, 1989. [4] A.V. Oppenheim, A.S. Willsky, and I.T. Young. Signals and Systems. Prentice-Hall, 1986.

UNIVERSIDAD SURCOLOMBIANA FACULTAD DE INGENIERA, PROGRAMA DE ELECTRNICA Laboratorio de

Procesamiento Digital de Seales Prctica 9 ANALISIS ESPECTRAL


OBJETIVO: Utilizar la transformada rpida de Fourier para obtener la descomposicin de una seal discreta en sus armnicos. MATERIAL Y EQUIPO: Computadora con MATLAB INTRODUCCIN: El anlisis espectral se refiere al proceso de descomposicin de una seal en sus componentes de frecuencia. Con este anlisis se obtiene de cada componente de frecuencia una magnitud y una fase que representan lo que conocemos como transformada de Fourier. Para el caso de seales discretas se tiene la correspondiente transformada de Fourier de tiempo discreto (DTFT), la cual es una representacin de la misma seal pero en el domino de la frecuencia discreta. Con la DTFT se obtiene una funcin continua de la frecuencia discreta q ue s e pue de obtener directamente de la expresin matemtica que la define,

(1) Si la seal a analizar fuera de duracin infinita seria imposible evaluar numricamente la expresin anterior debido a las limitaciones de memoria en los equipos de cmputo. Sin embargo si la seal es de duracin finita entonces la ecuacin se puede calcular para cualquier valor de frecuencia. Desafortunadamente la cantidad de operaciones y los requerimientos de memoria aumentan de forma exponencial con el nmero de muestras. Para sobrepasar este inconveniente se defini una nueva transformada denominada transformada discreta de Fourier DFT que equivale al desarrollo en series de Fourier

para la seal a analizar. Para esto se supone que la seal representa solo un periodo de una seal ficticia de la cual se calcula su serie. Adems se desarrollo la trasformada rpida de Fourier FFT que calcula la DFT mediante un la algoritmo que realiza las operaciones de forma eficiente. Existe una rutina en MATLAB fft que calcula la FFT y que puede usarse para analizar espectralmente una secuencia de duracin finita. La funcin regresa el mismo nmero de datos que los que se ingresan. Si se utiliza una secuencia de 10 elementos la fft regresa 10 datos que representan los componentes de frecuencia de la secuencia original espaciados por 2/N radianes, donde N representa el nmero de muestras de la seal. El orden en que la funcin fft de MATLAB entrega los componentes de frecuencia es diferente a como estamos acostumbrados a graficarlos (frecuencias positivas a la derecha y negativas a la izquierda), nos da los componentes de frecuencia negativa a la derecha despus del ultimo componente de frecuencia positiva. Para ordenar los componentes de frecuencia en el orden acostumbrado se utiliza la funcin fftshift. Otras funciones comunes en el anlisis espectral son abs y angle la primera para obtener el valor absoluto de una seal compleja y la segunda para la fase. DESARROLLO: 1. Graficar el contenido espectral de la seal

x[n] = cos(0.1 n )

usando la transformada rpida de Fourier. 2. Generar una seal cuyas frecuencias espectral junto con la secuencia. sea: 0.9* graficar su contenido Y

3. Generar una seal con tres tonos diferentes sobrepuestos cuyas frecuencias son 0.1, 0.3 0.7 y graficar su contenido espectral junto con la secuencia. En este caso la expresin matemtica para la seal a analizar es una suma de tres funciones coseno a las frecuencias mencionadas.. 4. Analizar el contenido espectral de la seal impulso unitario localizado en n=100 con 0<n<200. Aqu hay que generar la secuencia definida desde n=0 hasta n=200 con un impulso unitario en n=100 y despus aplicar la fft. 5. Analizar el contenido espectral de la seal impulso unitario localizado en n=0 con 0<n<200. Se procede igual que en 4. 6. Analizar el contenido espectral de las siguientes seales -20<n<40 Pulso rectangular -100<n<200 pulso sinusoidal

7. un pulso rectangular con inicio en n=100 y fin en 150 con 0<n<200. Igual pero se genera un pulso en lugar de un impulso. CONCLUSIONES: Bibliografa [1] C. Burrus, J. McClelland, A. Oppenheim, T. Parks, R. Schafer, and H. Scuessler, editors. Computer-based exemses for Signal Processing using MATLAB. Prentice-Hall, 1994 [2] John Eaton. Octave Documentation. GNU, 1997 (En fotocopiadora). [6] A.V. Oppenheim and R.W. Schafer, Discrete-Time Signal Processing. Prentice-Hall, 1989. [4] A.V. Oppenheim, A.S. Willsky, and I.T. Young. Signals and Systems. Prentice-Hall, 1986.

UNIVERSIDAD SURCOLOMBIANA FACULTAD DE INGENIERA, PROGRAMA DE ELECTRNICA Laboratorio de

Procesamiento Digital de Seales Prctica 10 FILTROS DIGITALES DE RESPUESTA INFINITA AL IMPULSO IIR
OBJETIVO: Comparar la respuesta en frecuencia de los filtros de respuesta infinita al impulso. MATERIAL Y EQUIPO: Computadora con MATLAB INTRODUCCIN: Un filtro electrnico es un elemento que discrimina una determinada frecuencia o gama de frecuencias de una seal que pasa a travs de l, pudiendo modificar tanto su amplitud como su fase. Existen diferentes tipos de filtros, segn la respuesta en frecuencia que se desee de estos, as que se puede requerir de filtros pasa bajas, pasa altas, pasa banda o rechazo de banda. Cualquiera de las respuestas en frecuencia deseadas se puede obtener con diferentes tipos de filtros que tiene caractersticas especiales en las bandas de paso, de transicin o de rechazo. Los filtros ms comunes son los que se muestran en la figura 1. El filtraje se puede obtener de forma analgica o digital.

Figura 1. Grficas de respuesta en frecuencia de los principales tipos de filtros donde se muestra sus diferencias en las bandas de paso, de rechazo y de transicin. DESARROLLO: Comparar la respuesta en frecuencia de los diferentes tipos de filtros digitales IIR. 1. Para un filtro pasa bajas de quinto orden, una frecuencia de corte de 0.5 radianes y rizo de 1 dB (donde aplique). 2. Para un filtro pasa banda de orden 10, frecuencias de corte en 0.3 y 0.6 radianes y rizo de 1 dB. 3. Comparar la respuesta en frecuencia del filtro Chebyshev tipo 1 pasa bajas para una frecuencia de 0.3 rad y rizos de 1 dB, 3 dB y 6 dB. 4. Comparar la respuesta en frecuencia del filtro Chebyshev tipo 2 pasa altas para una frecuencia de corte de 0.3 rad y rizos de 1 dB, 3 dB y 6 dB. 5. Comparar la respuesta en frecuencia del filtro Elptico pasa bajas para una frecuencia de corte de 0.3 rad y rizos de 1 dB, 3 dB y 6 dB en banda de paso y de rechazo. CONCLUSIONES: Bibliografa [1] C. Burrus, J. McClelland, A. Oppenheim, T. Parks, R. Schafer, and H. Scuessler, editors. Computer-based exemses for Signal Processing using MATLAB. Prentice-Hall, 1994 [2] John Eaton. Octave Documentation. GNU, 1997 (En fotocopiadora). [6] A.V. Oppenheim and R.W. Schafer, Discrete-Time Signal Processing. Prentice-Hall, 1989. [4] A.V. Oppenheim, A.S. Willsky, and I.T. Young. Signals and Systems. Prentice-Hall, 1986.

UNIVERSIDAD SURCOLOMBIANA FACULTAD DE INGENIERA, PROGRAMA DE ELECTRNICA Laboratorio de Procesamiento Digital de Seales

Prctica 10 FILTROS DIGITALES DE RESPUESTA FINITA AL IMPULSO FIR


OBJETIVO: Comparar la respuesta en frecuencia de los diferentes tipos de filtros de respuesta finita al impulso. MATERIAL Y EQUIPO: Computadora con MATLAB INTRODUCCIN: Los filtros digitales de respuesta finita al impulso (FIR por sus siglas en ingles) son filtros que obtiene la seal de salida usando solamente valores de la secuencia de entrada y ningn valor de la seal de salida, por eso su respuesta a un impulso en la entrada tiene una longitud finita y por lo tanto siempre es estable. Sin embargo tienen la desventaja de necesitar un orden mayor respecto a los filtros IIR para cumplir las mismas caractersticas de respuesta en frecuencia. DESARROLLO: Comparar la respuesta en frecuencia de los filtros digitales que aplican el mtodo de la ventana, la aproximacin por mnimos cuadrados y muestreo en frecuencia. 1. Para un filtro pasa bajas de orden 15, una frecuencia de corte de 0.5 radianes. 2. Para un filtro pasa banda de orden 50, frecuencias de corte en 0.3 y 0.6 radianes. 3. Comparar la respuesta en frecuencia del filtro Chebyshev tipo 1 pasa bajas para una frecuencia de 0.3 rad y rizos de 1 dB, 3 dB y 6 dB. 4. Comparar la respuesta en frecuencia del filtro Chebyshev tipo 2 pasa altas para una frecuencia de corte de 0.3 rad y rizos de 1 dB, 3 dB y 6 dB. 5. Comparar la respuesta en frecuencia del filtro Elptico pasa bajas para una frecuencia de corte de 0.3 rad y rizos de 1 dB, 3 dB y 6 dB en banda de paso y de rechazo.

A continuacin se dan algunos ejemplos para que se realicen la prctica 10 Fundamentacin Terica El filtro digital es la implementacin en hardware o software de una ecuacin en diferencias con una entrada digital.

Respuesta al impulso (convolucin) del filtro:

Ejemplo: Respuesta al impulso de un filtro con coeficientes a(1)=1, a(2)=-0.9, b(1)=1 con MatLab. n=0:49; %seal impulso imp = [1; zeros(49,1)]; %coeficientes del filtro b=1; a=[1 -0.9]; %respuesta al impulso h = filter(b,a,imp); stem(n,h)

Respuesta en frecuencia del filtro:

Ejemplo: % coeficientes del filtro [b,a] = cheby1(12,0.5,200/500); %respuesta en frecuencia [h,f] = freqz(b,a,256,1000); %grafica de la magnitud mag=abs(h); subplot(121) plot(f,m) %grafica de la fase fase=unwrap(f*180/pi); subplot(122) plot(f,fase)

Los filtros digitales tienen: Alta inmunidad al ruido Alta precisin, limitada por los errores de redondeo en la aritmtica empleada Fcil modificacin de las caractersticas del filtro Muy bajo costo

Los filtros se clasifican en filtros FIR (Respuesta impulsional finita) y filtros IIR (Respuesta impulsional Infinita) FILTROS FIR Un filtro FIR de orden M tiene la siguiente funcin de transferencia:

Tiene como funcin de transferencia:

La secuencia b(k) son los coeficientes del filtro Es no recursivo, o sea, la salida depende solamente de las entradas y no de las salidas pasadas La funcin de transferencia slo tiene ceros, excelente estabilidad.

FILTROS IIR Tiene como ecuacin en diferencias:

Tiene como funcin de transferencia:

Es recursivo, o sea, que su salida adems de las entradas depende de las salidas pasadas. Tiene polos y ceros, tiene problemas de estabilidad. La fase no es lineal con la frecuencia El orden del filtro es mucho menor que un filtro FIR para la misma aplicacin

DISEO DE FILTROS DIGITALES El diseo consiste en obtener los coeficientes del filtro para conseguir unos requerimientos especficos. Su implementacin obedece en escoger y aplicar a una estructura particular del filtro esos coeficientes. Los filtros se normalizan a la frecuencia de Nyquist, o sea, a la frecuencia de muestreo dividida por dos:

Por ejemplo, para filtrar 30 Hz con un filtro pasabajas y fs =100 Hz con un Butterworth de orden 5: [b,a] = butter(5,30/50) = butter(5,0.6) Para convertir la frecuencia normalizada a frecuencia angular se debe multiplicar por . Una especificacin ms rigurosa podra ser riple en la banda de paso (passband Rs), atenuacin en la banda de rechazo (stopband-Rp) o en la banda de transicin (ws-wp), etc.

1. DISEO DE FILTROS IIR Hay varios mtodos: a) IIR USANDO FILTROS ANLOGOS Filtro Butterworth Comprende diseos de filtros pasabajo, pasa banda, pasa alto, y banda rechazo. La respuesta en magnitud es plana en la banda de paso. Filtro pasabajo de orden n con frecuencia de corte wn

[b,a] = butter(n,wn) [b,a] = butter(n,wn, ftype) [z,p,k] = butter(n,wn) [z,p,k] = butter(n,wn, ftype) Tipo= high, low, bandpass, bandstop (wn=[w1 w2]) La frecuencia de corte es donde la magnitud del filtro es =1 Para encontrar el orden y la frecuencia de corte dadas las especificaciones: [n,Wn] = buttord(Wp,Ws,Rp,Rs) en

Ejemplo: Pasa banda Se quiere un filtro pasabanda de 100 a 2000 Hz, la banda stop arranca en 500 Hz, la frecuencia de muestreo es de 10 KHz, al menos 1 dB de riple en la banda de paso y al menos 60 dB de atenuacin en la banda stop. [n,Wn] = buttord([1000 2000]/5000,[500 2500]/5000,1,60) %n = 12, Wn = 0.1951 0.4080 [b,a] = butter(n,Wn); [sos,g] = tf2sos(b,a); Hd = dfilt.df2tsos(sos,g); h = fvtool(Hd); set(h,'Analysis','freq')

Filtro Chebyshev Tipo I Minimiza la diferencia entre el ideal y la respuesta de frecuencia actual sobre la banda de paso incorporando un equiriple de Rp dB en la banda de paso. La respuesta en la banda rechazo es plana (maximally flat). La transicin de la banda de paso a la banda de rechazo es ms rpida que en el de Butterworth.

[z,p,k] = cheby1(n,R,Wp) : Filtro pasa bajo z,p,k] = cheby1(n,R,Wp,'ftype') [b,a] = cheby1(n,R,Wp) : Filtro pasa bajo [b,a] = cheby1(n,R,Wp,'ftype') El orden del filtro es n con frecuencia de corte en la banda de paso normalizada en Wp y R dB de riple pico a pico en la banda de paso. Ejemplo: Pasa bajo Para una frecuencia de muestreo de 1000 Hz disear un filtro Chebyshev Tipo I con 0.5 dB de riple en la banda de paso y una frecuencia de borde en la banda de paso de 300 Hz. [z,p,k] = cheby1(9,0.5,300/500); [sos,g] = zp2sos(z,p,k); Hd = dfilt.df2tsos(sos,g); h = fvtool(Hd) set(h,'Analysis','freq')

%Respuesta en frecuencia freqz(b,a,512,1000)

Filtro Chebyshev Tipo II Minimiza la diferencia con el filtro ideal en la banda stop incorporando un equiriple de Rs dB en la banda stop. La respuesta en la banda de paso es plana (Maximally flat).

[z,p,k] = cheby2(n,R,Wst) [z,p,k] = cheby2(n,R,Wst,'ftype') [b,a] = cheby2(n,R,Wst) [b,a] = cheby2(n,R,Wst,'ftype') Ejemplo: Pasa bajo Para una frecuencia de muestreo de 1000 Hz disee un filtro pasa bajo Chebyshev II con atenuacin en la banda stop de 20 dB debajo de la banda de paso y una frecuencia de borde en banda stop de 300 Hz. [z,p,k] = cheby2(9,20,300/500); [sos,g] = zp2sos(z,p,k); % Convert to SOS form Hd = dfilt.df2tsos(sos,g); % Create a dfilt object h = fvtool(Hd); % Plot magnitude response set(h,'Analysis','freq') % Display frequency response

Filtro Elptico Es un filtro equiriple tanto en la banda de paso como en la banda de rechazo. Riple en la banda de paso Rp, riple en la banda stop Rs. Minimiza el ancho de la transicin.

[z,p,k] = ellip(n,Rp,Rs,Wp) [z,p,k] = ellip(n,Rp,Rs,Wp,'ftype') [b,a] = ellip(n,Rp,Rs,Wp) [b,a] = ellip(n,Rp,Rs,Wp,'ftype') Wp frecuencia normalizada en banda de paso, Rp riple en dB en la banda de paso, Rs riple en dB en la banda rechazo. Ejemplo: Pasa bajo Disear un filtro pasa bajo Elptico de orden 6 con fp=300 Hz, 3 dB en la banda de paso y 50 dB de atenuacin en la banda rechazo.

[z,p,k] = ellip(6,3,50,300/500); [sos,g] = zp2sos(z,p,k); % Convert to SOS form Hd = dfilt.df2tsos(sos,g); % Create a dfilt object h = fvtool(Hd) % Plot magnitude response set(h,'Analysis')

RESUMEN .

Ejemplos:

b) DISEO DE IIR EN FORMA DIRECTA Se disea en forma directa especificando la respuesta en frecuencia. El mtodo encuentra la transformada inversa FFT y la resuelve utilizando la ecuacin Yule Walker. [b,a] = yulewalk(n,f,m) La frecuencia f es un vector de 0 a 1, donde 1 representa la frecuencia de Nyquist. La magnitud m es un vector que contiene la respuesta de la magnitud deseada en los puntos de f. Ejemplo: Filtro multibanda de orden 10 m = [0 0 1 1 0 0 1 f = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 1]; [b,a] = yulewalk(10,f,m); [h,w] = freqz(b,a,128); Plot(f,m,w/pi,abs(h)) 1 0 0];

Ejemplo: Filtro pasa bajo de orden 8 f = [0 0.6 0.6 1]; m = [1 1 0 0]; [b,a] = yulewalk(8,f,m); [h,w] = freqz(b,a,128);

plot(f,m,w/pi,abs(h),'--') legend('Ideal','Diseo yulewalk ') title('Comparacin de la respuesta en frecuencia')

2. DISEO DE FILTROS FIR Los filtros FIR tienen las siguientes ventajas: Tienen fase lineal Son siempre estables Eficientes realizaciones en hardware Transientes de duracin finita

La principal desventaja es que el orden del filtro para una similar respuesta es mucho ms alto que la de un filtro IIR.

Respuesta en frecuencia:

A(w) es real si: Simetra par: K1 = 0

Si N es impar: Tipo I

Si N es par: Tipo II

Simetra Impar:

Si N es Par: Tipo IV

MTODOS DE DISEO

a) MTODO DE VENTANEO La truncacin de una secuencia en el dominio del tiempo causa el fenmeno de Gibbs como una discontinuidad en el dominio de la frecuencia. Si hd(n) es la secuencia del prototipo ideal, si se trunca por una ventana rectangular:

La multiplicacin de dos funciones en el dominio del tiempo corresponde a la convolucin de sus Transformadas de Fourier,

Ventana triangular de Bartlett:

Ventanas de coseno generalizado: Rectangular, Hanning, Hamming y Blackman Ventana Rectangular Hanning Hamming Blackman Ventana Kaiser: a 1.0 0.5 0.54 0.42 b 0.0 0.5 0.46 0.5 c 0.0 0.0 0.0 0.8

La ventana rectangular es la mas simple pero presenta el fenmeno de Gobbs. La de Bartlett o triangular reduce el overshoot pero dispersa considerablemente la banda de transicin. Las hanning, Hamming y Blackman proveen una truncacin mas suave y una respuesta de frecuencia mejor. La mejor puede ser la de kaiser que permite ajustar el compromiso entre overshoot y banda de transicin con el parmetro . Considrese un filtro digital ideal pasa bajo con frecuencia de corte wo en rad/seg. Este filtro tiene una magnitud igual a 1 en frecuencias menores a wo y magnitud igual a 0 en frecuencias entre wo y . Su respuesta al impulso es:

Este filtro no es implementable porque su respuesta al impulso es infinito y no causal. Para crear una respuesta de duracin finita hay que truncarlo por medio de una ventana. Ejemplo: Filtro pasabajo de orden 51 con frecuencia de corte wo=0.4 rad/seg, tiene coeficientes: %longitud 51 ventana rectangular n=-25:25; %coeficientes b=0.4*sinc(0.4*n); fvtool(b,1)

Se presenta el efecto Gibbs en la banda de paso, esta distorsin se disminuye si se aplica una ventana tipo haming:

%longitud 51 ventana Hamming n=-25:25; %coeficientes b=0.4*sinc(0.4*n); b = b.*hamming(51)'; fvtool(b,1)

Las Funciones fir1 y fir2 de Matlab basan el proceso en el uso de ventanas. Dado el orden del filtro y la descripcin del filtro deseado, estas funciones retornan la Transformada de Fourier Inversa del filtro con ventana. La multiplicacin de una ventana en el dominio del tiempo causa una convolucin en el dominio de la frecuencia. VENTANAS En diseo de filtros digitales se escoge una ventana para amortiguar los efectos Gibbs que resulta de la truncacin de una seal infinita en el tiempo.

EJEMPLOS: Ventana Rectangular Ventana rectangular de longitud de 50 %ventana rectangular n = 50; w = rectwin(n); wintool

Ventana Bartlett %ventana de Bartlett de 8 n = 8; w = bartlett(n); wintool

%w =[0;0.2857;0.5714;0.8571;0.8571;0.5714;0.2857;0] Ventanas cosenoidales Las ventanas Blackman, Flat Top, Hamming, Hann, and rectangular son casos especiales de de ventanas de coseno. Son combinaciones de secuencias senoidales con frecuencias de 0, 2/N-1, 4/N-1 donde N es el nmero de puntos de la ventana. ind = (0:n-1)' *2 *pi/(n-1); w = A - B* cos(ind) + C* cos(2*ind); Para N=64:

Ventana Kaiser La ventana de Kaiser es una aproximacin para maximizar la energa del lbulo principal frente a los lbulos laterales. El parmetro controla este peso del lbulo principal. n = 50; w1 = kaiser(n,1); w2 = kaiser(n,4); w3 = kaiser(n,9); [W1,f] = freqz(w1/sum(w1),1,512,2); [W2,f] = freqz(w2/sum(w2),1,512,2); [W3,f] = freqz(w3/sum(w3),1,512,2); plot(f,20*log10(abs([W1 W2 W3]))); grid; legend('beta = 1','beta = 4','beta = 9',3)

Para encontrar el orden del filtro se utiliza la funcin: [n,Wn,beta,ftype] = kaiserord(f,a,dev) f: frecuencia de corte de las bandas a: amplitud deseada en las bandas dev: especifica el riple de la banda de paso y la atenuacin de la banda stop, en forma de ganancia absoluta no en dB Para calcular los coeficientes del filtro se usa la funcin fir1: b = fir1(n,Wn,kaiser(n+1,beta),ftype,'noscale')

ftype: es high para pasa alto y stop para banda stop. Para pasa banda puede ser dc-0 so la primera banda es banda stop o dc-1si es pasa banda. Algoritmo

Donde es la atenuacin en banda stop en dB

Donde n es el orden del filtro y w es la regin de transicin ms pequea. EJEMPLOS: Disee un filtro pasabajo con banda de paso definida de 0 a 1 KHz y banda stop de 1500 Hz a 4 KHz. El riple de la banda de paso es del 5% y la atenuacin en la banda stop de 40 dB. %orden del filtro kaiser fs = 8000; fc = [1000 1500]; mag = [1 0]; %5% =0.05, -40dB =20 log(0.01) dev = [0.05 0.01]; [n,Wn,beta,ftype] = kaiserord(fc,mag,dev,fs); h = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale'); freqz(h) %n = 36, Wn = 0.3125, ftype =low, beta = 3.3953

Ejemplo: Disear un filtro pasa banda de longitud impar, usar fir1 %filtro de longitud impar (orden par) fs = 8000; fc = [1000 1300 2210 2410]; mag = [0 1 0]; dev = [0.01 0.05 0.01]; [n,Wn,beta,ftype] = kaiserord(fc,mag,dev,fs); n = n + rem(n,2); h = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale'); [H,f] = freqz(h,1,1024,fs); plot(f,abs(H)), grid on %n = 90, beta = 3.3953, ftype = DC-0

Ejemplo: Disear un filtro pasabajo con corte en la banda de paso de 1500 Hz y corte en banda stop de 2000 Hz, riple en banda de paso de 0.01 y en banda stop de 0.1, frecuencia de muestreo de 8000 Hz. [n,Wn,beta,ftype] = kaiserord([1500 2000],[1 0],[0.01 0.1],8000); b = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale'); %n = 36, Wn = 0.4375, ftype = low USO DE LA FUNCIN: fir1 Para diseo de filtros estndar pasa bajo, pasa alto, pasa banda y banda stop se utiliza fir1

Ejemplo: n = 50; Wn = 0.4; %por defecto es pasa bajo con ventana de hamming b = fir1(n,Wn); En general: b = fir1(n,Wn,'ftype',window) Wn es un nmero entre 0 y 1, donde 1 corresponde a la frecuencia de Nyquist. Si Wn = [ w1 w2] fir1 retorna un filtro pasa banda con w1<w<w2 Si Wn es un vector multielemento W n =[w1 w2 w3 wn] fir1 retorna un filtro multibanda de orden n con bandas 0<w<w1, w1<w<w2, , wn<w<1

El tipo de filtro se programa con ftype: high filtro pasa alto stop para un banda stop, si wn=[w1 w2] es el rango de frecuencias de la banda stop dc-1 la primera banda del filtro multibanda es pasa banda dc-0 la primera banda del filtro multibanda es un banda stop Si h(n) es la Transformada de Fourier Inversa de la respuesta en frecuencia ideal y w(n) es la ventana, los coeficientes del filtro son: B(n)= w(n) h(n), EJEMPLOS Disee un filtro FIR pasa banda de orden 48 con pasa banda de 0.35 w 0.65 % uso de fir1 b = fir1(48,[0.35 0.65]); freqz(b,1,512) 1nN

Disee un filtro FIR pasa alto para que atene las frecuencias posteiores a fc = 0.48 y ventana Chebyshev de 30 dB de riple. %pasa alto b = fir1(34,0.48,'high',chebwin(35,30)); freqz(b,1,512)

USO DE LA FUNCIN: fir2 La funcin fir2 tambin disea filtros FIR ventaneados pero con respuesta de frecuencia lineal arbitraria. En contraste con fir1 que solamente disea filtros estndar. n = 50; f = [0 .4 .5 1]; m = [1 1 0 0]; b = fir2(n,f,m); En general: b = fir2(n,f,m,window) Ejemplo: Filtro pasa bajo de orden 30. %uso de fir2 f = [0 0.6 0.6 1]; m = [1 1 0 0]; b = fir2(30,f,m); [h,w] = freqz(b,1,128); plot(f,m,w/pi,abs(h)) legend('Ideal','diseo con fir2') title('comparacin de magnitudes en respuesta en frecuencia')

b) MTODO DE MULTIBANDA CON BANDAS DE TRANSICIN LEAST SQUARED ERROR Las especificaciones de los filtros estn dada generalmente en el dominio de la frecuencia y puesto que la energa de la seal est relacionada con el cuadrado de la seal, el criterio de error cuadrtico es el indicado. Un mtodo es considerar la integral del cuadrado del error (Integral squared error).

Se trata es de minimizar este error. La DFT es:

La IDFT es:

Diferenciador Un diferenciador ideal puede ser un filtro de fase lineal FIR. La respuesta en frecuencia del diferenciador es:

Los coeficientes del filtro son:

Banda de transicin: Otra forma es minimizar el error aplicndolo a la banda de transicin:

Uso de pesos: Introducir una funcin de peso W(w) al error.

APROXIMACIN DE CHEBYSHEV Minimiza el valor del mximo error y tienen un equiriple en el comportamiento de la respuesta en frecuencia.

El algoritmo de Remes Exchange desarrollado por Parks y McClellan, hace que la funcin de error tome valores de para un conjunto de r+1 frecuencias fm , m=1,, r+1.

Funcin: firls (Least Squares) Minimiza el error cuadrtico medio entre la respuesta de frecuencia deseada y la respuesta de frecuencia actual.

b = firls(n,f,a) b(k) = b(n+2-k)

f: es un vector de parejas de puntos de frecuencias entre 0 y 1, donde 1 corresponde a la frecuencia de Nyquist. a: Es un vector que contiene la amplitud deseada en los puntos especificados de f En forma general: b = firls(n,f,a,w,'ftype') w: es el peso en la banda de frecuencia ftype: hilbert para filtros de fase lineal con simetra impar (tipo III y tipo IV) b(k) = - b(n+2-k). Usa la Transformada de Hilbert differentiator usa tcnica especial de pesos en las bandas Ejemplo: Disee un filtro pasa bajo de orden 255 con banda de transicin: %uso firls b = firls(255,[0 0.25 0.3 1],[1 1 0 0]); Usando fdatool

Disear un filtro antisimtrico de orden 24 %filtro antisimtrico de orden 24 F = [0 0.3 0.4 0.6 0.7 0.9]; A = [0 1 0 0 0.5 0.5]; b = firls(24,F,A,'hilbert'); for i=1:2:6, plot([F(i) F(i+1)],[A(i) A(i+1)],'r'), hold on end [H,f] = freqz(b,1,512,2); plot(f,abs(H)), grid on, hold off legend('Ideal','Diseo firls ')

Usando fdatool:

En resumen esta function disea filtros de fase lineal tipo I, II, III, IV. Los tipo I y II son por defecto para n par e impar respectivamente. Los hilbert y differentiator producen tipo III (n par) y IV (n impar) Funcin: firpm (Parks-McClellan) Esta function implementa el algoritmo de Parks-McClellan que usa la teora de Remez y la aproximacin de Chebyshev. Minimizan el mximo error entre la respuesta de frecuencia deseada y la actual. Son filtros equiriple. %uso de firpm n = 20; % orden del filtro f = [0 0.4 0.5 1]; % bordes de la banda de frecuencias a = [1 1 0 0]; % amplitudes deseadas b = firpm(n,f,a); bb = firls(n,f,a); fvtool(b,1,bb,1) legend('firpm','firls')

Ntese que con firls presenta mejor respuesta en la banda de paso y en la banda stop, pero firpm es mejor en la banda de transicin. Mediante trazos de lneas firls y firpm pueden realizar filtros, pasa bajo, pasa alto, banda stop, psasa banda, multibanda. %tipos de filtros con firls o firpm %pasa banda f = [0 0.3 0.4 0.7 0.8 1]; a = [0 0 1 1 0 0]; %pasa alto a = [0 0 1 1]; f = [0 0.3 0.4 0.5 0.8 1]; %banda stop a = [1 1 0 0 1 1]; %multibanda f = [0 0.1 0.15 0.25 0.3 0.4 0.45 0.55 0.6 0.7 0.75 0.85 0.9 1]; a = [1 1 0 0 1 1 0 0 1 1 0 0 1 1]; Uso del vector peso Tanto firls como firpm permiten minimizar el error en ciertas bandas de frecuencias especificando un vector peso. Por ejemplo, un filtro equiriple pasa bajo con riple 10 veces menor en la banda stop que en la banda de paso es: %uso de pesos en las bandas n = 20; % orden del fitro f = [0 0.4 0.5 1]; % bordes de la bandas de frecuencias a = [1 1 amplitudes deseadas w = [1 10]; % vector peso b = firpm(n,f,a,w);

0];

fvtool(b,1)

Filtros antisimtricos/Transformada de Hilbert. Para filtros de simetra impar Tipo III (orden par) o Tipo IV (orden impar) %filtros antisimtricos b = firpm(21,[0.05 1],[1 1],'h'); % Pasa alto Hilbert bb = firpm(20,[0.05 0.95],[1 1],'h'); % pasa banda Hilbert fvtool(b,1,bb,1) legend('pasa alto', 'pasa banda')

La seal analtica de una seal compleja x est compuesta por la parte real de x y la Transformada de Hilbert como la parte imaginaria (orden par).

%seal analtica fs = 1000; % frecuencia de muestreo t = (0:1/fs:2)'; % vector tiempo x = sin(2*pi*300*t); % seal senoidal de 300 Hz xh = filter(bb,1,x); % Transformada Hilbert de x xd = [zeros(10,1); x(1:length(x)-10)]; % 10 muestras de retardo xa = xd + j*xh; % seal analtica Diferenciadores La diferenciacin de una seal en el dominio del tiempo es equivalente a la multiplicacin de su transformada de Fourier por una funcin rampa. Diferenciar una seal es pasarla por un filtro H(w)= jw %diferenciador b = firpm(21,[0 1],[0 pi],'d'); bb = firpm(20,[0 0.9],[0 0.9*pi],'d'); fvtool(b,1,bb,1) legend('diferenciador orden impar','diferenciador orden par')

c) MTODO DEL MNIMO CUADRADO RESTRINGIDO Constrained Least Squares (CLS) La restriccin consiste en que no es necesario definir las bandas de transicin. Permite considerar umbrales ms altos o ms bajos con riple mximo permisible. Funcin fircls1 Se usa para el diseo de pasa bajo o pasa alto. b = fircls1(n,wo,dp,ds) b = fircls1(n,wo,dp,ds,'high')

wo: es la frecuencia de corte normalizada dp: riple en la banda de paso ds: riple en la banda stop %uso de fircls1 n = 55; wo = 0.3; dp = 0.02; ds = 0.008; b = fircls1(n,wo,dp,ds); fvtool(b)

Usando pesos en las bandas: b = fircls1(n,wo,dp,ds,wp,ws,k) Donde k es la relacin entre el error en la banda de paso y el error en la banda stop

%Uso de pesos en fircls1 n = 55; wo = 0.3; dp = 0.02; ds = 0.004; wp = 0.28; ws = 0.32; k = 10; h = fircls1(n,wo,dp,ds,wp,ws,k); fvtool(h,1)

Funcin fircls Se usa para filros FIR multibanda en el cual se pueden especificar la cantidad mxima de riple en cada banda. b = fircls(n,f,amp,up,lo) f: vector de frecuencias de transicin amp: magnitudes up, lo: define los lmites alto y bajo para cada banda

%uso de fircls n=150; f=[0 0.4 1]; a=[1 0]; up=[1.02 0.01]; lo =[0.98 -0.01]; %con despliegue de las bandas b = fircls(n,f,a,up,lo,'both'); fvtool(b)

n = 129; f = [0 0.3 0.5 0.7 0.9 1]; a = [0 0.5 0 1 0]; up = [0.005 0.51 0.03 1.02 0.05]; lo = [-0.005 0.49 -0.03 0.98 -0.05]; h = fircls(n,f,a,up,lo); fvtool(h,1)

IMPLEMENTACIN DE FILTROS DIGITALES Despus de haber diseado el filtro, la funcin de transferencia o ecuacin en diferencias del filtro debe implementarse y hay varias maneras de hacerlo. Estas maneras de realizarlas son representadas en diagramas en bloques y son llamadas estructuras del filtro y se escoge aquella que sea menos sensitiva a los errores en los coeficientes o que minimice el ruido introducido por la cuantizacin de los coeficientes. Funcin dfilt, filter Procedimiento para la implementacin: 1. Se generan los coeficientes del filtro IIR o FIR por el mtodo de diseo apropiado 2. Crear el objeto del filtro de los coeficientes usando dfilt 3. Aplicar al objeto del filtro al dato x usando la funcin filter Por ejemplo, disear, implementar como estructura forma directa traspuesta II y aplicar a un filtro Butterworth %implementacin de filtros [b,a] = butter(5,0.4); Hd = dfilt.df2t(b,a); % Forma directa II transpuesta fs=100;

t=0:1/fs:1; x=sin(2*pi*t*3)+0.25*sin(2*pi*t*40); y=filter(Hd,x); plot(t,x,t,y) legend('x','y')

ESTRUCTURA DE FILTROS 1. IMPLEMENTACIN DE FILTROS IIR a) Forma Directa I: dfilt.df1

%forma directa I [b,a] = butter(4,.5); Hd = dfilt.df1(b,a); num=get(Hd,'Numerator') %num = 0.0940 0.3759 0.5639 0.3759 0.0940 den=get(Hd,'Denominator') %den = 1.0000 -0.0000 0.4860 -0.0000 0.0177 fvtool(b,a)

b) Forma Directa I sos (second order section): dfilt.df1sos El filtro es implementado en cascada por secciones de Segundo orden (tres coeficientes en el numerador y tres coeficientes en el denominador).

Ejemplo: para un filtro ellptico , pasa bajode orden 6, Rs=1, Rp=60 dB, Wp=0.4 %forma directa I sos [b,a] = ellip(6,1,60,.4); % coeficientes del filtro % s: coeficientes g: ganancia de la seccin

[s,g] = tf2sos(b,a);

% Convierte a SOS

Hd=dfilt.df1sos(s,g); get(Hd,'sosmatrix')

fvtool(Hd)

c) Forma Directa I Transpuesta: dfilt.df1t

Ejemplo: [b,a] = butter(4,.5); Hd = dfilt.df1t(b,a); num=get(Hd,'Numerator') %num = 0.0940 0.3759 0.5639 0.3759 0.0940 den=get(Hd,'Denominator') %den = 1.0000 -0.0000 0.4860 -0.0000 0.0177 fvtool(b,a) d) Forma Directa I Transpuesta sos: dfilt.df1tsos

%forma directa I sos [b,a] = ellip(6,1,60,.4); % coeficientes del filtro % s: coeficientes g: ganancia de la seccin [s,g] = tf2sos(b,a); % Hd=dfilt.df1tsos(s,g); get(Hd,'sosmatrix')

Convierte

SOS

e) Forma Directa II: dfilt.df2

Ejemplo: [b,a] = butter(4,.5); Hd = dfilt.df2(b,a) coeffs(Hd) realizemdl(Hd) f) Forma Directa II sos: dfilt.df2sos

Ejemplo: [z,p,k] = ellip(6,1,60,.4); [s,g] = zp2sos(z,p,k);

Hd = dfilt.df2sos(s,g) g) Forma Directa II Transpuesta: dfilt.df2t

Ejemplo: [b,a] = butter(4,.5); Hd = dfilt.df2t(b,a) h) Forma Directa II Transpuesta sos: dfilt.df2tsos

[z,p,k] = ellip(6,1,60,.4); [s,g] = zp2sos(z,p,k); Hd = dfilt.df2tsos(s,g)

2. IMPLEMENTACIN DE FILTROS FIR a) Forma directa FIR: dfilt.dffir

b = firpm(30,[0 .1 .2 .5]*2,[1 1 0 0]); Hd = dfilt.dffir(b) fvtool(Hd) b) Forma directa transpuesta FIR: dfilt.dffirt

b = firpm(30,[0 .1 .2 .5]*2,[1 1 0 0]); Hd = dfilt.dffirt(b) c) Forma directa simtrica FIR: dfilt.dfsymfir

Ejemplo: Orden Par b = [-0.008 0.06 0.44 0.44 0.06 -0.008]; Hd = dfilt.dfsymfir(b) fvtool(Hd) Ejemplo: Orden Impar b = [-0.01 0.1 0.8 0.1 -0.01]; Hd = dfilt.dfsymfir(b) fvtool(Hd) d) Forma directa antisimtrica FIR: dfilt.dfasymfir

Ejemplo: %orden impar tipo IV Hd = firpm(25,[0 .4 .5 1],[0 0 1 1],'h'); fvtool(Hd) %orden par tipo III h=firpm(44,[0 .3 .4 1],[0 .2 0 0],'differentiator'); fvtool(Hd)

e) Forma lattice ARMA (autoregressive, moving-average): dfilt.latticearma

k: coeficientes lattice, v: coeficientes ladder Ejemplo: k = [.66 .7 .44]; Hd = dfilt.latticearma(k)

fvtool(Hd) realizemdl(Hd)

CONCLUSIONES: Bibliografa [1] C. Burrus, J. McClelland, A. Oppenheim, T. Parks, R. Schafer, and H. Scuessler, editors. Computer-based exemses for Signal Processing using MATLAB. Prentice-Hall, 1994 [2] John Eaton. Octave Documentation. GNU, 1997 (En fotocopiadora). [6] A.V. Oppenheim and R.W. Schafer, Discrete-Time Signal Processing. Prentice-Hall, 1989. [4] A.V. Oppenheim, A.S. Willsky, and I.T. Young. Signals and Systems. Prentice-Hall, 1986.

You might also like