Matlab - Problema ciclo for oara interfaz grafica en matlab

   
Vista:

Problema ciclo for oara interfaz grafica en matlab

Publicado por Harold (6 intervenciones) el 14/11/2016 19:29:25
Hola a todos, tengo este codigo wn matlab el cual funciona correctamente, lee un audio y lo desompone en 8 niveles, que es el valor que se le dio a N (N=8), ahora estoy haciendo una interfaz grafica con guide pero no se como hacer para que cambiando el valor de N por ejemplo a 3, me calcule 3 niveles de descomoposicion, es decir A1,A2,A3 y D1,D2,D3, y graficarlo, he intentado haciendolo con un ciclo for pero no he podido lograrlo. Gracias.

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
clear
clc
 
 
[audio, Fs]=audioread('audio.wav');
Lt=length(audio);
audio=audio/max(abs(audio));
%t=0:1/Fs:Lt/Fs-1/Fs;
%plot(t,audio); title ('Se?al en el dominio del tiempo');
plot(audio); axis([1 Lt min(audio) max(audio)])
title ('Se?al de voz vs. muestras');
 
%% An?lisis en el dominio de la frecuencia
 
NFFT = 2^nextpow2(Lt);
espectro = fft(audio,NFFT)/Lt;
f = Fs/2*linspace(0,1,NFFT/2+1);
figure;
plot(f,2*abs(espectro(1:NFFT/2+1)));
title('Espectro unilateral del audio')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
 
%% Descomposici?n de la se?al multi-nivel
 
N= 8; % niveles de descomposici?n
[C,L] = wavedec(audio,N,'sym5');  % C coeficientes wavelet, L longitud
 
%% Extracci?n coeficientes de aproximaci?n
 
A1 = appcoef(C,L,'sym5',1); % A1 corresponde a los coeficientes de aproximacion del primer nivel
A2 = appcoef(C,L,'sym5',2); % A2 corresponde a los coeficientes de aproximacion del segundo nivel
A3 = appcoef(C,L,'sym5',3); % A2 corresponde a los coeficientes de aproximacion del tercer nivel
A4 = appcoef(C,L,'sym5',4); % A2 corresponde a los coeficientes de aproximacion del cuarto nivel
A5 = appcoef(C,L,'sym5',5); % A1 corresponde a los coeficientes de aproximacion del quinto nivel
A6 = appcoef(C,L,'sym5',6); % A2 corresponde a los coeficientes de aproximacion del sexto nivel
A7 = appcoef(C,L,'sym5',7); % A2 corresponde a los coeficientes de aproximacion del s?ptimo nivel
A8 = appcoef(C,L,'sym5',8); % A2 corresponde a los coeficientes de aproximacion del octavo nivel
 
figure;
subplot(2,4,1); plot (A1);  axis([1 length(A1) min(A1) max(A1)]); title ('Coeficientes A1');
subplot(2,4,2); plot (A2);  axis([1 length(A2) min(A2) max(A2)]); title ('Coeficientes A2');
subplot(2,4,3); plot (A3);  axis([1 length(A3) min(A3) max(A3)]); title ('Coeficientes A3');
subplot(2,4,4); plot (A4);  axis([1 length(A4) min(A4) max(A4)]); title ('Coeficientes A4');
subplot(2,4,5); plot (A5);  axis([1 length(A5) min(A5) max(A5)]); title ('Coeficientes A5');
subplot(2,4,6); plot (A6);  axis([1 length(A6) min(A6) max(A6)]); title ('Coeficientes A6');
subplot(2,4,7); plot (A7);  axis([1 length(A7) min(A7) max(A7)]); title ('Coeficientes A7');
subplot(2,4,8); plot (A8);  axis([1 length(A8) min(A8) max(A8)]); title ('Coeficientes A8');
 
%% Extraccion coeficientes de detalle
 
