0 оценок0% нашли этот документ полезным (0 голосов)
27 просмотров6 страниц
Este documento describe cómo cargar, filtrar y guardar señales de audio en MATLAB. Primero carga un archivo de audio, calcula sus propiedades y grafica su forma de onda y espectro. Luego aplica diferentes tipos de filtros (FIR, IIR, óptimos) a la señal, graficando sus respuestas en frecuencia y fase. Finalmente guarda la señal filtrada en un nuevo archivo.
Este documento describe cómo cargar, filtrar y guardar señales de audio en MATLAB. Primero carga un archivo de audio, calcula sus propiedades y grafica su forma de onda y espectro. Luego aplica diferentes tipos de filtros (FIR, IIR, óptimos) a la señal, graficando sus respuestas en frecuencia y fase. Finalmente guarda la señal filtrada en un nuevo archivo.
Este documento describe cómo cargar, filtrar y guardar señales de audio en MATLAB. Primero carga un archivo de audio, calcula sus propiedades y grafica su forma de onda y espectro. Luego aplica diferentes tipos de filtros (FIR, IIR, óptimos) a la señal, graficando sus respuestas en frecuencia y fase. Finalmente guarda la señal filtrada en un nuevo archivo.
global signal fs tiempo Nmuestras %comando utizado para poder utilizar la
seal grabada en el otro guide
[FileName Path]=uigetfile({'*.wav'},'Abrir Sonido'); if isequal(FileName,0);%si es igual a file name y path es 0 entonces retorna nuevamente return else %winopen(strcat(Path,FileName)); %[x,fs]= wavread () [signal fs]=wavread(strcat(Path,FileName)); % leer un archivo de audio end %caso contrario tiempo = size(signal,1)/fs; %Periodo de la grabacin %set(handles.fsmuestra,'string',s); set(handles.visortiempo,'string',tiempo); Nmuestras = fs*tiempo; %Numero de muestras %handles.fs=fs;%declarando variable global igual a la frecuencia de muestreo %handles.tiempo_grabacion=tiempo;%declarando variable global igualando al periodo de grabacion %handles.signal=signal;%declarando bariable global %handles.samples=Nmuestras;%declarando variable global
e=length(signal); NFFT = 2^nextpow2(e); Y = fft(signal,NFFT)/e; s = fs/2*linspace(0,1,NFFT/2+1); set(handles.fsmuestra,'string',fs);
%%%grafica de seal de entrada x=0:1/fs:tiempo; axes(handles.axes5); plot(x(2:end),signal); title('Seal de Entrada'); xlabel('Tiempo(s)'); ylabel('Amplitud'); grid on;
%%%%%%grafica de esectro de la seal de entrada
axes(handles.axes6); plot(s,2*abs(Y(1:NFFT/2+1))) title('Espectro de la seal')%aadir titulo a los ejes actuales xlabel('Frequencia (Hz)')%muestra un titulo al eje x ylabel('|Y(f)|')%muestra un titulo al eje y grid on%grafica cuadricula guidata(hObject,handles);
FILTRAR global signal fs tiempo Nmuestras w %w=handles.w;% declaro una variable global %fs=handles.fs;%declarando una variable global
e1=length(w);%(el comando length permite conocer la longitud de un vector o el numero de lineas de una matriz) NFFT = 2^nextpow2(e1); Y1 = fft(w,NFFT)/e1; s1 = fs/2*linspace(0,1,NFFT/2+1); axes(handles.axes4);%para indicar el axes que quiero que se muestre la seal plot(s1,2*abs(Y1(1:NFFT/2+1))) %con plot se empieza para graficar una funcion title('Espectro de la seal')%aadir titulo a los ejes actuales xlabel('Frequencia (Hz)')%aadir titulo al eje x ylabel('|Y(f)|')%aadir titulo al eje y grid on %agregar cuadriculas guidata(hObject,handles); %guidata sentencia para Salvar datos de la aplicacin que se debe escribir en cada subrutina % hObject handle to FILTRAR (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
REPRODUCIR % --- Executes on button press in REPRODUCIR. function REPRODUCIR_Callback(hObject, eventdata, handles) global w fs A=warndlg('Reproduciendo','AVISO');%permite mostrar un cuadro de aviso %wavplay (handles.w,handles.fs)%reproducir sonido grabado en el PC basado en un dispositivo de salida de audio wavplay(w,fs,fName) close(A)
GUARDAR global fs w %guardar como archivo [nomb,ruta] = uiputfile('grabacion');%el comando uiputfile permite cuadro de dialogo abrir estandar para guardar archivos if nomb==0, return, end fName = fullfile(ruta,nomb);%crear nombre de archivo completo %wavwrite(handles.w,handles.fs,fName);%leer seal grabada wavwrite(w,fs,fName)
FILTROS FIR VENTANAS global signal fs w %handles.fs=fs; %handles.signal=signal; ventanaFIR =get(handles.ventanasfir,'Value'); TF=get(handles.tipofiltros,'Value'); switch TF case 1 %paso bajo tipo=('low'); case 2 %paso Alto tipo=('high'); case 3 %pasa bandas tipo=('bandpass'); case 4 %Rechaza bandas tipo=('stop'); end
wn1=str2num(get(handles.fc,'string'));%frecuancia de corte Wn = (2*wn1)/fs; M=str2num(get(handles.orden,'string')); %Orden del filtro
switch ventanaFIR case 1 b=fir1(M,Wn,tipo,boxcar(M+1)); case 2 b=fir1(M,Wn,tipo,hanning(M+1)); case 3 b=fir1(M,Wn,tipo,hamming(M+1)); case 4 b=fir1(M,Wn,tipo,blackman(M+1)); case 5 bet=inputdlg('Ingrese Beta','BETA');%muestra un cuadro para ingresar un dato como aviso beta=str2double(bet); b=fir1(M,Wn,tipo,kaiser(M+1,beta)); end
[Yz,W]=freqz(b,1);%Respuesta en frecuencia en vector Yz y el correspondiente vector de frecuencia w
%Respuesta en magnitud del sistema Mag=20*log10(abs(Yz)); axes(handles.axes2); plot(W/pi,Mag) xlabel('Frecuencia normalizada'); ylabel('Gain dB'); title('Respuesta en Magnitud del Filtro') grid on
axes(handles.axes3); plot(W/pi,unwrap(angle(Yz))) title('Fase del Filtro') ylabel('Fase'); xlabel('Frecuencia normalizada'); grid on w=filter(b,1,signal);
FILTROS FIR OPTIMO global signal fs w %handles.fs=fs; %Diseo de un filtro ptimo Fpb = str2num(get(handles.dofp,'string')); Fsb = str2num(get(handles.dofs,'string')); Rp = str2num(get(handles.dorp,'string')); Rs = str2num(get(handles.dors,'string'));
dp = (10^(Rp/20)-1)/(10^(Rp/20)+1);%parmetro de desviasin (banda paso). ds = (10^(-Rs/20));%parmetro de desviasin (banda de rechazo).
F = [Fpb Fsb]; %vector de frecuiencia (banda paso y de rechazo). A = [1 0]; %parmetro de amplitudes deseadas en (pb % sb). DEV = [dp ds]; %vector de parmetros de desviacin.
[N,Fo,Ao,W] = firpmord(F,A,DEV,fs); b = firpm(N,Fo,Ao,W);
[Yz, W1]=freqz(b,1);
%Respuesta en magnitud del sistema Mag=20*log10(abs(Yz)); axes(handles.axes2); plot(W1/pi,Mag) xlabel('Frecuencia normalizada'); ylabel('Gain dB'); title('Respuesta en Magnitud del Filtro') grid on
axes(handles.axes3); plot(W1/pi,unwrap(angle(Yz))) title('Fase del Filtro') ylabel('Fase'); xlabel('Frecuencia normalizada'); grid on %handles.signal=signal; w=filter(b,1,signal);
FILTROS IIR
global signal fs tipo1 w IIR =get(handles.filtrosiir,'Value');%tomar los datos que estan el listbox3 tipo1=get(handles.tipofiltros,'Value');%tomar cada uno de los elementos del listboox1 switch tipo1 %usando el comando switch para crear una estructura de casos de control case 1 %paso bajo tipo=('low'); case 2 %paso altas tipo=('high'); case 3 %paso bandas tipo=('bandpass'); case 4 %Rechaza Bandas tipo=('stop'); end
%handles.tipo1=tipo1;%declara variables %global signal fs %handles.fs=fs;%declara variables globales
wp1=str2num(get(handles.dfp,'string'));%se extrae las variables de los edit text y el str2double lo transforma de string %a formato double o numero se usa el handles para etiquetar los edit wp = 2*wp1/fs; %normalizando con el metodo de Nyquist ws1=str2num(get(handles.dFs,'string')); ws = 2*ws1/fs; Rp=str2num(get(handles.dRp,'string')); Rs=str2num(get(handles.dRs,'string')); %handles.signal=signal;
switch IIR case 1 %Butterworth [n,wn]=buttord(wp,ws,Rp,Rs); [a,b] = butter(n,wn,tipo); case 2 %Chebyshev (Tipo 1) [n, wn] = cheb1ord(wp, ws, Rp, Rs); R1=inputdlg('Rizado de pasabanda permitido','R'); R=str2double(R1); [a,b] = cheby1(n,R,wn,tipo); case 3 %Chebyshev (Tipo 2) [n, wn] = cheb2ord(wp,ws,Rp,Rs); R1=inputdlg('Rizado de rechaza banda permitido','R'); R=str2double(R1); [a,b] = cheby2(n,R,wn,tipo); case 4 % Elpico [n, wn] = ellipord(wp,ws,Rp, Rs); R1=inputdlg('Rizado de pasabanda','Rp'); Rp=str2double(R1); R2=inputdlg('Rizado de rechaza banda','Rs'); Rs=str2double(R2); [a,b] = ellip(n,Rp,Rs,wn,tipo); end
[Yz,W]=freqz(a,b); %Respuesta en frecuencia en vector Yz y el correspondiente vector de frecuencia w
Mag=20*log10(abs(Yz));%Respuesta en magnitud del sistema axes(handles.axes2); plot(W/pi,Mag); xlabel('Frecuencia normalizada'); ylabel('Gain dB'); title('Respuesta en Magnitud del Filtro') grid on axes(handles.axes3); plot(W/pi,unwrap(angle(Yz))) title('Fase del Filtro') ylabel('Fase'); xlabel('Frecuencia normalizada'); grid on
Inteligencia artificial: Lo que usted necesita saber sobre el aprendizaje automático, robótica, aprendizaje profundo, Internet de las cosas, redes neuronales, y nuestro futuro
44 Apps Inteligentes para Ejercitar su Cerebro: Apps Gratuitas, Juegos, y Herramientas para iPhone, iPad, Google Play, Kindle Fire, Navegadores de Internet, Windows Phone, & Apple Watch
Excel para principiantes: Aprenda a utilizar Excel 2016, incluyendo una introducción a fórmulas, funciones, gráficos, cuadros, macros, modelado, informes, estadísticas, Excel Power Query y más