Matlab - Undefined function 'codigo' for input arguments of type 'char estoy sumando peras con manzanas?

   
Vista:

Undefined function 'codigo' for input arguments of type 'char estoy sumando peras con manzanas?

Publicado por Fredy (8 intervenciones) el 13/06/2013 02:25:58
buenas noches estoy intentando hacer un código al que ingreso un archivo de sonido en formato wav y se llama nboch, y le quiero calcular el espectro de potencia mediante una aproximación con la transformada de fourier, pero tengo un problema que no se como arreglar.
este es el codigo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Fs = 11025;
F=wavread('nboch');
ao=0;
T=0.2 %aproximadamente un ciclo
a[o]=ao +1/T*trapz(f,0,T);
a[n]=0;
for n=1:1:100
a[n]= an+2/T*trapz(f(t)*cos(n*wo*t),0,T);
end
for n=1:1:100
b[n]=0;
b[n]= bn+2/T*trapz(f(t)*sin(n*wo*t),0,T);
end
 
An=sqrt(a[n]^2+b[n]^2); %calculo la potencia
tetan=atan(-b[n]/a[n]); %calculo el angulo
P=Ao^2+(a[n]^2/sqrt(2))^2
 
%donde a[o]=Ao; a[n]= An*cos(tetan);b[n]=An*cos(tetan) o An=sqrt(a[n]^2+b[n]^2) y
%tetan =atan(b[n]/a[n])

el error es este
Undefined function 'codigo' for input arguments of type 'char'.
no se como arreglarlo. gracias
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

Undefined function

Publicado por Fredy (8 intervenciones) el 13/06/2013 04:08:45
bueno encontre 2 errores en mi código
corrigiendo una linea seria

1
a[n]= a[n]+2/T*trapz(f(t)*cos(n*wo*t),0,T);


corregido 1 el otro que veo es que estoy sumando un vector con un simbólico
mi nuevo código seria
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
Fs = 11025;
F=wavread('nboch');
plot(F)
wavplay(F,Fs);
ao=0;
T=0.2 %aproximadamente un ciclo
a[o]=ao +(1/T)*trapz(F,0,T);
a[n]=0;
for n=1:1:100
a[n]= a[n]+(2/T)*trapz(F(t)*cos(n*wo*t),0,T);
b[n]=0;
b[n]= b[n]+(2/T)*trapz(F(t)*sin(n*wo*t),0,T);
%A[n] toma el valor de a[n] y b[n] en cada ciclo 
An=sqrt(a[n]^2+b[n]^2); %calculo la potencia
tetan=atan(-b[n]/a[n]); %calculo el angulo
P=Ao^2+(a[n]^2/sqrt(2))^2
%ingreso el valor de cada A[n] y P en un vector v
v1=[v1 An];
v2=[v2 P];
end
plot(v1)
plot(v2)
 
%donde a[o]=Ao; a[n]= An*cos(tetan);b[n]=An*cos(tetan) o An=sqrt(a[n]^2+b[n]^2) y
%tetan =atan(b[n]/a[n])

pero el errorsito me sigue saltando
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

Undefined function

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3437 intervenciones) el 13/06/2013 14:10:19
Fs = 11025;

Cuando leas con wavread usa mas de un argumento salida , revisa help wavread, digitando en la ventana de comandos de matlab.
F=wavread('nboch');


plot(F)


wavplay(F,Fs);
En vez de wavplay usa audiodio player y luego play.

ao=0;
T=0.2 %aproximadamente un ciclo


Revisa la ayuda de la función trapz en matllab digitando help trapz en la ventana de comandos de matlab.
a[o]=ao +(1/T)*trapz(F,0,T);

En matlab en vez de corchete se usa paréntesis
a[n]=0;
for n=1:1:100

a[n]= a[n]+(2/T)*trapz(F(t)*cos(n*wo*t),0,T);
Que es F(t), en términos de matlab se puede entender como una función F evaluada en el punto t

b[n]=0;
b[n]= b[n]+(2/T)*trapz(F(t)*sin(n*wo*t),0,T);
%A[n] toma el valor de a[n] y b[n] en cada ciclo
An=sqrt(a[n]^2+b[n]^2); %calculo la potencia
tetan=atan(-b[n]/a[n]); %calculo el angulo
P=Ao^2+(a[n]^2/sqrt(2))^2
%ingreso el valor de cada A[n] y P en un vector v
v1=[v1 An];
v2=[v2 P];
end
plot(v1)
plot(v2)

%donde a[o]=Ao; a[n]= An*cos(tetan);b[n]=An*cos(tetan) o An=sqrt(a[n]^2+b[n]^2) y
%tetan =atan(b[n]/a[n])



