You are on page 1of 42

Procesamiento Digital de Seales Utilizando el Matlab

Mg. Ing. Pedro Huaman Navarrete 1


UNIVERSIDAD RICARDO PALMA

FACULTAD DE INGENIERA






PROCESAMIENTO DIGITAL DE
SEALES UTILIZANDO EL MATLAB



Octubre 2005


LIMA - PER




Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 2





































Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 3









PROCESAMIENTO DIGITAL
DE SEALES UTILIZANDO EL
MATLAB




Por

Pedro Freddy Huaman Navarrete

Facultad de Ingeniera
Universidad Ricardo Palma








Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 4






































Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 5


Presentacin
Por lo general las seales encontradas en la naturaleza
son del tipo anlogo, por lo tanto se hace necesario
digitalizarlas para realizar un tipo de procesamiento sobre estas.
Por este motivo, que en el pre-grado de las carreras de
Ingeniera Electrnica, Telecomunicaciones y reas afines, se
cuenta con un curso de nombre Procesamiento Digital de
Seales, encargada de estudiar las herramientas principales
para el tratamiento, manipulacin y representacin de seales y
del contenido de stas.
De esta manera, es este manual el encargado de dar las
pautas necesarias al estudiante, para manejar el Software de
Simulacin y Computacin Cientfica llamado Matlab, el cual
ser utilizado para complementar la parte terica impartida en
las aulas de clase.
El Matlab cuenta con una conjunto de toolbox que
permite desarrollar simulaciones y proyectos de investigacin
en diferentes reas, por tal motivo es utilizado frecuentemente
en diversas universidades peruanas y extranjeras.
Este manual contiene en sus primeros captulos los
temas referentes a la representacin de seales discretas,
posteriormente las herramientas matemticas utilizadas en el
anlisis, tales como transformada Z y transformada discreta de
fourier, luego el diseo y aplicaciones de filtros digitales,
presentacin del espectrograma para seales no estacionarias y
finalmente una introduccin al procesamiento digital de
imgenes.




Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 6








































Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 7


CONTENIDO
1. Discretizacin de Seales 9
2. Seales de Audio 12
3. Operacin de Convolucin 15
4. Decimacin e Interpolacin 17
5. Transformada de Fourier y Transformada Z 20
6. Transformada Discreta de Fourier (DFT) 23
7. Filtros No Recursivos (FIR) 27
8. Filtros Recursivos (IIR) 32
9. Filtro PasaTodo y Filtro Notch 36
10. Seales No Estacionarias o Variantes en el Tiempo 38
11. Introduccin al Procesamiento de imgenes 40









Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 8




































Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 9
1. Discretizacin de seales

Como es de conocimiento, las seales por naturaleza son del
tipo anlogo. Es por tal motivo, que es necesario transformarlas
a un formato digital para posteriormente realizar el
procesamiento sobre estas seales.
Una vez discretizada la seal, esta podr ser representada como
la suma de funciones impulsos o escalones.

>> n = [ 0 1 2 3 4 5 6 ]; %tiempo discreto
>> x = [ 5 9 3 -4 0 8 7 ]; %seal discreta
>> figure(1)
>> plot ( n , x) %grfico continuo
>> title ( Seal Contnua ), xlabel ( tiempo )
>> figure(2)
>> stem ( n , x) %grfico discreto



Una seal impulso: 2 o [n - 1]
>> n = [ 0 : 7];
>> x = 2 * [ 0 1 0 0 0 0 0 0];
>> stem ( n , x )

Una seal escaln: -5 [ n]
>> n = [ -20 : 1 : 20];
>> x = -5 * [ zeros( 1, 20 ) ones(1,21) ];
>> stem( n , x )

Una seal ruido entre 0 y 1: r[n]
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 10
>> r = rand ( 1, 1000 );
>> n = 0 :1: 999;
>> stem( n , r )

Discretizando una seal Senoidal continua, para luego
graficarla en el dominio del tiempo discreto.
x(t) = A * sin (2*pi*f *t + fase )

