Main Content

fi

Crear un objeto numérico de punto fijo

Descripción

Para asignar un tipo de datos de punto fijo a un número o variable, cree un objeto fi mediante el constructor fi. Puede especificar atributos numéricos y reglas matemáticas en el constructor o por medio de los objetos numerictype y fimath.

Creación

Descripción

ejemplo

a = fi devuelve un objeto fi con signo y sin valor, con una longitud de palabra de 16 bits y una longitud de fracción de 15 bits.

ejemplo

a = fi(v) devuelve un objeto fi con signo y con valor v, con una longitud de palabra de 16 bits y una longitud de fracción de máxima precisión.

ejemplo

a = fi(v,s) devuelve un objeto fi con valor v, representación de signo s, con una longitud de palabra de 16 bits y una longitud de fracción de máxima precisión.

ejemplo

a = fi(v,s,w) devuelve un objeto fi con valor v, representación de signo s y longitud de palabra w.

ejemplo

a = fi(v,s,w,f) devuelve un objeto fi con valor v, representación de signo s, longitud de palabra w y longitud de fracción f.

ejemplo

a = fi(v,s,w,slope,bias) devuelve un objeto fi con valor v, representación de signo s, slope y bias.

ejemplo

a = fi(v,s,w,slopeadjustmentfactor,fixedexponent,bias) devuelve un objeto fi con valor v, representación de signo s, slopeadjustmentfactor, fixedexponent y bias.

ejemplo

a = fi(v,T) devuelve un objeto fi con valor v y numerictype T.

ejemplo

a = fi(___,F) devuelve un objeto fi con fimath F.

ejemplo

a = fi(___,Name,Value) devuelve un objeto fi con valores de propiedad especificados por uno o más argumentos de par nombre-valor.

Argumentos de entrada

expandir todo

Valor del objeto fi, especificado como escalar, vector, matriz o arreglo multidimensional.

El valor del objeto fi devuelto es el valor de la entrada v cuantizado al tipo de datos especificado en el constructor fi. Cuando la entrada v es un valor no doble y no se especifica la longitud de palabra o la longitud de fracción, el objeto fi devuelto conserva el numerictype de la entrada. Para ver un ejemplo, consulte Crear un objeto fi a partir de un valor no doble.

Puede especificar los valores no finitos -Inf, Inf y NaN como valor solo si especifica completamente el numerictype del objeto fi. Cuando fi se especifica como un numerictype de punto fijo,

  • NaN equivale a 0.

  • Cuando la propiedad 'OverflowAction' del objeto fi se establece en 'Wrap', -Inf e Inf se asignan a 0.

  • Cuando la propiedad 'OverflowAction' del objeto fi se establece en 'Saturate', Inf se asigna al mayor valor representable y -Inf se asigna al menor valor representable.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | fi

Representación de signo del objeto fi, especificado como un 1 (true) o 0 (false) numérico o lógico. Un valor de 1 (true) indica un tipo de datos con signo. Un valor de 0 (false) indica un tipo de datos sin signo.

Tipos de datos: logical

Longitud de palabra en bits del objeto fi, especificada como un entero escalar positivo.

El objeto fi tiene un límite de longitud de palabra de 65535 bits.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Longitud de fracción en bits del valor entero almacenado del objeto fi, especificado como un entero escalar.

Si no se especifica una longitud de fracción, el objeto fi utiliza automáticamente la longitud de fracción que proporciona la máxima precisión evitando el desbordamiento para el valor, la longitud de palabra y representación de signo especificados.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Pendiente de escalado del objeto fi, especificado como un escalar positivo.

Esta ecuación representa el valor real de un número escalado en base a pendiente y sesgo.

real-world value=(slope×integer)+bias

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Sesgo de escalado del objeto fi, especificado como un escalar.

Esta ecuación representa el valor real de un número escalado en base a pendiente y sesgo.

