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

CARGAR DATOS

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

w=filter(a,b,signal);

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