Вы находитесь на странице: 1из 8

%% Procesamiento de una seal de audio usando MATLAB inicio filtrado.

m
%% Crear seal de audio
% Frecuencia fundamental
f0=1e3; % 1KHz
% Amplitud
a=4; % V=4
% Frecuencia de muestreo
fs=44.1e3; % Frecuencia de una seal de audio
% Tiempo de duracin en segundos
T=4;
L = round(T*fs); % Nmero de muestras
% Frecuencia normalizada
fn=f0/fs;
y = a*sin(2*pi*fn*(0:L-1))+0.5*a*sin(2*pi*2*fn*(0:L-1));
% Graficar la seal original
subplot(411)
plot((0:L-1)/fs,y)
title('SEAL ORIGINAL')% Ttulo
xlabel('Tiempo (s)') % Etiqueta del eje X
ylabel('Amplitud (V)') % Etiqueta del eje Y
xlim([0 10/1000]) % Lmite de la seal
%% Grabar y reproducir la seal de audio
%wavwrite(y,fs,'audio')
% wavplay(y,fs)
%% FFT de la seal
subplot(412)
% Llamado a la funcin que calcula la FFT
fft_signal(y,fs);title('ESPECTRO DE LA SEAL ORIGINAL')
xlim([0 2500])
%% Filtrado de la seal
% Frecuencia normalizada
fNorm = 1500 / (fs/2);
% Clculo de los coeficientes del filtro (filtro pasa bajas)
[b,a] = butter(10, fNorm, 'low');
% Filtrado de la seal
y_Low = filtfilt(b, a, y);
% Graficacin de la seal en el tiempo
subplot(413)
plot((0:L-1)/fs,y_Low)
title('SEAL FILTRADA')
xlabel('Tiempo (s)')
ylabel('Amplitud (V)')
xlim([0 10/1000])
% Graficacin de la seal en frecuencia
subplot(414)
% Llamado a la funcin que calcula la FFT
fft_signal(y_Low,fs);title('ESPECTRO DE LA SEAL FILTRADA')
xlim([0 2500])
%% Grficas del filtro
% Respuesta en frecuencia del filtro
[H,w]=freqz(b,a,512,1);
figure(2)
%Trazado de la respuesta en Magnitud
subplot(221)
plot(w,20*log10(abs(H)));
grid on;
title ('Filtro pasa-altos, Respuesta en magnitud');
xlabel('frecuencia');
ylabel('H(f) db')
xlim([0 0.4])
% Respuesta en fase
subplot(222)
plot(w,angle(H));
grid on;
title ('Filtro pasa-altos, Respuesta en fase');
xlabel('frecuencia')
ylabel('ngulo de H rad')
xlim([0 0.4])

%Respuesta al impulso
subplot(223)
[y_eje,t]= impz(b,a,60);
stem(t,y_eje);
title ('Filtro pasa-altos, Respuesta al impulso');

%Ploteo de los polos y ceros
z= roots(b); % Ceros
p = roots(a); % Polos
subplot(224)
zplane(z,p)
title('Polos y ceros')
legend('Ceros','Polos')
%% Reproduccin de audio de entrada y salida
pause(2)
disp('Audio de entrada')
wavplay(0.5*y,fs)
disp('Audio de salida (seal filtrada)')
wavplay(0.5*y_Low,fs)














































