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:
INDICE
INTRODUCCION I. 11. 111. IV. MUESTRE0a) Teorema del muestreo
b) Teorema del muestreo en MATLAB
C O N V O L U C I ~ 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 l a DFT
d) Ejemplo para una función senoidal de O. 125 H z 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
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,
..
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
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 muestreoalguna 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
2
Pero esto es justo la DTFT
~ ( 2 " )
con o =n ~ ,
que implica la relación CTFT/DTFTX,(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 ( j Q ) =
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,
= R O T radianes en el espectro X ( d w ) y también comook =o,
+
Znk para todos los valores diferentes de cero del entero k. Esto es, que cada3
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 enX(ejw) alguna otra frecuencia o & ~ ~ T en el intervalo Nyquist
Io(<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>2R b,
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ónse ilustra con el siguiente programa y las gráficas que le corresponden.
%Este programa ilustra el Teorema del Muestreo
I
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 ;
p M w p , ) 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');
5
title('Respuesta en frecuencia de la seaal muestreada (Ws=0.5 rad/s)');
pause;
:IC;
:lose;
Tren de impulsos
O
T
I
40
I
E80
I
1 O0 120
I
50
101
401
20
OI r
-10 I I 1 I I I
-1 -0.8 -0.6 -0.4
-0.2
IO
I I I
0.8
0.6
-
0.4 .-
0.2 --
O"
-
-0.4
-O.';
Respuesta 16 r
10
4
O
)[
I
-2
'
I I I I-1 -0.8 -0.6 -0.4 -0.2
I I
11. CONVOLL
L.
~ Ó NSi 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 dem.
Esto significaque 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) = CX(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 porlinealidad, 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 entoncesAdemás la operación de convolución es conmutativa, por lo que
13
también es asociativa y distributiva, por l o que
otra relación útil es que si y(n) = x(n)
*
h(n), entoncesx(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:
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
15
I____]
)) plot(n,p,'+')Sí ahora convolucionamos a p con ella misma, entonces observamos l a siguiente gráfica
)) S l=conv(p,p);
í
(3.7 r
I
0.4
C.2
1
iI I I
I
I
G . ? ; i
i I
0 '
0 5 13 15
I I
Señal p convolucionada con ella misma
30 I I I
I I I I
I I
I
++
1.:
+
+
+
+
+
+
+
20
+
+
+
+
+
1 5 -
+
+
+
+
+
+
10 -
+
+
+
+
7
:
+
l l
O
O
10 20 30+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ttk 901.:
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
20+
+
+
+
+
+
+
1 5 -
+
+
+
+
+
+
+
+
+
+
10 -
+
+
+
+
+
+
+
+
+
7
:
+
+
+
+
+
+
+
+
O
I I I I+
O
10 20 30 40 50 I18
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
L a Transformada Discreta de Fourier convierte una función discreta en el tiempo a una
19
1 N - 1
N
¡=ON
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/NHz
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
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
2 1
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. L a 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 l a 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
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. If 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
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
24
Columns 9 through 12
-0.8893 + 0.4573i -0.9900 + 0.141 l i -0.9817 - 0.1906i -0.8653
-
0.5013iColumns 13 through 16
-0.6536 - 0.75681 -0.3700 - 0.92901 -0.0457 - 0.99901 0.2837
-
0.95891Y 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.0586iColumns 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
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)
PARTE REAL DE
LA
SEÑAL1 :
I
+
I I0.8
1
0.61
O
-0.4
1-
-0.61+
+
+
+
+
+
+
+
+
+
+
-1
'
O
I
5
4-
+
10
I
+
1
+
PARTE IMAGINARIA DESERAL
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
+
!
-1O 5 1 I
10 15
+
+
+
+
t
PARTE REAL DE DFT
I I
+
+
PARTE IMAGINARIA DE DFT
I
-
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 semuestra 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 respuestaa 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
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óndiscreta 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?...,+
1Donde 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,
...,
215. 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
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 deseries). 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 l a 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 theYó
filter described by vectorsA
and B to create the filteredYO 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)3 3
% [Y,Zfl = FILTER(B,A,X,Zi) gives access to initial and final
% conditions, Z i 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 l a "file de la hnción Sampling.
function y = sampling(k,w,n)
?'oEsta es una funcion que construye una SAMPLING en el tiempo
% y s i n # e para simuiar un fiitro pasabajas.
%
%y = sampling(k,w,n)
%
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ónfilter.
?,ó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.
3 5
'Ó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
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');
-1.5 I I I í
O
5
I
10 15 20 25 30 35
40 45
s2
=
sen(0.8wt)1 I
h
II I
I
\ I
-1
'
, IO
5 I I I10 15 20
25 30 35 I 40 I I
45
s3
=
sen(0.8wt) + ruido1.51
't
i
\
-1
'
I I I I IO
5 10 15 20 25 30 35I I I i
40 45
\
c
1
1
O
U
-1
I(
i '
Respuesta del Filtro
I
-3
-2i
:I'
-4
'
I I IO
0.5 I3 3.5
Frecuencia
I I
O ’
IO
O.
5 1 1.5I I
2 2.5 3 3.5
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;
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.
"
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
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
__i30 35
"r-
i
I
0.6 -
0.4 -
0.2 -
U
3
CI
.-
-
E"
0 - Q-0.2 -
-0.4 -
-0.6 -
Respuesta del Filtro
1.2 I
I I
I I
I
-
0.8 -
-
U
3
.-
E0.6
-
<
E-
CI
0.4 -
-
0.2
-
O
I
i
I
i
-4
L
O
0.51 1 . S I
2 2.5
1
3 I
i
3.5
Frecuencia
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');
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
1
O.
5-1.5
O
10 20 30 1 40 i i i50 60 70 80
i i
1
-1
'
I 1 I IO 10 20 30 40 50 60 70 80
I I I I
1 .;
1
0.8
1:
0.21
I 1 I I I I
Respuesta del Filtro
O' I
I
O
O.
5 1 1.5 J2 -.w2.5-
3 !3.5
Respuesta del Filtro
4 I
I
I I
1
2
1
"a
-1I
I
i
i
-4 I
O
O.
5 I I1 1.5 I I
2 2.5 3 I
J
3.5
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
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.
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:
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 reconoceel 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.
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 loscoeficientes 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.
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.