real-world value=(slope×integer)+bias

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Factor de ajuste de la pendiente del objeto fi, especificado como un escalar mayor o igual que 1 y menor que 2.

La siguiente ecuación demuestra la relación entre la pendiente, el exponente fijo y el factor de ajuste de la pendiente.

slope=slope adjustment factor×2fixed exponent

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Exponente fijo del objeto fi, especificado como un escalar.

La siguiente ecuación demuestra la relación entre la pendiente, el exponente fijo y el factor de ajuste de la pendiente.

slope=slope adjustment factor×2fixed exponent

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Propiedades de los tipos numéricos del objeto fi, especificadas como un objeto numerictype.

Propiedades matemáticas de punto fijo del objeto fi, especificadas como un objeto fimath.

Propiedades

El objeto fi tiene tres tipos de propiedades:

Puede establecer estas propiedades al crear un objeto fi. Utilice las propiedades de datos para acceder a los datos de un objeto fi. Las propiedades fimath y numerictype son, por transitividad, también propiedades del objeto fi. Las propiedades fimath determinan las reglas para realizar operaciones aritméticas de punto fijo en objetos fi. El objeto numerictype contiene todos los atributos de escalado y tipo de datos de un objeto de punto fijo.

Ejemplos

contraer todo

Cree un objeto fi con el constructor predeterminado. El constructor devuelve un objeto fi con signo y sin valor, con una longitud de palabra de 16 bits y una longitud de fracción de 15 bits.

a = fi
a = 

[]

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 15

Cree un objeto fi con signo y un valor de pi, una longitud de palabra de 16 bits y una longitud de fracción de máxima precisión. La longitud de la fracción se ajusta automáticamente para lograr la máxima precisión posible sin desbordamiento.

a = fi(pi)
a = 
    3.1416

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13

Cree un objeto fi sin signo y con un valor de pi. Cuando se especifica solo el valor y representación de signo del objeto fi, la longitud de palabra es, de forma predeterminada, de 16 bits con la longitud de fracción de máxima precisión.

a = fi(pi,0)
a = 
    3.1416

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 16
        FractionLength: 14

Cree un objeto fi con signo con una longitud de palabra de 8 bits y una longitud de fracción de máxima precisión. En este ejemplo, la longitud de fracción de a es 5 porque se necesitan tres bits para representar la parte entera del valor cuando el tipo de datos es con signo.

a = fi(pi,1,8)
a = 
    3.1562

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 8
        FractionLength: 5

Si el objeto fi no tiene signo, solo se necesitan dos bits para representar la parte entera, lo que deja seis bits fraccionarios.

b = fi(pi,0,8)
b = 
    3.1406

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 8
        FractionLength: 6

Cree un objeto fi con signo con un valor de pi, una longitud de palabra de 8 bits y una longitud de fracción de 3 bits.

a = fi(pi,1,8,3)
a = 
    3.1250

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 8
        FractionLength: 3

Cree un arreglo de objetos fi con una longitud de palabra de 16 bits y una longitud de fracción de 12 bits.

a = fi((magic(3)/10),1,16,12)
a = 
    0.8000    0.1001    0.6001
    0.3000    0.5000    0.7000
    0.3999    0.8999    0.2000

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 12

El valor real de un número escalado en base a pendiente y sesgo se representa mediante

real world value=(slope×integer)+bias.

Para crear un objeto fi que utilice escalado de pendiente y sesgo, incluya los argumentos slope y bias después de la longitud de palabra en el constructor. Por ejemplo, cree un objeto fi con una pendiente de 3 y un sesgo de 2.

a = fi(pi,1,16,3,2)
a = 
     2

          DataTypeMode: Fixed-point: slope and bias scaling
            Signedness: Signed
            WordLength: 16
                 Slope: 3
                  Bias: 2

La propiedad DataTypeMode del objeto fi a es Fixed-point: slope and bias scaling.

