Matlab - ayuda

 
Vista:

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;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

ayuda

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 17/02/2012 07:40:45
Hola Marcelo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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)
figure(1)
plot(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);
figure(2)
plot(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);
figure(3)
plot(senal1)
start(ao);
trigger(ao);
while strcmp(ao.Running,'On')
end



1
2
EJECUCION
 >>capturar_senal



Saludos.
JOSE JEREMIAS CABALLERO

Servicios de programacion matlab


Asesor de Proyectos con Matlab
programador en matlab
"Detalladar sus preguntas, para recibir respuestas acertadas"
[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar