1.-procesamiento de una señal de audio usando matlab inicio filtrado

10
%% Procesamiento de una señal de audio usando MATLAB inicio filtrado.m %% Crear señal de audio % Frecuencia fundamental f0=1e3; % 1KHz % Amplitud a=4; % V=4 % Frecuencia de muestreo fs=44.1e3; % Frecuencia de una señal de audio % Tiempo de duración en segundos T=4; L = round(T*fs); % Número 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 señal original subplot(411) plot((0:L-1)/fs,y) title('SEÑAL ORIGINAL')% Título xlabel('Tiempo (s)') % Etiqueta del eje X ylabel('Amplitud (V)') % Etiqueta del eje Y xlim([0 10/1000]) % Límite de la señal %% Grabar y reproducir la señal de audio %wavwrite(y,fs,'audio') % wavplay(y,fs) %% FFT de la señal subplot(412) % Llamado a la función que calcula la FFT fft_signal(y,fs);title('ESPECTRO DE LA SEÑAL ORIGINAL') xlim([0 2500]) %% Filtrado de la señal % Frecuencia normalizada fNorm = 1500 / (fs/2); % Cálculo de los coeficientes del filtro (filtro pasa bajas) [b,a] = butter(10, fNorm, 'low'); % Filtrado de la señal y_Low = filtfilt(b, a, y); % Graficación de la señal en el tiempo subplot(413) plot((0:L-1)/fs,y_Low) title('SEÑAL FILTRADA') xlabel('Tiempo (s)') ylabel('Amplitud (V)') xlim([0 10/1000]) % Graficación de la señal en frecuencia subplot(414) % Llamado a la función que calcula la FFT fft_signal(y_Low,fs);title('ESPECTRO DE LA SEÑAL FILTRADA') xlim([0 2500]) %% Gráficas 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)));

Upload: sinchy

Post on 28-Dec-2015

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1.-Procesamiento de Una Señal de Audio Usando MATLAB Inicio Filtrado

