Avance Casa 09 Zapata

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 32

Procesamiento Digital de Señales - Semestre 8

Práctica de Laboratorio N° 9. Fecha: 22/11/23

Grupo: 1

Nombres y Apellidos: Zapata Zuñiga Cesar Augusto

IV. PROCEDIMIENTO

DISEÑO DE FILTROS FIR

Método de la Ventana

Ventanas

En este apartado se van a estudiar distintas funciones de ventana, útiles tanto en el diseño de filtros
digitales como en el análisis espectral de secuencias de larga duración. Se pretende observar la
forma de la ventana en el dominio del tiempo y su correspondiente espectro de amplitud, analizando
cómo influye en este último la longitud empleada en cada caso. La elección correcta de la ventana
consiste en optar por aquella que llegue a un buen compromiso entre un lóbulo principal estrecho
(que conducirá a un filtro muy selectivo) y lóbulos laterales de amplitud reducida (disminuye la
distorsión en las bandas de paso y atenuada).

IV.1. Observar la forma de las ventanas rectangular (instrucción boxcar o rectwin), triangular
(instrucción triang), de Hanning, de Hamming y de Kaiser (con ß=7.865) para unas longitudes de
128 y 64 muestras. Dibuje en escala semilogarítmica el módulo del espectro para las cinco
ventanas, e indique los valores de ALSmáx (amplitud máxima relativa de los lóbulos secundarios,
en dB’s), ωLS (pulsación que se corresponde con ALSmáx) y aLP (anchura del lóbulo principal).
Para representar el módulo del espectro puede emplear el siguiente programa:

Wv=fft(ventana, 1024); % calcula la T. de Fourier de la secuencia. magv=abs(Wv/max(Wv)); %


obtiene el módulo del espectro. magvdB=20*log10(magv); % Para representar en escala
semilogarítmica. magvdB(514:1024)=[]; % w=0:512)/512*pi; % w es la variable del eje de abscisas.
plot(w, magvdB); % Dibuja el módulo del espectro en escala semilog.

%Ventana rectangular (64)


%Definiendo la cantidad de datos a enventanar
L=64;
%Generando la ventana requerida
ventana=rectwin(L);
n=0:L-1;
stem(n,ventana)
%Generando la respuesta en frecuencia mediante wvtool
wvtool(ventana)

%Graficando el modulo de la respuesta en frecuencia:


figure();
Wv=fft(ventana, 1024);
%Definiendo la magnitud de la ventana
magv=abs(Wv/max(Wv));
%Cambio de magnitud normalizada a Db
magvdB=20*log10(magv);
magvdB(514:1024)=[];
%Definiendo el rango de la gráfica
w=(0:512)/512*pi;
plot(w/pi, magvdB);
title('Espectro de una Ventana Rectangular 64');
xlabel('Frecuencia Normalizada (\omega/\pi)');
ylabel('Magnitud (dB)');
grid on;
grid minor;

%Ventana rectangular (128)


%Definiendo la cantidad de datos a enventanar
L=128;
%Generando la ventana requerida
ventana=rectwin(L);
n=0:L-1;
stem(n,ventana)
%Generando la respuesta en frecuencia mediante wvtool
wvtool(ventana)

%Graficando el modulo de la respuesta en frecuencia:


figure();
Wv=fft(ventana, 1024);
%Definiendo la magnitud de la ventana
magv=abs(Wv/max(Wv));
%Cambio de magnitud normalizada a Db
magvdB=20*log10(magv);
magvdB(514:1024)=[];
%Definiendo el rango de la gráfica
w=(0:512)/512*pi;
plot(w/pi, magvdB);
title('Espectro de una Ventana Rectangular 128');
xlabel('Frecuencia Normalizada (\omega/\pi)');
ylabel('Magnitud (dB)');
grid on;
grid minor;

%Ventana triangular (64)


%Definiendo la cantidad de datos a enventanar
L=64;
%Generando la ventana requerida
tri=triang(L);
n=0:L-1;
stem(n,tri)
%Generando la respuesta en frecuencia mediante wvtool
wvtool(tri);

%Graficando el modulo de la respuesta en frecuencia:


figure();
Wv = fft(tri, 1024);
%Definiendo la magnitud de la ventana
magv = abs(Wv/max(Wv));
%Cambio de magnitud normalizada a Db
magvdB = 20*log10(magv);
magvdB(514:1024) = [];
%Definiendo el rango de la gráfica
w = (0:512)/512*pi;
plot(w/pi, magvdB);
title('Espectro de una Ventana Triangular 64');
xlabel('Frecuencia Normalizada (\omega/\pi)');
ylabel('Magnitud (dB)');
grid on;
grid minor;

