Matlab - problema en funcion

 
Vista:

problema en funcion

Publicado por oscar (15 intervenciones) el 24/04/2008 11:36:46
Hola, tengo un problemilla es esta funcion, a ver si le echais un vistazo y me decis porque no funciona:

function [BS,LT,LNT] = Componentes_tonales(F,UA,MAP,LBC,sampling_frequency)

if sampling_frequency == 0 | 1


BS = zeros(512,1);
LML = [];
c = 1;
for k = 3:500,
if (F(k)>F(k-1) & F(k)>=F(k+1))
LML(c,1) = k;
LML(c,2) = F(k);
c = c+1;
end
end


LT = [];
c = 1;
if not(isempty(LML))
for i = 1:length(LML(:,1)),
k = LML(i,1);
tonal = 1;


if (2<k & k<63)
J = [-2,2];
elseif (63<=k & k<127)
J = [-3,-2,2,3];
elseif (127<=k & k<255)
J = [-6:-2,2:6];
elseif (255<=k & k<=500)
J = [-12:-2,2:12];
else
tonal = 0;
end


for j = J,
tonal = tonal & (F(k)-F(k+j) >= 7);
end


if tonal
LT(c,1) = k;
LT(c,2) = 10*log10(10^(F(k-1)/10)+10^(F(k)/10)+10^(F(k+1)/10));
BS(k) = 1; % Bandera de componente tonal = 1.
for j = [J,-1,1],
BS(k+j) = 3; % Bandera de componente irrelevante = 3.
end
c = c+1;
end
end
end


LNT = [];
for i = 1:26,


POT = -200;
PESO = 0; % Usado para calcular la media geométrica de la banda crítica.
for k = UA(LBC(i,1),1):UA(LBC(i+1,1),1)-1,
if (BS(k) == 0) % Bandera de componente no examinada = 0.
POT = 10*log10(10^(POT/10)+10^(F(k)/10));
PESO = PESO+10^(F(k)/10)*(UA(MAP(k),2)-i);
BS(k) = 3; % Bandera de componente irrelevante = 3.
end
end

if (POT <= -200)
IND = round(mean(UA(LBC(i,1),1)+UA(LBC(i+1,1),1)));
else
IND = UA(LBC(i,1),1)+round(PESO/10^(POT/10)*...
(UA(LBC(i+1,1),1)-UA(LBC(i,1),1)));
end


if (IND<1)
IND = 1;
end
if (IND>512)
IND = 512;
end

if (BS(IND) == 1)
IND = IND+1;
end

LNT(i,1) = IND;
LNT(i,2) = POT;
BS(IND) = 2;

end

elseif sampling_frequency == 2
BS = zeros(512,1);


LML = [];
c = 1;
for k = 3:500,
if (F(k)>F(k-1) & F(k)>=F(k+1))
LML(c,1) = k;
LML(c,2) = F(k);
c = c+1;
end
end


LT = [];
c = 1;
if not(isempty(LML))
for i = 1:length(LML(:,1)),
k = LML(i,1);
tonal = 1;


if (2<k & k<63)
J = [-2,2];
elseif (63<=k & k<127)
J = [-3,-2,2,3];
elseif (127<=k & k<255)
J = [-6:-2,2:6];
elseif (255<=k & k<=500)
J = [-12:-2,2:12];
else
tonal = 0;
end


for j = J,
tonal = tonal & (F(k)-F(k+j) >= 7);
end


if tonal
LT(c,1) = k;
LT(c,2) = 10*log10(10^(F(k-1)/10)+10^(F(k)/10)+10^(F(k+1)/10));
BS(k) = 1; % Bandera de componente tonal = 1.
for j = [J,-1,1],
BS(k+j) = 3; % Bandera de componente irrelevante = 3.
end
c = c+1;
end
end
end


LNT = [];
for i = 1:24,