Para discretizar, reemplazamos t por nT en la expresin
anterior.
x[nT] = sin (2*pi*f*nT + fase)
Donde: T es el periodo de muestreo o 1/Fs

x[ n] = sin(2*pi*f*n / Fs + fase)

>> Fs = 100; %frecuencia de muestreo
>> n = 0:Fs-1;
>> fase = 90;
>> F = 3; %frecuencia fundamental: Fs > 2*F
>> x = sin ( 2*pi* F*n / Fs + fase*pi/180);
>> stem ( n , x ,r )



Sumando un ruido a la seal seno
>> r = length(x);
>> R = randn(1,r);
>> xR = 2*x + R;
>> figure(1), plot( n , xR)
>> figure(2) ,stem( n , xR)
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 11
Cuando no se cumple con el teorema de muestreo, se tiene una
representacin equivocada de la seal discreta. Por ejemplo:
>> Fs = 30;
>> F = 20;
>> n = 0:Fs-1;
>> Fase = 90;
>> x = sin ( 2*pi* F*n / Fs + fase*pi/180);
>> stem ( n , x ,b )
>> hold on %utilizado para congelar la figura y
%volver a graficar sobre ella
>> plot( n , x , r )
>> hold off


















Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 12
2. Seales de Audio

El audio es una seal anloga que puede ser discetizada
utilizando una PC y un micrfono, para posteriormente
almacenarlo en un archivo con formato WAV. Por lo tanto, para
leer un archivo WAV utilizando el software Matlab, habr que
copiar dicho archivo al directorio de trabajo del Matlab:
c:\matlabr12\work
>> cd
C:\MATLAB6P5\work
>> dir *.wav
ejemplo.wav

Utilizar la funcin WAVREAD para leer el archivo WAV y pasar
toda la informacin a una variable cualquiera.
>> help wavread
>> [y,Fs ] = wavread(ejemplo.wav);

Comprobando la cantidad de segundos a partir del nmero de
muestras y la frecuencia de muestreo.
Fs muestras 1 Seg.
length(y) muestras ? Seg.

Graficando la seal en el tiempo. En forma continua y discreta.
>> t = linspace(0 , length(y)/Fs, length(y)); %tiempo continuo
>> n = 0:length(y)-1; %tiempo discreto
>> figure(1), plot(t, y)
>> figure(2), stem(n, y)



Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 13
Reproduciendo la seal con la misma Fs
>> sound(y , Fs)

Reproduciendo la seal con una Fs diferente. Seal ms aguda
si aumentamos la FS, o seal ms grave si disminuimos la Fs
(teniendo presente el teorema de muestreo.)
>> sound(y , 2*Fs)
>> sound(y , Fs/2)

El audio anterior sumado a una seal ruido.
>> r = 0.2*randn( length(y) , 1);
>> yr = y + r;
>> plot(yr)


Reproduciendo la seal de audio con ruido
>> sound(yr, fs)

Tambin es posible crear un tono de 4KHz y luego almacenarlo
en un archivo WAV.
>> Fs = 20000;
>> F = 4000;
>> n = 0:Fs-1;
>> x = sin(2*pi*n*F/Fs);

Graficando y reproduciendo dicho audio de un solo tono.
>> plot(n,x)
>> axis([ 0 200 -1.2 1.2])
>> sound(x,Fs)

Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 14


Utilizar la funcin WAVWRITE para almacenar dicho tono en un
archivo WAV.
>> help wavwrite
>> wavwrite (x,Fs,8,seno.wav); %8 indica el nmero de
%bits por muestra























Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 15
3. Operacin de Convolucin

La operacin de convolucin se realiza sobre dos seales
discretas y finitas Por ejemplo, para el diagrama de bloques
siguiente se obtendr la operacin de convolucin para
finalmente graficar la seal de salida y[n].



Conociendo que:
x [ n ] = o [n] - 2 o [n-2]

h1 [ n ] = o [n] - 8 o [n-1] + 3 o [n-2 ]
h2 [ n ] = 2 o [n - 3]
r[n] = seal ruido
considerar un intervalo de cuatro meustras para realizar las
operaciones de convolucin y representacin grfica.

