Professional Documents
Culture Documents
=
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