D1 = detcoef(C,L,1); % D1 corresponde a los coeficientes de detalle del primer nivel  
D2 = detcoef(C,L,2); % D2 corresponde a los coeficientes de detalle del segundo nivel 
D3 = detcoef(C,L,3); % D3 corresponde a los coeficientes de detalle del tercer nivel 
D4 = detcoef(C,L,4); % D4 corresponde a los coeficientes de detalle del cuarto nivel 
D5 = detcoef(C,L,5); % D5 corresponde a los coeficientes de detalle del quinto nivel
D6 = detcoef(C,L,6); % D6 corresponde a los coeficientes de detalle del sexto nivel
D7 = detcoef(C,L,7); % D7 corresponde a los coeficientes de detalle del s?ptimo nivel
D8 = detcoef(C,L,8); % D8 corresponde a los coeficientes de detalle del octavo nivel
 
figure;
subplot(2,4,1); plot (D1);  axis([1 length(D1) min(D1) max(D1)]); title ('Coeficientes D1');
subplot(2,4,2); plot (D2);  axis([1 length(D2) min(D2) max(D2)]); title ('Coeficientes D2');
subplot(2,4,3); plot (D3);  axis([1 length(D3) min(D3) max(D3)]); title ('Coeficientes D3');
subplot(2,4,4); plot (D4);  axis([1 length(D4) min(D4) max(D4)]); title ('Coeficientes D4');
subplot(2,4,5); plot (D5);  axis([1 length(D5) min(D5) max(D5)]); title ('Coeficientes D5');
subplot(2,4,6); plot (D6);  axis([1 length(D6) min(D6) max(D6)]); title ('Coeficientes D6');
subplot(2,4,7); plot (D7);  axis([1 length(D7) min(D7) max(D7)]); title ('Coeficientes D7');
subplot(2,4,8); plot (D8);  axis([1 length(D8) min(D8) max(D8)]); title ('Coeficientes D8');
 
%% Informacion sobre base wavelets
 
%  waveinfo
% waveletfamilies
 
magnitud=abs(espectro);
magnitud2=magnitud.*magnitud;
E1=sum(magnitud2);
deltaf=f(2);
frecuencia=500;
tdatos=frecuencia/deltaf;
E2=sum(magnitud(1:tdatos));
porcentaje=E2*100/E1;
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

Problema ciclo for oara interfaz grafica en matlab

Publicado por Harold (6 intervenciones) el 14/11/2016 20:25:55
He probado de la siguiente manera


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
clear
clc
[audio, Fs]=audioread('audio.wav');
Lt=length(audio);
audio=audio/max(abs(audio));
%t=0:1/Fs:Lt/Fs-1/Fs;
%plot(t,audio); title ('Se?al en el dominio del tiempo');
plot(audio); axis([1 Lt min(audio) max(audio)])
title ('Se?al de voz vs. muestras');
 
%% An?lisis en el dominio de la frecuencia
 
NFFT = 2^nextpow2(Lt);
espectro = fft(audio,NFFT)/Lt;
f = Fs/2*linspace(0,1,NFFT/2+1);
figure;
plot(f,2*abs(espectro(1:NFFT/2+1)));
title('Espectro unilateral del audio')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
 
%% Descomposici?n de la se?al multi-nivel
 
N= 3; % niveles de descomposici?n
[C,L] = wavedec(audio,N,'sym5');  % C coeficientes wavelet, L longitud
 
%% Extracci?n coeficientes de aproximaci?n
for i=1:N
    n=i-1+1;
    H(i)= appcoef(C,L,'sym5',n);
end


pero me sale el error
In an assignment A(I) = B, the number of elements in B and I must be the same.

Error in pruebadescompofor (line 34)
H(i)= appcoef(C,L,'sym5',n);
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
Imágen de perfil de JOSE JEREMIAS CABALLERO

Problema ciclo for oara interfaz grafica en matlab

Publicado por JOSE JEREMIAS CABALLERO (4092 intervenciones) el 27/11/2016 19:51:52
1
2
3
for i=1:N
 H(:,i)= appcoef(C,L,'sym5',i);
end

Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com


http://matlabcaballero.blogspot.com
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