ayuda
Publicado por marcelo (1 intervención) el 17/02/2012 02:43:03
hola buenas noches necesito ayuda con un programa en matlab, el programa consiste grabar audio lo guarda en memoria, lo reproduce luego le aplica la fft y la ifft luego reproduce por ultimo aplica abs a la señal sacandole las fases y reproduce. el programa funciona lo mas bien lo que no he podido hace es que cada ves que reproduce la señal plotee la señal o sea obtener un grafico o sea reproduce la señal origina y que grafique la señal, luego que reprodusca la señal con la ifft y que vuelva a grafical la nueva señal, por ultimoque grafique le señal sin las fases, si me ueden ayudar estare muy agradecido gracias, a continuacion el programa que hace cada una de estas cosas
clear all; %para borrar todas las variables
clc; %para limpiar la ventana de comandos
fs=44100; %frecuencia de muestreo para calidad de CD
Bm=16; %numero de bits de cada muestra de la señal digitalizada
duracion=3; % en segundos, esto puede variarse
numcan=1; %numero de canales: 1 es monoaural, 2 es estereo
repeticiones=0; %1 para una sola repeticion, 1 para repetir dos veces, etc.
% ai y ao no son vectores ni variables, contienen los parametros de captura
%lo que sigue son comandos y funciones propias del matlab y deben ser copiadas tal como estan
ai=analoginput('winsound');
n=1:numcan;
chan=addchannel(ai,n);
set(ai,'SampleRate',fs);
ActualRate=get(ai,'SampleRate');
set(ai,'SamplesPerTrigger',duracion*ActualRate);
set(ai,'TriggerType','Manual');
set(ai,'BitsPerSample',Bm);
ao=analogoutput('winsound');
chan=addchannel(ao,n);
set(ao,'SampleRate',fs);
set(ao,'BitsPerSample',Bm);
set(ao,'TriggerType','manual');
set(ao,'RepeatOutput',repeticiones);
% esto fue para que la computadora sepa como hacer la captura y la reproduccion
%con esto empieza la captura de audio
disp('Presione enter para capturar de señal');
pause;
start(ai);
trigger(ai);
senal=getdata(ai);
disp('Señal capturada');
%si es monoaural "senal" es un vector de longitud fs*duracion
%si es estereo seran dos vectores senal(1,:) y senal(2,:) para cada canal
% Es aqui donde va la programacion para procesar "senal"
transformada=fft(senal); %esto es para sacarle la transformada de fourier a senal
senal0 = ifft(transformada);
%ifft es la transforada inversa de fourier
%es para volver del dominio de la frecencia al dominio del tiempo
%esto es para demostrar que senal0 y la senal original son iguales
transformadanofase=abs(transformada); %esto es para eliminar la informacion sobre las fases
%el comando "abs" solo deja las amplitudes
senal1=ifft(transformadanofase);
%senal1 es la senal de audio sin la informacion de las fases
disp('Presione enter para reproducir la señal original');
pause;
%como matlab captura y reproduce como columna las siguientes líneas
%son para asegurar que la senal capturada esta como columna ya sea mono o estereo
[m,n]=size(senal);
if m<=2 & n>=m
senal=senal';
end;
[m,n]=size(senal0);
if m<=2 & n>=m
senal0=senal0';
end;
[m,n]=size(senal1);
if m<=2 & n>=m
senal1=senal1';
end;
%esto es para la reproduccion
disp('La señal original es:');
disp('');
set(ao,'RepeatOutput',repeticiones);
putdata(ao,senal);
start(ao);
trigger(ao);
while strcmp(ao.Running,'On');
%para que espere a que termine la reproduccion para que continue con el programa principal
end;
disp('Presione enter para reproducir la senal resultante');
disp('de la transformada inversa de la original');
disp('');
pause;
set(ao,'RepeatOutput',repeticiones);
putdata(ao,senal0);
start(ao);
trigger(ao);
while strcmp(ao.Running,'On')
end;
disp('Presione enter para reproducir la señal sin');
disp('la información de fase');
pause;
set(ao,'RepeatOutput',repeticiones);
putdata(ao,senal1);
start(ao);
trigger(ao);
while strcmp(ao.Running,'On')
end;
clear all; %para borrar todas las variables
clc; %para limpiar la ventana de comandos
fs=44100; %frecuencia de muestreo para calidad de CD
Bm=16; %numero de bits de cada muestra de la señal digitalizada
duracion=3; % en segundos, esto puede variarse
numcan=1; %numero de canales: 1 es monoaural, 2 es estereo
repeticiones=0; %1 para una sola repeticion, 1 para repetir dos veces, etc.
% ai y ao no son vectores ni variables, contienen los parametros de captura
%lo que sigue son comandos y funciones propias del matlab y deben ser copiadas tal como estan
ai=analoginput('winsound');
n=1:numcan;
chan=addchannel(ai,n);
set(ai,'SampleRate',fs);
ActualRate=get(ai,'SampleRate');
set(ai,'SamplesPerTrigger',duracion*ActualRate);
set(ai,'TriggerType','Manual');
set(ai,'BitsPerSample',Bm);
ao=analogoutput('winsound');
chan=addchannel(ao,n);
set(ao,'SampleRate',fs);
set(ao,'BitsPerSample',Bm);
set(ao,'TriggerType','manual');
set(ao,'RepeatOutput',repeticiones);
% esto fue para que la computadora sepa como hacer la captura y la reproduccion
%con esto empieza la captura de audio
disp('Presione enter para capturar de señal');
pause;
start(ai);
trigger(ai);
senal=getdata(ai);
disp('Señal capturada');
%si es monoaural "senal" es un vector de longitud fs*duracion
%si es estereo seran dos vectores senal(1,:) y senal(2,:) para cada canal
% Es aqui donde va la programacion para procesar "senal"
transformada=fft(senal); %esto es para sacarle la transformada de fourier a senal
senal0 = ifft(transformada);
%ifft es la transforada inversa de fourier
%es para volver del dominio de la frecencia al dominio del tiempo
%esto es para demostrar que senal0 y la senal original son iguales
transformadanofase=abs(transformada); %esto es para eliminar la informacion sobre las fases
%el comando "abs" solo deja las amplitudes
senal1=ifft(transformadanofase);
%senal1 es la senal de audio sin la informacion de las fases
disp('Presione enter para reproducir la señal original');
pause;
%como matlab captura y reproduce como columna las siguientes líneas
%son para asegurar que la senal capturada esta como columna ya sea mono o estereo
[m,n]=size(senal);
if m<=2 & n>=m
senal=senal';
end;
[m,n]=size(senal0);
if m<=2 & n>=m
senal0=senal0';
end;
[m,n]=size(senal1);
if m<=2 & n>=m
senal1=senal1';
end;
%esto es para la reproduccion
disp('La señal original es:');
disp('');
set(ao,'RepeatOutput',repeticiones);
putdata(ao,senal);
start(ao);
trigger(ao);
while strcmp(ao.Running,'On');
%para que espere a que termine la reproduccion para que continue con el programa principal
end;
disp('Presione enter para reproducir la senal resultante');
disp('de la transformada inversa de la original');
disp('');
pause;
set(ao,'RepeatOutput',repeticiones);
putdata(ao,senal0);
start(ao);
trigger(ao);
while strcmp(ao.Running,'On')
end;
disp('Presione enter para reproducir la señal sin');
disp('la información de fase');
pause;
set(ao,'RepeatOutput',repeticiones);
putdata(ao,senal1);
start(ao);
trigger(ao);
while strcmp(ao.Running,'On')
end;
Valora esta pregunta


0