Procesamiento Digital de Señales Con Matlab
Procesamiento Digital de Señales Con Matlab
Procesamiento Digital de Señales Con Matlab
http://lonely113.blogspot.com
Donde: Fs=1/Ts: Frecuencia de muestreo. La grfica de seales discretas se realiza con el comando:
stem(t,xt)
http://lonely113.blogspot.com
>> F0=400; >> A=2; >> phi=pi/4; >> Fs=8000; >> Ts=1/Fs; >> t=-0.002:Ts:0.002; >> xt=A*sin(2*pi*F0*t+phi); >> stem(t,xt)
http://lonely113.blogspot.com
-1.5
-1
-0.5
0.5
1.5 x 10
2
-3
x(t)
-1.5
-1
-0.5
0 time (s)
0.5
1.5 x 10
2
-3
>> F0=400; >> A=2; >> Fs=8000; >> Ts=1/Fs; >> t=-0.003:Ts:0.003; >> xt=A*sinc(2*F0*t); >> stem(t,xt)
1.5
0.5
-0.5 -3
-2
-1
2 x 10
3
-3
http://lonely113.blogspot.com
Generacin de Ruido
6
4 3.5 3
x 10
-4
-2
http://lonely113.blogspot.com
Submuestreo y Sobremuestro
8
Submuestreo
xtDown=downsample(xt,N)
La seal xDown tendr una frecuencia de muestro Fs/N. Submuestrear la seal significa conservar cada N-sima muestra y eliminar las muestras restantes.
Sobremuestreo
xtUp=upsample(xt,N)
La seal xUp tendr una frecuencia de muestreo NFs.
http://lonely113.blogspot.com
Ejemplo: Submuestreo.
9
Se submuestrea la seal sinusoidal generada anteriormente (Fs=8 KHz) para obtener una seal xtDown muestreada a 2 KHz.
>> F0=400; >> A=2; >> phi=pi/4; >> Fs=8000; >> Ts=1/Fs; >> t=-0.002:Ts:0.002; >> xt=A*sin(2*pi*F0*t+phi); >> stem(t,xt) >>xtDown=downsample(xt,4); >> tDown=downsample(t,4); >> hold on >> stem(tDown,xtDown,'r');
2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -2
-1.5
-1
-0.5
0.5
1.5 x 10
2
-3
http://lonely113.blogspot.com
Procesamiento de Audio
10
>> soundsc(xt,Fs)
http://lonely113.blogspot.com
Grabacin de Audio
11
Para grabar una seal audible mediante la tarjeta de sonido y un micrfono se utilizan los siguientes comandos:
r=audiorecorder: Crea un objeto de grabacin. record(r): Inicio de grabacin. pause(r) ,stop(r): Pausa y finalizacin. play(r): Escuchar la grabacin y=getaudiodata(r): Para obtener la matriz que contiene las muestras de la seal audible. sta es la seal que se puede procesar. Fs=r.SampleRate: Para obtener la frecuencia de muestreo.
http://lonely113.blogspot.com
Ejemplo:
12
>> r=audiorecorder; >> record(r) >> pause(r) >> record(r) >> stop(r) >> play(r) >> y=getaudiodata(r); >> Fs=r.SampleRate Fs = 8000
http://lonely113.blogspot.com
http://lonely113.blogspot.com
Para leer un archivo de audio en formato wav que se encuentra en la carpeta de trabajo de Matlab se utiliza la funcin:
[xt,Fs]=wavread(nombre_de_archivo)
Se guardan las muestras y la frecuencia de muestro en xt y Fs respectivamente.
>> [xt,Fs]=wavread('tuner1');
http://lonely113.blogspot.com
Anlisis en Frecuencia
15
Comandos adicionales:
magxF=abs(xF): Magnitud de la fft de xt. phasexF=angle(xF): Fase de la fft de xt. phasexF=unwrap(phasexF): Para obtener la apropiada informacin de fase.
http://lonely113.blogspot.com
>> Fs=2000; >> Ts=1/Fs; >> t=-0.005:Ts:0.005; >> xt=rectpuls(t,0.004); >> nFFT=64; >> xF=fft(xt,nFFT); >> magxF=abs(xF); >> phasexF=angle(xF); >> phasexF=unwrap(phasexF); >> figure,stem(magxF); >>title(Magnitud de xF) >> figure,stem(phasexF) >>title(Fase de xF)
http://lonely113.blogspot.com
7 6 5 4 3 2 1 0
10
20
30
40
50
60
70
10
20
30
40
50
60
70
El comando fft obtiene la transformada de Fourier en la regin comprendida entre 0 y la frecuencia de muestro Fs. Se requiere desplazar una parte de la grfica para obtener la regin negativa de la transformada de Fourier.
>> magxF=fftshift(magxF); >> phasexF=fftshift(phasexF); >> stem(magxF); >>title(Magnitud de xF) >> figure,stem(phasexF); >>title(Fase de xF)
7 6 5 4 3 2 1 0
10
20
30
40
50
60
70
10
20
30
40
50
60
70
http://lonely113.blogspot.com
Los grficos anteriores no presentan el eje de frecuencia correcto. Se debe crear el vector de eje de frecuencias para graficar correctamente.
>> f_esp=Fs/nFFT; >> fNyquist=Fs/2; >> f_inicio=-fNyquist; >> f_fin=fNyquist-f_esp; >> f_eje=f_inicio:f_esp:f_fin; >> stem(f_eje,magxF) >> figure,stem(f_eje,phasexF)
http://lonely113.blogspot.com
7 6 5 4 3 2 1 0 -1000
0 -5 -10 -15 -20 -25 -30 -35 -40 -1000
-800
-600
-400
-200
0 200 Fase de xF
400
600
800
1000
-800
-600
-400
-200
200
400
600
800
1000
Sistemas LTI
19
Todos los sistemas LTI pueden ser analizados como Filtros LTI discretos.
http://lonely113.blogspot.com
En el dominio Z
Funcin de transferencia en el dominio Z
http://lonely113.blogspot.com
en Matlab:
>> num=[1 1.1]; >> den=[1 0 -0.1];
http://lonely113.blogspot.com
Impz(num,den): Grafica la respuesta al impulso del filtro. Por defecto se considera Fs=1 Hz y
grafica las 10 primeras muestras.
Amplitude
0.8
0.6
>> num=[1 1.1]; >> den=[1 0 -0.1]; >> impz(num,den); >> Fs=8000; >> [h,t]=impz(num,den,32,Fs); >> figure,stem(t,h)
0.4
0.2
3 4 n (samples)
1.4
1.2
0.8
0.6
0.4
0.2
0.5
1.5
2.5
3.5 x 10
4
-3
http://lonely113.blogspot.com
y=filter(num,den,x)
Donde: x es la seal de entrada.
http://lonely113.blogspot.com
Ejemplo:
25
Espectro de xt
Se obtendr la seal de salida del filtro para una seal de entrada audible:
>> [xt,Fs]=wavread('tuner1'); >> [h,t]=impz(num,den,10,Fs); >> y1=convn(h,xt); >> soundsc(xt,Fs); >> soundsc(y1,Fs); >> y2=filter(num,den,xt); >> soundsc(xt,Fs); >> soundsc(y2,Fs);
http://lonely113.blogspot.com
Espectro de y2
Retardo de grupo:
http://lonely113.blogspot.com
Se utilizan los comandos: [H,F]=freqz(num,den): Por defecto asume 512 puntos equidistantemente espaciados y el eje de frecuencias es normalizada. [H,F]=freqz(num,den,n,Fs): Donde se especifica nmero de puntos n y la frecuencia de muestreo Fs. [H,F]=freqz(num,den,f,Fs): Donde f es un vector en el que se especifica las frecuencias particulares en las que se obtendr la respuesta de magnitud y fase.
http://lonely113.blogspot.com
Magnitude (dB)
-10
-20
0.1
0.2
0.9
>> num=[1 1.1]; >> den=[1 0 -0.1]; >> Fs=8000; >> freqz(num,den) >>figure,freqz(num,den,1024,Fs); >> f=[0,200,400]; >> [H,F]=freqz(num,den,f,Fs);
Phase (degrees)
0.1
0.2
0.9
10
Magnitude (dB)
-10
-20
500
1000
3000
3500
4000
Phase (degrees)
500
1000
3000
3500
4000
http://lonely113.blogspot.com
http://lonely113.blogspot.com
0.1
0.2
0.9
12
10
500
1000
3000
3500
4000
http://lonely113.blogspot.com
http://lonely113.blogspot.com
[z,p,k]=tf2zp(num,den)
Dnde los vectores: z: ceros p: polos k: ganancia de cada numerador de tf.
De manera inversa:
[num,den]=zp2tf(z,p,k)
http://lonely113.blogspot.com
>> num=[1 1.1]; >> den=[1 0 -0.1]; >> [z,p,k]=tf2zp(num,den) z= -1.1000 p= 0.3162 -0.3162 k= 1 >> [num,den]=zp2tf(z,p,k) num = 0 1.0000 1.1000 den = 1.0000 0 -0.1000
http://lonely113.blogspot.com
Se utiliza el comando:
zplane(z,p)
Si hay polos fuera del crculo unitario significa que el sistema es inestable. Continuando con el ejemplo anterior:
1 0.8 0.6 0.4
Imaginary Part
>> zplane(z,p)
http://lonely113.blogspot.com
FVTool (Filter Visualization Tool) Es una herramienta que simplifica el trabajo de estudiar el comportamiento de los filtros.
http://lonely113.blogspot.com
Llamada al FVtool
36
fvtool(num,den)
Donde: num y den corresponden al filtro en estudio. Continuando con el ejemplo anterior:
>>fvtool(num,den)
http://lonely113.blogspot.com
Configuracin de FVtool
37
El eje de frecuencias por defecto no se corresponde con los valores correctos. Para configurarlo correctamente:
Men Analysis>Sampling Frecuency. En el cuadro Fs se introduce el valor de la frecuencia de muestreo.
http://lonely113.blogspot.com
Respuesta de Magnitud
Respuesta de fase Respuestas de magnitud y fase
Respuesta al escaln
Grfico de polos y ceros Etc
http://lonely113.blogspot.com
Ejemplo:
39
Respuesta al impulso
http://lonely113.blogspot.com
>> num1=[1 1]; >> den1=[1]; >> num2=[1 -1]; >> den2=[1]; >> fvtool(num1,den1,num2,den2)
http://lonely113.blogspot.com
http://lonely113.blogspot.com
Funcin de transferencia:
Respuesta en frecuencia:
http://lonely113.blogspot.com
http://lonely113.blogspot.com
fstop1: Frecuencia stop 1. fpass1: Frecuencia pass 1. fpass2: Frecuencia pass 2. fstop2: Frecuencia stop 2. Rp: Rizado en la banda de paso en dB. Rs: Atenuacin en la banda de supresin en dB.
http://lonely113.blogspot.com
El diseo de filtros en Matlab se realiza con valores normalizados. Para esto se realiza:
[nB,WnB]=buttord(Wp,Ws,Rp,Rs)
Wp, Ws, Rp y Rs corresponden a las especificaciones. WnB: Frecuencia a -3 dB.
2. Obtener los coeficientes del filtro.
[numB,denB]=butter[nB,WnB]
En el diseo de filtros Pasabanda o rechazo de banda el orden del filtro resulta ser en realidad el doble del especificado por el comando buttord.
http://lonely113.blogspot.com
http://lonely113.blogspot.com
>> [nE,WnE]=ellipord(Wp,Ws,Rp,Rs) nE = 6 WnE = 0.3000 0.5500 >> [numE,denE]=ellip(nE,Rp,Rs,Wp); Se puede observar que la cantidad de coeficientes es mucho menor que en el caso de un filtro Butterworth.
http://lonely113.blogspot.com
http://lonely113.blogspot.com
Espectro de yt
10
http://lonely113.blogspot.com
[num,den]=butter(nB,Wn)
Elptico Pasabajas
[num,den]=ellip(nE,Rp,Rs,Wp)
Butterworth Pasaaltas
[num,den]=butter(nB,Wn,high)
Elptic0 Pasaaltas
[num,den]=ellip(nE,Rp,Rs,Wp,high)
http://lonely113.blogspot.com
Funcin de transferencia:
Respuesta en frecuencia:
http://lonely113.blogspot.com
Se multiplica la respuesta en el tiempo de un filtro ideal con una funcin ventana. Truncando la respuesta ideal a un nmero finito de elementos.
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -50
-40
-30
-20
-10
10
20
30
40
50
num=fir1(n,Wp)
Dnde:
n: Orden del filtro Wp: Vector que contiene las frecuencias de corte. Si slo tiene un elemento se obtiene un filtro pasabajas y si contiene dos elementos se obtiene un filtro pasabanda.
http://lonely113.blogspot.com
Ejemplo:
54
Se disea un filtro mediante el mtodo de ventanas para las siguientes especificaciones: Fs=8000 Hz fpass1=2200 Hz fpass2=3200 Hz Rp=1 dB Rs=60 dB Orden=127
http://lonely113.blogspot.com
Ejemplo:
55
>> Fs=8000; >> Fnyquist=Fs/2; >> fpass1=2200; >> fpass2=3200; >> Rp=1; >> Rs=60; >> Wp(1)=fpass1/Fnyquist; >> Wp(2)=fpass2/Fnyquist; >> n=127; >> num=fir1(n,Wp); >>fvtool(num)
http://lonely113.blogspot.com
>> wintool Initializing Window Design & Analysis Tool ..... done.
Herramienta con interfaz GUI que permite disear y visualizar la respuesta en el tiempo y en frecuencia de varios tipos de funciones ventana.
http://lonely113.blogspot.com
Tipo
Rectangular
2Fs/(2M+1)
0.46Fs/M
Hann
Hamming Blackman
4Fs/(2M+1)
2Fs/(2M+1) 6Fs/(2M+1)
43.9
54.5 75.3
1.55Fs/M
1.55Fs/M 2.78Fs/M
http://lonely113.blogspot.com
Se disea la funcin ventana Blackman de longitud 128 mediante la herramienta wintool y se exporta a Matlab con Save to workspace. El nombre por defecto es window_1.
http://lonely113.blogspot.com
Continuacin
59
http://lonely113.blogspot.com
de
audio
Espectro de yt
http://lonely113.blogspot.com
Fdatool (Filter Design and Analysis tool) es una herramienta con interfaz GUI para el diseo de filtros digitales.
>> fdatool
http://lonely113.blogspot.com
Se realiza el siguiente procedimiento: 1. Clic derecho en Structure en el campo Current filter information y en seguida se escoge convert to single section.
2. Men File>Export Se le da nombres al numerador y denominador del filtro. Luego clic en Export.
http://lonely113.blogspot.com
Espectro de yt
1.2
0.8
0.6
0.4
0.2
http://lonely113.blogspot.com
http://lonely113.blogspot.com
65