Está en la página 1de 3

2. El archivo borgesRuido.

wav contiene una señal de voz contaminada con un ruido del tipo
sinusoidal.

a. Grafique la señal de voz contra el tiempo, y el espectro de frecuencia de la señal contra frecuencia
en Hz, y determine cuál es la frecuencia del ruido.

[sonido, tiempo, fs] = cargarAudio('borgesRuido.wav');


subplot(2,1,1)
plot(tiempo,sonido)
title('audio Borges con ruido') Codigo en comand
xlabel('Tiempo en segundos') windows
subplot(2,1,2)
[frecuencias,magnitudes] = espectro(sonido,fs);
plot(frecuencias,magnitudes)
xlabel('Frecuencia en Hertz')

b. Diseñe un filtro tipo FIR por el método de las ventanas visto en clase que permita remover dicho
ruido utilizando las ecuaciones vistas en clase. Elija el orden del filtro que usted considere
conveniente. Grafique los coeficientes del filtro contra n, donde n = 0, . . .N (N es el orden del
filtro), y la respuesta en frecuencia del filtro contra f, donde −𝑓𝑠/2≤𝑓≤𝑓𝑠/2 (𝑓𝑠 es la frecuencia
de muestreo). Para esta última gráfica puede utilizar la función espectro.m.

Filtro con una frecuencia de corte de entre 2000 y 2500:


Para calcular la frecuencia de corte en radianes podemos acudir a una simple regla de 3.

4000 Hertz es Fs/2 ----- Pi


2500 Hz ----------------- X

Frecuencia de corte en radianes = (5/8)*Pi

Esta viene siendo la ecuación característica en el dominio de Z para un filtro pasabaja, con frecuencia
de corte 2500Hertz

h[n] = (1/pi)*((sin((5/8)*pi *(n-N/2)))/(n-N/2))

Sin embargo, en la práctica esto no funciona para valores pares, pues n-N/2 puede dar cero y dar
indeterminación en la ecuación h[n]. Por lo tanto,

N = 151;
n = 1:N;
h = (1/pi).*((sin((5/8)*pi.*(n-N/2)))./(n-N/2));
subplot(2,1,1)
Codigo en comand
plot(h)
windows
title('coeficientes del filtro')
[frec, mag] = espectro(h,fs);
subplot(2,1,2)
plot(frec,mag)
title('espectro en frecuencia del filtro')
xlabel('Frecuencia en Hertz')
c. Escriba una rutina que implemente la ecuación de diferencias asociada a un filtro FIR, dada por
[𝑛]=Σ𝑏𝑘𝑥[𝑛−𝑘]𝑁𝑘=0 para una señal de entrada x[n] con un número de muestras finita. Los
coeficientes 𝑏𝑘 son los diseñados en el enunciado b). Filtre la señal de voz. Grafique la señal de voz
filtrada contra tiempo, y el espectro de frecuencia de la señal filtrada contra la frecuencia en Hz.

Función: filtroFir.m

function senialSalida = filtroFir(senialEntrada,H)

senialSalida = zeros(1,length(senialEntrada));
Orden = length(H);
dataVentana = zeros(1,Orden);

for k = 1:1:length(senialEntrada)
for i = Orden:-1:2
dataVentana(i) = dataVentana(i-1);
end
dataVentana(1) = senialEntrada(k);
sumatoria = 0;
for i = 1:1:Orden
sumatoria = sumatoria + dataVentana(i)*H(i);
end
senialSalida(k) = sumatoria;
end

filtrado = filtroFir(sonido,h);
subplot(2,1,1)
plot(tiempo,filtrado)
xlabel('Tiempo en segundos') Codigo en comand
title('audio filtrado') Windows
subplot(2,1,2)
[frec, mag] = espectro(filtrado,fs);
plot(frec,mag)
xlabel('Frecuencia en Hertz')
title('espectro en frecuencia del audio filtrado')

d. Escuche la señal de voz filtrada utilizando la función de Matlab sound y compárelo con el original.

sound(sonido,fs) %audio con ruido Codigo en comand


sound(filtrado,fs) %audio filtrado Windows
PDTA: Para que los códigos no generen mensaje de error se deben correr
en orden,,es decir primero el del punto a luego el b, seguidamente c y d. El
punto c funciona si anteriormente se cargo el del punto b.

También podría gustarte