%% Procesamiento de una seal de audio usando MATLAB inicio filtrado_2
%% Seleccin del tipo de filtrado
% 1 -> Pasa bajo
% 2 -> Pasa alto
% 3 -> Pasa banda
tipo=3
%% Crear seal de audio
% Frecuencia fundamental
f0=1e3; % 1KHz
% Amplitud
a=2; % V=4
% Frecuencia de muestreo
fs=44.1e3; % Frecuencia de una seal de audio CD
% Tiempo de duracin en segundos
T=2;
% Vector de tiempo
t=linspace(0,T,T*fs);
% Creacin de la seal
% Primer seal (tono 1)
s1=a*sin(2*pi*f0*t);
% Segunda seal (tono 2)
s2=0.75*a*sin(2*pi*(1.5*f0)*t);
% Tercera seal (tono 3)
s3=0.5*a*sin(2*pi*(2*f0)*t);
% Seal compuesta (suma de dos tonos)
y = s1 + s2 + s3;
% Graficar la seal original
subplot(411)
plot(t,y)
title('SEAL ORIGINAL')% Ttulo
xlabel('Tiempo (s)') % Etiqueta del eje X
ylabel('Amplitud (V)') % Etiqueta del eje Y
xlim([0 20/1000]) % Lmite de la seal
%% Grabar y reproducir la seal de audio
% wavwrite(0.1*y,fs,'audio')
% wavplay(0.1*y,fs)
%% FFT de la seal
subplot(412)
% Llamado a la funcin que calcula la FFT
fft_signal(y,fs);title('ESPECTRO DE LA SEAL ORIGINAL')
xlim([0 2500])
%% Filtrado de la seal
switch tipo
case 1
% Clculo de los coeficientes del filtro (filtro pasa bajas)
% Este filtrado deja solo la seal de 1000 Hz
% Frecuencia normalizada
titutlo='FILTRO PASA BAJAS';
fNorm = 1200 / (fs/2);
[b,a] = butter(10, fNorm, 'low');
case 2
%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
% Clculo de los coeficientes del filtro (filtro pasa bajas)
% Este filtrado deja solo la seal de 2000 Hz
% Frecuencia normalizada
titutlo='FILTRO PASA ALTAS';
fNorm = 1900 / (fs/2);
[b,a] = butter(10, fNorm, 'high');
otherwise
%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
% Clculo de los coeficientes del filtro (filtro pasa banda)
% Este filtrado deja solo la seal de 1500 Hz
% Frecuencias normalizadas
titutlo='FILTRO PASA BANDA';
fNorm_1 = 1000 / (fs/2); % 1250
fNorm_2 = 2000 / (fs/2); % 1700
[b_alta,a_alta] = butter(10, fNorm_1, 'high');
[b,a] = butter(10, fNorm_2, 'low');
y_alta=filtfilt(b_alta, a_alta, y);
y=y_alta;
% Wp = [1490 1510]/(fs/2); Ws = [1410 1560]/(fs/2);
% Rp = 3; Rs = 40;
% [n,Wn] = buttord(Wp,Ws,Rp,Rs)
% [b,a] = butter(n,Wn);
% y_Low = filtfilt(b,a,y);
%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
end
% Filtrado de la seal
y_Low = filtfilt(b, a, y);
% Graficacin de la seal en el tiempo
subplot(413)
plot(t,y_Low)
title('SEAL FILTRADA')
xlabel('Tiempo (s)')
ylabel('Amplitud (V)')
xlim([0 20/1000])
% Graficacin de la seal en frecuencia
subplot(414)
% Llamado a la funcin que calcula la FFT
fft_signal(y_Low,fs);title('ESPECTRO DE LA SEAL FILTRADA')
xlim([0 2500])
%% Grficas del filtro
% Respuesta en frecuencia del filtro
[H,w]=freqz(b,a,512,fs);
figure(2)
%Trazado de la respuesta en Magnitud
subplot(221)
plot(w,20*log10(abs(H)));
grid on;
title ([titutlo, 'Respuesta en magnitud']);
xlabel('Frecuencia (Hz)');
ylabel('H(f) db')
% xlim([0 0.4])
% Respuesta en fase
subplot(222)
plot(w,angle(H));
grid on;
title ([titutlo,'Respuesta en fase']);
xlabel('Frecuencia (Hz)')
ylabel('ngulo de H rad')
% xlim([0 0.4])
%Respuesta al impulso
subplot(223)
[y_eje,tt]= impz(b,a,60);
stem(tt,y_eje);
title ([titutlo,'Respuesta al impulso']);

%Ploteo de los polos y ceros
z= roots(b); % Ceros
p = roots(a); % Polos
subplot(224)
zplane(z,p)
title('Polos y ceros')
legend('Ceros','Polos')
%% Reproduccin de audio de entrada y salida
pause(2)
disp('Audio de entrada')
% Se multiplica por 0.1 para atenuar la salida del tono por la bocina
wavplay(0.1*y,fs)
disp('Audio de salida (seal filtrada)')
% Se multiplica por 0.1 para atenuar la salida del tono por la bocina
wavplay(0.1*y_Low,fs)