%Ventana triangular (128)


%Definiendo la cantidad de datos a enventanar
L=128;
%Generando la ventana requerida
tri=triang(L);
n=0:L-1;
stem(n,tri)
%Generando la respuesta en frecuencia mediante wvtool
wvtool(tri);

%Graficando el modulo de la respuesta en frecuencia:


figure();
Wv = fft(tri, 1024);
%Definiendo la magnitud de la ventana
magv = abs(Wv/max(Wv));
%Cambio de magnitud normalizada a Db
magvdB = 20*log10(magv);
magvdB(514:1024) = [];
%Definiendo el rango de la gráfica
w = (0:512)/512*pi;
plot(w/pi, magvdB);
title('Espectro de una Ventana Triangular 64');
xlabel('Frecuencia Normalizada (\omega/\pi)');
ylabel('Magnitud (dB)');
grid on;
grid minor;

%Ventana Hann (64)


%Definiendo la cantidad de datos a enventanar
L=64;
%Generando la ventana requerida
ham=hann(L);
n=0:L-1;
stem(n,ham)
%Generando la respuesta en frecuencia mediante wvtool
wvtool(ham);

%Graficando el modulo de la respuesta en frecuencia:


figure();
Wv = fft(ham, 1024);
%Definiendo la magnitud de la ventana
magv = abs(Wv/max(Wv));
%Cambio de magnitud normalizada a Db
magvdB = 20*log10(magv);
magvdB(514:1024) = [];
%Definiendo el rango de la gráfica
w = (0:512)/512*pi;
plot(w/pi, magvdB);
title('Espectro de una Ventana Hann 64');
xlabel('Frecuencia Normalizada (\omega/\pi)');
ylabel('Magnitud (dB)');
grid on;
grid minor;

%Ventana Hann (128)


%Definiendo la cantidad de datos a enventanar
L=128;
%Generando la ventana requerida
ham=hann(L);
n=0:L-1;
stem(n,ham)
%Generando la respuesta en frecuencia mediante wvtool
wvtool(ham);

%Graficando el modulo de la respuesta en frecuencia:


figure();
Wv = fft(ham, 1024);
%Definiendo la magnitud de la ventana
magv = abs(Wv/max(Wv));
%Cambio de magnitud normalizada a Db
magvdB = 20*log10(magv);
magvdB(514:1024) = [];
%Definiendo el rango de la gráfica
w = (0:512)/512*pi;
plot(w/pi, magvdB);
title('Espectro de una Ventana Hann 128');
xlabel('Frecuencia Normalizada (\omega/\pi)');
ylabel('Magnitud (dB)');
grid on;
grid minor;

%Ventana Hamming (64)


%Definiendo la cantidad de datos a enventanar
L=64;
%Generando la ventana requerida
hamer=hamming(L);
n=0:L-1;
stem(n,hamer)
%Generando la respuesta en frecuencia mediante wvtool
wvtool(hamer);

%Graficando el modulo de la respuesta en frecuencia:


figure();
Wv = fft(hamer, 1024);
%Definiendo la magnitud de la ventana
magv = abs(Wv/max(Wv));
%Cambio de magnitud normalizada a Db
magvdB = 20*log10(magv);
magvdB(514:1024) = [];
%Definiendo el rango de la gráfica
w = (0:512)/512*pi;
plot(w/pi, magvdB);
title('Espectro de una Ventana Hamming 64');
xlabel('Frecuencia Normalizada (\omega/\pi)');
ylabel('Magnitud (dB)');
grid on;
grid minor;

%Ventana Hamming (128)


%Definiendo la cantidad de datos a enventanar
L=128;
%Generando la ventana requerida
hamer=hamming(L);
n=0:L-1;
stem(n,hamer)
%Generando la respuesta en frecuencia mediante wvtool
wvtool(hamer);

%Graficando el modulo de la respuesta en frecuencia:


figure();
Wv = fft(hamer, 1024);
%Definiendo la magnitud de la ventana
magv = abs(Wv/max(Wv));
%Cambio de magnitud normalizada a Db
magvdB = 20*log10(magv);
magvdB(514:1024) = [];
%Definiendo el rango de la gráfica
w = (0:512)/512*pi;
plot(w/pi, magvdB);
title('Espectro de una Ventana Hamming 128');
xlabel('Frecuencia Normalizada (\omega/\pi)');
ylabel('Magnitud (dB)');
grid on;
grid minor;

%Ventana Kaiser (64) (7.865)


