42
UNIVERSIDAD RICARDO PALMA FACULTAD DE INGENIERÍA PROCESAMIENTO DIGITAL DE SEÑALES UTILIZANDO EL MATLAB Octubre 2005 LIMA - PERÚ

ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Embed Size (px)

Citation preview

Page 1: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 1

UNIVERSIDAD RICARDO PALMA

FACULTAD DE INGENIERÍA

PROCESAMIENTO DIGITAL DE

SEÑALES UTILIZANDO EL MATLAB

Octubre 2005

LIMA - PERÚ

Page 2: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 2

Page 3: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 3

PROCESAMIENTO DIGITAL

DE SEÑALES UTILIZANDO EL

MATLAB

Por

Pedro Freddy Huamaní Navarrete

Facultad de Ingeniería

Universidad Ricardo Palma

Page 4: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 4

Page 5: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 5

Presentación

Por lo general las señales encontradas en la naturaleza son del tipo análogo, 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 Ingeniería Electrónica, Telecomunicaciones y áreas afines, se cuenta con un curso de nombre Procesamiento Digital de Señales, encargada de estudiar las herramientas principales para el tratamiento, manipulación y representación de señales 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 Simulación y Computación Científica llamado Matlab, el cual será utilizado para complementar la parte teórica impartida en las aulas de clase.

El Matlab cuenta con una conjunto de toolbox que permite desarrollar simulaciones y proyectos de investigación en diferentes áreas, por tal motivo es utilizado frecuentemente en diversas universidades peruanas y extranjeras.

Este manual contiene en sus primeros capítulos los temas referentes a la representación de señales discretas, posteriormente las herramientas matemáticas utilizadas en el análisis, tales como transformada Z y transformada discreta de fourier, luego el diseño y aplicaciones de filtros digitales, presentación del espectrograma para señales no estacionarias y finalmente una introducción al procesamiento digital de imágenes.

Page 6: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 6

Page 7: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 7

CONTENIDO

1. Discretización de Señales 9

2. Señales de Audio 12

3. Operación de Convolución 15

4. Decimación e Interpolación 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. Señales No Estacionarias o Variantes en el Tiempo 38

11. Introducción al Procesamiento de imágenes 40

Page 8: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 8

Page 9: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 9

1. Discretización de señales Como es de conocimiento, las señales por naturaleza son del tipo análogo. Es por tal motivo, que es necesario transformarlas a un formato digital para posteriormente realizar el procesamiento sobre estas señales. Una vez discretizada la señal, 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 ]; %señal discreta >> figure(1) >> plot ( n , x) %gráfico “continuo” >> title ( ‘Señal Contínua’ ), xlabel (‘ tiempo’ ) >> figure(2) >> stem ( n , x) %gráfico discreto

Una señal impulso: 2 [n - 1] >> n = [ 0 : 7]; >> x = 2 * [ 0 1 0 0 0 0 0 0]; >> stem ( n , x ) Una señal escalón: -5 [ n] >> n = [ -20 : 1 : 20]; >> x = -5 * [ zeros( 1, 20 ) ones(1,21) ]; >> stem( n , x ) Una señal ruido entre 0 y 1: r[n]

Page 10: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 10

>> r = rand ( 1, 1000 ); >> n = 0 :1: 999; >> stem( n , r ) Discretizando una señal 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 expresión 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 señal seno >> r = length(x); >> R = randn(1,r); >> xR = 2*x + R; >> figure(1), plot( n , xR) >> figure(2) ,stem( n , xR)

Page 11: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 11

Cuando no se cumple con el teorema de muestreo, se tiene una representación equivocada de la señal 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

Page 12: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 12

2. Señales de Audio

El audio es una señal análoga que puede ser discetizada utilizando una PC y un micrófono, 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 función WAVREAD para leer el archivo WAV y pasar toda la información a una variable cualquiera. >> help wavread >> [y,Fs ] = wavread(‘ejemplo.wav’); Comprobando la cantidad de segundos a partir del número de muestras y la frecuencia de muestreo.

Fs muestras 1 Seg. length(y) muestras ? Seg.

Graficando la señal 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)

Page 13: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 13

Reproduciendo la señal con la misma Fs >> sound(y , Fs) Reproduciendo la señal con una Fs diferente. Señal más aguda si aumentamos la FS, o señal más 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 señal ruido. >> r = 0.2*randn( length(y) , 1); >> yr = y + r; >> plot(yr)

Reproduciendo la señal de audio con ruido >> sound(yr, fs) También 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)

Page 14: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 14

Utilizar la función WAVWRITE para almacenar dicho tono en un archivo WAV. >> help wavwrite >> wavwrite (x,Fs,8,’seno.wav’); %8 indica el número de

%bits por muestra

Page 15: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 15

3. Operación de Convolución