%% Procesamiento de una seal de audio usando MATLAB inicio filtrado3.m
%% Seleccin del tipo de filtrado
% 1 -> Pasa bajo
% 2 -> Pasa alto
% 3 -> Pasa banda
tipo=1;
%% Crear seal de audio
% Frecuencia fundamental
f0=8e3; % 8KHz
% Amplitud
a=3; % V=4
% Frecuencia de muestreo
fs=44.1e3; % Frecuencia de una seal de audio CD
% Tiempo de duracin en segundos
T=1.5;
% Vector de tiempo
t=linspace(0,T,T*fs);
% Creacin de la seal
% Primer seal (tono 1)
s1=a*sin(2*pi*f0*t);
% Segunda seal (tono 2)
s2=0.75*a*sin(2*pi*(1.5*f0)*t);
% Tercera seal (tono 3)
s3=0.5*a*sin(2*pi*(2*f0)*t);
% Seal compuesta (suma de dos tonos)
y = s1 + s2 + s3;
% Graficar la seal original
subplot(411)
plot(t,y)
title('SEAL ORIGINAL')% Ttulo
xlabel('Tiempo (s)') % Etiqueta del eje X
ylabel('Amplitud (V)') % Etiqueta del eje Y
xlim([0 20/f0]) % Lmite de la seal
%% Grabar y reproducir la seal de audio
% wavwrite(0.1*y,fs,'audio')
% wavplay(0.1*y,fs)
%% FFT de la seal
subplot(412)
% Llamado a la funcin que calcula la FFT
fft_signal(y,fs);title('ESPECTRO DE LA SEAL ORIGINAL')
xlim([0 f0*3])
%% Filtrado de la seal
switch tipo
case 1
% Clculo de los coeficientes del filtro (filtro pasa bajas)
% Este filtrado deja solo la seal de 1000 Hz
% Frecuencia normalizada
titutlo='FILTRO PASA BAJAS';
fNorm = 8.5e3 / (fs/2);
[b,a] = butter(10, fNorm, 'low');
case 2
%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
% Clculo de los coeficientes del filtro (filtro pasa bajas)
% Este filtrado deja solo la seal de 2000 Hz
% Frecuencia normalizada
titutlo='FILTRO PASA ALTAS';
fNorm = 15e3 / (fs/2);
[b,a] = butter(10, fNorm, 'high');
otherwise
%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
% Clculo de los coeficientes del filtro (filtro pasa banda)
% Este filtrado deja solo la seal de 1500 Hz
% Frecuencias normalizadas
titutlo='FILTRO PASA BANDA';
Wp = [11.5e3 12.5e3]/(fs/2); Ws = [11e3 13e3]/(fs/2);
Rp = 3; Rs = 40;
[n,Wn] = buttord(Wp,Ws,Rp,Rs)
[b,a] = butter(n,Wn);
%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
end
% Filtrado de la seal
y_Low = filtfilt(b, a, y);
% Graficacin de la seal en el tiempo
subplot(413)
plot(t,y_Low)
title('SEAL FILTRADA')
xlabel('Tiempo (s)')
ylabel('Amplitud (V)')
xlim([0 20/f0])
% Graficacin de la seal en frecuencia
subplot(414)
% Llamado a la funcin que calcula la FFT
fft_signal(y_Low,fs);title('ESPECTRO DE LA SEAL FILTRADA')
xlim([0 3*f0])
%% Grficas del filtro
% Respuesta en frecuencia del filtro
[H,w]=freqz(b,a,512,fs);
figure(2)
%Trazado de la respuesta en Magnitud
subplot(221)
plot(w,20*log10(abs(H)));
grid on;
title ([titutlo, 'Respuesta en magnitud']);
xlabel('Frecuencia (Hz)');
ylabel('H(f) db')
% xlim([0 0.4])
% Respuesta en fase
subplot(222)
plot(w,angle(H));
grid on;
title ([titutlo,'Respuesta en fase']);
xlabel('Frecuencia (Hz)')
ylabel('ngulo de H rad')
% xlim([0 0.4])
%Respuesta al impulso
subplot(223)
[y_eje,tt]= impz(b,a,60);
stem(tt,y_eje);
title ([titutlo,'Respuesta al impulso']);

%Ploteo de los polos y ceros
z= roots(b); % Ceros
p = roots(a); % Polos
subplot(224)
zplane(z,p)
title('Polos y ceros')
legend('Ceros','Polos')
%% Reproduccin de audio de entrada y salida
pause(2)
disp('Audio de entrada')
% Se multiplica por 0.1 para atenuar la salida del tono por la bocina
wavplay(0.1*y,fs)
disp('Audio de salida (seal filtrada)')
% Se multiplica por 0.1 para atenuar la salida del tono por la bocina
wavplay(0.1*y_Low,fs)