También puede especificar el factor de ajuste de la pendiente y el exponente fijo donde

slope = slopeadjustmentfactor× 2fixedexponent.

Por ejemplo, cree un objeto fi con un factor de ajuste de pendiente de 1.5, un exponente fijo de 1 y un sesgo de 2.

a = fi(pi,1,16,1.5,1,2)
a = 
     2

          DataTypeMode: Fixed-point: slope and bias scaling
            Signedness: Signed
            WordLength: 16
                 Slope: 3
                  Bias: 2

Un objeto numerictype contiene toda la información del tipo de datos de un objeto fi. Las propiedades numerictype también son propiedades de los objetos fi.

Puede crear un objeto fi que utilice todas las propiedades de un objeto numerictype existente especificando el objeto numerictype en el constructor fi.

T = numerictype(0,24,16)
T =


          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 24
        FractionLength: 16
a = fi(pi,T)
a = 
    3.1416

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 24
        FractionLength: 16

Los atributos aritméticos de un objeto fi se definen mediante un objeto fimath que se adjunta a dicho objeto fi.

Cree un objeto fimath y especifique las propiedades OverflowAction, RoundingMethod y ProductMode.

F = fimath('OverflowAction','Wrap',...
    'RoundingMethod','Floor',...
    'ProductMode','KeepMSB')
F = 
        RoundingMethod: Floor
        OverflowAction: Wrap
           ProductMode: KeepMSB
     ProductWordLength: 32
               SumMode: FullPrecision

Cree un objeto fi y especifique el objeto fimath F en el constructor.

a = fi(pi,F)
a = 
    3.1415

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13

        RoundingMethod: Floor
        OverflowAction: Wrap
           ProductMode: KeepMSB
     ProductWordLength: 32
               SumMode: FullPrecision

Utilice la función removefimath para eliminar el objeto fimath asociado y restablecer los valores predeterminados de la configuración matemática.

a = removefimath(a)
a = 
    3.1415

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13

Cuando el argumento de entrada v de un objeto fi no es un doble y no se especifican las propiedades de longitud de palabra o longitud de fracción, el objeto fi devuelto conserva el tipo numérico de la entrada.

Crear un objeto fi a partir de un entero predefinido

Cuando la entrada es un entero predefinido, los atributos de punto fijo coinciden con los atributos del tipo del entero.

v1 = uint32(5);
a1 = fi(v1)
a1 = 
     5

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 32
        FractionLength: 0
v2 = int8(5);
a2 = fi(v2)
a2 = 
     5

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 8
        FractionLength: 0

Crear un objeto fi a partir de un objeto fi

Cuando el valor de entrada es un objeto fi, la salida utiliza la misma longitud de palabra, longitud de fracción y representación de signo que el objeto fi de entrada.

v = fi(pi,1,24,12);
a = fi(v)
a = 
    3.1416

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 24
        FractionLength: 12

Crear un objeto fi a partir de un valor lógico

Cuando el valor de entrada es lógico, la propiedad DataTypeMode del objeto fi de salida es Boolean.

v = true;
a = fi(v)
a = 
   1

          DataTypeMode: Boolean

Crear un objeto fi a partir de un valor simple

Cuando el valor de entrada es simple, la propiedad DataTypeMode de la salida es Single.

v = single(pi);
a = fi(v)
a = 
    3.1416

          DataTypeMode: Single

Puede establecer las propiedades de fimath, como los modos de redondeo y desbordamiento, durante la creación del objeto fi.

a = fi(pi,'RoundingMethod','Floor',...
    'OverflowAction','Wrap')
a = 
    3.1415

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13

        RoundingMethod: Floor
        OverflowAction: Wrap
           ProductMode: FullPrecision
               SumMode: FullPrecision

Las propiedades RoundingMethod y OverflowAction son propiedades del objeto fimath. Cuando se especifican estas propiedades en el constructor fi, se asocia un objeto fimath local con el objeto fi.

