Escolar Documentos
Profissional Documentos
Cultura Documentos
Docente (s):
I. OBJETIVOS
Procesar señales de audio
Implementar efectos sobre dichas señales
II. ACTIVIDADES
En base a las actividades realizadas y sus respuestas, realice sus conclusiones.
2.1 Crear y guardar un archivo de audio *.wav de al menos 30 seg de duración y frecuencia
de muestreo arriba de 11KHz.
[Y, FS]=audioread(filename) clear all
>> info = audioinfo(filename) clc
%grabar audio t=segundos
Fs=11025;
info = recObj =
audiorecorder(Fs,16,1);
Filename: disp('grabando....')
'C:\Users\jorge\Documents\MATLAB\ recordblocking(recObj,30)
disp('FIN DE LA
PRUEBA1-DSP.wav'
GRABACION...');
CompressionMethod: %REPRODUCCION DE LA GRABACION
'Uncompressed' play(recObj);
NumChannels: 1
SampleRate: 11025 reproduc1 =
TotalSamples: 330750 getaudiodata(recObj);
Duration: 30 plot(reproduc1)
title('Dominio del tiempo');
Title: []
Comment: [] %guardar audio
Artist: [] filename = 'PRUEBA1-DSP.wav';
BitsPerSample: 16 audiowrite(filename,reproduc1
>> tiempo = size(Y,1)/Fs ,11025);
tiempo =
30
>> FS'
ans =
11025
>> n_muestras=length(Y)
%se comprueba lo mencionado anteriormente ‘en el ejercicio 3.2’
n_muestras =
330750
2.4 Definir la mitad del número de muestras, redondee el número de muestras usando el
comando round.
mitad_n_muestras =
165375
>> mitad_n_muestrass=round(mitad_n_muestras)
mitad_n_muestrass =
165375
Para las siguientes preguntas, considere utilizar el comando subplot para graficar la señal en
el tiempo y frecuencia.
%Graficando
2.6 Generar el efecto de reverberación
>> a=0.5; %Magnitud de la reverberacion n=330025;
>> R=5000; %Numero de muestras para el a=0.5; %Magnitud de la
efecto reverberacion
>> x=zeros(size(y)); R=5000; %Numero de muestras para
>> for i=1:1:R+1 el efecto
x(i) = y(i); %vector de efecto x=zeros(size(reproduc1));
for i=1:1:R+1
end
x(i) = reproduc1(i);
>> for i=R+1:1:n
%vector de efecto
x(i)= y(i)+ a*y(i-R); %sonido más efecto end
end; for i=R+1:1:n
>> sound(x,fs); x(i)= reproduc1(i)+
a*reproduc1(i-R); %sonido más
efecto
end;
sound(x,Fs);
%Grafica en el dominio de la
frecuencia
G1=abs(fft(x));
figure(2)
plot((1:10000),G1(1:10000),'k')
title('Dominio de la
frecuencia');
2.7 Repita el paso 6 con al menos dos valores diferentes de a y R, consigne en cada caso
los espectros en frecuencia, compare con el de la señal original, comente los
resultados obtenidos.
Para a =0.25 R =2500 n=330025;
a=0.25; %Magnitud de la
reverberacion
R=2500; %Numero de muestras
para el efecto
x=zeros(size(reproduc1));
for i=1:1:R+1
x(i) = reproduc1(i);
%vector de efecto
end
for i=R+1:1:n
x(i)= reproduc1(i)+
a*reproduc1(i-R); %sonido más
efecto
end;
sound(x,Fs);
%Grafica en el dominio de la
frecuencia
G1=abs(fft(x));
figure(2)
plot((1:10000),G1(1:10000),'k'
)
title('Dominio de la
frecuencia');
Para a =0.75 R = 7500 n=330025;
a=0.75; %Magnitud de la
reverberacion
R=7500; %Numero de muestras
para el efecto
x=zeros(size(reproduc1));
for i=1:1:R+1
x(i) = reproduc1(i);
%vector de efecto
end
for i=R+1:1:n
x(i)= reproduc1(i)+
a*reproduc1(i-R); %sonido más
efecto
end;
sound(x,Fs);
%Grafica en el dominio de la
frecuencia
G1=abs(fft(x));
figure(2)
plot((1:10000),G1(1:10000),'k'
)
title('Dominio de la
frecuencia');
2.8 Aplique un filtro pasa bajos de orden 30 con frecuencia de corte 0.20 (1/5 de Fs) y
ganancia 0.4
Wn = 0.20; %Frecuencia de Corte. }
>> Wn = 0.20; %Frecuencia de Corte.
N = 30; %Grado del filtro
}
LP = fir1(N,Wn); %filtro pasa bajos
>> N = 30; %Grado del filtro gLP = 0.4;
>> LP = fir1(N,Wn); %filtro pasa y1 = conv(LP,reproduc1); %
bajos Convolución señal y filtro
>> gLP = 0.4; fre=round(length(y1)/2);
>> y1 = conv(LP,y); % Convolución % Detector de Frec. medias de sonido
señal y filtro if 2*fre==length(y1)
>> fre=round(length(y1)/2); fd3=-fre;
>>% Detector de Frec. medias de fd4=fre-1;
sonido else 2*fre>length(y1)
>> if 2*fre==length(y1) fd3=1-fre;
fd3=-fre; fd4=fre-1;
end
fd4=fre-1;
yC= gLP * y1; %Señal por filtro pasa
else 2*fre>length(y1)
baja
fd3=1-fre; espectrobajos=abs(fftshift(fft(yC)));
fd4=fre-1; %frecuencias
end sound(yC,Fs);
>> yC= gLP * y1; %Señal por filtro
pasa baja
>>
espectrobajos=abs(fftshift(fft(yC)));
%frecuencias
>> sound(yC,fs);
2.9 Aplique un filtro pasabanda de orden 30 con frecuencias de corte 0.20 y 0.5 y
ganancia 1.5. Complete el código, tome como referencia la pregunta 2.8.
>> Wn1 = [0.20, 0.50]; Wn1 = [0.20, 0.50]; %Frecuencias de corte
%Frecuencias de corte BP = fir1(N,Wn1); %Filtro Pasa bandas
>> BP = fir1(N,Wn1); gBP = 1.5;
%Filtro Pasa bandas y2 = conv(BP,reproduc1); %convolucion señal y
>> gBP = 1.5; filtro
fre=round(length(y2)/2);
>> y2 = conv(BP,y);
% Detector de Frec. medias de sonido
%convolucion señal y
if 2*fre==length(y2)
filtro fd3=-fre;
>> fd4=fre-1;
fre=round(length(y2)/2 else 2*fre>length(y2)
); fd3=1-fre;
fd4=fre-1;
end
yB= gLP * y2; %Señal por filtro pasa banda
espectrobajos=abs(fftshift(fft(yB)));%frecuenc
ias
sound(yB,Fs);
2.10 Aplique un filtro pasaaltos de orden 30 con frecuencias de corte 0.5 y ganancia 1.5.
Complete el código, tome como referencia la pregunta 2.8.
Wn2 = .50; %Frecuencia de corte
>> Wn2 = .50; %Frecuencia de corte
HP = fir1(N,Wn2,'high');%filtro pasa
>> HP = fir1(N,Wn2,'high');%filtro
altas
pasa altas gHP = 1.5;
>> gHP = 1.5; y3 = conv(HP,reproduc1); %convolucion
>> y3 = conv(HP,y); %convolucion señal y filtro
señal y filtro fre=round(length(y3)/2);
>> yA= gHP * y3; %Señal por filtro % Detector de Frec. medias de sonido
pasa altas if 2*fre==length(y3)
>> fd3=-fre;
espectroaltas=abs(fftshift(fft(yA)));% fd4=fre-1;
frecuencias else 2*fre>length(y3)
>> sound(yA,fs); fd3=1-fre;
fd4=fre-1;
end
2.12 Muestre los espectros en frecuencia de los filtros aplicados y de la señal original
subplot(4,1,1)
>> subplot(4,1,1)
plot(fd3:fd4,espectroaltas);
>> plot(fd3:fd4,espectroaltas);
>>
xlabel('Frecuencia');ylabel('Amplitud'
);
xlabel('Frecuencia');ylabel('Amplitud'
title('Señal en Frecuencia Pasa
);
Altas');
>> title('Señal en Frecuencia Pasa subplot(4,1,2)
Altas'); plot(fd3:fd4,espectrobanda,'r');
>> subplot(4,1,2) xlabel('Frecuencia');ylabel('Amplitud'
>> plot(fd3:fd4,espectrobanda,'r'); );
>> title('Señal en Frecuencia Pasa
xlabel('Frecuencia');ylabel('Amplitud' Banda');
); subplot(4,1,3)
>> title('Señal en Frecuencia Pasa plot(fd3:fd4,espectrobajos,'k');
Banda'); xlabel('Frecuencia');ylabel('Amplitud'
>> subplot(4,1,3) );
>> plot(fd3:fd4,espectrobajos,'k'); title('Señal en Frecuencia Pasa
Bajos');
>>
subplot(4,1,4)
xlabel('Frecuencia');ylabel('Amplitud'
plot(fd3:fd4,espectrotodo);
); xlabel('Frecuencia');ylabel('Amplitud'
>> title('Señal en Frecuencia Pasa )
Bajos'); title('Señal en Frecuencia Completa');
>> subplot(4,1,4)
>> plot(fd3:fd4,espectrotodo);
>>
xlabel('Frecuencia');ylabel('Amplitud'
)
>>title('Señal en Frecuencia
Completa');
2.13 Adicione ruido blanco gaussiano a la señal original y reprodúzcala nuevamente. Para
cada señal:
>> % y el vector de señal, N el % y el vector de señal, N el número de
número de muestras muestras
>> % P potencia del ruido. Considere % P potencia del ruido. Considere 2
2 valores para P valores para P
>> b=rand(length(y),1); P=0.5;
b=rand(length(reproduc1),1);
>> fi=2*pi*rand(length(y),1)
fi=2*pi*rand(length(reproduc1),1);
>> r=sqrt(-2*P*log(1-b)
r=sqrt(-2*P*log(1-b));
>> ruido=r.*cos(fi) ruido=r.*cos(fi);
>> yruido=y+ruido yruido=reproduc1+ruido;
>> sound(y,fs); sound(yruido,Fs);
>> ….
>> espectroruido=abs(fftshift(fft(yruido)
espectroruido=abs(fftshift(fft(yruido ));
))); [menor ,pri]=sort(espectroruido);
>> [menor pri]=sort(espectroruido); %Ordena espectro
%Ordena espectro if 2*fi==a % Detector de Frec. medias
>> if 2*fl==a % Detector de Frec. de sonido
medias de sonido fd1=-fi;
fd1=-fl; fd2=fi-1;
fd2=fl-1; else 2*fi>a
>> else 2*fl>a fd1=1-fi;
fd1=1-fl; fd2=fi-1;
end
fd2=fl-1;
end
>>….
a. Grafique y comente la señal original y la señal con ruido en el tiempo.
GRAFICA DE LA SEÑAL ORIGINAL (T) GRAFICA DE LA SEÑAL CON RUIDO (T) COMENTARIOS DE LAS
GRAFICAS
>> %grafica en el dominio del tiempo >> %grafica en el dominio del tiempo Es notorio que el ruido
blanco interviene en la
figure(1) figure(1)
señal original, y no se
plot(y) plot(yruido) logra distinguir de ella.
title('Dominio del tiempo'); title('Dominio del tiempo'); Crea una capa en la que
no se puede notar con
claridad la señal original
4.2 Investigue sobre diseño de filtros como se puede convertir un filtro pasa bajos en uno
pasa altos. Fundamente su respuesta.
Yo creo que se puede diseñar por lo menos en el entorno de matlab con 1 simple
comandos. “Fir1”
4.3 Diseñe un ecualiazador digital de tres bandas y realice las evaluaciones correspondietes
con tres señales de audio diferentes. (Deberá probarlo en el laboratorio)
%Fs -> frecuencia de muestreo , ejem: 11025 ,16025, etc ... (hz)
%song -> aqui se introduce la señal de auidio , ejm: 'song1.wav'
%WnBajos -> Frecuencia de Corte filtropasaBajos
%N -> Grado del filtro a usar
%gLP -> Ganancia filtro pasabajos
%WnBanda -> frecuencia de corte filtropasaBanda
%gBP -> ganancia del filtro pasaBanda
%WnAltos -> Frecuencia de corte filtropasaAltos
%gHP -> ganancia del filtropasaAltos
%.................-------------------...............................
%...........------Etapa de seleccion-------
................................
for i=1:1
if s1==0
recObj = audiorecorder(Fs,16,1);
disp('grabando....');
recordblocking(recObj,10)
disp('FIN DE LA GRABACION...');
%REPRODUCCION DE LA GRABACION
play(recObj);
reproduc1 = getaudiodata(recObj);
%guardar audio
grabado=('audio1.wav');
audiowrite(grabado,reproduc1,Fs);
if s1==1
%reproducir audio externo
[reproduc1, FS1]=audioread(song);
sound(reproduc1,FS1);
else
end
%constantes:
yA=0;
yB=0;
yC=0;
for i=1:3
disp('seleccionar que filtro usar: ');
selector=input('escribe 0 = pasabajos , 1 = pasabanda , 2 = pasaltas
, 3 = no ejecutar ningun filtro \n');
if selector == 3
disp('SALTO AL VACIO :p');
else
end
%------------------------------------------------------------------------
%.........--------EJECUCION del filtro pasabajos------...................
if selector==0
LP = fir1(N,WnBajos); %filtro pasa bajos
y1 = conv(LP,reproduc1); % Convolución señal y filtro
fre=round(length(y1)/2);
% Detector de Frec. medias de sonido
if 2*fre==length(y1)
fd3=-fre;
fd4=fre-1;
else 2*fre>length(y1)
fd3=1-fre;
fd4=fre-1;
end
yC= gLP * y1; %Señal por filtro pasa baja
espectrobajos=abs(fftshift(fft(yC)));%frecuencias
sound(yC,Fs);
fre=round(length(yC)/2);
%Grafica en el dominio de la frecuencia (FILTROPASABAJOS)
subplot(4,1,3)
plot(fd3:fd4,espectrobajos,'k');
xlabel('Frecuencia');ylabel('Amplitud');
title('Señal en Frecuencia Pasa Bajos');
else
end
%------------------------------------------------------------------------
if(selector==1)
BP = fir1(N,WnBanda); %Filtro Pasa bandas
y2 = conv(BP,reproduc1); %convolucion señal y filtro
fre=round(length(y2)/2);
% Detector de Frec. medias de sonido
if 2*fre==length(y2)
fd3=-fre;
fd4=fre-1;
else 2*fre>length(y2)
fd3=1-fre;
fd4=fre-1;
end
yB= gBP * y2; %Señal por filtro pasa banda
espectrobanda=abs(fftshift(fft(yB)));%frecuencias
sound(yB,Fs);
fre=round(length(yB)/2);
subplot(4,1,2)
plot(fd3:fd4,espectrobanda,'r');
xlabel('Frecuencia');ylabel('Amplitud');
title('Señal en Frecuencia Pasa Banda');
else
end
%------------------------------------------------------------------------
%.........--------EJECUCION del filtro pasaAltos------...................
if selector==2
HP = fir1(N,WnAltos,'high');%filtro pasa altas
y3 = conv(HP,reproduc1); %convolucion señal y filtro
fre=round(length(y3)/2);
else
end
end
%......................................................................
%------------Eleccion para reconstruir la señal nuevamente-------------
disp('ELIGE SI ECUALIZAMOS LAS SEÑALES:');
s2=input('SI = 1" , "NO = 0 "\n');
if s2==1
%Etapa de reconstruccion de la señal
yD= yA + yB + yC ;
espectrotodo=abs(fftshift(fft(yD)));
sound(yD,Fs);
fre=round(length(yD)/2);
subplot(4,1,4)
plot(fd3:fd4,espectrotodo);
xlabel('Frecuencia');ylabel('Amplitud')
title('Señal en Frecuencia ECUALIZADA');