POT = -200;
PESO = 0; % Usado para calcular la media geométrica de la banda crítica.
for k = UA(LBC(i,1),1):UA(LBC(i+1,1),1)-1,
if (BS(k) == 0) % Bandera de componente no examinada = 0.
POT = 10*log10(10^(POT/10)+10^(F(k)/10));
PESO = PESO+10^(F(k)/10)*(UA(MAP(k),2)-i);
BS(k) = 3; % Bandera de componente irrelevante = 3.
end
end


if (POT <= -200)
IND = round(mean(UA(LBC(i,1),1)+UA(LBC(i+1,1),1)));
else
IND = UA(LBC(i,1),1)+round(PESO/10^(POT/10)*...
(UA(LBC(i+1,1),1)-UA(LBC(i,1),1)));
end


if (IND<1)
IND = 1;
end
if (IND>512)
IND = 512;
end


if (BS(IND) == 1)
IND = IND+1;
end


LNT(i,1) = IND;
LNT(i,2) = POT;
BS(IND) = 2;

end
end

------------------------------------------

Perdon por pegar semejante parrafada, el problema es el siguiente.
La variable sampling_frequency se la meto a la funcion desde un programa principal exterior. El valor qu etoma dicha variable entra bien en la funcion ya que ya lo he comprobado. El problema es que le meta un 0, 1 o 2 siempre me entra en el primer if aunque le meta un dos y no se porque.
Gracias, ciao.
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

RE:problema en funcion

Publicado por oscar (15 intervenciones) el 24/04/2008 17:09:41
Ya esta solucionado, solo habia q ponerlo entre parentesis el (1 | 2) del q se hacia el if y ya esta. Como en otras casos se puede pomner sin parentesis y funciona.... pues me habia 'colao' yo.
Un saludo, ciao
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

RE:problema en funcion

Publicado por oscar (15 intervenciones) el 24/04/2008 17:10:54
Ya esta solucionado, solo habia q ponerlo entre parentesis el (1 | 2) del q se hacia el if y ya esta. Como en otras casos se puede pomner sin parentesis y funciona.... pues me habia 'colao' yo.
Un saludo, ciao
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

RE:problema en funcion

Publicado por oscar (15 intervenciones) el 24/04/2008 17:11:17
Ya esta solucionado, solo habia q ponerlo entre parentesis el (1 | 2) del q se hacia el if y ya esta. Como en otras casos se puede pomner sin parentesis y funciona.... pues me habia 'colao' yo.
Un saludo, ciao
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

RE:problema en funcion

Publicado por oscar (15 intervenciones) el 24/04/2008 17:12:43
Ya esta solucionado, solo habia q ponerlo entre parentesis el (1 | 2) del q se hacia el if y ya esta. Como en otras casos se puede pomner sin parentesis y funciona.... pues me habia 'colao' yo.
Un saludo, ciao
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

RE:problema en funcion

Publicado por oscar (15 intervenciones) el 24/04/2008 21:07:36
perdon or responder 4 veces pero tenia un poco chunga la conexion. A ver si alguien me puede ecir como hacer el if porque con los parentesis lo q he conseguido es que no he entre en ninguno y no se que hacer.
Gracias, ciao.
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

RE:problema en funcion

Publicado por Kike (304 intervenciones) el 25/04/2008 01:13:53
Tal vez así:

if sampling_frequency == 0 || sampling_frequency == 1
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

RE:problema en funcion

Publicado por oscar (15 intervenciones) el 25/04/2008 11:25:14
Gracias Kike pero no, me sale el siguiente error

??? Error: File: D:UNIVERSIDADproyecto2008Componentes_tonales.m Line: 26 Column: 29
Expected a variable, function, or constant, found "|".

Pero lo he solucionado poniendo un 'else' en lugar del 'elseif sampling_frequency == 2' y restringiendo la entrada a la funcion para que solo pueda entrar un 0 un 1 o un 2.

Un saludo, ciao
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