Representamos cada una de las seales anteriores por variables
tipo vector para representar sus muestras.
>> n = 0:3;
>> x = [ 1 0 -2 0 ];
>> h1 = [ 1 -8 3 0 ];
>> h2 = [ 0 0 0 2 ];
>> subplot(3,1,1), stem ( n , h1 ) %divide una ventana de
>> subplot(3,1,2), stem ( n , h2 ) %figura en tres sub-
>> subplot(3,1,3), stem ( n , x ) %figuras
x [ n ]
y [ n ]
h
1
[ n ]
+ +
3 o [n]
r [ n]
x
h
2
[ n ]
w[n] z[n]
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 16


>> w = x + [ 3 0 0 0 ];
>> z = conv ( w , h1 );
>> stem(0:length(z)-1 , z)

>> zr = z + randn(1,length(z));
>> y = zr .* [ h2 0 0 0];
>> stem(0:length(y)-1 , y )














Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 17
4. Decimacin e Interpolacin

La operacin de decimacin representa una disminucin de la
Frecuencia de Muestreo, en cuanto la interpolacin se refiere a
un aumento de la Frecuencia de Muestreo colocando ceros entre
las muestras de una seal discreta.

Sea una secuencia x[n]=2sin (2*t*f*n/Fs). Reprsentemos la
versin decimada por 2 e interpolacin por 2, considerando una
Fs = 100 muestras/seg. y una F = 5 Hz.

>> Fs = 100;
>> n = 0 : Fs-1;
>> f = 5;
>> x = 2 * sin(2*pi*f*n/Fs );
>> stem(n,x)


>> help decimate
>> x2 = decimate(x,2);
>> Fs = Fs / 2;
>> stem(0:Fs-1 , x2 )

Se puede observar una caracterstica importante. En la figura
anterior se percibe la presencia de 100 muestras representando
5 ciclos en un segundo. En cuanto que en la siguiente figura, se
aprecia la presencia de tan solo 50 muestras tambin
mostrando 5 ciclos en un segundo.
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 18


Seguidamente, interpolamos por 2 para retornar al nmero de
muestras inicial de esta seal.
>> Fs = Fs*2;
>> xx = interp(x2,2);
>> stem(0:Fs-1 , xx )



De esta manera, se recupera la Fs de muestreo inicial.

A continuacin, es posible observar la diferencia entre la seal
original y la manipulada por una operacin de decimacin e
interpolacin.

>> plot(0:Fs-1,x,'r',0:Fs-1,xx,'b')

Asimismo, para poder lograr el cambio de la Frecuencia de
Muestreo Fs un nmero fraccionario de veces, se procede a
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 19
realizar ambas operaciones a la vez, tal como lo muestra la
siguiente figura.












Entonces, si se desea llegar a tener una Fs_Final = 300
muestras/seg a partir de una Fs_Inicial = 400 muestras/seg, se
deber de realizar las operaciones de decimacin e interpolacin
una seguida de la otra.




















M + L |
x [ n ] x
T
[ n ]
M
L Fs *

Fs


M
Fs


Fs_Final
4 + 3 |
Fs_Incial
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 20
5. Transformada de Fourier y Transformada Z

La Transformada de Fourier Continua y la Transformada Z son
herramientas adiccionales utilizadas tambin en el
procesamiento de seales discretas.

Sea la ecuacin en diferencia:
y[n] = 0.25 y[n-1] + 0.4 y[n-2] + x[n] - 0.6 x[n-2]
Y(z) * ( 1 - 0.25 z
-1
- 0.4 z
-2
) = X(z) * (1 0.6 z
-2
)

Grafiquemos el diagrama de polos y ceros de H(z)
>> N = [ 1 0 -0.6 ] ;
>> D = [ 1 -0.25 -0.4 ];
>> printsys(N,D,z)
num/den =

z^2 - 0.6
------------------
z^2 - 0.25 z - 0.4

>> zplane (N,D)


Obtengamos la respuesta impulsional h[n] para n <= 10

>> [ r, p , k] = residue(N,D);

1
5197 . 0
2559 . 0
7697 . 0
0059 . 0
) ( +
+
+

=
z z
z H

Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 21

] [ ] 1 [ ) 5197 . 0 ( * 2559 . 0 ] 1 [ ) 7697 . 0 ( * 0059 . 0 ] [
1 1
n n n n h
n n
o + + =


>> n = 1:10;
>> h1 = -0.0059*(0.7697).^(n-1) + 0.2559*(-0.5197).^(n-1);
>> h = [ 1 h1];
>> stem( 0:10 , h )



O como tambin, es posible utilizar un comando del Matlab
IMPZ para obtener la respuesta impulsional h[n].
>> impz(N,D)

Es posible obtener la Transformada Z utilizando el comando
ZTRANS, o Transformada Z Inversa con el comando IZTRANS
>> help ztrans
>> syms n z
>> ztrans(2^n)
ans =
1/2*z/(1/2*z-1)
>> iztrans(z/(z-2))
ans =
2^n

Seguidamente, obtengamos la Transformada de Fourier de la
siguiente secuencia.

] 2 [ ] 1 [ ] [ 50 ] [ + + = n n n n x o o o

Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 22

>> n = 0:5;
>> x = [ 50 1 1 0 0 0];
>> stem(n,x)

jw jw jw
e e e X
2
50 ) (

+ + =

>> w = -3*pi : 0.01 : 3*pi;
>> X = 50 + exp(-j*w) + exp(-2*j*w);
>> mX = abs(X);
>> fX = angle(X);
>> figure(1), plot ( w , mX) %magnitud Funcin Par
>> figure(2), plot ( w , fX) %fase: Funcin Impar



Se observa la periodicidad con T = 2pi.

De igual manera, se muestra a continuacin la parte real e
imaginaria de la Transformada de Fourier.

>> rX = real(X);
>> iX = imag (X);
>> figure(1), plot ( w , rX) %real
>> figure(2), plot ( w , iX) %imaginaria

De igual manera que la Transformada Z, es possible utilizar los
comandos FOURIER e IFOURIER para obtener la transformada
directa e inversa de fourier.
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 23
6. Transformada Discreta de Fourier (DFT)

La DFT es una herramienta importante para el anlisis de
seales en el dominio de la frecuencia. El Matlab cuenta con
dicho herramienta implementada en un comando FFT, el cual
representa la Transformada Rpida de Fourier.

Sea una seal coseno x[n], con una frecuencia de muestreo
Fs=100 Hz, x[n] = cos(2t*20*n/Fs).
A continuacin se grafica la seal x[n] en el tiempo para un
segundo de duracin, Seguidamente, se obtendr la
Transformada Discreta de Fourier (DFT o FFT) utilizando una
cantidad de muestras N = 16 y N = 512.
Finalmente, se grafica el mdulo y fase, y la parte Real e
Imaginaria de su espectro.
>> Fs = 100;
>> n=0:Fs-1;
>> x = cos(2*pi*n*20/Fs);
>> stem(n,x)



>> X_16 = fft(x,16);
>> X_512 = fft(x,512);

Obteniendo el Mdulo y Fase de la DFT
>> mX_16 = abs (X_16); fX_16 = angle (X_16);
>> mX_512 = abs (X_512); fX_512 = angle (X_512);
>> figure(1)
>> f_16 = linspace(0,Fs,16);
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 24
>> f_512 = linspace(0,Fs,512);
>> subplot(2,1,1), stem(f_16 , mX_16)
>> subplot(2,1,2), stem(f_16 , fX_16)



>> figure(2)
>> subplot(2,1,1), stem(f_512 , mX_512)
>> subplot(2,1,2), stem(f_512 , fX_512)



De igual manera se puede graficar la parte real e imaginaria del
espectro de la seal.
>> rX_16 = real (X_16);
>> iX_16 = imag (X_16);
>> rX_512 = real (X_512);
>> iX_512 = imag (X_512);
>> subplot(2,1,1), stem(f_512 , rX_512)
>> subplot(2,1,2), stem(f_512 , iX_512)
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 25
Obteniendo y graficando la Transformada Discreta de Fourier
Inversa IFFT.
>> ix = ifft(X_512 , 512);
>> rix = real(ix);
>> stem( 0:Fs-1 , rix(1:Fs) )



Graficando la FFT con N=1024 para una Suma de Tres Cosenos:
10 Hz, 30 Hz, 43 Hz (Fs=120)
>> Fs = 120;
>> n = 0:Fs-1;
>> x = cos(2*pi*n*10/Fs) + cos(2*pi*n*30/Fs) +
cos(2*pi*n*43/Fs);
>> tX = fft(x,1024);
>> mtX = abs(tX);
>> f = linspace(0,Fs,1024);
>> plot( f, mtX)


Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 26
Graficando la FFT de una Seal Coseno sumado a un ruido
>> Fs=100;
>> n = 0:Fs-1;
>> x = 2*cos(2*pi*n*10/Fs);
>> r = randn(1,Fs) / 1.5 ;
>> xr = x + r;
>> figure(1) , plot(xr)
>> tXR = fft ( xr , 1024 );
>> mtXR = abs (tXR);
>> f = linspace(0,Fs,1024);
>> plot(f,mtXR)

Graficando la FFT con N = 1024 para una Seal Cuadrada de
F=10 Hz.
>> Fs=200;
>> n = 0:Fs-1;
>> x = square(2*pi*n*10/Fs);
>> figure(1) , stem(x)
>> tX = fft ( x , 1024 );
>> mtX = abs (tX);
>> f = linspace(0,Fs,1024);
>> plot(f,mtX)







Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 27
7. Filtros No Recursivos (FIR)

Los filtros FIR se caracterizan por presentar polos slo en el
origen, as como una fase lineal para la banda pasante y un
nmero elevado de retardos.

Una de las tcnicas para realizar su diseo recibe el nombre de
tcnica de Windowing. Esta involucra el truncado de una
secuencia infinita h
i
[n] utilizando una secuencia w[n] (ventana
de hamming, hann, kaiser, etc).

h [ n ] = h
i
[ n ] x w[ n ]












t
=
2
1 N
n ,
Ws
Wc
2
)
2
1 N
n (
Ws
Wc
2
)
Ws
Wc
)
2
1 N
( n ( 2 sin(
Ws
Wc
2
] n [ h
i

1
2
1
: 0

=
N
n



dB
wp wa ws / 2
-Ap



-Aa
PasaBajo
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 28
A continuacin se muestra una rutina que se utiliza para disear
filtros FIR Pasa-Bajo, a partir de las especificaciones mostradas
en la figura anterior.

=======================================
function [h,wc] = filtrofir(Ap_,Aa_,ws,wp,wa)
%
% [h,Wc] = filtrofir(Ap_,Aa_,ws,wp,wa)
%
% wp: Frecuencia Pasante (rad/seg)
% wa: Frecuencia Atenuacin (rad/seg)
% ws: Frecuencia Muestreo (rad/seg)
% Ap_ Ripple Banda Pasante
% Aa_ Atenuacin Mnima en la Banda de Rechazo
%
close all
Ap_ = abs(Ap_);
Aa_ = abs(Aa_);
Bt = abs(wa-wp);
wc = (wp + wa)/2;

%Clculo de d1 y d2:
d1 = 10^(-0.05*Aa_);
d2 = (10^(0.05*Ap_) -1)/(10^(0.05*Ap_)+1);

%Clculo de d:
d = min([d1 d2]);

%Clculo de Aa y Ap:
Aa = -20*log10(abs(d));
Ap = 20*log10((1+d)/(1-d));

%Clculo de D:
if Aa<=21, D = 0.9222;
elseif Aa>21 , D = (Aa - 7.95)/14.36;
end

%Clculo de N:
N = ((ws * D)/Bt + 1);
N = ceil(N);
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 29
if mod(N,2)==0, N=N+1; end

%Filtro Ideal:
N = (N-1)/2;
n = 0:N-1;
hi = (2*wc/ws) * sin( (n-N) * 2 * pi * wc / ws ) ./ ( 2*( n - N )
* pi * wc / ws);
hi = [ hi 2*wc/ws fliplr(hi) ];

figure(1),stem(0:N*2,hi)
title('Filtro Ideal'), pause

w = hamming(2*N+1); %utilizando una ventana
figure(2),stem(0:N*2,w) %HAMMING para el diseo
title('Ventana Hamming'), pause

h = w'.*hi;
figure(3),freqz(h,1,256,ws/(2*pi))
title('Filtro Real: Magnitud - Fase')

=======================================

El Matlab cuenta con comandos propios para realizar el diseo
de filtros digitales FIR.
>> help fir1

A continuacin se crea una seal senoidal compuesta por dos
frecuencias diferentes: 120 Hz. y 350 Hz., Se obtendr su
espectro en frecuencia y se disear un filtro pasa-bajo FIR de
frecuencia de corte 200 Hz, con la finalidad de eliminar la
frecuencia mayor.
>> f1 = 120;
>> f2 = 350;
>> Fs = 1000;
>> n = 0 : Fs-1;
>> x = sin ( 2 * pi * n * f1 / Fs) + sin ( 2 * pi * n * f2/ Fs);
>> plot ( n (1: 40) , x(1:40) )
>> X1 = fft ( x , 512 );
>> mX1 = abs ( X1 );
>> F1 = linspace (0 , Fs , 512 );
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 30
>> stem ( F1 , mX1 )

>> ORDEN = 50;
>> Fc = 200; %frecuencia de corte
>> B = fir1 ( ORDEN, Fc / ( Fs/2 ) );
>> freqz (B , 1 ,256 , Fs )



>> zplane(B,1)
>> impz(B,1)


Filtrado con el comando FILTER. Tambin puede utilizarse el
comando CONV para la misma operacin de filtrado.

>> y = filter (B,1,x);
>> plot( y (1:100) )

Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 31
Para disear un filtro FIR Pasa-Alto o Pasa-Banda o Rechazo de
Banda, habr que agregar los siguientes parmetros al
comando FIR1.



>> ORDEN = 50;
>> Fs = 1000;
>> Fc1 = 100;
>> Fc2 = 220;
>> B1 = fir1(ORDEN, [ Fc1 Fc2 ] / (Fs/2) ); %Pasa-Banda
>> B2 = fir1(ORDEN, [ Fc1 Fc2 ] / (Fs/2) , stop);%RechazaB

>> Fc = 220;
>> B3 = fir1(ORDEN, Fc / (Fs/2) , high ); %Pasa-Alto













Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 32
8. Filtros Recursivos (IIR)

Los filtros recursivos se caracterizan por presentar una fase no
lineal en la banda pasante y un nmero de retardos menor en
comparacin al filtro FIR. Todos los polos del filtro IIR no se
encuentran en el origen del plano Z.

Los Filtros Recursivos son diseados a partir de la funcin
prototipo de filtros anlogos correspondientes a las funciones:
a) Butterworth
>> help butter

b) Chebyshev I y II
>> help cheby1
>> help cheby2

c) Elliptic
>> help ellip

