universidad autonoma metropolitana $3 l (1.-148.206.53.84/tesiuami/uam1119.pdf · "uso de...
TRANSCRIPT
UNIVERSIDAD AUTONOMA METROPOLITANA I .
. , (1.- $3 L
ETAPALAPA ,. .
REPORTE FINAL DEL PROYECTO TERMINAL
"USO DE MATLAB. EN TRANSFORMmA DE FOURIER,
CONVOLUCIÓN Y FILTROS FIR"' . .
PROFR. FAUSTO CASCO SANCHEZ
ALUMNOS:
CRUZ OLIVA VALENT~N GARCÍA TRINIDAD ANDRÉS
INDICE
INTRODUCCION
I.
11.
111.
IV.
MUESTRE0 a) Teorema del muestreo b) Teorema del muestreo en MATLAB
CONVOLUCI~N a) Convolución en MATLAB
FFT a) Transformada de Fourier b) Transformada Discreta de Fourier c) Ejemplo numérico de una función escalón usando la DFT d) Ejemplo para una función senoidal de O. 125 Hz usando DFT e) Características de la Transformada Discreta de Fourier f) Transformada Rápida de Fomier (FFT) g) Transformada de Fourier en MATLAB
11
18
FILTROS FIR a) FILTROS RIF b) Filtros FIR en MATLAB c) Programa que utiliza la funciónfilter y sampling para filtrar tres señales d) Programa que utiliza la funciónfft y sumpling para filtrar tres sefiales e) Programa que utiliza la función conv y sampling para filtrar tres señales
CONCLUSIONES
BIBLIOGRAFÍA
APÉNDICE
30
61
62
63
1.
INTRODUCCION
El Procesamiento de Señales Digitales, es uno de los temas fimdamentales en la Ingeniería
Electrónica actual, con el advenimiento de la electrónica digital, se ha hecho por demás
necesario que los estudiantes de carreras afines, contemplen en su formación como
profesionales el estudio de este tema tan central. Hoy en día no se requiere buscar muy
lejos para encontrar que muchos de los aparatos electrónicos que nos rodean están
controlados por una lógica digital, por ejemplo los sensores de movimiento, temperatura,
son casos claros de cómo la. informacih que proviene del medio ambiente debe ser
procesada (digitalizada) de tal forma que los dispasitivos digitales actuales (como
computadoras) sean capaces de procesar dicha información p a a los fines que el hombre
requiera en cada caso.
Es por ello que en el trabajo que hemos realizado abordamos temas relacionados con este
tópico tan importante, los cuales además son parte de la curricula que cubren cursos como
el de Comunicaciones I que se imparte en nuestra Universidad Autónoma Metropolitana de
Iztapalapa, y que sirven como inicio a una parte del estudio de procesamiento de señales
digitales. Tales temas son:
0 MUESTRE0
0 CONVOLUCION
o TRANSFORMADA DISCRETA DE FOURIER (DFT)
o TRANSFORMABA RAPIDA DE FOURIER (FFT)
0 FILTROS FIR
L a forma en que se han abordado estos temas es con el auxilio de un software que provee
de herramientas que resultan de mucha utilidad cuando se tratan temas como los que aquí
se estudian. Este software es MATLAB, quien además cuenta con TOOLBOX específico
para el procesamiento de señales, en donde se proporcionan funciones tales como: FFT,
CONV y FILTER, que permiten desarrollar algunas de las actividades que tradicionalmente
.. 11.
con lápiz y papel pueden requerir de mis tiempo y esfuerzo, así can el apoyo de este
paquete los cálculos y construcción de gráficas resulta mucho más inmediato, lo cual
permite hacer exploraciones que pueden promover un mejor entendimiento de lo que se
está realizando, además de que conforme se vaya avanzando permite aplicaciones más
rápidas al estudiante.
El formato general del presente documento, es hacer una muy breve introduccih teórica de
cada tema, y enseguida una descripción de la forma en que dicho tópico puede ser abordado
en MATLAB con apoyo de las funciones que éste provee.
Una aplicación que se muestra es el diseño de filtros FIR, mediante una rutina de
programación, que es otra de las posibilidades que ofrece MATLAB, el diseño de filtros
FIR se ejemplifica con un filtro pasabajas, y mediante el uso de tres diferentes herramientas
que provee el software: FFT, CONV y FILTER.
Al final se agrega un apéndice en el que se hace una muy breve descripción del uso de las
herramientas de MATLAB que utilizamos en este proyecto, sin embargo, para mayor
profundidad al respecto, se recomienda acudir al manual del usuario.
De esta forma, pretendemos realizar un acercamiento inicial al uso de MATLAB, como un
apoyo de algunos de los temas, que permiten avanzar en el estudio del Procesamiento
Digital de Señales.
1
I. MUESTRE0
La mayoría de las señales usadas por ingenieros y científicos son originalmente continuas
en el tiempo o el espacio. Sí estas señalas van a ser procesadas usando computadoras
digitales, entonces estas señales deben ser convertidas de un formato continuo en el tiempo,
a uno que sea discreto en el tiempo, a través del muestreo, debido a que las computadoras
solo procesan sucesiones de números o símbolos. En general, como resultado del muestreo
alguna parte de la información se pierde, pero si la señal continua en el tiempo es limitada
en banda y la razón del muestreo es lo suficientemente alto, entonces poca o ninguna
información se perderá.
Idealmente, la señal original xc(t) y la secuencia muestreada x(n) son relacionadas
simplemente por
x(n) = x,(nT)
donde T es el período de muestreo, lo cual es asumido para propósitos prácticos.
El muestreo usual de una señal continua en el tiempo es el que G(t) es multiplicada por un
tren de impulso periódico p(t) con periodo T para producir la señal muestreada
x&) = xc0) PO)
donde
-m
y también
-m
Haciendo la CTFT de xs(t), y substituyendo x,(nT) = x(n), se tiene
2
Pero esto es justo la DTFT ~ ( 2 " ) con o = n ~ , que implica la relación CTFT/DTFT
X,(JQ) = X(eJ"">
o alternativamente
X(&" ) = X, (jo / T )
Se requiere ahora relacionar el espectro X,(jQ) después de muestreado con el espectro
original X,(in) antes de muestrearlo.
La relación CTFT correspondiente está dada por la convolución
con m
P(jQ) = a, cs (Q -m,) k=-m
donde Q, es la frecuencia de muestre0 0, = 2n/T en radianeshegundo, y así
combinando ecuaciones, podemos expresar la DTFT en términos de l a CTFT original
* m
o equivalentemente
Esta última ecuación muestra como la es periódica con periodo 2n, esto implica
que una componente en frecuencia Q, radianes/segundo en el espectro original X , ( j Q )
será manifestado como w, =ROT radianes en el espectro X ( d w ) y también como - ok =o, + Znk para todos los valores diferentes de cero del entero k. Esto es, que cada
componente de entrada A&' en xc(t) producirá componentes A'e'"'' en x(n) para toda k,
donde A'=A/T. Si IQ,j<nT, entonces Jw$n y de este modo coo estará dentro del intervalo
3
Nyquist joj<x, como era de esperarse. Sin embargo si [R,l>nT, entonces, Icool>n; mientras
que Icr>&~ para algunas otras k#O. Esto es, la componente de X,(jSZ) en 12, presenta en
X(ejw) alguna otra frecuencia o & ~ ~ T en el intervalo Nyquist I o ( < x .
En el último de los casos, se dice que ha ocurrido un "aliasing", y este efecto indeseable
debe ser evitado o minimizado.
a) Teorema del muestreo.
Sin embargo, para evitar "aliasing", cada componente en frecuencia de X,( js2) deberá
satisfacer la condición
IRoI<.nT,
la cual es una versión del conocido teorema del muestreo, también conocido como teorema
de Nyquist's o teorema Shannon's. Definiendo el ancho de banda de la señal original xc(t)
para ser f i b , esto es,
lnol<Rb,
para toda Ro, una versión alternativa del teorema del muestreo es simplemente,
Rs>2Rb ,
en donde Rs=2n/T. En otras palabras, para muestrear una señal analógica h(t), sin
"aliasing", la razón de muestreo o frecuencia Qs, debe exceder dos veces el ancho de banda
de la señal Rb. El límite más bajo 2Rb es conocido como la razón de Nyquist..
b) Teorema del muestreo en MATLAB
Con ayudas de MATLAB, es posible mostrar el teorema del muestreo, como a continuación
se ilustra con el siguiente programa y las gráficas que le corresponden.
%Este programa ilustra el Teorema del Muestreo I I disp('Este programa ilustra el Teorema del Muestreo con una sena1 coseno');
4
jisp('Pu1sa una tecla para desplegar las gr ficas resultantes');
3ause;
%Con esto se produce un tren de impulsos.
3=[1 o o o -11;
;1=[ 1 zeros( 1,127)];
tren=filter( 1 ,a,d);
n=O: 127;
plot(n,tren);
title('Tren de impulsos');
pause;
%Se genera una sena1 coseno con 32 muestras por ciclo.
x=cos(2*pi*n/32);
plot(n,x);
title('Sena1 a muestrear');
pause;
%Se obtiene la respuesta en frecuencia.
[X,w]=freqz(x, 1,128,'whole');
wp=fftshift(w)/pi- 1 ;
pMwp,)O;
title('Respuesta en frecuencia de la seaal');
pause;
%La sena1 es muestreada tomando ocho muestras por ciclo.
%Con esto se logra satisfacer el Teorema del Muestreo.
y=x.*tren;
FWn,Y);
title('Seaa1 muestreada');
pause;
%Se obtiece la respuesta en Erecuencia de la sena1 muestreada.
[Y,w]=freqz(y, 1,128,'whole');
wp=fftshift(w)lpi- 1 ;
11. CONVOLL L. ~ Ó N
Si una sucesión x(n) es utilizada para producir otra sucesión y(n), se puede pensar en estas
sucesiones como la entrada y la salida respectivamente de un sistema discreto en el tiempo
o filtro, como se muestra en la figura.
Si x(n) y y(n) pueden asumir únicamente un número finito de posibles valores-de amplitud,
nosotros llamaremos a este un filtro digital. Por ahora asumiremos que x(n) y y(n) pueden
tener cualquier valor (real) por lo que se trata de un filtro discreto en el tiempo.
Una clase más importante de filtros son aquellos que son lineales e invariables en el tiempo
(LTI). Un filtro discreto en el tiempo, se dice que es lineal si, para cualquier par de
sucesiones de entrada xl(n) y xz(n) que producen respectivamente las sucesiones de salida
y,(n) y yz(n), con lo que la sucesión de entrada
x(n) = axl(n) + bxz(n)
produce la sucesión de salida
para toda a y b. Un filtro invariable en el tiempo, por otro lado, implica que si x(n) produce
y(n), entonces x(n - nd) produce y(n - Q> para toda n y cualquier valor de m. Esto significa
que un retardo en la entrada implica un retardo en la salida.
Si la entrada es la sucesión de impulsos S(n), la salida que resulta es llamada la respuesta al
impulso del filtro y es denotado por h(n).
-
12
La entrada y salida de un filtro discreto y lineal invariable en el tiempo pueden ser
fácilmente relacionadas a través de la respuesta al impulso del filtro como sigue: Cualquier
entrada x(n) puede ser pensada como la suma de un número infinito de retardos y
sucesioness de impulsos, con el kth impulso 6(n -k) de x(k). Matemáticamente podemos
escribir esto como
m
x(n) = C X ( k ) 6 ( M - k ) k =-m
Pero por la invariabilidad en el tiempo, la entrada 6(n -k) producirá la salida h(n - k), y por
linealidad, la salida correspondiente con respecto a la sumatoria anterior es
m
y ( n ) = x(k )h(n - k ) k=-oa
Esto es la suma de corzvolucio'n relacionando la entrada y salida de un filtro discreto en el
tiempo. La cual puede también escribirse como
m
y(n) = c x(n - k)h(k) k=-m
Generalmente se utiliza el símbolo * para denotar convolución, y entonces
Además la operación de convolución es conmutativa, por lo que
x(n) * h(n) = h(n) * x(n)
13
también es asociativa y distributiva, por lo que
otra relación útil es que si y(n) = x(n) * h(n), entonces
x(n - ni) * h(n - n2) = y(n -ni - n2)
con lo que los dos retardos nl y n2 son sumados para producir el el retardo de la salida nl +
n2.
a) Convolución en MATLAB
MATLAB cuenta con una función que permite realizar la operación de convolución entre
dos señales. La cual está descrita en el software como sigue
C O W Convolution and polynomial multiplication. C = CONV(A, B) convolves vectors A and B. The resulting vector is length LENGTH(A)+LENCTH(B)- l. If A and B are vectors of polynomial coefficients, convolving them is equivalent to multiplying the two polynomials.
así de esta forma podemos utilizar está operación en MATLAB para probar algunos
aspectos teóricos que se estudian en la materia de Comunicaciones I.
Ejemplo utilizando MATLAB:
Primeramente se define un vector de n puntos
14
,) n=[ 1501
I =
Columns 1 through 12
1 2 3 4 5 6 7 8 9 1 0 1 1 1 2
Columns 13 through 24
13 14 15 16 17 18 19 20 21 22 23 24
Columns 25 through 36
25 26 27 28 29 30 31 32 33 34 35 36
Columns 37 through 48
37 38 39 40 41 42 43 44 45 46 47 48
Columns 49 through 50
49 50
pulsos
)) p=[ones( I :30) zeros( 1,20)] P =
Columns 1 through 12
1 1 1 1 1 1 1 1 1 1 1 1
Columns 13 through 24
1 1 1 1 1 1 1 1 1 1 1 1
Columns 25 through 36
1 1 1 1 1 1 0 0 0 0 0 0
Columns 37 through 48
0 0 0 0 0 0 0 0 0 0 0 0
Columns 49 through 50
O 0
Podemos entonces observar gráficamente a p y otras como se muestra a continuación.
15
I____] )) plot(n,p,'+')
Sí ahora convolucionamos a p con ella misma, entonces observamos la siguiente gráfica
)) S l=conv(p,p); plot(n,sl ,'+I)
Señal p convolucionada con ella misma 30 I I I
I I I I I I I ++ 1.: + +
+ +
+ +
+ 20
+ +
+ +
+ 15-
+ +
+ +
+ +
10 - + +
+ +
7 : +
l l
O O 10 20 30
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ttk 90
1.: + + + + + +
+ + + +
+ + + +
+ + + + 20
+ + + + +
+ + 15- + +
+ + + +
+ + + +
10 - + + + +
+ + + +
+
7 : + + + +
+ + + +
O I I I I + O 10 20 I
30 40 50 60 1 70 90 1 O0
18
111. TRANSFORMADA DISCRETA DE FOURIER
La serie y transformada de Fourier han desempeñado un papel importante en la
representación de señales y en el análisis de sistemas lineales en el mundo analógico. Con
el auge de las computadoras y las posibilidades que brindan para el diseño de algoritmos, se
hizo necesario más que necesario extender el uso de este tipo de herramientas matemáticas
al mundo discreto.
a) Transformada de Fourier
La transformada de Fourier convierte una función continua en el tiempo a una función
continua en frecuencia, y es una relación compleja
+co
~ ( f ) = f~(l)[cos(zrlft) - j sen(2rcft)pt -m
Parte Real:
Ganancia:
Fase:
b) Transformada Disrret~ de Frurier
La Transformada Discreta de Fourier convierte una función discreta en el tiempo a una
función discreta en frecuencia, y también constituye una relación compleja:
19
1 N - 1
N ¡=O N N 2nik 2nik F ( k ) = - X(i)[cos(-) - j sen(-)]
Para k=O a N-1
Entrada. Constituida por N muestras en el dominio del tiempo, x(O), x(l), x(2), ..., x(N-1),
que son distribuidas en la frecuencia de muestre0 fs.
Salida. Constituida por N términos en el dominio de la frecuencia R(k), I(k), G(k), P(k),
desde k=O hasta N-l. El k-ésimo término corresponderá a la frecuencia fs*k/N. A la
relación entre el término k calculado y la frecuencia real f se le conoce como fkecuencia
escalada. Por ejemplo:
k=O -+ O Hz, DC (la frecuencia menor)
k= 1 -+ fs* 1/N Hz (la frecuencia de la resolución)
k=2 + fs*2/N Hz
k=N- 1 -+ fs*(N- 1)/Hz (la frecuencia más grande)
c) Ejemplo numérico de una función escalón usando la DFT.
Para k=O hasta N-1
Entrada
N=8
x(O)= x( I)= x(2)= x(3)= x(4)= x(5)= x(6)= x(7)= 1
Para fs= 1 Hz
20
Salida
3
Interpretación
La hnción escalón en el dominio del tiempo tiene una ganancia en el dominio de la
frecuencia de 1 en O Hz.
d) Ejemplo para una función senoidal de 0.125 Hz usando DFT
Para k=O hasta N-I
Entrada
N=8
x(0)=.000
x(4)=.000
fs=l Hz
x( 1)=.707
x(5)=.707
x(2)=. 1 .o00
x(6)=. 1 O00
x(3)=..707
x(7)=.707
21
Salida
Interpretación
La hnción senoidal en el dominio del tiempo tiene una ganancia de 0.5 en el dominio de la
frecuencia en 0.125 y 0.875 Hz. L a ganancia en 0.875 es debido al muestreo, asimismo, el
aliasing divide la ganancia total en dos partes iguales. La fase resulta de operaciones con
números complejos y representa el tiempo de adelanto y de retraso tanto en las señales de
entrada como de salida.
e) Características de la Transformada Discreta de Fourier
El resultado de una DFT no puede ser el mismo que el de la transformada de Fourier.
La diferencia es debida al muestreo y al número limitado de muestras.
El resultado de la DFT siempre es equivalente a l resultado de la Transformada Rápida
de Fourier (FFT), salvo que ésta última tendrá 2" muestras, donde n es un entero.
L a entrada de la DFT es periódica, por definición cada n*dt segundos, debido al número
limitado de muestras, sin embargo, no es posible obtener un resultado correcto de la
DFT de una señal no periódica.
22
La salida de la DFT se "traslapa" por encima de fs/2 con un periodo de frecuencia de fs
Hz. 0 A mayor número de muestras (N), se obtendrá un mejor resultado de la DFT.
f) Transformada Rápida de Fourier (FFT)
La FFT es simplemente la DFT optimizada para cálculos rápidos. La única limitación es
que en l a FFT el número de datos a la entrada en el dominio del tiempo deberá ser una
potencia de 2, esto es 2", donde n es un número entero. Esto permite que el algoritmo de la
FFT utilice métodos indexados que eliminan una gran cantidad de cálculos redundantes que
se requieren cuando se utiliza la DFT.
En el filtrado digital, la FFT se utiliza primero para medir la respuesta en frecuencia del
filtro a partir de los datos en el dominio del tiempo.
La FFT puede también ser utilizada para medir la respuesta en frecuencia de la señal de
entrada o de salida del filtro digital.
g) Transformada de Fourier en MATLAB
En MATLAB existe una fimción que permite el cálculo de l a Transformada Rápida de
Fourier, la cual a continuación se describe.
FFT Discrete Fourier transform. FFT(X) is the discrete Fourier transform o f vector X. I f the length o f X is a power of two, a fast radix-2 fast-Fourier transform algorithm i s used. If the length of X is not a power of two, a slower non-power-of-two algorithm is employed. FFT(X,N) is the N-point FFT, padded with zeros if X has less than N points and truncated if it has more. If X is a matrix, the FFT operation is applied to each column
Y como ya se ha dicho anteriormente, esta herramienta matemática es de gran utilidad en e1
procesamiento de señales. Además recordemos que la FFT es un algoritmo que permite
23
computar más rápido la DFT. En MATLAB, la función fft es utilizada para calcular la
DFT; aquí no existe una función dft. Similamente l a función ifft es utilizada para calcular
la inversa de DFT. Por consiguiente se usaran de manera indistinta los términos DFT y
FFT.
IFFT Inverse discrete Fourier transform. IFFT(X) is the inverse discrete Fourier transform of vector X. IFFT(X,N) is the N-point inverse transform.
Un ejemplo en el que se encuentre la DFT de algunas señales más comunes -se muestra a
continuación. Con MATLAB es bastante accesible construir las gráficas de señales y sus
transformadas.
Primera mente se declara un vector de valores discretos.
1
b n=[O: 151
1 =
Columns 1 through 12
O 1 2 3 4 5 6 7 8 9 1 0 1 1
Columns 13 through 16
12 13 14 15
Enseguida se declara la función que se va a utilizar.
)) y=expCj*nB)
Y =
Columns 1 through 4
1 .o000 CQ450 + 0.32721 0.7859 + 3.6184i 0.5403 + 0.84151
Columns 5 through 8
0.2352 + 0.9719i -0.0957 + 0.99541 -0.4161 + 0.9093i -0.6908 + 0.7231i
24
Columns 9 through 12
-0.8893 + 0.4573i -0.9900 + 0.141 l i -0.9817 - 0.1906i -0.8653 - 0.5013i
Columns 13 through 16
-0.6536 - 0.75681 -0.3700 - 0.92901 -0.0457 - 0.99901 0.2837 - 0.95891
Y entonces se calcula la fft de dicha función.
z=fft(y)
- -
Columns 1 through 4
-2.2083 + 1.64961 13.9054 - 6.6357i 1.9775 - 0.5026i 1.1 139 - 0.0586i
Columns 5 through S
0.7803 + 0.1 130i 0.5923 + 0.2096i 0.4637 + 0.27581 0.3636 + 0.3272i
Columns 9 through 12
0.2775 + 0.37151 0.1970 + 0.41291 0.1 156 + 0.45471 0.0263 + 0.5006i
Columns 13 through 16
-0.0804 + 0.55551 -0.2225 + 0.62861 -0.4405 + 0.74071 -0.8615 + 0.9571i
MATLAB permite obtener únicamente la parte real o imaginaria de cantidades complejas,
como se muestra a continuación.
o w=real( z)
W =
Columns I through 7
-2.2083 13.9U54 l . Y 7 i S 1.1 13V 0.7803 0.5923 0.4637
Columns 8 through 14
0.3636 0.2775 0.1970 0.1 156 0.0263 -0.0804 -0.2225
Columns 15 through 16
25
-0.4405 -0.86 15
> x=imag(z)
I=
Columns 1 through 7
1.6496 -6.6357 -0.5026 -0.0586 0.1 130 0.2096 0.2758
Columns 8 through 14
0.3272 0.3715 0.4129 0.4547 0.5006 0.5555 0.6286
Columns 15 through 16
0.7407 0.957 1
Ahora construyamos las gráficas correspondientes a la fbnción anterior y su transformada.
Para ello utilizaremos las fbnciones subplot(22x) y stem, para poder visualizar todas las
gráficas a la vez.
)) subplot(22 1)
stem(n,a)
)) title('Parte REAL de y(n)'), xlabel('INDICE(n)')
)) subplot(223)
)> stem(n,b)
)) title('Parte IMAGINARIA de y(n)'), xlabel('INDICE(n)')
)) subplot(222)
)) stem(n,w)
>) title('Parte REAL de z(n) DFT'), xlabel('INDICE(k)')
)) subplot(224)
>) stem(n,x)
5) titJe('Pwtr IMAGIWARId- de ?(E) DFT'), xlzhd(~1NDICE~k)')
PARTE REAL DE LA SEÑAL 1 : I + I I
0.8 1 0.6 1
O
-0.4 1- -0.61
+
+
+
+
+
+ +
+
+
+ + -1 ' O
I
5 4- +
10 I
15
+
1 PARTE IMAGINARIA DE SERAL + I I
+ 0.8 - +
-
0.6 - -
0.4 - + -
0.2 - -
o"
-0.2 -
-0.4 - I -0.6 - 1
i I
! -0.8 - + I
4
I I
+ ! -1 O
I
5 1
10 15
+
+
+
+
+
30
IV. FILTRO FIR
a) FILTROS RIF
Los filtros de respuesta a impulso finita (RIF) son de realización no recursiva y son
siempre estables. La estructura básica de un filtro (RIF) es una línea de retrasos , como se
muestra en la figura siguiente.
x[nI z- x[n-N+1]
En donde x[n] es la entrada del filtro y representa la muestra presente de la misma, x[n-i]
son muestras pasadas de la entrada h[O] ... h[N-1] representan los coeficientes de l a respuesta
a impulso del filtro y y[n] es la salida del mismo.
Un método para el diseño de un filtro pasa bajas es:
l . Se obtiene la frecuencia de corte 0, y escribimos l a respuesta en frecuencia como:
I O, fuera del rango -n 50 In
3 1
esto es, se ignoran por el momento, las características de fase lineal.
2. La función continua para los valores del filtro FIR pasa bajas es . La ecuación
discreta es hpB=bn= , n= O, + 1, k 2, ..., con la que se calculan los coeficientes
del filtro.
3. Se truncan los coeficientes en +I términos, lo cual nos da (21 +- 1) coeficientes del filtro.
hPB= 7 n= O, + 1, k 2? ...,+ 1
Donde h(O)=K8
El número de términos usados se determina comparando las especificaciones del filtro con
las gráficas de respuesta en frecuencia para diferente número de términos.
4. Se desplaza hpB(n) a la derecha Í términos, esto es para hacer el filtro causal, lo cual
deja :
, n= O, 1, 2, ..., 21
5. Diseñar el filtro digital con un programa apropiado de computadora o un circuito
integrado.
Precisamente este último paso par el diseño de filtros digitales pasa bajas, en el que se
recomienda el uso de un software, es en donde se ha hecho uso de Matlab.
b) Filtros FIILen MATLAB
MATLAB un ambiente técnico de computación para alta ejecución de cómputos numéricos
y visualización. MATLAB integra análisis numérico, cómputo de matrices, procesamiento
32
de señales, y gráficas en un ambiente de fácil uso donde los problemas y soluciones son
expresados justo como ellos son escritos matemáticamente.
MATLAB cuenta con una familia de aplicaciones específicas que se llama toolbox. Una de
las áreas en que toolbox es disponible es en el de procesamiento de señales, quien agrega
comandos para procesamiento de señales en una y dos dimensiones (tiempo - análisis de
series). Incluye funciones para el diseño y análisis de filtros digitales y para la estimación
del espectro de potencia (análisis FFT).
Uno de los principales rasgos de MATLAB, es la de su posible extensibilidad, es decir que
permite crear aplicaciones propias.
Por ejemplo nosotros hemos desarrollado funciones (M-files) que satisfacen nuestras
necesidades particulares, como el M-file sampling(k,w,n), función con la que se realiza el
paso 2 para el diseño de filtros que se menciona arriba.
En el toolbox de Procesamiento de Señales, MATLAB cuenta con funciones propias para
el filtrado de datos, una de esas funciones es:
y = filter(b, a, x)
esta función filtra los datos del vector x con el filtro descrito por los vectores a y 6 , creando
los datos filtrados de y.
MATLAB provee los siguientes comentarios acerca de filter.
%FILTER Digital filter.
YO Y = FILTER(B, A, X) filters the data in vector X with the
Yó filter described by vectors A and B to create the filtered
YO data Y. The filter is a "Direct Form I1 Transposed"
Yá implementation of the standard difference equation:
3 4
% y(n) = b(l)*x(n) + b(2)*x(n-l) + ... + b(nb+l)*x(n-nb)
?6 - a(2)*y(n-l) - ... - a(na+l)*y(n-na)
%
3 3
% [Y,Zfl = FILTER(B,A,X,Zi) gives access to initial and final
% conditions, Zi and Zf, of the delays.
YO
% See also FILTFILT in the Signal Processing Toolbox.
% Copyright (c) 1984-94 by The Mathworks, Inc.
% Built-in function.
Considerando entonces la posibilidad que brinda MATLAB de utilizar sus funciones para
aplicaciones específicas en este caso filter y de generar las propias, acorde a necesidades
particulares, se realizó el siguiente programa.
c) Programa que utiliza la funciónfilter y sampling para filtrar tres señales.
Se realizó un programa (M-file) fpbfir en el que se filtran tres señales, utilizando una
función sampling que permite calcular los coeficientes del filtro y la función filter que es
parte del toolbox de procesamiento de señales y con la que se filtran las señales
mencionadas. Además se realizaron seis M-files, tres para el despliegue de las señales de
entrada y otros tres para el despliegue de las señales filtradas.
El siguiente código corresponde la "file de la hnción Sampling.
function y = sampling(k,w,n)
?'oEsta es una funcion que construye una SAMPLING en el tiempo
%ysin#e para simuiar un fiitro pasabajas.
%
%y = sampling(k,w,n)
% I I
34
r%La ganancia del filtro esta dado por k, %la frecuencia de corte (rad/s) por w y
%n el numero de muestras.
%w debe ser menor a pi debido al Teorema del Muestreo.
%Aqui el periodo de muestre0 es 1 segundo.
a = [ 1 :2*n+l];
i l = n;
i2 = n+2;
a(n+l) = (k*w)/pi; %Calcula el valor central de la SAMPLING.
for i = 1 :n
a(i2) = (k*sin(w*i))/(pi*i);
a(i 1) = a(i2);
i2 = i2+1;
i l = il-1;
end
y = a;
stem(y); title('Funcion SAMPLING');
xlabel('Tiempo');
ylabel('Amp1itud'); I
El siguiente código es el programa que simula un filtro FIR pasabajas utilizando la función
filter.
?,óEsts es un programa que simula un Filtro FIR Pasabajas:
%El metodo utilizado para calcular los coeficientes del filtro
?/oes el de Serie de Fourier.
_-___
35
'ÓSe calculan los coeficientes de una Sampling en el tiempo,
6ya que el espectro en frecuencia de esta sena1 es un Rectangulo,
610 cual se aproxima a un filtro ideal.
'ÓLos datos se filtran haciendo uso de la hncion ''filter'' de MATLAB.
42;
1 = input(' Dame el numero de muestras, n = ');
= input(' Dame la ganancia del filtro, k = I ) ;
v = input(' Dame la frecuencia de corte (menor a pi), w = ');
= sampling(k,w,n); %Se calculan los coeficientes de la Sampling.
I = [ 1 zeros( 1,2*n)];
; = [ 1 :(2*n)+ 13;
:1 = t;
$1 = sin(2*w*t);
$2 = sin(0.5*w*t);
uido = rand(size(t));
$3 = s2+ruido;
q1 = filter(b,a,sl); %Filtra las 3 senales.
q2 = filter(b,a,s2);
~3 = filter(b,a,s3);
:h,frec] = freqz(b,a,64);
nag = abs(h);
'ase = angle(h);
%Abre una ventana y genera varios menus para visualizar
%los resultados.
36
11 = figure('Name','Simulacion de un Filtro Pasabajas FIR','MenuBar', 'None');
nenu 1 = uimenu('label','Ver senal');
uimenu(menu1 ,'Label','sl =sen2wt','callback','grafica4');
uimenu(menu 1 ,'Label','s2=sen0.8wt','callback"grafica5');
uimenu(menu 1 ,'Label','s3=s2+ruido','callback','grafica6');
nenu2 = uimenu('Label','Ver senal filtrada');
uimenu(menu2,'Label','Filtrar S l','callback','grafical');
uimenu(menu2,'Label','Filtrar s2','callback','grafica2');
uimenu(menu2,'Label','Filtrar s3','callback','grafica3');
nenu3 = uimenu('Label','Ver respuesta del filtro');
uimenu(menu3,'Label','Magnitud','callback','magfir');
uimenu(menu3,'Label','Fase','callback','fasefir');
El siguiente código corresponde al utilizado para l a construcción de las graficas
correspondientes al filtro FIR pasabajas.
plot(tl,yl,t,sl,'- -I);
xlabel('Tiempo');
ylabel('Amp1itud');
title('Sena1 S I filtrada');
\
c 1
1
O U
-1
I( i '
Respuesta del Filtro I
-3 -2i :I' -4 ' I I I
O 0.5 I
3 3.5 Frecuencia
I I
1 1.5 2 2.5 I
45
a) Programa que utiliza la funciónfft y sampling para filtrar tres señales.
Se realizó un programa (M-file) fpbfir2 en el que se filtran tres señales, utilizando un
fünción sampling que permite calcular los coeficientes del filtro y la función fft que es
parte del toolbox de procesamiento de señales y con la que se filtran las señales
mencionadas. Además se realizaron ocho "files, tres para el despliegue de las señales de
entrada, otros tres para el despliegue de las señales filtradas, uno para la magnitud y otro
para la fase.
En el siguiente cuadro se muestran el "files fpbfirt.
%Este es un programa que simula un Filtro FIR Pasabajas.
%El metodo utilizado para calcular los coeficientes del filtro
%es el de Serie de Fourier.
%Se calculan los coeficientes de una Sampling en el tiempo,
%ya que el espectro en frecuencia de esta seaal es un Rectangulo,
%lo cual se aproxima a un filtro ideal.
%Los datos se filtran haciendo uso de la FFT.
k = input(' Dame la ganancia del filtro, k = I);
w = input(' Dame la frecuencia de corte (menor a pi), w = ');
b = sampling(k,w,n); %Se calculan los coeficientes de l a Sampling.
t l = t;
S I = sin(2*w*t);
46
:2 = sin(0.5*w*t);
uido = rand(size(t));
;3 = s2+ruido;
1 = ffi(s 1); %Calcula las FFT de cada senal.
$2 = fft(s2);
;3 = fft(s3);
B = ffi(b); %Calcula la FFT del filtro.
Y1 = B.*Sl; %Filtra las 3 seaales.
Y2 = B.*S2;
Y3 = B.*S3;
s l f = ifft(Y 1); %Obtiene la IFFT de cada seaal filtrada.
52f = ifft(Y2);
j3f = iffi(Y3);
y 1 = real(s1f); %Obtiene la parte real de las IFFT.
y2 = real(s2f);
y3 = real(s3f);
[h,frec] = freqz(b,a,64);
mag = abs(h);
fase = angle(h);
%Abre una ventana y genera varios menus para visualizar
% í m resultados. "
h 1 = figure('Name','Simulacion de un Filtro Pasabajas FIR','MenuBar', 'None');
41
menu 1 = uimenu('label','Ver senal');
uimenu(menu 1 ,'Label','s 1 =~en2wt','callback','grafica4');
uimenu(menu1 ,'Label','s2=sen0.8wt','callback','graficaS);
uimenu(menu I ,'Label','s3=s2+ruido','callback"grafica6');
menu2 = uimenu('Label','Ver senal filtrada');
uimenu(menu2,'Label','Filtrar sl','callback','grafical');
uimenu(menuZ,'Label','Filtrar s2','callback','grafica2');
uimenu(menuZ,'Label','Filtrar s3','callback','grafica3');
menu3 = uimenu('Label','Ver respuesta del filtro');
uimenu(menu3,'Label','Magnitud','callbac~,'magfir');
uimenu(menu3,'Label','Fase','calIback','fasefir');
Un ejemplo de fpbfir2 es el siguiente:
Dame el numero de muestras, n = 20
Dame la ganancia del filtro, k = 1
Dame la frecuencia de corte (menor a pi), w = pi/4
A continuación se muestran las gráficas.
1 -
0.8 -
0.6 -
0.4 -
0.2 - D 3 U .- - E" O - .. <
-0.2 -
-0.4 --
-0.6 -
-0.8 -
-1 O
,-
.
i
Sena1 S? filtrada
i
i 15 20
Tiempo
/' I
I
1 __i
30 35
"r-
i
I
I
Respuesta del Filtro 1.2 I I I I I I
-
0.8 - -
U 3 .- E0.6
- < E -
CI
0.4 - -
0.2 -
O
Frecuencia 3.5
S3
a) Programa que utiliza la funcion canv y sampling para filtrar tres señales.
Se realizó un programa ("file) fpbfir3 en el que se filtran tres señales, utilizando un
función sampling que permite calcular los coeficientes del filtro y la hnción conv que es
parte del toolbox de procesamiento de señales y con la que se filtran las señales
mencionadas. Además se realizaron ocho M-files, tres para el despliegue de las señales de
entrada, otros tres para el despliegue de las señales filtradas, uno para la amplitud y otro
para la fase.
En el siguiente cuadro se muestran el M-files fpbfi~-3.
cS/oEste es un programa que simula un Filtro FIR Pasabajas.
%El metodo utilizado para calcular los coeficientes del filtro
%es el de Serie de Fourier.
%Se calculan los coeficientes de una Sampling en el tiempo,
%ya que el espectro en frecuencia de esta seaal es un Rectangulo,
%lo cual se aproxima a un filtro ideal.
%Los datos se filtran haciendo uso de la convoluci#n con CONV.
clc;
n = input(' Dame el numero de muestras, n = I ) ;
k = input(' Dame la ganancia del filtro, k = I ) ;
w = input(' Dame la frecuencia de corte (menor a pi), w = I ) ;
b = sampling(k,w,n); %Se calculan los coeficientes de l a Sampling.
a - [ 1 Lelos( i,2*11)j;
t = [ 1 :(Z"n)+l j .
t 1 = [ i :2*length(t)- 11;
s l = sin(2*w*t); -
54
2 = sin(OS*w*t);
uido = rand(size(t));
3 = s2+ruido;
r l = conv(b,sl);
~2 = conv(b,s2);
r 3 = conv(b,s3);
h,frec] = freqz(b,a,64);
nag = abs(h);
'ase = angle(h);
%Abre una ventana y genera varios menus para visualizar
Y01os resultados.
1 1 = figure('Name','Simulacion de un Filtro Pasabajas FIR','MenuBar', 'None');
nenu 1 = uimenu('label','Ver senal');
uimenu(menu 1 ,'Label','s 1 =sen2wt','callback','grafica4');
uimenu(menu1 ,'Label','s2=sen0.8wt','callback','grafica5');
uimenu(menu 1 ,'Label','s3=s2+ruido','callback','grafica6');
nenu2 = uimenu('Label','Ver senal filtrada');
uimenu(menu2,'Label','Filtrar S l','callback','grafical');
uimenu(menu2,'Label','Filtrar s2','callback','~rafca2');
uimenu(menu2,'Label','Filtrar s3','callback','grafca3');
nenu3 = uimenu('Label','Ver respuesta dei filtro');
uimenu(menu3,'Label','Magnitud','callback','magfir');
ui1nenu(menu3,'Label','Fase','callback',r');
5 5
Un ejemplo de fpbfir3 es el siguiente:
Dame el numero de muestras, n = 20
Dame la ganancia del filtro, k = 1
Dame la frecuencia de corte (menor a pi), w = pi/4
A continuación se muestran las gráficas.
1 .;
1
0.8
1:
0.21
I 1 I I I I
Respuesta del Filtro
O' I
I
O 1 J-.w !
1.5 2 O. 5 - 2.5 3 3.5 Frecuencia
Respuesta del Filtro 4 I
I I
I 1
2 1 "a -1 I
I
i i
-4 I
O O. 5 I I 1 1.5 I I
2 2.5 I 3 J 3.5 Frecuencia
61
CONCLUSIONES
Al final de este trabajo hemos podido relacionar las herramientas que ofrece MATLAB,
con los contenidos que se abordan en el curso de Comunicaciones I, que se imparte en esta
Universidad, por lo cual podemos afirmar que:
MATLAB ofrece un ambiente bastante amigable para simular diferentes señales, a
través del uso de vectores.
Además cuenta con herramientas que permiten ilustrar al teorema de muestreo, así que
se puede observar en forma gráfica la forma en que un señal es muestreada.
Por otro lado cuenta con hnciones como CONV, que permite realizar la operación de
convolución entre diferentes señales, y observar en forma gráfica esta operación.
MATLAB, ofrece una función para uno de los algoritmos más utilizados en el
procesamiento de señales, como es el de la Transformada Discreta de Fourier y su
versión rápida Transformada Rápida de Fourier, con la que se pueden realizar cálculos
rápidos y las gráficas correspondientes.
Otra función útil es la de filter, la cual simula un filtro, y que nosotros utilizamos para
simular un filtro FIR pasabajas, para filtrar diferentes señales; esta simulación se realizó
desarrollando un programa en el lenguaje que ofrece MATLAB.
Además se programaron dos filtros similares, sólo que en uno se utilizó convolución
CONV y en otro Transformada Discreta de Fourier ffi, con lo que se pudo comparar el
uso de filter y estas otras dos herramientas. Obteniéndose resultados similares.
También se programó la función SAMPLING, que fue de mucha utilidad al simular el
filtro FIR pasabajas.
MATLAB, permite observar las señales tanto en el dominio del tiempo como en la
frecuencia, con lo que la exploración de señales se hace más completa.
Finalmente, consideramos que MATLAB es una muy buena herramienta, que permite
ilustrar los contenidos del curso de Comunicaciones I, por lo que creemos que los
estudiantes que cursan esta materia, debieran usarla para desarrollar un mejor
entendimiento de este curso, a través de prácticas que puedan ser propuestas con
anterioridad.
62
BIBLIOGFUFIA
BARRIOS, Romano Jesús. Introducción a los filtros digitales
Libros de texto y manuales de práctica
UNIVERSIDAD AUTONOMA METROPOLITANA UNIDAD
IZTAPALAPA
1992
BURRUS, C. Sidney. Computer-Based Exercises for Signal Processing Using
MATLAB,
PRENTICE HALL, Englewood Cliffs, New Jersey
1994
LELAND, B. Jackson. Digital Filters and Sienal Processin? with MATLAB
Editorial Kluwer Academic Publishers
Tercera edición
1996
YAÑEZ, Suárez Oscar. Procesamiento Digital de señales,
Libros de texto y manuales de práctica
UNIVERSIDAD AUTONOMA METROPOLITANA UNIDAD
IZTAPALAPA
1992
MATLAB User’s Guide
for Microsoft Windows
The Mathworks, Inc.
February 1993
63
USANDO MATLAB
MATLAB es una herramienta para hacer cálculos matemáticos. Es un lenguaje de
programación amigable con el usuario con características muy avanzadas y mucho más
fácil de usar que los lenguajes de computadoras tales como BASIC, Pascal o C.
Análogamente a la mayoría de las calculadoras científicas, MATLAB ofrece muchas
fimciones importantes comunes a las matemáticas, a la ingeniería y las ciencias.
El tipo de dato central de MATLAB es el array. Para crear un array en MATLAB todo lo
que tiene que hacer es comenzar con un corchete de apertura, introducir los valores
deseados separados por espacios (o por comas) y luego cerrar el array con un corchete de
cierre. Por ejemplo: para crear un array llamado x con 11 elementos para dividir una
longitud de pi unidades entre diez tenemos:
>> x=[.l*pi .2*pi .3*pi .4*pi .5*pi .6*pi .7*pi .8*pi .9*pi pi]
En MATLAB, los elementos individuales de un array se accesan utilizando subindices,
P.e., x( 1) es el primer elemento en x, x(2) es el segundo elemento en x, etcétera.
La función plot de MATLAB es extremadamente poderosa. Automáticamente escoge los
límites de los ejes, marca los puntos individuales y dibuja líneas rectas entre ellos. Las
opciones de l a orden plot permiten hacer gráficas de múltiple conjuntos de datos sobre los
mismos ejes, usar diferentes tipos de líneas tales como punteadas y a trazos, marcar
simplemente los puntos sin dibujar líneas entre ellos o usar diferentes colores para las
curvas.
Además puede colocar etiquetas sobre los ejes, un título en la cabecera, dibujar una rejilla,
etcétera. Por ejempio:
Se crean 30 puntos entre O y 2*pi:
64
>>x=linespace(0,2*pi730);
Se calcula la función seno de los puntos en x:
>>y=sin(x);
La orden plot genera una gráfica:
"Plot(x,Y);
Para problemas simples, introducir las preguntas en la línea de órdenes de MATLAB es
rápido y eficiente. Sin embargo, cuando aumenta el número de órdenes o, en el caso en que
se desee cambiar el valor de una o más variables y reevaluar una serie de órdenes, escribir
en la línea de órdenes de MATLAB se hace tedioso.
MATLAB proporciona una solución lógica a este problema. Permite colocar órdenes de
MATLAB en un simple archivo de texto y a continuación decirle a MATLAB que lo abra
y evalúe las órdenes exactamente como si hubiesen sido escritas desde la línea de órden de
MATLAB. Estos archivos se llaman script o archivos -M. El término archivo-M reconoce
el hecho de que los nombres de los archivos deben finalizar con la extensión 'm', por
ejemplo, test.m.
FUNCIONES UTILIZADAS:
fft : Trarzsformada Rápida de Fourier 1-D.
y=fft(x) es la transformada de Fourier discreta del vector x, calculada con un algoritmo de
transformada rápida de Fourier (FFT).
ifft : TI-ansforkada Inversa de Fozir-ier.
y=ifft(x) es la transformada inversa rápida de Fourier del vector x.
65
filter : Filtrar datos con un filtro de respuesta infinita a un impulso (IIR) o con un filtro de
respuesta finita a un impulso (FIR).
y=filter(b,a,x) filtra los datos del vector x con el vector descrito por el vector b de los
coeficientes del numerador y el vector a de los coeficientes del denominador para crear el
vector y con los datos filtrados. Si a( 1 ) = 1, filter normaliza los coeficientes del filtro por
a( 1). Si a( 1)=0, filter devuelve un error.
La operación filter (filtrado) en el muestre0 m está dada por las ecuaciones en diferencias
en el dominio temporal
y(m)=b( 1 )x(m)+zl (m- 1)
z l (m)=b(2)x(m)+z2(m- l)-a(2)y(m)
conv : Convolttcidn y multiplicación depolinomios.
c=conv(a,b) realiza la convolución de los vectores a y b. La convolución puede verse como
la multiplicación de los polinomios cuyos coeficientes son los elementos de a y b ya que,
algebraicamente, es la misma operación.
freqz : Respuesta en frecuencia dejiltros digitales.
Devuelve l a respuesta en frecuencia compleja h(expjw) de un filtro digital dando los
coeficientes del numerador y del denominador en los vectores b y a.
abs : Valor absoluto.
66
y=abs(x) devuelve el valor absoluto de cada uno de los elementos de x. Si x es complejo,
abs(x) devuelve el m6dulo complejo (magnitud).
angle: Ángulo defase.
angle(z) devuelve el ángulo de fase, en radianes, de los elementos de la matriz compleja z.
Los ángulos están entre -pi y pi.