Utilice la función removefimath para eliminar el objeto local fimath y restablecer las propiedades matemáticas a sus valores predeterminados.

a = removefimath(a)
a = 
    3.1415

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13

Estos ejemplos muestran cómo utilizar el ajuste DataTypeOverride del objeto fipref para anular los objetos fi con valores dobles, simples o dobles escalados. El objeto fipref define los atributos de visualización y registro de todos los objetos fi.

Guarde los ajustes de fipref actuales para restaurarlos más adelante.

fp = fipref;
initialDTO = fp.DataTypeOverride;

Cree un objeto fi con la configuración predeterminada y la configuración de fipref original.

a = fi(pi)
a = 
    3.1416

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13

Utilice el objeto fipref para activar la anulación del tipo de datos a valores dobles.

fipref('DataTypeOVerride','TrueDoubles')
ans = 
                NumberDisplay: 'RealWorldValue'
           NumericTypeDisplay: 'full'
                FimathDisplay: 'full'
                  LoggingMode: 'Off'
             DataTypeOverride: 'TrueDoubles'
    DataTypeOverrideAppliesTo: 'AllNumericTypes'

Cree un objeto fi sin especificar la propiedad DataTypeOverride para que utilice la configuración de anulación de tipo de datos especificada mediante fipref.

a = fi(pi)
a = 
    3.1416

          DataTypeMode: Double

Cree otro objeto fi y establezca su configuración de DataTypeOverride en off para que ignore la configuración de anulación de tipo de datos del objeto fipref.

b = fi(pi,'DataTypeOverride','Off')
b = 
    3.1416

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13

Restablezca la configuración fipref guardada al inicio del ejemplo.

fp.DataTypeOverride = initialDTO;

Para utilizar los valores no numéricos -Inf, Inf y NaN como valores de punto fijo con fi, debe especificar completamente el tipo numérico del objeto de punto fijo. No se admite el escalado automático de máxima precisión para estos valores.

Saturar en desbordamiento

Cuando el tipo numérico del objeto fi se especifica para saturar en desbordamiento, Inf se asigna al mayor valor representable del tipo numérico especificado y -Inf se asigna al menor valor representable. NaN equivale a cero.

x = [-inf nan inf];
a = fi(x,1,8,0,'OverflowAction','Saturate')
b = fi(x,0,8,0,'OverflowAction','Saturate')
a = 

  -128     0   127

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 8
        FractionLength: 0

        RoundingMethod: Nearest
        OverflowAction: Saturate
           ProductMode: FullPrecision
               SumMode: FullPrecision

b = 

     0     0   255

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 8
        FractionLength: 0

        RoundingMethod: Nearest
        OverflowAction: Saturate
           ProductMode: FullPrecision
               SumMode: FullPrecision

Envolver en desbordamiento

Cuando el tipo numérico del objeto fi se especifica para envolver en desbordamiento, -Inf, Inf y NaN equivalen a cero.

x = [-inf nan inf];
a = fi(x,1,8,0,'OverflowAction','Wrap')
b = fi(x,0,8,0,'OverflowAction','Wrap')
a = 

     0     0     0

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 8
        FractionLength: 0

        RoundingMethod: Nearest
        OverflowAction: Wrap
           ProductMode: FullPrecision
               SumMode: FullPrecision

b = 

     0     0     0

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 8
        FractionLength: 0

        RoundingMethod: Nearest
        OverflowAction: Wrap
           ProductMode: FullPrecision
               SumMode: FullPrecision

Sugerencias

  • Utilice el objeto fipref para controlar las preferencias de visualización, registro y anulación del tipo de datos de los objetos fi.

Capacidades ampliadas

Generación de código HDL
Genere código Verilog y VHDL para diseños FPGA y ASIC mediante HDL Coder™.

Historial de versiones

Introducido antes de R2006a

expandir todo