Diseo de un filtro IIR utilizando la funcin Butterworth
>> Fs = 1000;
>> ORDEN = 5; %nmero de retardos del filtro
>> Fc = 50; %frecuencia de corte.
>> [B,A] = butter(ORDEN, Fc / (Fs/2));
B =
1.0e-003 *
0.0598 0.2990 0.5980 0.5980 0.2990 0.0598

A =
1.0000 -3.9845 6.4349 -5.2536 2.1651 -0.3599

El diagrama de polos y ceros del filtro, la respuesta impulsional
en el dominio del tiempo discreto y la respuesta en frecuencia
del filtro se obtiene con los comandos:
>> zplane(B,A),

>> NM = 100; %nmero de muestras para h[n]
>> impz(B,A,NM)

>> NM = 1000; %nmero de muestras
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 33
>> freqz(B,A,NM,Fs)





En caso que se desee mostrar el filtro en todo el espectro de
frecuencia, habr que utilizar la siguiente sentencia.
>> freqz(B,A,NM,whole,Fs)

Y, en el caso de querer contar con una variable que contenga la
respuesta en frecuencia del filtro, utilizar:
>> [ H , W ] = freqz(B,A,NM,Fs);

Luego, graficamos el filtro en magnitud y fase
>> plot( W , 20*log10(abs(H))) %magnitud
>> plot( W , unwrap(angle(H))) %fase