%% Procesamiento de una seal de audio usando MATLAB filtrado4_arc_wav.m
%% Seleccin del tipo de filtrado
% 1 -> Pasa bajo
% 2 -> Pasa alto
% 3 -> Pasa banda
tipo=3;
%% Leer la seal de audio
[y,fs]=wavread('Yabu_mono');
% y -> muestras de la seal
% fs-> frecuencia de muestreo
% Graficar la seal original
subplot(411)
T=length(y)/fs;
t=linspace(0,T,T*fs);
plot(t,y)
title('SEAL ORIGINAL')% Ttulo
xlabel('Tiempo (s)') % Etiqueta del eje X
ylabel('Amplitud (V)') % Etiqueta del eje Y
% xlim([0 20/]) % Lmite de la seal
%% Reproducir la seal de audio
% wavplay(0.1*y,fs)
%% FFT de la seal
subplot(412)
% Llamado a la funcin que calcula la FFT
fft_signal(y,fs);title('ESPECTRO DE LA SEAL ORIGINAL')
xlim([0 4e3])
%% Filtrado de la seal
switch tipo
case 1
% Clculo de los coeficientes del filtro (filtro pasa bajas)
% Este filtrado deja solo la seal por debajo de 500 Hz
titulo='FILTRO PASA BAJAS';
% Frecuencia normalizada
fNorm = 1000 / (fs/2);
[b,a] = butter(10, fNorm, 'low');
case 2
%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
% Clculo de los coeficientes del filtro (filtro pasa altas)
% Este filtrado deja solo la seal por encima de 500 Hz
titulo='FILTRO PASA ALTAS';
% Frecuencia normalizada
fNorm = 1000 / (fs/2);
[b,a] = butter(10, fNorm, 'high');
otherwise
%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
% Clculo de los coeficientes del filtro (filtro pasa banda)
% Este filtrado deja solo la seal de 2KHz a 3KHz
% Frecuencias normalizadas
titulo='FILTRO PASA BANDA';
Wp = [2e3 3e3]/(fs/2); Ws = [1.5e3 3.5e3]/(fs/2);
Rp = 3; Rs = 40; % Rizado de la banda de paso y de parada (s)
[n,Wn] = buttord(Wp,Ws,Rp,Rs);% Orden del filtro y frecuencia de
corte ptima
[b,a] = butter(n,Wn); % Coeficientes del filtro
%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
end
% Filtrado de la seal
y_Low = filtfilt(b, a, y);
% Graficacin de la seal en el tiempo
subplot(413)
plot(t,y_Low)
title('SEAL FILTRADA')
xlabel('Tiempo (s)')
ylabel('Amplitud (V)')
% xlim([0 20/f0])
% Graficacin de la seal en frecuencia
subplot(414)
% Llamado a la funcin que calcula la FFT
fft_signal(y_Low,fs);title('ESPECTRO DE LA SEAL FILTRADA')
xlim([0 4e3])
%% Grficas del filtro
% Respuesta en frecuencia del filtro
[H,w]=freqz(b,a,512,fs);
figure(2)
%Trazado de la respuesta en Magnitud
subplot(221)
plot(w,20*log10(abs(H)));
grid on;
title ([titulo, ' Respuesta en magnitud']);
xlabel('Frecuencia (Hz)');
ylabel('H(f) db')
xlim([0 5e3])
% Respuesta en fase
subplot(222)
plot(w,angle(H));
grid on;
title ([titulo,' Respuesta en fase']);
xlabel('Frecuencia (Hz)')
ylabel('ngulo de H rad')
xlim([0 5e3])
%Respuesta al impulso
subplot(223)
[y_eje,tt]= impz(b,a,60);
stem(tt,y_eje);
title ([titulo,' Respuesta al impulso']);
xlabel('n')
ylabel('h[n]')
%Ploteo de los polos y ceros
z= roots(b); % Ceros
p = roots(a); % Polos
subplot(224)
zplane(z,p)
title('Polos y ceros')
legend('Ceros','Polos')
%% Reproduccin de audio de entrada y salida
pause(2)
disp('Audio de entrada')
% Se multiplica por 0.2 para atenuar la salida del tono por la bocina
% wavplay(0.2*y,fs)
disp('Audio de salida (seal filtrada)')
% Se multiplica por 0.2 para atenuar la salida del tono por la bocina
% wavplay(0.2*y_Low,fs)

Вам также может понравиться