La operación de convolución se realiza sobre dos señales discretas y finitas Por ejemplo, para el diagrama de bloques siguiente se obtendrá la operación de convolución para finalmente graficar la señal de salida y[n].

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

h1 [ n ] = [n] - 8 [n-1] + 3 [n-2 ] h2 [ n ] = 2 [n - 3] r[n] = señal ruido considerar un intervalo de cuatro meustras para realizar las operaciones de convolución y representación gráfica. Representamos cada una de las señales 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 ] h1 [ n ] + +

3 [n] r [ n]

x

h 2[ n ]

w[n] z[n]

Page 16: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales 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 )

Page 17: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 17

4. Decimación e Interpolación La operación de decimación representa una disminución de la Frecuencia de Muestreo, en cuanto la interpolación se refiere a un aumento de la Frecuencia de Muestreo colocando ceros entre las muestras de una señal discreta. Sea una secuencia x[n]=2sin (2**f*n/Fs). Reprsentemos la versión decimada por 2 e interpolación 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 característica 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 también mostrando 5 ciclos en un segundo.

Page 18: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 18

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

De esta manera, se recupera la Fs de muestreo inicial. A continuación, es posible observar la diferencia entre la señal original y la manipulada por una operación de decimación e interpolación. >> plot(0:Fs-1,x,'r',0:Fs-1,xx,'b') Asiímismo, para poder lograr el cambio de la Frecuencia de Muestreo Fs un número fraccionario de veces, se procede a

Page 19: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales 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 decimación e interpolación una seguida de la otra.

M L x [ n ] x T [ n ]

M

LFs *

Fs

M

Fs

Fs_Final 4 3 Fs_Incial

Page 20: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales 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 también en el procesamiento de señales discretas. Sea la ecuación 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);

15197.0

2559.0

7697.0

0059.0)(

zzzH

Page 21: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 21

][]1[)5197.0(*2559.0]1[)7697.0(*0059.0][ 11 nnnnh nn

>> 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 también, 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][ nnnnx

Page 22: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 22

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

jwjwjw eeeX 250)(

>> 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 Función Par >> figure(2), plot ( w , fX) %fase: Función Impar

Se observa la periodicidad con T = 2pi. De igual manera, se muestra a continuación 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.

Page 23: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 23

6. Transformada Discreta de Fourier (DFT)

La DFT es una herramienta importante para el análisis de señales en el dominio de la frecuencia. El Matlab cuenta con dicho herramienta implementada en un comando FFT, el cual representa la Transformada Rápida de Fourier. Sea una señal coseno x[n], con una frecuencia de muestreo Fs=100 Hz, x[n] = cos(2*20*n/Fs). A continuación se grafica la señal x[n] en el tiempo para un segundo de duración, 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 módulo 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 Módulo 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);

Page 24: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales 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 señal. >> 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)

Page 25: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales 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)

Page 26: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 26

Graficando la FFT de una Señal 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 Señal 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)

Page 27: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 27

7. Filtros No Recursivos (FIR)

Los filtros FIR se caracterizan por presentar polos sólo en el origen, así como una fase lineal para la banda pasante y un número elevado de retardos. Una de las técnicas para realizar su diseño recibe el nombre de técnica de Windowing. Esta involucra el truncado de una secuencia infinita hi[n] utilizando una secuencia w[n] (ventana de hamming, hann, kaiser, etc).

h [ n ] = hi [ n ] x w[ n ]

2

1Nn ,

Ws

Wc2

)2

1Nn(

Ws

Wc 2

)Ws

Wc)

2

1N(n( 2sin(

Ws

Wc2

]n[h i

12

1:0

Nn

dB

wp wa ws / 2

-Ap

-Aa

PasaBajo

Page 28: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 28

A continuación se muestra una rutina que se utiliza para diseñar 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 Atenuación (rad/seg) % ws: Frecuencia Muestreo (rad/seg) % Ap_ Ripple Banda Pasante % Aa_ Atenuación Mínima en la Banda de Rechazo % close all Ap_ = abs(Ap_); Aa_ = abs(Aa_); Bt = abs(wa-wp); wc = (wp + wa)/2; %Cálculo de d1 y d2: d1 = 10^(-0.05*Aa_); d2 = (10^(0.05*Ap_) -1)/(10^(0.05*Ap_)+1); %Cálculo de d: d = min([d1 d2]); %Cálculo de Aa y Ap: Aa = -20*log10(abs(d)); Ap = 20*log10((1+d)/(1-d)); %Cálculo de D: if Aa<=21, D = 0.9222; elseif Aa>21 , D = (Aa - 7.95)/14.36; end %Cálculo de N: N = ((ws * D)/Bt + 1); N = ceil(N);

Page 29: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales 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 diseño 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 diseño de filtros digitales FIR. >> help fir1 A continuación se crea una señal senoidal compuesta por dos frecuencias diferentes: 120 Hz. y 350 Hz., Se obtendrá su espectro en frecuencia y se diseñará 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 );

Page 30: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales 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. También puede utilizarse el comando CONV para la misma operación de filtrado. >> y = filter (B,1,x); >> plot( y (1:100) )

Page 31: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 31

Para diseñar un filtro FIR Pasa-Alto o Pasa-Banda o Rechazo de Banda, habrá que agregar los siguientes parámetros 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

Page 32: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales 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 número de retardos menor en comparación al filtro FIR. Todos los polos del filtro IIR no se encuentran en el origen del plano Z. Los Filtros Recursivos son diseñados a partir de la función prototipo de filtros análogos correspondientes a las funciones: a) Butterworth >> help butter b) Chebyshev I y II >> help cheby1 >> help cheby2 c) Elliptic >> help ellip Diseño de un filtro IIR utilizando la función Butterworth >> Fs = 1000; >> ORDEN = 5; %número 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; %número de muestras para h[n] >> impz(B,A,NM) >> NM = 1000; %número de muestras