%Definiendo la cantidad de datos a enventanar
L=64;
B=7.865;
%Generando la ventana requerida
k=kaiser(L,B);
n=0:L-1;
stem(n,k)
%Generando la respuesta en frecuencia mediante wvtool
wvtool(k);

%Graficando el modulo de la respuesta en frecuencia:


figure();
Wv = fft(hamer, 1024);
%Definiendo la magnitud de la ventana
magv = abs(Wv/max(Wv));
%Cambio de magnitud normalizada a Db
magvdB = 20*log10(magv);
magvdB(514:1024) = [];
%Definiendo el rango de la gráfica
w = (0:512)/512*pi;
plot(w/pi, magvdB);
title('Espectro de una Ventana Kaiser 64');
xlabel('Frecuencia Normalizada (\omega/\pi)');
ylabel('Magnitud (dB)');
grid on;
grid minor;

%Ventana Kaiser (128) (7.865)


%Definiendo la cantidad de datos a enventanar
L=128;
B=7.865;
%Generando la ventana requerida
k=kaiser(L,B);
n=0:L-1;
stem(n,k)
%Generando la respuesta en frecuencia mediante wvtool
wvtool(k);

%Graficando el modulo de la respuesta en frecuencia:


figure();
Wv = fft(hamer, 1024);
%Definiendo la magnitud de la ventana
magv = abs(Wv/max(Wv));
%Cambio de magnitud normalizada a Db
magvdB = 20*log10(magv);
magvdB(514:1024) = [];
%Definiendo el rango de la gráfica
w = (0:512)/512*pi;
plot(w/pi, magvdB);
title('Espectro de una Ventana Kaiser 128');
xlabel('Frecuencia Normalizada (\omega/\pi)');
ylabel('Magnitud (dB)');
grid on;
grid minor;

𝐿 = 128
𝑉𝐸𝑁𝑇𝐴𝑁𝐴 𝐴𝐿𝑠𝑚á𝑥 (𝑑𝐵) 𝑤_𝐿𝑆 𝑎𝐿𝑃
𝑅𝐸𝐶𝑇𝐴𝑁𝐺𝑈𝐿𝐴𝑅 −13.395 0.0156 −0.912
𝑇𝑅𝐼𝐴𝑁𝐺𝑈𝐿𝐴𝑅 −26.8 0.0312 −1.824
𝐻𝐴𝑁𝑁𝐼𝑁𝐺 −31.468 0.236 −1.225
𝐻𝐴𝑀𝑀𝐼𝑁𝐺 −43.51 0.254 −0.968
𝐾𝐴𝐼𝑆𝐸𝑅 −42.63 0.156 −0.992
𝐿 = 64
𝑉𝐸𝑁𝑇𝐴𝑁𝐴 𝐴𝐿𝑠𝑚á𝑥 (𝑑𝐵) 𝑤𝐿𝑆 𝑎𝐿𝑃
𝑅𝐸𝐶𝑇𝐴𝑁𝐺𝑈𝐿𝐴𝑅 −13.46 0.0353 −0.5081
𝑇𝑅𝐼𝐴𝑁𝐺𝑈𝐿𝐴𝑅 −26.556 0.0634 −0.449
𝐻𝐴𝑁𝑁𝐼𝑁𝐺 −31.91 0.0476 −0.3406
𝐻𝐴𝑀𝑀𝐼𝑁𝐺 −42.49 0.0279 −0.4039
𝐾𝐴𝐼𝑆𝐸𝑅 −42.63 0.0215 −0.5248

IV.2. ¿Es función de la longitud de la ventana la amplitud de los lóbulos secundarios?

Es posible observar que mediante el cambio de la longitud de las ventanas no existe un cambio
considerable en las amplitudes de las señales, más si se ve un cambio en sus anchuras esto debido
a que dependiendo de esta longitud se genera una mayor cantidad, derivando en un decrecimiento
en la anchura de estos.

IV.3. ¿Y la anchura del lóbulo principal?

Como se mencionó anteriormente dependiendo de la longitud de la ventana es posible observar un


decrecimiento en la anchura de todos los lobulos, confirmando que estos en verdad reducen su
anchura

Filtros enventanados

En este apartado se pretende diseñar un filtro FIR causal de fase lineal empleando el método de la
ventana. Para ello se va a partir de la respuesta en frecuencia de un filtro ideal indicada en la figura
2.1, imponiéndole la plantilla de especificaciones que aparece en la figura 2.2.

El sistema resultante hD[n] (una función sinc) es no causal. Para convertirlo en causal hay que
aplicar la propiedad de desplazamiento en el tiempo
IV.4. Genere algunas muestras de la respuesta al impulso ideal desplazada empleando los
siguientes comandos:

x=1:63;

t=0.2*(x-32)/pi;

hi=0.2*sinc(t)/pi;

%Definiendo el filtro ideal pasa bajos


x=0:63;
t=0.2*(x-32)/pi;
hi=0.2*sinc(t)/pi;
%Graficando el filtro Ideal
stem(x,hi)
grid on;
grid minor;

%Definiendo el modulo del filtro


Wv = fft(hi, 1024);
%Definiendo la magnitud de la ventana
magv = abs(Wv/max(Wv));
%Cambio de magnitud normalizada a Db
magvdB = 20*log10(magv);
magvdB(514:1024) = [];
%Definiendo el rango de la gráfica
w = (0:512)/512*pi;
plot(w/pi, magvdB);
title('Espectro de un filtro ideal pasa bajos');
xlabel('Frecuencia Normalizada (\omega/\pi)');
ylabel('Magnitud (dB)');
grid on;
grid minor;

IV.5. Una vez obtenida, trunque dicha respuesta al impulso empleando las ventanas: rectangular, de
Hamming y de Kaiser (ß=7.865) de longitud 63. Dibuje el módulo de la respuesta en frecuencia de
los filtros enventanados, representando con detalle (utilice la instrucción zoom) las bandas de paso
y transición.

• Módulo del espectro para la ventana rectangular (L = 63)

%Ventana rectangular (64)


%Definiendo la cantidad de datos a enventanar
L=64;
%Generando la ventana requerida
ventana_c=rectwin(L);
n=0:L-1;
V_c=fft(ventana_c, 1024);
%Definiendo la magnitud de la ventana
magv_c=abs(V_c/max(V_c));

• Banda de paso y transición para la ventana rectangular (L = 63)

filtro_c=ventana_c'.*hi;
stem(x,filtro_c)

freqz(filtro_c)
%Graficando el modulo de la respuesta en frecuencia
%del filtro real
Wv=fft(filtro_c, 1024);
magv=abs(Wv/max(Wv));
magv(514:1024)=[];
w=(0:512)/512*pi;
plot(w/pi, magv);
title('Espectro de un filtro real pasa bajos con ventana cuadrada');
xlabel('Frecuencia Normalizada (\omega/\pi)');
ylabel('Magnitud (dB)');
grid on;
grid minor;
Determinando el cumplimiento de las especificaciones para un filtro con ventana cuadrada

• Módulo del espectro para la ventana Triangular (L = 63)

%Ventana triangular (64)


%Definiendo la cantidad de datos a enventanar
L=64;
%Generando la ventana requerida
ventana_tr=triang(L);
V_tr= fft(ventana_tr, 1024);
%Definiendo la magnitud de la ventana
magv_tr= abs(Wv/max(Wv));

• Banda de paso y transición para la ventana Triangular (L = 63)

filtro_tr=ventana_tr'.*hi;
stem(x,filtro_tr)
freqz(filtro_tr)

%Graficando el modulo de la respuesta en frecuencia


%del filtro real
Wv=fft(filtro_tr, 1024);
magv=abs(Wv/max(Wv));
magv(514:1024)=[];
w=(0:512)/512*pi;
plot(w/pi, magv);
title('Espectro de un filtro real pasa bajos con ventana triangular');
xlabel('Frecuencia Normalizada (\omega/\pi)');
ylabel('Magnitud (dB)');
grid on;
grid minor;

Determinando el cumplimiento de las especificaciones para un filtro con ventana triangular


• Módulo del espectro para la ventana de Hamming (L = 63)

%Ventana Hamming (64)


%Definiendo la cantidad de datos a enventanar
L=64;
%Generando la ventana requerida
ventana_H=hamming(L);
V_H= fft(ventana_H, 1024);
%Definiendo la magnitud de la ventana
magv_H = abs(Wv/max(Wv));

• Banda de paso y transición para la ventana de Hamming (L = 63)

filtro_H=ventana_H'.*hi;
stem(x,filtro_H)

freqz(filtro_H)
%Graficando el modulo de la respuesta en frecuencia
%del filtro real
Wv=fft(filtro_H, 1024);
magv=abs(Wv/max(Wv));
magv(514:1024)=[];
w=(0:512)/512*pi;
plot(w/pi, magv);
title('Espectro de un filtro real pasa bajos con ventana Hamming');
xlabel('Frecuencia Normalizada (\omega/\pi)');
ylabel('Magnitud (dB)');
grid on;
grid minor;
Determinando el cumplimiento de las especificaciones para un filtro con ventana Hamming

También podría gustarte