Matlab - Como hacer esta función sin utilizar bucles

 
Vista:

Como hacer esta función sin utilizar bucles

Publicado por Roberto (3 intervenciones) el 12/10/2020 19:05:18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function y = quantificador(x,nbits)
% Comprueba si hay saturación y si la hay, recorta al rango [-1,1]
for n = 1:length(x)
    if(x(1,n)<-1)
        x(1,n) = -1;
    elseif(x(1,n)>1)
         x(1,n) = 1;
    end
end
% Realiza la cuantificacion. La salida es un número entero
delta = 1/(2^(nbits-1));
y = floor((x/delta)+0.5);
 
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
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como hacer esta función sin utilizar bucles

Publicado por Daniel (354 intervenciones) el 13/10/2020 09:33:50
Hola,

Simplemente cambia el bucle por estas dos líneas

1
2
x(x < -1) = -1;
x(x > 1) = 1;

Saludos,
Daniel Rodríguez
Analytics Lane
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 Jon
Val: 354
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Como hacer esta función sin utilizar bucles

Publicado por Jon (161 intervenciones) el 13/10/2020 09:38:50
Hola Roberto,

Para evitar el bucle For en ese código, MATLAB facilita la función find para buscar una condición concreta dentro de un array. Aquí tienes la solución con un ejemplo que funciona:

1
2
3
4
5
x = [0.4 -0.6 1.3 0.9 2.1 -1.2 0.08 1.5];
pos_menor = find(x < -1);
pos_mayor = find(x > 1);
x(pos_menor) = -1;
x(pos_mayor) = 1;

Un saludo,

Jon
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