Page 33: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales 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’;

Page 34: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales 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 diseñar un filtro IIR utilizando otra función análoga 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 demás funciones análogas. A continuación se crea una señal senoidal compuesta por dos frecuencias diferentes: 50 Hz. y 200 Hz., Se obtendrá su espectro en frecuencia y se diseñará 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 pequeño >> ORDEN = 8; >> Rp = 3; %ripple para la banda pasante >> Rs = 40; %atenuación mínima 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 )

Page 35: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 35

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

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

Page 36: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales 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 sólo una componente de frecuencia. Filtro Pasa-todo de Primer Orden

1

1

1)(

az

azzH , Ra

>> 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)

Page 37: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 37

Filtro Notch

21

21

81.0)(9.01

)(1)(

zzee

zzeezH

jwojwo

jwojwo

wo : Frecuencia Eliminada en [rad/seg] (dividir/Fs) A continuación se diseña 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)

Page 38: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 38

10. Señales No Estacionarias o Variantes en el

Tiempo Una señal 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 señal presenta un incremento de frecuencia de forma lineal conforme transcurre el tiempo. De igual manera, se presenta una señal 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)

Page 39: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 39

Para observar el comportamiento de la señal durante el tiempo, se recurre al análisis de la señal por medio de un espectrograma. El espectrograma es una forma de visualizar el comportamiento en frecuencia que tiene una determinada señal conforme transcurre el tiempo. Utilizando la función SPECGRAM para los dos ejemplos anteriores: >> overlap = 250; %número de muestras sobrepuestas >> NFFT = 256; %número de puntos para la FFT >> specgram(x1, NFFT, Fs, hamming(NFFT), overlap);

>> overlap = 200; %número de muestras sobrepuestas >> NFFT = 256; %número de puntos para la FFT >> specgram(x2, NFFT, Fs, hamming(NFFT), overlap); El espectrograma es una imagen que está representándose por una matriz de energía, la cual equivale al producto de la DFT de pequeñas porciones de la señal, por una ventana finita tipo hamming, hann, kaiser, etc.

Page 40: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 40

11. Introducción al Procesamiento de Imágenes

Toda imagen digital es representada mediante un arreglo. Se analizaran Tres tipos de imágenes estáticas: 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 píxel. Imagen colorida cuando I es un arreglo (agrupación 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, . . . 28 – 1 niveles de gris (8 bits/píxel)

Blanco

Gris

Negro

255

...

127

...

0

* Imagen a Color: (8 bits/píxel) 0, 1, 2, ... 28 – 1 niveles de Rojo

0, 1, 2, ... 28 - 1 niveles de Verde 0, 1, 2, ... 28 – 1 niveles de Azul

Page 41: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 41

Para convertir una imagen de tonos de gris a una binaria, habrá que señalar un umbral entre 0 y 255, siempre y cuando se encuentre codificada con 8 bits por píxel. >> [m,n] = size(I); %obtiene el tamaño 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 rotación y el cambio de tamaño de una imagen: >> Ir = imrotate(I,-3,'bilinear','crop'); >> imshow(Ir) >> Is = imresize (I,2,’bilinear’); >> imshow(Is) Para el filtrado de imágenes se utiliza la función 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 detección de contornos en una imagen se obtiene: >> Id = edge(I,’sobel’ ); >> image(Id*255) >> image(255-Id*255)

Page 42: ProcesamientoDigitalSeñalesUtilizandoMatlab (Pedro Huamaní Navarrete)

Procesamiento Digital de Señales Utilizando el Matlab

Mg. Ing. Pedro Huamaní Navarrete 42