%% Procesamiento de una señal de audio usando MATLAB inicio filtrado.m%% Crear señal de audio% Frecuencia fundamentalf0=1e3; % 1KHz% Amplituda=4; % V=4% Frecuencia de muestreofs=44.1e3; % Frecuencia de una señal de audio% Tiempo de duración en segundosT=4;L = round(T*fs); % Número de muestras% Frecuencia normalizadafn=f0/fs;y = a*sin(2*pi*fn*(0:L-1))+0.5*a*sin(2*pi*2*fn*(0:L-1));% Graficar la señal originalsubplot(411)plot((0:L-1)/fs,y)title('SEÑAL ORIGINAL')% Títuloxlabel('Tiempo (s)') % Etiqueta del eje Xylabel('Amplitud (V)') % Etiqueta del eje Yxlim([0 10/1000]) % Límite de la señal%% Grabar y reproducir la señal de audio%wavwrite(y,fs,'audio')% wavplay(y,fs)%% FFT de la señalsubplot(412)% Llamado a la función que calcula la FFTfft_signal(y,fs);title('ESPECTRO DE LA SEÑAL ORIGINAL')xlim([0 2500])%% Filtrado de la señal% Frecuencia normalizadafNorm = 1500 / (fs/2);% Cálculo de los coeficientes del filtro (filtro pasa bajas)[b,a] = butter(10, fNorm, 'low');% Filtrado de la señaly_Low = filtfilt(b, a, y);% Graficación de la señal en el tiemposubplot(413)plot((0:L-1)/fs,y_Low)title('SEÑAL FILTRADA')xlabel('Tiempo (s)')ylabel('Amplitud (V)')xlim([0 10/1000])% Graficación de la señal en frecuenciasubplot(414)% Llamado a la función que calcula la FFTfft_signal(y_Low,fs);title('ESPECTRO DE LA SEÑAL FILTRADA')xlim([0 2500])%% Gráficas del filtro% Respuesta en frecuencia del filtro[H,w]=freqz(b,a,512,1);figure(2)%Trazado de la respuesta en Magnitudsubplot(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 fasesubplot(222)plot(w,angle(H));grid on;title ('Filtro pasa-altos, Respuesta en fase');xlabel('frecuencia')ylabel('ángulo de H rad')

Page 2: 1.-Procesamiento de Una Señal de Audio Usando MATLAB Inicio Filtrado

xlim([0 0.4]) %Respuesta al impulsosubplot(223)[y_eje,t]= impz(b,a,60);stem(t,y_eje);title ('Filtro pasa-altos, Respuesta al impulso'); %Ploteo de los polos y cerosz= roots(b); % Cerosp = roots(a); % Polossubplot(224)zplane(z,p)title('Polos y ceros')legend('Ceros','Polos')%% Reproducción de audio de entrada y salidapause(2)disp('Audio de entrada')wavplay(0.5*y,fs)disp('Audio de salida (señal filtrada)')wavplay(0.5*y_Low,fs)

Page 3: 1.-Procesamiento de Una Señal de Audio Usando MATLAB Inicio Filtrado

%% Procesamiento de una señal de audio usando MATLAB inicio filtrado_2%% Selección del tipo de filtrado% 1 -> Pasa bajo% 2 -> Pasa alto% 3 -> Pasa bandatipo=3%% Crear señal de audio% Frecuencia fundamentalf0=1e3; % 1KHz% Amplituda=2; % V=4% Frecuencia de muestreofs=44.1e3; % Frecuencia de una señal de audio CD% Tiempo de duración en segundosT=2;% Vector de tiempot=linspace(0,T,T*fs);% Creación de la señal% Primer señal (tono 1)s1=a*sin(2*pi*f0*t);% Segunda señal (tono 2)s2=0.75*a*sin(2*pi*(1.5*f0)*t);% Tercera señal (tono 3)s3=0.5*a*sin(2*pi*(2*f0)*t);% Señal compuesta (suma de dos tonos)y = s1 + s2 + s3;% Graficar la señal originalsubplot(411)plot(t,y)title('SEÑAL ORIGINAL')% Títuloxlabel('Tiempo (s)') % Etiqueta del eje Xylabel('Amplitud (V)') % Etiqueta del eje Yxlim([0 20/1000]) % Límite de la señal%% Grabar y reproducir la señal de audio% wavwrite(0.1*y,fs,'audio')% wavplay(0.1*y,fs)%% FFT de la señalsubplot(412)% Llamado a la función que calcula la FFTfft_signal(y,fs);title('ESPECTRO DE LA SEÑAL ORIGINAL')xlim([0 2500])%% Filtrado de la señalswitch tipo case 1 % Cálculo de los coeficientes del filtro (filtro pasa bajas) % Este filtrado deja solo la señal de 1000 Hz % Frecuencia normalizada titutlo='FILTRO PASA BAJAS'; fNorm = 1200 / (fs/2); [b,a] = butter(10, fNorm, 'low'); case 2 %- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Cálculo de los coeficientes del filtro (filtro pasa bajas) % Este filtrado deja solo la señal de 2000 Hz % Frecuencia normalizada titutlo='FILTRO PASA ALTAS'; fNorm = 1900 / (fs/2); [b,a] = butter(10, fNorm, 'high'); otherwise %- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Cálculo de los coeficientes del filtro (filtro pasa banda) % Este filtrado deja solo la señal de 1500 Hz % Frecuencias normalizadas titutlo='FILTRO PASA BANDA'; fNorm_1 = 1000 / (fs/2); % 1250

Page 4: 1.-Procesamiento de Una Señal de Audio Usando MATLAB Inicio Filtrado

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 señaly_Low = filtfilt(b, a, y);% Graficación de la señal en el tiemposubplot(413)plot(t,y_Low)title('SEÑAL FILTRADA')xlabel('Tiempo (s)')ylabel('Amplitud (V)')xlim([0 20/1000])% Graficación de la señal en frecuenciasubplot(414)% Llamado a la función que calcula la FFTfft_signal(y_Low,fs);title('ESPECTRO DE LA SEÑAL FILTRADA')xlim([0 2500])%% Gráficas del filtro% Respuesta en frecuencia del filtro[H,w]=freqz(b,a,512,fs);figure(2)%Trazado de la respuesta en Magnitudsubplot(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 fasesubplot(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 impulsosubplot(223)[y_eje,tt]= impz(b,a,60);stem(tt,y_eje);title ([titutlo,'Respuesta al impulso']); %Ploteo de los polos y cerosz= roots(b); % Cerosp = roots(a); % Polossubplot(224)zplane(z,p)title('Polos y ceros')legend('Ceros','Polos')%% Reproducción de audio de entrada y salidapause(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 (señal filtrada)')% Se multiplica por 0.1 para atenuar la salida del tono por la bocina wavplay(0.1*y_Low,fs)

Page 5: 1.-Procesamiento de Una Señal de Audio Usando MATLAB Inicio Filtrado

%% Procesamiento de una señal de audio usando MATLAB inicio filtrado3.m%% Selección del tipo de filtrado% 1 -> Pasa bajo% 2 -> Pasa alto% 3 -> Pasa bandatipo=1;%% Crear señal de audio% Frecuencia fundamentalf0=8e3; % 8KHz% Amplituda=3; % V=4% Frecuencia de muestreofs=44.1e3; % Frecuencia de una señal de audio CD% Tiempo de duración en segundosT=1.5;% Vector de tiempot=linspace(0,T,T*fs);% Creación de la señal% Primer señal (tono 1)s1=a*sin(2*pi*f0*t);% Segunda señal (tono 2)s2=0.75*a*sin(2*pi*(1.5*f0)*t);% Tercera señal (tono 3)s3=0.5*a*sin(2*pi*(2*f0)*t);% Señal compuesta (suma de dos tonos)y = s1 + s2 + s3;% Graficar la señal originalsubplot(411)plot(t,y)title('SEÑAL ORIGINAL')% Títuloxlabel('Tiempo (s)') % Etiqueta del eje Xylabel('Amplitud (V)') % Etiqueta del eje Yxlim([0 20/f0]) % Límite de la señal%% Grabar y reproducir la señal de audio% wavwrite(0.1*y,fs,'audio')% wavplay(0.1*y,fs)%% FFT de la señalsubplot(412)% Llamado a la función que calcula la FFTfft_signal(y,fs);title('ESPECTRO DE LA SEÑAL ORIGINAL')xlim([0 f0*3])%% Filtrado de la señalswitch tipo case 1 % Cálculo de los coeficientes del filtro (filtro pasa bajas) % Este filtrado deja solo la señal de 1000 Hz % Frecuencia normalizada titutlo='FILTRO PASA BAJAS'; fNorm = 8.5e3 / (fs/2); [b,a] = butter(10, fNorm, 'low'); case 2 %- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Cálculo de los coeficientes del filtro (filtro pasa bajas) % Este filtrado deja solo la señal de 2000 Hz % Frecuencia normalizada titutlo='FILTRO PASA ALTAS'; fNorm = 15e3 / (fs/2); [b,a] = butter(10, fNorm, 'high'); otherwise %- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Cálculo de los coeficientes del filtro (filtro pasa banda)

Page 6: 1.-Procesamiento de Una Señal de Audio Usando MATLAB Inicio Filtrado

% Este filtrado deja solo la señal 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 señaly_Low = filtfilt(b, a, y);% Graficación de la señal en el tiemposubplot(413)plot(t,y_Low)title('SEÑAL FILTRADA')xlabel('Tiempo (s)')ylabel('Amplitud (V)')xlim([0 20/f0])% Graficación de la señal en frecuenciasubplot(414)% Llamado a la función que calcula la FFTfft_signal(y_Low,fs);title('ESPECTRO DE LA SEÑAL FILTRADA')xlim([0 3*f0])%% Gráficas del filtro% Respuesta en frecuencia del filtro[H,w]=freqz(b,a,512,fs);figure(2)%Trazado de la respuesta en Magnitudsubplot(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 fasesubplot(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 impulsosubplot(223)[y_eje,tt]= impz(b,a,60);stem(tt,y_eje);title ([titutlo,'Respuesta al impulso']); %Ploteo de los polos y cerosz= roots(b); % Cerosp = roots(a); % Polossubplot(224)zplane(z,p)title('Polos y ceros')legend('Ceros','Polos')%% Reproducción de audio de entrada y salidapause(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 (señal filtrada)')% Se multiplica por 0.1 para atenuar la salida del tono por la bocina wavplay(0.1*y_Low,fs)

Page 7: 1.-Procesamiento de Una Señal de Audio Usando MATLAB Inicio Filtrado

%% Procesamiento de una señal de audio usando MATLAB filtrado4_arc_wav.m%% Selección del tipo de filtrado% 1 -> Pasa bajo% 2 -> Pasa alto% 3 -> Pasa bandatipo=3;%% Leer la señal de audio[y,fs]=wavread('Yabu_mono');% y -> muestras de la señal% fs-> frecuencia de muestreo% Graficar la señal originalsubplot(411)T=length(y)/fs;t=linspace(0,T,T*fs);plot(t,y)title('SEÑAL ORIGINAL')% Títuloxlabel('Tiempo (s)') % Etiqueta del eje Xylabel('Amplitud (V)') % Etiqueta del eje Y% xlim([0 20/]) % Límite de la señal%% Reproducir la señal de audio% wavplay(0.1*y,fs)%% FFT de la señalsubplot(412)% Llamado a la función que calcula la FFTfft_signal(y,fs);title('ESPECTRO DE LA SEÑAL ORIGINAL')xlim([0 4e3])%% Filtrado de la señalswitch tipo case 1 % Cálculo de los coeficientes del filtro (filtro pasa bajas) % Este filtrado deja solo la señal por debajo de 500 Hz titulo='FILTRO PASA BAJAS'; % Frecuencia normalizada fNorm = 1000 / (fs/2); [b,a] = butter(10, fNorm, 'low'); case 2 %- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Cálculo de los coeficientes del filtro (filtro pasa altas) % Este filtrado deja solo la señal por encima de 500 Hz titulo='FILTRO PASA ALTAS'; % Frecuencia normalizada fNorm = 1000 / (fs/2); [b,a] = butter(10, fNorm, 'high'); otherwise %- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Cálculo de los coeficientes del filtro (filtro pasa banda) % Este filtrado deja solo la señal 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 señaly_Low = filtfilt(b, a, y);% Graficación de la señal en el tiemposubplot(413)plot(t,y_Low)title('SEÑAL FILTRADA')

Page 8: 1.-Procesamiento de Una Señal de Audio Usando MATLAB Inicio Filtrado

xlabel('Tiempo (s)')ylabel('Amplitud (V)')% xlim([0 20/f0])% Graficación de la señal en frecuenciasubplot(414)% Llamado a la función que calcula la FFTfft_signal(y_Low,fs);title('ESPECTRO DE LA SEÑAL FILTRADA')xlim([0 4e3])%% Gráficas del filtro% Respuesta en frecuencia del filtro[H,w]=freqz(b,a,512,fs);figure(2)%Trazado de la respuesta en Magnitudsubplot(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 fasesubplot(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 impulsosubplot(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 cerosz= roots(b); % Cerosp = roots(a); % Polossubplot(224)zplane(z,p)title('Polos y ceros')legend('Ceros','Polos')%% Reproducción de audio de entrada y salidapause(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 (señal filtrada)')% Se multiplica por 0.2 para atenuar la salida del tono por la bocina% wavplay(0.2*y_Low,fs)