Para tener un filtro PasaAlto se deber de utilizar la sentencia
>> [B,A] = butter(ORDEN, Fc / (Fs/2)),high;
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 34
Para tener un filtro Pasa-Banda se deber de incluir dos
frecuencias de corte

>> [B,A] = butter(ORDEN, [ Fc 4*Fc]/(Fs/2));

Finalmente, si se pretende disear un filtro IIR utilizando otra
funcin anloga tal como chebyshev, se utiliza:

>> Rp = 3; %Ripple en decibels de la banda pasante
>> [B,A] = cheby1(ORDEN, Rp, Fc/(Fs/2));

De igual manera para las dems funciones anlogas.

A continuacin se crea una seal senoidal compuesta por dos
frecuencias diferentes: 50 Hz. y 200 Hz., Se obtendr su
espectro en frecuencia y se disear un filtro pasa-alto IIR de
frecuencia de corte 130 Hz, con la finalidad de eliminar la
frecuencia menor.

>> f1 = 50;
>> f2 = 200;
>> Fs = 1000;
>> n = 0 : Fs-1;
>> x = sin ( 2 * pi * n * f1 / Fs) + sin ( 2 * pi * n * f2/ Fs);
>> plot ( n (1: 40) , x(1:40) )
>> X1 = fft ( x , 512 );
>> mX1 = abs ( X1 );
>> F1 = linspace (0 , Fs , 512 );
>> stem ( F1 , mX1 )

