Iniciar sesiónCrear cuenta

# 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
0
Otras secciones de LWP con contenido de Matlab

## 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
0

## 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
0

## 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
0

## 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
0

## 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
0

## 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
0

## 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
0