RECOMENDACION IMPORTANDE:
Estudiar matlab desde su inicio, empezando por vectores, matrices, grafica en dos dimensiones, ciclos iterativos.



Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Undefined function

Publicado por Gerardo (26 intervenciones) el 13/06/2013 21:04:50
Hola Freddy!

Pues a simple vista veo a[o]. Prueba cambiando la "o" por el "0" para ver si se resuelve el problema.

Saludos!
Gerardo
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

Undefined function

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3437 intervenciones) el 13/06/2013 21:46:23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>> a[o]=4
 a[o]=4
 |
Error: Unbalanced or unexpected parenthesis or bracket.
 
>> a[0]=4
 a[0]=4
 |
Error: Unbalanced or unexpected parenthesis or bracket.
 
>> a[1]=4
 a[1]=4
 |
Error: Unbalanced or unexpected parenthesis or bracket.




Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com


http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Undefined function

Publicado por Fredy (8 intervenciones) el 16/06/2013 00:23:47
Pues he encontrado el error, estaba en el nombre del archivo = muy buenos los consejos efectivamente todo eso estaba mal lo he modificado un poco y he encontrado 2 problemas
*no puedo multiplicar el vector por un cos(nwt) y necesito hacer eso para sacar la transformada el error que me sale es.
LENGTH(X) must equal the length of Y in dim 1.
entiendo que es un problema de dimensión pero no se como dejarlos igual.
*lo otro es la forma en la que estoy guardando los valores en los vectores V1 y V2 vi un video en el que lo hacian as'i pero a mi no me funciono
el codigo que tengo hasta ahora es este
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
clc;
clear;
[F,Fs]=wavread('u_hombre');
wavplay(F,Fs);
t=size(F,1)/Fs;
x=0:1/Fs:t;
plot(x(2:end),F)
xlim([0 t])
%aproximadamente un ciclo
%T=size(nboch,1)/Fs
ao=0;
a(o)=ao +(1/t)*trapz(t,F);
a(n)=0;
a(n)= a(n)+(2/t)*trapz(t,F.*cos(n*wo*t));
b(n)=0;
b(n)= b(n)+(2/t)*trapz(t,F.*sin(n*wo*t));
%A[n] toma el valor de a[n] y b[n] en cada ciclo 
An=sqrt(a(n)^2+b(n)^2); %calculo la potencia
P=Ao^2+(a(n)^2/sqrt(2))^2
if a(n)>0&&b(n)>0
tetan=atan(-b(n)/a(n));
else if a(n)<0&&b(n)>0
tetan=90+atan(-b(n)/a(n));
else if a(n)<0&&b(n)<0
tetan=180+atan(-b(n)/a(n));
else if a(n)>0&&b(n)<0
tetan=270+atan(-b(n)/a(n));%calculo el angulo
%ingreso el valor de cada A[n] y P en un vector v
v1=(v1 An);
v2=(v2 P);
end
plot(v1)
plot(v2)
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

Undefined function

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3437 intervenciones) el 16/06/2013 01:20:06
Te había dicho que estudies vectores, pero al parecer no estas haciendo. El Objetivo es que cada línea que pongas en un código que hagas, es decir debes saber como va a afectar o como funciona y que hace ese línea.
Es bueno revisar los códigos resueltos, pero la forma como está hecho depende que es lo están haciendo, como por ejemplo a= [a b] dentro de un bucle ese funciona para otra persona, pero de repente no funcione para ti, eso es porque de repente para otra persona los elementos a y b tiene la misma cantidad de filas, pero no sea así para ti 'a', es una matriz y el 'b' es un numero real, entonces así de repente no funcione, o por otros motivos. Por eso que justamente debes estudiar desde cero, y eso siempre recomiendo a la personas que veo sus niveles de conocimientos de matlab. Además en el ultimo línea que pongo en cada pregunta que contesto, siempre pongo como es la forma adecuada de estudiar matlab.
Sobre todo estudiar matlab, es un proceso de investigación día y día.

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
clc;
clear;
[F,Fs]=wavread('u_hombre');
wavplay(F,Fs);
t=size(F,1)/Fs;
x=0:1/Fs:t;
plot(x(2:end),F)
xlim([0 t])
%aproximadamente un ciclo
%T=size(nboch,1)/Fs
ao=0;
a(o)=ao +(1/t)*trapz(t,F);
%REVIsa este linea. No hay posisicion cero en un vector en Matlab
a(n)=0;  % linea, defines a(n), pero no haz definido el valor de n
a(n)= a(n)+(2/t)*trapz(t,F.*cos(n*wo*t));
 