Se utiliza un filtro Pasa-Alto de orden pequeo

>> ORDEN = 8;
>> Rp = 3; %ripple para la banda pasante
>> Rs = 40; %atenuacin mnima para el rechazo de
%banda
>> Fc = 130; %frecuencia de corte
>> [B,A] = ellip ( ORDEN, Rp , Rs , Fc / ( Fs/2 ) , high);
>> freqz (B , A ,256 , Fs )
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 35


>> zplane(B,A)
>> impz(B,A)



La operacin de filtrado se realiza con el comando FILTER.
>> y = filter (B,A,x);
>> plot( y (1:100) )










Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 36
9. Filtro Pasa-Todo y Filtro Notch

Un filtro pasa-todo se caracteriza por dejar pasar todas las
componentes de frecuencia.

Un filtro Notch se caracteriza por cancelar slo una componente
de frecuencia.

Filtro Pasa-todo de Primer Orden

1
1
1
) (


=
az
a z
z H
, R a e

>> a = 0.2;
>> B = [ -a 1 ];
>> A = [ 1 -a];
>> printsys(B,A,z)
num/den =

-0.2 z + 1
-----------
z - 0.2

>> freqz(B,A)


>> zplane(B,A)
>> impz(B,A,100)
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 37
Filtro Notch
2 1
2 1
81 . 0 ) ( 9 . 0 1
) ( 1
) (


+ +
+ +
=
z z e e
z z e e
z H
jwo jwo
jwo jwo


wo : Frecuencia Eliminada en [rad/seg] (dividir/Fs)

A continuacin se disea un filtro Notch para cancelar la
frecuencia de 60 Hz.
>> Fs = 400;
>> wo = (2*pi)*(60 / Fs);
>> B = [ 1 -(exp(j*wo)+exp(-j*wo)) 1 ];
>> A = [ 1 -0.9*(exp(j*wo)+exp(-j*wo)) 0.81];
>> freqz(B,A,1000,Fs)



>> zplane(B,A)
>> impz(B,A,100)










Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 38
10. Seales No Estacionarias o Variantes en el
Tiempo

Una seal es no estacionaria porque presenta variaciones de
frecuencia conforme transcurre el tiempo.
>> Fs=500;
>> n = 0:1/Fs:1;
>> x1 = 2 *sin(2*pi.*n.*n*40);
>> plot(n,x1)


La seal presenta un incremento de frecuencia de forma lineal
conforme transcurre el tiempo.
De igual manera, se presenta una seal con tres frecuencias
diferentes en tres intervalos de tiempo distintos:
>> Fs = 500;
>> n = 0:1/Fs:1;
>> x2 =[ sin(2*pi*n*20) sin(2*pi*n*100) sin(2*pi*n*20) ];
>> plot(x2)

Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 39
Para observar el comportamiento de la seal durante el tiempo,
se recurre al anlisis de la seal por medio de un
espectrograma. El espectrograma es una forma de visualizar el
comportamiento en frecuencia que tiene una determinada seal
conforme transcurre el tiempo.

Utilizando la funcin SPECGRAM para los dos ejemplos
anteriores:
>> overlap = 250; %nmero de muestras sobrepuestas
>> NFFT = 256; %nmero de puntos para la FFT
>> specgram(x1, NFFT, Fs, hamming(NFFT), overlap);



>> overlap = 200; %nmero de muestras sobrepuestas
>> NFFT = 256; %nmero de puntos para la FFT
>> specgram(x2, NFFT, Fs, hamming(NFFT), overlap);

El espectrograma es una imagen que est representndose por
una matriz de energa, la cual equivale al producto de la DFT de
pequeas porciones de la seal, por una ventana finita tipo
hamming, hann, kaiser, etc.








Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 40
11. Introduccin al Procesamiento de Imgenes

Toda imagen digital es representada mediante un arreglo. Se
analizaran Tres tipos de imgenes estticas: Binarias, Tonos de
Gris y Coloridas.

>> dir *.bmp
>> I = imread(ejemplo , bmp);

Si se desea leer otro formato de imagen, solicitar la ayuda al
comando IMREAD

>> help imread

Imagen binaria o a tonos de gris, cuando I es una matriz con
cada uno de sus elementos correspondiendo a un pxel.

Imagen colorida cuando I es un arreglo (agrupacin de tres
matrices). Cada matriz representar un color primario R, G y B.

>> colormap(gray(256))
>> imshow(I)

* Imagen Binaria: 0 Negro, 1 Blanco
* Imagen a Tonos de Gris: 0, 1, 2, . . . 2
8
1 niveles de gris
(8 bits/pxel)

Blanco
Gris
Negro
255
...
127
...
0


* Imagen a Color:
(8 bits/pxel) 0, 1, 2, ... 2
8
1 niveles de Rojo
0, 1, 2, ... 2
8
- 1 niveles de Verde
0, 1, 2, ... 2
8
1 niveles de Azul

Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 41
Para convertir una imagen de tonos de gris a una binaria, habr
que sealar un umbral entre 0 y 255, siempre y cuando se
encuentre codificada con 8 bits por pxel.
>> [m,n] = size(I); %obtiene el tamao de la imagen
>> umbral = 128;
>> for i=1:m
for j=1:n
if I(i,j)>=umbral
I(i,j)=255;
else
I(i,j)=0;
end
end
end
>> colormap(gray(256))
>> imshow(I)

El histograma de una imagen se obtiene como:
>> hist(I)

La rotacin y el cambio de tamao de una imagen:
>> Ir = imrotate(I,-3,'bilinear','crop');
>> imshow(Ir)
>> Is = imresize (I,2,bilinear);
>> imshow(Is)

Para el filtrado de imgenes se utiliza la funcin CONV2
>> [f1,f2] = freqspace(15,'meshgrid');
>> H2 = ones(15);
>> r = sqrt(f1.^2 + f2.^2);
>> H2((r<0.1) | (r>0.5)) = 0;
>> h2 = fwind1(H2,hamming(15));
>> freqz2(h2)
>> If = conv2(h2,I);
>> image(If)

La deteccin de contornos en una imagen se obtiene:
>> Id = edge(I,sobel );
>> image(Id*255)
>> image(255-Id*255)
Procesamiento Digital de Seales Utilizando el Matlab
Mg. Ing. Pedro Huaman Navarrete 42

You might also like