b(n)=0;
b(n)= b(n)+(2/t)*trapz(t,F.*sin(n*wo*t));
%A[n] toma el valor de a[n] y b[n] en cada ciclo 
An=sqrt(a(n)^2+b(n)^2); %calculo la potencia
P=Ao^2+(a(n)^2/sqrt(2))^2
if a(n)>0 && b(n)>0
    tetan=atan(-b(n)/a(n));
elseif a(n)<0 &&b (n)>0
    tetan=90+atan(-b(n)/a(n));
elseif a(n)<0 && b(n)<0
    tetan=180+atan(-b(n)/a(n));
elseif a(n)>0 && b(n)<0
    tetan=270+atan(-b(n)/a(n));%calculo el angulo
    %ingreso el valor de cada A[n] y P en un vector v
    v1=[v1 An];
    v2=[v2 P];
end
plot(v1)
plot(v2)


Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Undefined function

Publicado por Fredy (8 intervenciones) el 16/06/2013 01:36:22
me comí el ciclo for en una linea
1
2
for n=1:1:t
a(n)= a(n)+(2/t)*trapz(t,F.*cos(n*wo*t));
el errror no cambia

LENGTH(X) must equal the length of Y in dim 1. y
Error: File: codigolimpio.m Line: 36 Column: 8
Unexpected MATLAB expression. donde esta v1
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

Undefined function

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3437 intervenciones) el 16/06/2013 01:47:03
Donde defines el valor de wo?. Estas usando pero no veo que hayas definido con anterioridad.
además haz verificado que F y cos(n*wo*t) deben de la misma dimensión caso contrario allí va a ver error, además t y F.*cos(n*wo*t) deben tener la misma dimensión caso contrario va a ver error.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Undefined function

Publicado por Fredy (8 intervenciones) el 16/06/2013 03:31:57
Hola gracias. ubique después de definir t , w0=(2*pi)/t. Pero por el dato pero no conozco es el tamaño de cos(n*w0*t) como hago que su tamaño sea = que el de F sin conocerlo? intente hacer u=cos(n*wo*t) pero falle terriblemente.
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

Undefined function

Publicado por Fredy (8 intervenciones) el 17/06/2013 00:38:01
Hola moviendo varias cosas pareciera estar todo bien "no genera ningún error y en teoría por cada valor de n, P y An toman un valor y se asignan a v1 y v2 así hasta t. Pero al final solo escribe el nombre del archivo "epotencia" que significa esto?. este es el codigo.
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
%Buenas noches profesor, entendí todo menos la parte en la que dice que  el an se acumula 
%por que si estoy integrando. intente hacerlo mas  sencillo. Lo que no he logrado o  no se 
%bien es como declarar el archivo como una función y asignar una variable para evaluarla, 
%el código limpio seria así.
 
%calculo de los coeficientes a0,an,bn
clc;
clear;
[F,Fs]=wavread('u_hombre');
wavplay(F,Fs);
t=size(F,1)/Fs;
n=0:1/Fs:t;
plot(n(2:end),F)
xlim([0 t])
wo=(2*pi)/t
%aproximadamente un ciclo
%T=size(nboch,1)/Fs
 
for n=0.005283:0.0001:t
ao=0;
a(o)=ao +(1/t)*trapz(t,F);
a(n)=0;
u=cos(n*wo*t)
v=sin(n*wo*t)
a(n)= a(n)+(2/t)*trapz(n,F.*cos(n*wo*t));
b(n)=0;
b(n)= b(n)+(2/t)*trapz(n,F.*sin(n*wo*t));
%A[n] toma el valor de a[n] y b[n] en cada ciclo 
An=sqrt(a(n)^2+b(n)^2); %calculo la potencia
P=Ao^2+(a(n)^2/sqrt(2))^2
if a(n)>0&&b(n)>0
tetan=atan(-b(n)/a(n));
else if a(n)<0&&b(n)>0
tetan=90+atan(-b(n)/a(n));
else if a(n)<0&&b(n)<0
tetan=180+atan(-b(n)/a(n));
else if a(n)>0&&b(n)<0
tetan=270+atan(-b(n)/a(n));%calculo el angulo
%ingreso el valor de cada A[n] y P en un vector v
v1(n)=P;
v2(n)=An;
end
plot(n,v1)
plot(n,v2)
 
%donde a[o]=Ao; a[n]= An*cos(tetan);b[n]=An*cos(tetan) o An=sqrt(a[n]^2+b[n]^2) y
%tetan =atan(b[n]/a[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