Initial commit: TC264 smart car project with IPS200 menu system
- IPS200 display menu with real-time status and parameter settings - Camera image processing and line tracking - IMU attitude solution and PID control - WiFi SPI oscilloscope data transmission
This commit is contained in:
commit
843447835d
660 files changed
+443632
No files matched your search
@@ -0,0 +1,464 @@
|
||||
/**
|
||||
* \file Ifx_AngleTrkF32.c
|
||||
* \brief Angle-tracking observer for sin/cos analog position sensor
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2019 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
*/
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// INCLUDES
|
||||
|
||||
#include "Ifx_AngleTrkF32.h"
|
||||
#include <math.h>
|
||||
#include "string.h"
|
||||
#include "Ifx_LutAtan2F32.h"
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// LOCAL DEFINITIONS
|
||||
|
||||
#define IFX_ANGLETRKF32_ATAN2F Ifx_LutAtan2F32_float32
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// LOCAL FUNCTION PROTOTYPES
|
||||
|
||||
void Ifx_AngleTrkF32_setUserSampling(Ifx_AngleTrkF32 *aObsv, float32 Ts);
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// GLOBAL VARIABLES
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// LOCAL VARIABLES
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// LOCAL FUNCTION IMPLEMENTATIONS
|
||||
|
||||
IFX_INLINE float32 Ifx_AngleTrkF32_bound(float32 angle, float32 periodPerRotation)
|
||||
{
|
||||
IFX_UNUSED_PARAMETER(periodPerRotation);
|
||||
float32 fullPeriod = 2 * IFX_PI;
|
||||
|
||||
if (angle >= (fullPeriod / 2))
|
||||
{
|
||||
angle = angle - fullPeriod;
|
||||
}
|
||||
else if (angle < (-fullPeriod / 2))
|
||||
{
|
||||
angle = angle + fullPeriod;
|
||||
}
|
||||
else
|
||||
{}
|
||||
|
||||
return angle;
|
||||
}
|
||||
|
||||
|
||||
IFX_INLINE float32 Ifx_AngleTrkF32_boundInput(float32 input)
|
||||
{
|
||||
return Ifx_AngleTrkF32_bound(input, 1);
|
||||
}
|
||||
|
||||
|
||||
float32 round_f(float32 val)
|
||||
{
|
||||
/*lint -e632 -e633 -e524*/
|
||||
sint32 val_i = (sint32)val;
|
||||
|
||||
/*lint +e632 +e633 +e524*/
|
||||
if ((val - (float32)val_i) > 0.5)
|
||||
{
|
||||
val = (float32)(val_i + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
val = (float32)val_i;
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// PUBLIC FUNCTION IMPLEMENTATIONS
|
||||
#define ATO_T (15e-3f)
|
||||
#define ATO_K (39.05f)
|
||||
#define ATO_PSI (1.5f * IFX_PI)
|
||||
|
||||
void Ifx_AngleTrkF32_setControlGains(Ifx_AngleTrkF32_CfgData *cfgData, float32 K, float32 T, float32 psi)
|
||||
{
|
||||
cfgData->kp = ((2 * K) + (psi * psi) + 1) / (T * T);
|
||||
cfgData->ki = K * ((psi * psi) + 1) / (T * T * T);
|
||||
cfgData->kd = (K + 2) / T;
|
||||
}
|
||||
|
||||
|
||||
/** \brief Fill config with default values */
|
||||
void Ifx_AngleTrkF32_initConfig(Ifx_AngleTrkF32_Config *config, sint16 *sinIn, sint16 *cosIn)
|
||||
{
|
||||
Ifx_AngleTrkF32_CfgData cfgData;
|
||||
Ifx_AngleTrkF32_setControlGains(&cfgData, ATO_K, ATO_T, ATO_PSI);
|
||||
config->kp = cfgData.kp;
|
||||
config->ki = cfgData.ki;
|
||||
config->kd = cfgData.kd;
|
||||
config->sinIn = sinIn;
|
||||
config->cosIn = cosIn;
|
||||
config->errorThreshold = 5.0f / 180 * IFX_PI;
|
||||
config->sqrAmplMax = (sint32)((1.01f * 1.01f) * 2048);
|
||||
config->sqrAmplMin = (sint32)((0.99f * 0.99f) * 2048);
|
||||
config->speedLpfFc = 100;
|
||||
config->periodPerRotation = 1;
|
||||
config->reversed = FALSE;
|
||||
config->offset = 0;
|
||||
config->resolution = (1UL << 12);/** \brief 12-bit default resolution */
|
||||
}
|
||||
|
||||
|
||||
void Ifx_AngleTrkF32_setUserSampling(Ifx_AngleTrkF32 *aObsv, float32 Ts)
|
||||
{
|
||||
aObsv->base.Ts = Ts;
|
||||
aObsv->halfTs = aObsv->base.Ts / 2.0F;
|
||||
}
|
||||
|
||||
|
||||
/** \brief Initialize the Angle Tracking object
|
||||
* \param aObsv Pointer to the Ifx_AngleTrkF32 object
|
||||
* \param config Pointer to the configuration data
|
||||
* \param Ts sampling period in seconds
|
||||
*/
|
||||
void Ifx_AngleTrkF32_init(Ifx_AngleTrkF32 *aObsv, const Ifx_AngleTrkF32_Config *config, float32 Ts)
|
||||
{
|
||||
aObsv->base.offset = config->offset;
|
||||
aObsv->base.resolution = config->resolution;
|
||||
aObsv->base.reversed = config->reversed;
|
||||
aObsv->base.Ts = Ts;
|
||||
aObsv->base.rawPosition = 0;
|
||||
aObsv->base.direction = IfxStdIf_Pos_Dir_unknown;
|
||||
aObsv->base.turn = 0;
|
||||
aObsv->base.status.status = 0;
|
||||
aObsv->base.periodPerRotation = config->periodPerRotation;
|
||||
aObsv->base.positionConst = 1.0 / (float32)aObsv->base.resolution * 2.0 * IFX_PI;
|
||||
|
||||
aObsv->cfgData.kd = config->kd;
|
||||
aObsv->cfgData.ki = config->ki;
|
||||
aObsv->cfgData.kp = config->kp;
|
||||
aObsv->cfgData.errorThreshold = config->errorThreshold;
|
||||
aObsv->cfgData.sqrAmplMax = config->sqrAmplMax;
|
||||
aObsv->cfgData.sqrAmplMin = config->sqrAmplMin;
|
||||
aObsv->sinIn = config->sinIn;
|
||||
aObsv->cosIn = config->cosIn;
|
||||
|
||||
if (!__neqf(config->kp, 0) && !__neqf(config->ki, 0) && !__neqf(config->kp, 0))
|
||||
{ /* all gains are zero, use default */
|
||||
/* FIXME might not be requied as set by Ifx_AngleTrkF32_initConfig() */
|
||||
Ifx_AngleTrkF32_setControlGains(&aObsv->cfgData, ATO_K, ATO_T, ATO_PSI);
|
||||
}
|
||||
|
||||
Ifx_AngleTrkF32_setUserSampling(aObsv, Ts);
|
||||
aObsv->angleErr = 0.0F;
|
||||
aObsv->angleEst = 0.0F;
|
||||
aObsv->accelEst = 0.0F;
|
||||
aObsv->speedEstA = 0.0F;
|
||||
aObsv->speedEstB = 0.0F;
|
||||
aObsv->angleRef = 0.0F;
|
||||
{
|
||||
#if IFX_CFG_ANGLETRKF32_SPEED_FILTER
|
||||
Ifx_LowPassPt1F32_Config lpfConfig;
|
||||
lpfConfig.gain = 1.0F;
|
||||
lpfConfig.cutOffFrequency = (2 * IFX_PI * config->speedLpfFc);
|
||||
lpfConfig.samplingTime = Ts;
|
||||
Ifx_LowPassPt1F32_init(&aObsv->speedLpf, &lpfConfig);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** \brief Step function of Ifx_AngleTrkF32 should be called at every sampling period provided
|
||||
* during initialisation (call to Ifx_AngleTrkF32_init()).
|
||||
*
|
||||
* \note This function is automatically called by Ifx_AngleTrkF32_update()
|
||||
* \param aObsv Pointer to the Ifx_AngleTrkF32 object
|
||||
* \param sinIn sine input signal. The offset shall be zero.
|
||||
* \param cosIn cosine input signal. The offset shall be zero.
|
||||
* \param phase phase of input signal.
|
||||
* \note This function returns the angular position in radians
|
||||
* \note The amplitude of both sinIn and cosIn signal shall be the same.
|
||||
*/
|
||||
float32 Ifx_AngleTrkF32_step(Ifx_AngleTrkF32 *aObsv, sint16 sinIn, sint16 cosIn, float32 phase)
|
||||
{
|
||||
float32 angleRef, angleEst, dAccel, dSpeed, dAngle;
|
||||
|
||||
if (aObsv->base.reversed != FALSE)
|
||||
{
|
||||
angleRef = IFX_ANGLETRKF32_ATAN2F((float32)cosIn, (float32)sinIn);
|
||||
}
|
||||
else
|
||||
{
|
||||
angleRef = IFX_ANGLETRKF32_ATAN2F((float32)sinIn, (float32)cosIn);
|
||||
}
|
||||
|
||||
aObsv->angleAtan = angleRef;
|
||||
angleRef = angleRef + phase;
|
||||
|
||||
aObsv->angleRef = angleRef;
|
||||
|
||||
// Acceleration, zero-order-hold integrator:
|
||||
dAccel = aObsv->cfgData.ki * aObsv->angleErr;
|
||||
aObsv->accelEst = aObsv->accelEst + (dAccel * aObsv->base.Ts);
|
||||
|
||||
// Speed, zero-order-hold integrator:
|
||||
dSpeed = ((aObsv->cfgData.kp * aObsv->angleErr) + aObsv->accelEst);
|
||||
aObsv->speedEstA = aObsv->speedEstA + (dSpeed * aObsv->base.Ts);
|
||||
|
||||
// Angle, first-order-hold integrator:
|
||||
dAngle = ((aObsv->cfgData.kd * aObsv->angleErr) + aObsv->speedEstA);
|
||||
angleEst = aObsv->angleEst + ((dAngle + aObsv->speedEstB) * aObsv->halfTs);
|
||||
aObsv->speedEstB = dAngle;
|
||||
|
||||
aObsv->angleEst = Ifx_AngleTrkF32_boundInput(angleEst);
|
||||
|
||||
// Error, is calculated here to compensate one period delay
|
||||
aObsv->angleErr = Ifx_AngleTrkF32_boundInput(aObsv->angleRef - aObsv->angleEst);
|
||||
|
||||
aObsv->base.direction = aObsv->speedEstB > 0 ? IfxStdIf_Pos_Dir_forward : IfxStdIf_Pos_Dir_backward;
|
||||
|
||||
#if IFX_CFG_ANGLETRKF32_SPEED_FILTER
|
||||
// Filter speed:
|
||||
Ifx_LowPassPt1F32_do(&aObsv->speedLpf, aObsv->speedEstB);
|
||||
#endif
|
||||
|
||||
return aObsv->angleEst;
|
||||
}
|
||||
|
||||
|
||||
/** \brief Set the position offset (in ticks)
|
||||
* \param aObsv Pointer to the Ifx_AngleTrkF32 object
|
||||
* \param offset Position offset in ticks
|
||||
*/
|
||||
void Ifx_AngleTrkF32_setOffset(Ifx_AngleTrkF32 *aObsv, IfxStdIf_Pos_RawAngle offset)
|
||||
{
|
||||
Ifx_AngleTrkF32_PosIf *base = &aObsv->base;
|
||||
base->offset = offset;
|
||||
}
|
||||
|
||||
|
||||
/** \brief Update the status flags.
|
||||
* \param aObsv Pointer to the Ifx_AngleTrkF32 object
|
||||
* \param sinIn Sinus value
|
||||
* \param cosIn Cosinus value
|
||||
* \note This function is automatically called by Ifx_AngleTrkF32_update()
|
||||
*/
|
||||
void Ifx_AngleTrkF32_updateStatus(Ifx_AngleTrkF32 *aObsv, sint16 sinIn, sint16 cosIn)
|
||||
{
|
||||
Ifx_AngleTrkF32_PosIf *base = &aObsv->base;
|
||||
sint32 sqrAmpl = ((sint32)sinIn * (sint32)sinIn) + ((sint32)cosIn * (sint32)cosIn);
|
||||
base->status.B.signalLoss = (sqrAmpl < aObsv->cfgData.sqrAmplMin);
|
||||
base->status.B.signalDegradation = (sqrAmpl > aObsv->cfgData.sqrAmplMax);
|
||||
base->status.B.trackingLoss = __absf(aObsv->angleErr) > aObsv->cfgData.errorThreshold;
|
||||
}
|
||||
|
||||
|
||||
/** \brief Update the object directly from its analog input
|
||||
* \param aObsv Pointer to the Ifx_AngleTrkF32 object
|
||||
*/
|
||||
void Ifx_AngleTrkF32_update(Ifx_AngleTrkF32 *aObsv)
|
||||
{
|
||||
Ifx_AngleTrkF32_PosIf *base = &aObsv->base;
|
||||
float32 angleEst = Ifx_AngleTrkF32_step(aObsv, *aObsv->sinIn, *aObsv->cosIn, 0);
|
||||
|
||||
IfxStdIf_Pos_RawAngle newPosition = (IfxStdIf_Pos_RawAngle)(angleEst * (aObsv->base.resolution / 2) / IFX_PI);
|
||||
newPosition = newPosition & (aObsv->base.resolution - 1);
|
||||
base->rawPosition = newPosition;
|
||||
|
||||
Ifx_AngleTrkF32_updateStatus(aObsv, *aObsv->sinIn, *aObsv->cosIn);
|
||||
}
|
||||
|
||||
|
||||
/** \brief Returns the actual position
|
||||
* \param aObsv Pointer to the Ifx_AngleTrkF32 object
|
||||
* \note This function returns the angular position in ticks [0 .. Ifx_AngleTrkF32.base.resolution-1] (represents 0..360 degree)
|
||||
*/
|
||||
IfxStdIf_Pos_RawAngle Ifx_AngleTrkF32_getRawPosition(Ifx_AngleTrkF32 *aObsv)
|
||||
{
|
||||
Ifx_AngleTrkF32_PosIf *base = &aObsv->base;
|
||||
return base->rawPosition;
|
||||
}
|
||||
|
||||
|
||||
/** \brief Returns the Speed
|
||||
* \param aObsv Pointer to the Ifx_AngleTrkF32 object
|
||||
*/
|
||||
float32 Ifx_AngleTrkF32_getSpeed(Ifx_AngleTrkF32 *aObsv)
|
||||
{
|
||||
#if !IFX_CFG_ANGLETRKF32_FILTERED_SPEED
|
||||
return aObsv->speedEstB; /* note: using speedEstB has better dynamic */
|
||||
#else
|
||||
return aObsv->speedLpf.out; /* note: using filtered speed has less ripples */
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
|
||||
float32 Ifx_AngleTrkF32_getAbsolutePosition(Ifx_AngleTrkF32 *driver)
|
||||
{
|
||||
return ((float32)driver->base.turn + (float32)driver->base.rawPosition / (float32)driver->base.resolution) * 2.0 * IFX_PI;
|
||||
}
|
||||
|
||||
|
||||
IfxStdIf_Pos_Dir Ifx_AngleTrkF32_getDirection(Ifx_AngleTrkF32 *driver)
|
||||
{
|
||||
return driver->base.direction;
|
||||
}
|
||||
|
||||
|
||||
IfxStdIf_Pos_Status Ifx_AngleTrkF32_getFault(Ifx_AngleTrkF32 *driver)
|
||||
{
|
||||
return driver->base.status;
|
||||
}
|
||||
|
||||
|
||||
sint32 Ifx_AngleTrkF32_getOffset(Ifx_AngleTrkF32 *driver)
|
||||
{
|
||||
return driver->base.offset;
|
||||
}
|
||||
|
||||
|
||||
uint16 Ifx_AngleTrkF32_getPeriodPerRotation(Ifx_AngleTrkF32 *driver)
|
||||
{
|
||||
return driver->base.periodPerRotation;
|
||||
}
|
||||
|
||||
|
||||
float32 Ifx_AngleTrkF32_getPosition(Ifx_AngleTrkF32 *driver)
|
||||
{
|
||||
return (float32)driver->base.rawPosition * driver->base.positionConst;
|
||||
}
|
||||
|
||||
|
||||
float32 Ifx_AngleTrkF32_getRefreshPeriod(Ifx_AngleTrkF32 *driver)
|
||||
{
|
||||
return driver->base.Ts;
|
||||
}
|
||||
|
||||
|
||||
sint32 Ifx_AngleTrkF32_getResolution(Ifx_AngleTrkF32 *driver)
|
||||
{
|
||||
return driver->base.resolution;
|
||||
}
|
||||
|
||||
|
||||
IfxStdIf_Pos_SensorType Ifx_AngleTrkF32_getSensorType(Ifx_AngleTrkF32 *driver)
|
||||
{
|
||||
IFX_UNUSED_PARAMETER(driver);
|
||||
return IfxStdIf_Pos_SensorType_angletrk;
|
||||
}
|
||||
|
||||
|
||||
sint32 Ifx_AngleTrkF32_getTurn(Ifx_AngleTrkF32 *driver)
|
||||
{
|
||||
return driver->base.turn;
|
||||
}
|
||||
|
||||
|
||||
void Ifx_AngleTrkF32_resetFaults(Ifx_AngleTrkF32 *driver)
|
||||
{
|
||||
driver->base.status.status = 0;
|
||||
}
|
||||
|
||||
|
||||
void Ifx_AngleTrkF32_setRefreshPeriod(Ifx_AngleTrkF32 *driver, float32 updatePeriod)
|
||||
{
|
||||
driver->base.Ts = updatePeriod;
|
||||
}
|
||||
|
||||
|
||||
void Ifx_AngleTrkF32_reset(Ifx_AngleTrkF32 *driver)
|
||||
{
|
||||
driver->base.rawPosition = 0;
|
||||
driver->base.direction = IfxStdIf_Pos_Dir_unknown;
|
||||
driver->base.turn = 0;
|
||||
driver->angleErr = 0.0F;
|
||||
driver->angleEst = 0.0F;
|
||||
driver->accelEst = 0.0F;
|
||||
driver->speedEstA = 0.0F;
|
||||
driver->speedEstB = 0.0F;
|
||||
driver->angleRef = 0.0F;
|
||||
#if IFX_CFG_ANGLETRKF32_SPEED_FILTER
|
||||
Ifx_LowPassPt1F32_reset(&driver->speedLpf);
|
||||
#endif
|
||||
|
||||
driver->base.status.status = 0;
|
||||
}
|
||||
|
||||
|
||||
boolean Ifx_AngleTrkF32_stdIfPosInit(IfxStdIf_Pos *stdif, Ifx_AngleTrkF32 *driver)
|
||||
{
|
||||
/* Ensure the stdif is reset to zeros */
|
||||
memset(stdif, 0, sizeof(IfxStdIf_Pos));
|
||||
|
||||
/* Set the driver */
|
||||
stdif->driver = driver;
|
||||
|
||||
/* *INDENT-OFF* Note: this file was indented manually by the author. */
|
||||
/* Set the API link */
|
||||
stdif->onZeroIrq =(IfxStdIf_Pos_OnZeroIrq )NULL_PTR;
|
||||
stdif->getAbsolutePosition=(IfxStdIf_Pos_GetAbsolutePosition )&Ifx_AngleTrkF32_getAbsolutePosition;
|
||||
stdif->getDirection =(IfxStdIf_Pos_GetDirection )&Ifx_AngleTrkF32_getDirection;
|
||||
stdif->getFault =(IfxStdIf_Pos_GetFault )&Ifx_AngleTrkF32_getFault;
|
||||
stdif->getOffset =(IfxStdIf_Pos_GetOffset )&Ifx_AngleTrkF32_getOffset;
|
||||
stdif->getPeriodPerRotation =(IfxStdIf_Pos_GetPeriodPerRotation )&Ifx_AngleTrkF32_getPeriodPerRotation;
|
||||
stdif->getPosition =(IfxStdIf_Pos_GetPosition )&Ifx_AngleTrkF32_getPosition;
|
||||
stdif->getRawPosition =(IfxStdIf_Pos_GetRawPosition )&Ifx_AngleTrkF32_getRawPosition;
|
||||
stdif->getRefreshPeriod =(IfxStdIf_Pos_GetRefreshPeriod )&Ifx_AngleTrkF32_getRefreshPeriod;
|
||||
stdif->getResolution =(IfxStdIf_Pos_GetResolution )&Ifx_AngleTrkF32_getResolution;
|
||||
stdif->getSensorType =(IfxStdIf_Pos_GetSensorType )&Ifx_AngleTrkF32_getSensorType;
|
||||
stdif->reset =(IfxStdIf_Pos_Reset )&Ifx_AngleTrkF32_reset;
|
||||
stdif->resetFaults =(IfxStdIf_Pos_ResetFaults )&Ifx_AngleTrkF32_resetFaults;
|
||||
stdif->getSpeed =(IfxStdIf_Pos_GetSpeed )&Ifx_AngleTrkF32_getSpeed;
|
||||
stdif->update =(IfxStdIf_Pos_Update )&Ifx_AngleTrkF32_update;
|
||||
stdif->setPosition =(IfxStdIf_Pos_SetPosition )NULL_PTR;
|
||||
stdif->setRawPosition =(IfxStdIf_Pos_SetRawPosition )NULL_PTR;
|
||||
stdif->setSpeed =(IfxStdIf_Pos_SetSpeed )NULL_PTR;
|
||||
stdif->setOffset =(IfxStdIf_Pos_SetOffset )&Ifx_AngleTrkF32_setOffset;
|
||||
stdif->setRefreshPeriod =(IfxStdIf_Pos_SetRefreshPeriod )&Ifx_AngleTrkF32_setRefreshPeriod;
|
||||
stdif->getTurn =(IfxStdIf_Pos_GetTurn )&Ifx_AngleTrkF32_getTurn;
|
||||
/* *INDENT-ON* */
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -0,0 +1,309 @@
|
||||
/**
|
||||
* \file Ifx_AngleTrkF32.h
|
||||
* \brief Angle-tracking observer for sin/cos analog position sensor
|
||||
*
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_f32_angletrk Angle-Tracking Observer
|
||||
* This driver implements \ref library_srvsw_stdif_posif using 3rd order Angle-Tracking Observer algorithm.
|
||||
* \ingroup library_srvsw_sysse_math_f32
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef IFX_ANGLETRKF32_H
|
||||
#define IFX_ANGLETRKF32_H
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// INCLUDES
|
||||
|
||||
#include "StdIf/IfxStdIf_Pos.h"
|
||||
#include "SysSe/Math/Ifx_LowPassPt1F32.h"
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// CONFIGURATION DEFINES
|
||||
|
||||
#ifndef IFX_CFG_ANGLETRKF32_SPEED_FILTER
|
||||
#define IFX_CFG_ANGLETRKF32_SPEED_FILTER (1)
|
||||
#endif
|
||||
|
||||
/** \brief Specify whether the speed reading is filtered by low-pass filter or not */
|
||||
#ifndef IFX_CFG_ANGLETRKF32_FILTERED_SPEED
|
||||
#define IFX_CFG_ANGLETRKF32_FILTERED_SPEED (1)
|
||||
#endif
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// DATA STRUCTURES
|
||||
|
||||
/** \brief Angle Tracking Observer configuration */
|
||||
typedef struct
|
||||
{
|
||||
float32 kp; /**< \brief Proportional gain */
|
||||
float32 ki; /**< \brief Integrator gain */
|
||||
float32 kd; /**< \brief Derivative gain */
|
||||
float32 speedLpfFc; /**< \brief Cut-off frequency of speed low-pass filter. */
|
||||
float32 errorThreshold; /**< \brief Threshold of error value in the tracking loop */
|
||||
sint32 sqrAmplMax; /**< \brief Maximum value for square of signal amplitudes */
|
||||
sint32 sqrAmplMin; /**< \brief Minimum value for square of signal amplitudes */
|
||||
uint16 periodPerRotation; /**< \brief Number of electrical periods per mechanical rotation */
|
||||
boolean reversed; /**< \brief TRUE: reversed direction, FALSE: straight direction */
|
||||
sint32 resolution; /**< \brief Sensor resolution */
|
||||
IfxStdIf_Pos_RawAngle offset; /**< \brief Offset in ticks. [0 .. (\ref Ifx_AngleTrkF32_Config.resolution - 1)] */
|
||||
sint16 *sinIn; /**< \brief Pointer to SIN input variable */
|
||||
sint16 *cosIn; /**< \brief Pointer to COS input variable */
|
||||
} Ifx_AngleTrkF32_Config;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float32 kp; /**< \brief Proportional gain */
|
||||
float32 ki; /**< \brief Integrator gain */
|
||||
float32 kd; /**< \brief Derivative gain */
|
||||
float32 errorThreshold; /**< \brief Threshold of error value in the tracking loop */
|
||||
sint32 sqrAmplMax; /**< \brief Maximum value for square of signal amplitudes */
|
||||
sint32 sqrAmplMin; /**< \brief Minimum value for square of signal amplitudes */
|
||||
} Ifx_AngleTrkF32_CfgData;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
IfxStdIf_Pos_RawAngle rawPosition; /**< \brief raw position in ticks. \note: the value already contains the offset */
|
||||
sint32 turn; /**< \brief number of mechanical turns. FIXME to be implemented */
|
||||
IfxStdIf_Pos_Dir direction; /**< \brief rotation direction */
|
||||
IfxStdIf_Pos_Status status; /**< \brief error code (0 = no error) */
|
||||
/* configuration */
|
||||
IfxStdIf_Pos_RawAngle offset; /**< \brief raw position offset */
|
||||
boolean reversed; /**< \brief reverse direction */
|
||||
uint16 periodPerRotation; /**< \brief sensor 'electrical' periods per mechanical rotation */
|
||||
IfxStdIf_Pos_RawAngle resolution; /**< \brief resolution of this position sensor interface */
|
||||
float32 Ts; /**< \brief update period in seconds */
|
||||
float32 positionConst; /**< \brief constant for calculating mechanical position (in rad) from raw position */
|
||||
} Ifx_AngleTrkF32_PosIf;
|
||||
|
||||
/** \brief Angle Tracking Observer object */
|
||||
typedef struct
|
||||
{
|
||||
Ifx_AngleTrkF32_PosIf base;
|
||||
Ifx_AngleTrkF32_CfgData cfgData;
|
||||
sint16 *sinIn; /**< \brief Pointer to SIN input variable */
|
||||
sint16 *cosIn; /**< \brief Pointer to COS input variable */
|
||||
float32 halfTs;
|
||||
float32 angleAtan;
|
||||
float32 angleRef;
|
||||
float32 angleEst;
|
||||
float32 speedEstA;
|
||||
float32 speedEstB;
|
||||
float32 accelEst;
|
||||
float32 angleErr;
|
||||
Ifx_LowPassPt1F32 speedLpf; /**< Only used if IFX_CFG_ANGLETRKF32_SPEED_FILTER is set */
|
||||
} Ifx_AngleTrkF32;
|
||||
|
||||
/** \addtogroup library_srvsw_sysse_math_f32_angletrk
|
||||
* \{ */
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// PUBLIC FUNCTION PROTOTYPES
|
||||
|
||||
/** \name Initialisation functions
|
||||
* Example use:
|
||||
* \code
|
||||
* extern sint16 g_SinInput, g_CosInput;
|
||||
* Ifx_AngleTrkF32_Config driverConfig;
|
||||
* Ifx_AngleTrkF32 driverData;
|
||||
* Ifx_AngleTrkF32_initConfig(&driverConfig, &g_SinInput, g_CosInput);
|
||||
* driverConfig.errorThreshold = 5.0 / 180 * IFX_PI; // 5 degree error
|
||||
* driverConfig.sqrAmplMax = 1.01 * 1.01;
|
||||
* driverConfig.sqrAmplMin = 0.99 * 0.99;
|
||||
* driverConfig.speedLpfFc = 100;
|
||||
* driverConfig.periodPerRotation = 1;
|
||||
* driverConfig.reversed = FALSE;
|
||||
* driverConfig.offset = 0;
|
||||
* Ifx_AngleTrkF32_init(&driverData, &driverConfig);
|
||||
* \endcode
|
||||
* Prototypes:
|
||||
* \{ */
|
||||
IFX_EXTERN void Ifx_AngleTrkF32_init(Ifx_AngleTrkF32 *aObsv, const Ifx_AngleTrkF32_Config *config, float32 Ts);
|
||||
IFX_EXTERN void Ifx_AngleTrkF32_initConfig(Ifx_AngleTrkF32_Config *config, sint16 *sinIn, sint16 *cosIn);
|
||||
/** \} */
|
||||
|
||||
/** \name Protected functions
|
||||
* These functions are not for end-user but may be used by another driver which extends
|
||||
* the functionality of library_srvsw_sysse_math_f32_angletrk
|
||||
* \{ */
|
||||
IFX_EXTERN float32 Ifx_AngleTrkF32_step(Ifx_AngleTrkF32 *aObsv, sint16 sinIn, sint16 cosIn, float32 phase);
|
||||
IFX_EXTERN void Ifx_AngleTrkF32_updateStatus(Ifx_AngleTrkF32 *aObsv, sint16 sinIn, sint16 cosIn);
|
||||
IFX_INLINE float32 Ifx_AngleTrkF32_getLoopSpeed(Ifx_AngleTrkF32 *aObsv);
|
||||
/** \} */
|
||||
|
||||
/** \} */
|
||||
|
||||
/** \brief get the speed.
|
||||
* \param aObsv Pointer to the Ifx_AngleTrkF32 object
|
||||
*/
|
||||
IFX_INLINE float32 Ifx_AngleTrkF32_getLoopSpeed(Ifx_AngleTrkF32 *aObsv)
|
||||
{
|
||||
return aObsv->speedEstB; /* note: using speedEstB has better dynamic */
|
||||
/* return aObsv->speedLpf.out; */
|
||||
}
|
||||
|
||||
|
||||
/** \addtogroup library_srvsw_sysse_math_f32_angletrk
|
||||
* \{ */
|
||||
|
||||
/******************************************************************************/
|
||||
/*-------------------------Global Function Prototypes-------------------------*/
|
||||
/******************************************************************************/
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_GetAbsolutePosition
|
||||
* \param driver driver handle
|
||||
* \return absolute position
|
||||
*/
|
||||
IFX_EXTERN float32 Ifx_AngleTrkF32_getAbsolutePosition(Ifx_AngleTrkF32 *driver);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_GetDirection
|
||||
* \param driver driver handle
|
||||
* \return direction
|
||||
*/
|
||||
IFX_EXTERN IfxStdIf_Pos_Dir Ifx_AngleTrkF32_getDirection(Ifx_AngleTrkF32 *driver);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_GetFault
|
||||
* \param driver driver handle
|
||||
* \return Fault
|
||||
*/
|
||||
IFX_EXTERN IfxStdIf_Pos_Status Ifx_AngleTrkF32_getFault(Ifx_AngleTrkF32 *driver);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_GetOffset
|
||||
* \param driver driver handle
|
||||
* \return offset address
|
||||
*/
|
||||
IFX_EXTERN sint32 Ifx_AngleTrkF32_getOffset(Ifx_AngleTrkF32 *driver);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_GetPeriodPerRotation
|
||||
* \param driver driver handle
|
||||
* \return Period per rotation
|
||||
*/
|
||||
IFX_EXTERN uint16 Ifx_AngleTrkF32_getPeriodPerRotation(Ifx_AngleTrkF32 *driver);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_GetPosition
|
||||
* \param driver driver handle
|
||||
* \return position
|
||||
*/
|
||||
IFX_EXTERN float32 Ifx_AngleTrkF32_getPosition(Ifx_AngleTrkF32 *driver);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_GetRawPosition
|
||||
* \param aObsv Pointer to the Ifx_AngleTrkF32 object
|
||||
* \return position in ticks
|
||||
*/
|
||||
IFX_EXTERN IfxStdIf_Pos_RawAngle Ifx_AngleTrkF32_getRawPosition(Ifx_AngleTrkF32 *aObsv);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_GetRefreshPeriod
|
||||
* \param driver driver handle
|
||||
* \return update period
|
||||
*/
|
||||
IFX_EXTERN float32 Ifx_AngleTrkF32_getRefreshPeriod(Ifx_AngleTrkF32 *driver);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_GetResolution
|
||||
* \param driver driver handle
|
||||
* \return resolution
|
||||
*/
|
||||
IFX_EXTERN sint32 Ifx_AngleTrkF32_getResolution(Ifx_AngleTrkF32 *driver);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_GetTurn
|
||||
* \param driver driver handle
|
||||
* \return Returns the number of turns
|
||||
*/
|
||||
IFX_EXTERN sint32 Ifx_AngleTrkF32_getTurn(Ifx_AngleTrkF32 *driver);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_GetSensorType
|
||||
* \param driver driver handle
|
||||
* \return sensor type
|
||||
*/
|
||||
IFX_EXTERN IfxStdIf_Pos_SensorType Ifx_AngleTrkF32_getSensorType(Ifx_AngleTrkF32 *driver);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_GetSpeed
|
||||
* \param aObsv Pointer to the Ifx_AngleTrkF32 object
|
||||
* \return speed
|
||||
*/
|
||||
IFX_EXTERN float32 Ifx_AngleTrkF32_getSpeed(Ifx_AngleTrkF32 *aObsv);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_Reset
|
||||
* \param driver driver handle
|
||||
* \return None
|
||||
*/
|
||||
IFX_EXTERN void Ifx_AngleTrkF32_reset(Ifx_AngleTrkF32 *driver);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_ResetFaults
|
||||
* \param driver driver handle
|
||||
* \return None
|
||||
*/
|
||||
IFX_EXTERN void Ifx_AngleTrkF32_resetFaults(Ifx_AngleTrkF32 *driver);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_SetOffset
|
||||
* \param aObsv driver handle
|
||||
* \param offset offset
|
||||
* \return None
|
||||
*/
|
||||
IFX_EXTERN void Ifx_AngleTrkF32_setOffset(Ifx_AngleTrkF32 *aObsv, IfxStdIf_Pos_RawAngle offset);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_SetRefreshPeriod
|
||||
* \param driver driver handle
|
||||
* \param updatePeriod update period
|
||||
* \return None
|
||||
*/
|
||||
IFX_EXTERN void Ifx_AngleTrkF32_setRefreshPeriod(Ifx_AngleTrkF32 *driver, float32 updatePeriod);
|
||||
|
||||
/** \brief \see IfxStdIf_Pos_Update
|
||||
* \param aObsv driver handle
|
||||
* \return None
|
||||
*/
|
||||
IFX_EXTERN void Ifx_AngleTrkF32_update(Ifx_AngleTrkF32 *aObsv);
|
||||
|
||||
/** \} */
|
||||
|
||||
/******************************************************************************/
|
||||
/*-------------------------Global Function Prototypes-------------------------*/
|
||||
/******************************************************************************/
|
||||
|
||||
/** \brief Initializes the standard interface "Pos"
|
||||
* \param stdif Standard interface position object
|
||||
* \param driver Virtual position sensor
|
||||
* \return TRUE on success else FALSE
|
||||
*/
|
||||
IFX_EXTERN boolean Ifx_AngleTrkF32_stdIfPosInit(IfxStdIf_Pos *stdif, Ifx_AngleTrkF32 *driver);
|
||||
|
||||
#endif /* IFX_ANGLETRKF32_H */
|
||||
@@ -0,0 +1,390 @@
|
||||
/**
|
||||
* \file Ifx_Cf32.c
|
||||
* \brief Floating point signal, vector, and matrix library
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "Ifx_Cf32.h"
|
||||
#include <float.h>
|
||||
#include <stdio.h>
|
||||
|
||||
void CplxVecRst_f32(cfloat32 *X, short nX)
|
||||
{
|
||||
for ( ; nX > 0; nX--)
|
||||
{
|
||||
X->real = X->imag = 0.0;
|
||||
X++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CplxVecCpy_f32S(cfloat32 *X, short *S, short nS, short incrS)
|
||||
{
|
||||
for ( ; nS > 0; nS--)
|
||||
{
|
||||
(*X).imag = 0.0;
|
||||
(*X).real = *(S);
|
||||
X++; S += incrS;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CplxVecCpy_f32(cfloat32 *X, cfloat32 *S, short nS)
|
||||
{
|
||||
for ( ; nS > 0; nS--)
|
||||
{
|
||||
*X = *S;
|
||||
X++; S++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
float32 *CplxVecPwr_f32(cfloat32 *X, short nX)
|
||||
{
|
||||
unsigned short i;
|
||||
float32 *r = (float32 *)X;
|
||||
|
||||
for (i = 0; i < nX; i++)
|
||||
{
|
||||
*r = IFX_Cf32_dot(X);
|
||||
r++; X++;
|
||||
}
|
||||
|
||||
return &r[-nX];
|
||||
}
|
||||
|
||||
|
||||
float32 *CplxVecMag_f32(cfloat32 *X, short nX)
|
||||
{
|
||||
unsigned short i;
|
||||
float32 *r = (float32 *)X;
|
||||
|
||||
for (i = 0; i < nX; i++)
|
||||
{
|
||||
*r = IFX_Cf32_mag(X);
|
||||
r++; X++;
|
||||
}
|
||||
|
||||
return &r[-nX];
|
||||
}
|
||||
|
||||
|
||||
void CplxVecMul_f32(cfloat32 *X, const cfloat32 *mul, short nX)
|
||||
{
|
||||
for ( ; nX > 0; nX--)
|
||||
{
|
||||
*X = IFX_Cf32_mul(X, mul);
|
||||
X++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void VecPwrdB_f32(float32 *X, short nX)
|
||||
{
|
||||
unsigned short i;
|
||||
|
||||
for (i = 0; i < nX; i++)
|
||||
{
|
||||
*X = (float32)20.0 * log10f(*X);
|
||||
X++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void VecPwrdB_SF(sint16 *R, float32 *X, short nX)
|
||||
{
|
||||
unsigned short i;
|
||||
|
||||
for (i = 0; i < nX; i++)
|
||||
{
|
||||
*R = (sint16)(20.0 * log10f(*X));
|
||||
R++; X++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
float32 VecMaxIdx_f32(float32 *X, short nX, sint16 *minIdx, sint16 *maxIdx)
|
||||
{
|
||||
float32 maxPeak = FLT_MIN;
|
||||
unsigned short m;
|
||||
|
||||
for (m = 0; m < nX; m++)
|
||||
{
|
||||
if (*X > maxPeak)
|
||||
{
|
||||
maxPeak = *X;
|
||||
*minIdx = m;
|
||||
}
|
||||
|
||||
if (*X >= maxPeak)
|
||||
{
|
||||
*maxIdx = m;
|
||||
}
|
||||
|
||||
X++;
|
||||
}
|
||||
|
||||
return maxPeak;
|
||||
}
|
||||
|
||||
|
||||
float32 VecMinIdx_f32(float32 *X, short nX, sint16 *minIdx, sint16 *maxIdx)
|
||||
{
|
||||
float32 minPeak = FLT_MAX;
|
||||
short m;
|
||||
|
||||
for (m = 0; m < nX; m++)
|
||||
{
|
||||
if (*X < minPeak)
|
||||
{
|
||||
minPeak = *X;
|
||||
*minIdx = m;
|
||||
}
|
||||
|
||||
if (*X <= minPeak)
|
||||
{
|
||||
*maxIdx = m;
|
||||
}
|
||||
|
||||
X++;
|
||||
}
|
||||
|
||||
return minPeak;
|
||||
}
|
||||
|
||||
|
||||
void VecOfs_f32(float32 *X, float32 offset, short nX)
|
||||
{
|
||||
unsigned short i;
|
||||
|
||||
for (i = 0; i < nX; i++)
|
||||
{
|
||||
*X -= offset;
|
||||
X++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void VecGain_f32(float32 *X, float32 gain, short nX)
|
||||
{
|
||||
unsigned short i;
|
||||
|
||||
for (i = 0; i < nX; i++)
|
||||
{
|
||||
*X = *X * gain;
|
||||
X++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
float32 VecSum_f32(float32 *X, short nX)
|
||||
{
|
||||
float32 sumX = 0;
|
||||
unsigned short i;
|
||||
|
||||
for (i = 0; i < nX; i++)
|
||||
{
|
||||
sumX += *X;
|
||||
X++;
|
||||
}
|
||||
|
||||
return sumX;
|
||||
}
|
||||
|
||||
|
||||
float32 VecAvg_f32(float32 *X, short nX)
|
||||
{
|
||||
return VecSum_f32(X, nX) / nX;
|
||||
}
|
||||
|
||||
|
||||
float32 VecMax_f32(float32 *X, short nX)
|
||||
{
|
||||
unsigned short i;
|
||||
float32 r = FLT_MIN;
|
||||
|
||||
for (i = 0; i < nX; i++)
|
||||
{
|
||||
r = __maxf(r, *X);
|
||||
X++;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
float32 VecMin_f32(float32 *X, short nX)
|
||||
{
|
||||
unsigned short i;
|
||||
float32 r = FLT_MAX;
|
||||
|
||||
for (i = 0; i < nX; i++)
|
||||
{
|
||||
r = __minf(r, *X);
|
||||
X++;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
void VecHalfSwap_f32(float32 *X, short nX)
|
||||
{
|
||||
unsigned short i;
|
||||
unsigned short half = nX / 2;
|
||||
float32 *F = &X[half];
|
||||
|
||||
for (i = 0; i < half; i++)
|
||||
{
|
||||
float32 tmp = *F;
|
||||
*F = *X;
|
||||
*X = tmp;
|
||||
F++; X++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* NOTE:
|
||||
* (nX <= nW) && ((nW % nX) == 0) && ((nX % 2) == 0)
|
||||
* (symW != 0) when the window is symmetrical */
|
||||
void VecWin_f32(float32 *X, const float32 *W, short nX, short nW, short incrX, short symW)
|
||||
{
|
||||
short step = nW / nX;
|
||||
short i;
|
||||
|
||||
if (symW != 0)
|
||||
{ /* symmetrical window, using half of the length */
|
||||
for (i = 0; i < nX / 2; i++)
|
||||
{
|
||||
*X = *X * *W;
|
||||
X = &X[incrX];
|
||||
W = &W[step];
|
||||
}
|
||||
|
||||
W = &W[-step];
|
||||
|
||||
for ( ; i < nX; i++)
|
||||
{
|
||||
*X = *X * *W;
|
||||
X = &X[incrX];
|
||||
W = &W[-step];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef __WIN32__
|
||||
|
||||
#define ENDL "\r\n"
|
||||
|
||||
void DataF_printf(FILE *fp, pchar fileName, float32 *data, long nX, int enclosed)
|
||||
{
|
||||
long i;
|
||||
|
||||
if (fileName != NULL)
|
||||
{
|
||||
fp = fopen(fileName, "w+");
|
||||
}
|
||||
|
||||
if (fp != NULL)
|
||||
{
|
||||
if (enclosed)
|
||||
{
|
||||
for (i = 0; i < nX; i++)
|
||||
{
|
||||
fprintf(fp, "_DATAF(%10.20f),"ENDL, *data);
|
||||
data = &data[1];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < nX; i++)
|
||||
{
|
||||
fprintf(fp, "%10.20f,"ENDL, *data);
|
||||
data = &data[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (fileName != NULL)
|
||||
{
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Cplx_f32_printf(FILE *fp, pchar fileName, cfloat32 *data, long nX, int encloseData)
|
||||
{
|
||||
long i;
|
||||
|
||||
if (fileName != NULL)
|
||||
{
|
||||
fp = fopen(fileName, "w+");
|
||||
}
|
||||
|
||||
if (fp != NULL)
|
||||
{
|
||||
if (encloseData)
|
||||
{
|
||||
for (i = 0; i < nX; i++)
|
||||
{
|
||||
fprintf(fp, "{_DATAF(%10.20f), _DATAF(%10.20f)},"ENDL, data->real, data->imag);
|
||||
data = &data[1];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < nX; i++)
|
||||
{
|
||||
fprintf(fp, "%10.20f, %10.20f"ENDL, data->real, data->imag);
|
||||
data = &data[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (fileName != NULL)
|
||||
{
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,184 @@
|
||||
/**
|
||||
* \file Ifx_Cf32.h
|
||||
* \brief Floating point signal, vector, and matrix library
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_cf32 Floating point signal, vector, and matrix library
|
||||
* \ingroup library_srvsw_sysse_math_f32
|
||||
*/
|
||||
|
||||
#ifndef IFX_CF32_H
|
||||
#define IFX_CF32_H
|
||||
|
||||
#include "Cpu/Std/IfxCpu_Intrinsics.h"
|
||||
#include <math.h>
|
||||
|
||||
#define _DATAF(val) ((float32)(val))
|
||||
|
||||
/* Complex Arithmetic --------------------------------------------------------*/
|
||||
IFX_INLINE cfloat32 IFX_Cf32_exp(const cfloat32 *c)
|
||||
{
|
||||
float32 f = (float32)expf(c->real);
|
||||
cfloat32 R;
|
||||
R.real = f * (float32)cosf(c->imag);
|
||||
R.imag = f * (float32)sinf(c->imag);
|
||||
return R;
|
||||
}
|
||||
|
||||
|
||||
IFX_INLINE cfloat32 IFX_Cf32_mul(const cfloat32 *a, const cfloat32 *b)
|
||||
{
|
||||
cfloat32 R;
|
||||
R.real = (a->real * b->real) - (a->imag * b->imag);
|
||||
R.imag = (a->imag * b->real) + (a->real * b->imag);
|
||||
return R;
|
||||
}
|
||||
|
||||
|
||||
IFX_INLINE cfloat32 IFX_Cf32_amp(const cfloat32 *a, float32 gain)
|
||||
{
|
||||
cfloat32 R;
|
||||
R.real = a->real * gain;
|
||||
R.imag = a->imag * gain;
|
||||
return R;
|
||||
}
|
||||
|
||||
|
||||
IFX_INLINE float32 IFX_Cf32_dot(const cfloat32 *b)
|
||||
{
|
||||
return (b->real * b->real) + (b->imag * b->imag);
|
||||
}
|
||||
|
||||
|
||||
IFX_INLINE float32 IFX_Cf32_mag(const cfloat32 *c)
|
||||
{
|
||||
return (float32)sqrtf(IFX_Cf32_dot(c));
|
||||
}
|
||||
|
||||
|
||||
IFX_INLINE cfloat32 IFX_Cf32_div(const cfloat32 *a, const cfloat32 *b)
|
||||
{
|
||||
float32 denom = IFX_Cf32_dot(b);
|
||||
cfloat32 R;
|
||||
R.real = ((a->real * b->real) + (a->imag * b->imag)) / denom;
|
||||
R.imag = ((a->imag * b->real) - (a->real * b->imag)) / denom;
|
||||
return R;
|
||||
}
|
||||
|
||||
|
||||
IFX_INLINE cfloat32 IFX_Cf32_add(const cfloat32 *a, const cfloat32 *b)
|
||||
{
|
||||
cfloat32 R;
|
||||
R.real = (a->real + b->real);
|
||||
R.imag = (a->imag + b->imag);
|
||||
return R;
|
||||
}
|
||||
|
||||
|
||||
IFX_INLINE cfloat32 IFX_Cf32_sub(const cfloat32 *a, const cfloat32 *b)
|
||||
{
|
||||
cfloat32 R;
|
||||
R.real = (a->real - b->real);
|
||||
R.imag = (a->imag - b->imag);
|
||||
return R;
|
||||
}
|
||||
|
||||
|
||||
IFX_INLINE void IFX_Cf32_set(cfloat32 *a, float32 re, float32 im)
|
||||
{
|
||||
a->real = re;
|
||||
a->imag = im;
|
||||
}
|
||||
|
||||
|
||||
IFX_INLINE void IFX_Cf32_reset(cfloat32 *a)
|
||||
{
|
||||
IFX_Cf32_set(a, 0.0, 0.0);
|
||||
}
|
||||
|
||||
|
||||
IFX_INLINE cfloat32 IFX_Cf32_saturate(cfloat32 *a, float32 *ampl, float32 limit)
|
||||
{
|
||||
cfloat32 R = *a;
|
||||
*ampl = IFX_Cf32_mag(a);
|
||||
|
||||
if (*ampl > limit)
|
||||
{
|
||||
float32 scale = limit / *ampl;
|
||||
R.imag = R.imag * scale;
|
||||
R.real = R.real * scale;
|
||||
}
|
||||
|
||||
return R;
|
||||
}
|
||||
|
||||
|
||||
IFX_EXTERN void CplxVecCpy_f32S(cfloat32 *X, short *S, short nS, short incrS);
|
||||
IFX_EXTERN void CplxVecRst_f32(cfloat32 *X, short nX);
|
||||
IFX_EXTERN void CplxVecCpy_f32(cfloat32 *X, cfloat32 *S, short nS);
|
||||
IFX_EXTERN float32 *CplxVecPwr_f32(cfloat32 *X, short nX);
|
||||
IFX_EXTERN float32 *CplxVecMag_f32(cfloat32 *X, short nX);
|
||||
IFX_EXTERN void CplxVecMul_f32(cfloat32 *X, const cfloat32 *mul, short nX);
|
||||
|
||||
/* Vector Operation ----------------------------------------------------------*/
|
||||
|
||||
IFX_EXTERN void VecWin_f32(float32 *X, const float32 *W, short nX, short nW, short incrX, short symW);
|
||||
IFX_EXTERN void VecPwrdB_f32(float32 *X, short nX);
|
||||
IFX_EXTERN void VecPwrdB_SF(sint16 *R, float32 *X, short nX);
|
||||
IFX_EXTERN void VecGain_f32(float32 *X, float32 gain, short nX);
|
||||
IFX_EXTERN void VecOfs_f32(float32 *X, float32 offset, short nX);
|
||||
IFX_EXTERN float32 VecSum_f32(float32 *X, short nX);
|
||||
IFX_EXTERN float32 VecAvg_f32(float32 *X, short nX);
|
||||
IFX_EXTERN float32 VecMax_f32(float32 *X, short nX);
|
||||
IFX_EXTERN float32 VecMin_f32(float32 *X, short nX);
|
||||
IFX_EXTERN float32 VecMinIdx_f32(float32 *X, short nX, sint16 *minIdx, sint16 *maxIdx);
|
||||
IFX_EXTERN float32 VecMaxIdx_f32(float32 *X, short nX, sint16 *minIdx, sint16 *maxIdx);
|
||||
IFX_EXTERN void VecHalfSwap_f32(float32 *X, short nX);
|
||||
|
||||
/* Helper functions ----------------------------------------------------------*/
|
||||
#ifdef __WIN32__
|
||||
#include <stdio.h>
|
||||
void Cplx_f32_printf(FILE *fp, pchar fileName, cfloat32 *data, long nX, int encloseData);
|
||||
#else
|
||||
#define Cplx_f32_printf(...)
|
||||
#endif
|
||||
|
||||
#endif /* IFX_CF32_H */
|
||||
@@ -0,0 +1,656 @@
|
||||
/**
|
||||
* \file Ifx_Crc.c
|
||||
* \brief CRC algorithm
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
*/
|
||||
#include "Ifx_Crc.h"
|
||||
|
||||
uint32 Ifx_Crc_reflect(uint32 crc, sint32 bitnum);
|
||||
|
||||
boolean Ifx_Crc_init(Ifc_Crc *driver, const Ifc_Crc_Table *table, sint32 direct, sint32 refout, uint32 crcinit, uint32 crcxor)
|
||||
{
|
||||
sint32 i;
|
||||
uint32 bit, crc;
|
||||
|
||||
if (crcinit != (crcinit & table->crcmask))
|
||||
{
|
||||
//IfxStdIf_DPipe_print(io,"ERROR, invalid crcinit."ENDL);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (crcxor != (crcxor & table->crcmask))
|
||||
{
|
||||
//IfxStdIf_DPipe_print(io,"ERROR, invalid crcxor."ENDL);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
driver->table = table;
|
||||
driver->crcxor = crcxor;
|
||||
driver->refout = refout;
|
||||
|
||||
// compute missing initial CRC value
|
||||
|
||||
if (!direct)
|
||||
{
|
||||
driver->crcinit_nondirect = crcinit;
|
||||
crc = crcinit;
|
||||
|
||||
for (i = 0; i < table->order; i++)
|
||||
{
|
||||
bit = crc & table->crchighbit;
|
||||
crc <<= 1;
|
||||
|
||||
if (bit)
|
||||
{
|
||||
crc ^= table->polynom;
|
||||
}
|
||||
}
|
||||
|
||||
crc &= table->crcmask;
|
||||
driver->crcinit_direct = crc;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
driver->crcinit_direct = crcinit;
|
||||
crc = crcinit;
|
||||
|
||||
for (i = 0; i < table->order; i++)
|
||||
{
|
||||
bit = crc & 1;
|
||||
|
||||
if (bit)
|
||||
{
|
||||
crc ^= table->polynom;
|
||||
}
|
||||
|
||||
crc >>= 1;
|
||||
|
||||
if (bit)
|
||||
{
|
||||
crc |= table->crchighbit;
|
||||
}
|
||||
}
|
||||
|
||||
driver->crcinit_nondirect = crc;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
boolean Ifx_Crc_createTable(Ifc_Crc_Table *table, sint32 order, uint32 polynom, sint32 refin)
|
||||
{
|
||||
uint32 crcmask;
|
||||
// at first, compute constant bit masks for whole CRC and CRC high bit
|
||||
|
||||
crcmask = ((((uint32)1 << (order - 1)) - 1) << 1) | 1;
|
||||
|
||||
// check parameters
|
||||
|
||||
if ((order < 1) || (order > 32))
|
||||
{
|
||||
//IfxStdIf_DPipe_print(io,"ERROR, invalid order, it must be between 1..32."ENDL);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (polynom != (polynom & crcmask))
|
||||
{
|
||||
//IfxStdIf_DPipe_print(io,"ERROR, invalid polynom."ENDL);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
table->order = order;
|
||||
table->polynom = polynom;
|
||||
table->refin = refin;
|
||||
table->crchighbit = (uint32)1 << (order - 1);
|
||||
table->crcmask = crcmask;
|
||||
// generate lookup table
|
||||
// make CRC lookup table used by table algorithms
|
||||
{
|
||||
sint32 i, j;
|
||||
uint32 bit, crc;
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
crc = (uint32)i;
|
||||
|
||||
if (refin)
|
||||
{
|
||||
crc = Ifx_Crc_reflect(crc, 8);
|
||||
}
|
||||
|
||||
crc <<= order - 8;
|
||||
|
||||
for (j = 0; j < 8; j++)
|
||||
{
|
||||
bit = crc & table->crchighbit;
|
||||
crc <<= 1;
|
||||
|
||||
if (bit)
|
||||
{
|
||||
crc ^= polynom;
|
||||
}
|
||||
}
|
||||
|
||||
if (refin)
|
||||
{
|
||||
crc = Ifx_Crc_reflect(crc, order);
|
||||
}
|
||||
|
||||
crc &= crcmask;
|
||||
|
||||
if (order <= 8)
|
||||
{
|
||||
uint8 *crctab = (uint8 *)((uint32)table + sizeof(Ifc_Crc_Table));
|
||||
crctab[i] = (uint8)crc;
|
||||
}
|
||||
else if (order <= 16)
|
||||
{
|
||||
uint16 *crctab = (uint16 *)((uint32)table + sizeof(Ifc_Crc_Table));
|
||||
crctab[i] = (uint16)crc;
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32 *crctab = (uint32 *)((uint32)table + sizeof(Ifc_Crc_Table));
|
||||
crctab[i] = crc;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
// subroutines
|
||||
|
||||
uint32 Ifx_Crc_reflect(uint32 crc, sint32 bitnum)
|
||||
{
|
||||
// reflects the lower 'bitnum' bits of 'crc'
|
||||
|
||||
uint32 i, j = 1, crcout = 0;
|
||||
|
||||
for (i = (uint32)1 << (bitnum - 1); i; i >>= 1)
|
||||
{
|
||||
if (crc & i)
|
||||
{
|
||||
crcout |= j;
|
||||
}
|
||||
|
||||
j <<= 1;
|
||||
}
|
||||
|
||||
return crcout;
|
||||
}
|
||||
|
||||
|
||||
uint32 Ifx_Crc_tableFast(Ifc_Crc *driver, uint8 *p, uint32 len)
|
||||
{
|
||||
// fast lookup table algorithm without augmented zero bytes, e.g. used in pkzip.
|
||||
// only usable with polynom orders of 8, 16, 24 or 32.
|
||||
|
||||
uint32 crc = driver->crcinit_direct;
|
||||
sint32 orderMinusHeight = driver->table->order - 8;
|
||||
|
||||
if (driver->table->refin)
|
||||
{
|
||||
crc = Ifx_Crc_reflect(crc, driver->table->order);
|
||||
}
|
||||
|
||||
if (driver->table->order <= 8)
|
||||
{
|
||||
uint8 *crctab = (uint8 *)((uint32)driver->table + sizeof(Ifc_Crc_Table));
|
||||
|
||||
if (!driver->table->refin)
|
||||
{
|
||||
while (len--)
|
||||
{
|
||||
crc = (crc << 8) ^ crctab[((crc >> (orderMinusHeight)) & 0xff) ^ *p++];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (len--)
|
||||
{
|
||||
crc = (crc >> 8) ^ crctab[(crc & 0xff) ^ *p++];
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (driver->table->order <= 16)
|
||||
{
|
||||
uint16 *crctab = (uint16 *)((uint32)driver->table + sizeof(Ifc_Crc_Table));
|
||||
|
||||
if (!driver->table->refin)
|
||||
{
|
||||
while (len--)
|
||||
{
|
||||
crc = (crc << 8) ^ crctab[((crc >> (orderMinusHeight)) & 0xff) ^ *p++];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (len--)
|
||||
{
|
||||
crc = (crc >> 8) ^ crctab[(crc & 0xff) ^ *p++];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32 *crctab = (uint32 *)((uint32)driver->table + sizeof(Ifc_Crc_Table));
|
||||
|
||||
if (!driver->table->refin)
|
||||
{
|
||||
while (len--)
|
||||
{
|
||||
crc = (crc << 8) ^ crctab[((crc >> (orderMinusHeight)) & 0xff) ^ *p++];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (len--)
|
||||
{
|
||||
crc = (crc >> 8) ^ crctab[(crc & 0xff) ^ *p++];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (driver->refout ^ driver->table->refin)
|
||||
{
|
||||
crc = Ifx_Crc_reflect(crc, driver->table->order);
|
||||
}
|
||||
|
||||
crc ^= driver->crcxor;
|
||||
crc &= driver->table->crcmask;
|
||||
|
||||
return crc;
|
||||
}
|
||||
|
||||
|
||||
uint32 Ifx_Crc_table(Ifc_Crc *driver, uint8 *p, uint32 len)
|
||||
{
|
||||
// normal lookup table algorithm with augmented zero bytes.
|
||||
// only usable with polynom orders of 8, 16, 24 or 32.
|
||||
|
||||
uint32 crc = driver->crcinit_nondirect;
|
||||
sint32 orderMinusHeight = driver->table->order - 8;
|
||||
|
||||
if (driver->table->refin)
|
||||
{
|
||||
crc = Ifx_Crc_reflect(crc, driver->table->order);
|
||||
}
|
||||
|
||||
if (driver->table->order <= 8)
|
||||
{
|
||||
uint8 *crctab = (uint8 *)((uint32)driver->table + sizeof(Ifc_Crc_Table));
|
||||
|
||||
if (!driver->table->refin)
|
||||
{
|
||||
while (len--)
|
||||
{
|
||||
crc = ((crc << 8) | *p++) ^ crctab[(crc >> (orderMinusHeight)) & 0xff];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (len--)
|
||||
{
|
||||
crc = ((crc >> 8) | (*p++ << (orderMinusHeight))) ^ crctab[crc & 0xff];
|
||||
}
|
||||
}
|
||||
|
||||
if (!driver->table->refin)
|
||||
{
|
||||
while (++len < (driver->table->order >> 3))
|
||||
{
|
||||
crc = (crc << 8) ^ crctab[(crc >> (orderMinusHeight)) & 0xff];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (++len < (driver->table->order >> 3))
|
||||
{
|
||||
crc = (crc >> 8) ^ crctab[crc & 0xff];
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (driver->table->order <= 16)
|
||||
{
|
||||
uint16 *crctab = (uint16 *)((uint32)driver->table + sizeof(Ifc_Crc_Table));
|
||||
|
||||
if (!driver->table->refin)
|
||||
{
|
||||
while (len--)
|
||||
{
|
||||
crc = ((crc << 8) | *p++) ^ crctab[(crc >> (orderMinusHeight)) & 0xff];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (len--)
|
||||
{
|
||||
crc = ((crc >> 8) | (*p++ << (orderMinusHeight))) ^ crctab[crc & 0xff];
|
||||
}
|
||||
}
|
||||
|
||||
if (!driver->table->refin)
|
||||
{
|
||||
while (++len < (driver->table->order >> 3))
|
||||
{
|
||||
crc = (crc << 8) ^ crctab[(crc >> (orderMinusHeight)) & 0xff];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (++len < (driver->table->order >> 3))
|
||||
{
|
||||
crc = (crc >> 8) ^ crctab[crc & 0xff];
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (driver->table->order <= 32)
|
||||
{
|
||||
uint32 *crctab = (uint32 *)((uint32)driver->table + sizeof(Ifc_Crc_Table));
|
||||
|
||||
if (!driver->table->refin)
|
||||
{
|
||||
while (len--)
|
||||
{
|
||||
crc = ((crc << 8) | *p++) ^ crctab[(crc >> (orderMinusHeight)) & 0xff];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (len--)
|
||||
{
|
||||
crc = ((crc >> 8) | (*p++ << (orderMinusHeight))) ^ crctab[crc & 0xff];
|
||||
}
|
||||
}
|
||||
|
||||
if (!driver->table->refin)
|
||||
{
|
||||
while (++len < (driver->table->order >> 3))
|
||||
{
|
||||
crc = (crc << 8) ^ crctab[(crc >> (orderMinusHeight)) & 0xff];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (++len < (driver->table->order >> 3))
|
||||
{
|
||||
crc = (crc >> 8) ^ crctab[crc & 0xff];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (driver->refout ^ driver->table->refin)
|
||||
{
|
||||
crc = Ifx_Crc_reflect(crc, driver->table->order);
|
||||
}
|
||||
|
||||
crc ^= driver->crcxor;
|
||||
crc &= driver->table->crcmask;
|
||||
|
||||
return crc;
|
||||
}
|
||||
|
||||
|
||||
uint32 Ifx_Crc_bitByBit(Ifc_Crc *driver, uint8 *p, uint32 len)
|
||||
{
|
||||
// bit by bit algorithm with augmented zero bytes.
|
||||
// does not use lookup table, suited for polynom driver->table->orders between 1...32.
|
||||
|
||||
uint32 i, j, c, bit;
|
||||
uint32 crc = driver->crcinit_nondirect;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
c = (uint32)*p++;
|
||||
|
||||
if (driver->table->refin)
|
||||
{
|
||||
c = Ifx_Crc_reflect(c, 8);
|
||||
}
|
||||
|
||||
for (j = 0x80; j; j >>= 1)
|
||||
{
|
||||
bit = crc & driver->table->crchighbit;
|
||||
crc <<= 1;
|
||||
|
||||
if (c & j)
|
||||
{
|
||||
crc |= 1;
|
||||
}
|
||||
|
||||
if (bit)
|
||||
{
|
||||
crc ^= driver->table->polynom;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < driver->table->order; i++)
|
||||
{
|
||||
bit = crc & driver->table->crchighbit;
|
||||
crc <<= 1;
|
||||
|
||||
if (bit)
|
||||
{
|
||||
crc ^= driver->table->polynom;
|
||||
}
|
||||
}
|
||||
|
||||
if (driver->refout)
|
||||
{
|
||||
crc = Ifx_Crc_reflect(crc, driver->table->order);
|
||||
}
|
||||
|
||||
crc ^= driver->crcxor;
|
||||
crc &= driver->table->crcmask;
|
||||
|
||||
return crc;
|
||||
}
|
||||
|
||||
|
||||
uint32 Ifx_Crc_bitByBitFast(Ifc_Crc *driver, uint8 *p, uint32 len)
|
||||
{
|
||||
// fast bit by bit algorithm without augmented zero bytes.
|
||||
// does not use lookup table, suited for polynom driver->table->orders between 1...32.
|
||||
|
||||
uint32 i, j, c, bit;
|
||||
uint32 crc = driver->crcinit_direct;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
c = (uint32)*p++;
|
||||
|
||||
if (driver->table->refin)
|
||||
{
|
||||
c = Ifx_Crc_reflect(c, 8);
|
||||
}
|
||||
|
||||
for (j = 0x80; j; j >>= 1)
|
||||
{
|
||||
bit = crc & driver->table->crchighbit;
|
||||
crc <<= 1;
|
||||
|
||||
if (c & j)
|
||||
{
|
||||
bit ^= driver->table->crchighbit;
|
||||
}
|
||||
|
||||
if (bit)
|
||||
{
|
||||
crc ^= driver->table->polynom;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (driver->refout)
|
||||
{
|
||||
crc = Ifx_Crc_reflect(crc, driver->table->order);
|
||||
}
|
||||
|
||||
crc ^= driver->crcxor;
|
||||
crc &= driver->table->crcmask;
|
||||
|
||||
return crc;
|
||||
}
|
||||
|
||||
|
||||
#if CRC_ENABLE_DPIPE
|
||||
void Ifx_Crc_printTable(Ifc_Crc_Table *table, IfxStdIf_DPipe *io)
|
||||
{
|
||||
sint32 i = 0;
|
||||
|
||||
uint32 typeSize;
|
||||
|
||||
if (table->order <= 8)
|
||||
{
|
||||
typeSize = 8;
|
||||
}
|
||||
else if (table->order <= 16)
|
||||
{
|
||||
typeSize = 16;
|
||||
}
|
||||
else
|
||||
{
|
||||
typeSize = 32;
|
||||
}
|
||||
|
||||
IfxStdIf_DPipe_print(io, ENDL "Ifc_Crc_Table%d <tabe name> = {"ENDL, typeSize);
|
||||
IfxStdIf_DPipe_print(io, " .data.order=%d,"ENDL, table->order);
|
||||
IfxStdIf_DPipe_print(io, " .data.polynom=0x%X,"ENDL, table->polynom);
|
||||
IfxStdIf_DPipe_print(io, " .data.refin=%d,"ENDL, table->refin);
|
||||
IfxStdIf_DPipe_print(io, " .data.crchighbit=%d,"ENDL, table->crchighbit);
|
||||
IfxStdIf_DPipe_print(io, " .data.crcmask=0x%X,"ENDL, table->crcmask);
|
||||
IfxStdIf_DPipe_print(io, " .crctab={"ENDL);
|
||||
IfxStdIf_DPipe_print(io, " ");
|
||||
|
||||
while (i < 256)
|
||||
{
|
||||
if (table->order <= 4)
|
||||
{
|
||||
uint8 *crctab = (uint8 *)((uint32)table + sizeof(Ifc_Crc_Table));
|
||||
IfxStdIf_DPipe_print(io, "0x%01X, ", crctab[i]);
|
||||
}
|
||||
else if (table->order <= 8)
|
||||
{
|
||||
uint8 *crctab = (uint8 *)((uint32)table + sizeof(Ifc_Crc_Table));
|
||||
IfxStdIf_DPipe_print(io, "0x%02X, ", crctab[i]);
|
||||
}
|
||||
else if (table->order <= 16)
|
||||
{
|
||||
uint16 *crctab = (uint16 *)((uint32)table + sizeof(Ifc_Crc_Table));
|
||||
IfxStdIf_DPipe_print(io, "0x%04X, ", crctab[i]);
|
||||
}
|
||||
else if (table->order <= 24)
|
||||
{
|
||||
uint32 *crctab = (uint32 *)((uint32)table + sizeof(Ifc_Crc_Table));
|
||||
IfxStdIf_DPipe_print(io, "0x%06X, ", crctab[i]);
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32 *crctab = (uint32 *)((uint32)table + sizeof(Ifc_Crc_Table));
|
||||
IfxStdIf_DPipe_print(io, "0x%08X, ", crctab[i]);
|
||||
}
|
||||
|
||||
i++;
|
||||
|
||||
if ((i % 16) == 0)
|
||||
{
|
||||
IfxStdIf_DPipe_print(io, ENDL " ");
|
||||
}
|
||||
}
|
||||
|
||||
IfxStdIf_DPipe_print(io, " }"ENDL);
|
||||
IfxStdIf_DPipe_print(io, "};"ENDL);
|
||||
}
|
||||
|
||||
|
||||
boolean Ifx_Crc_Test(Ifc_Crc *driver, uint8 *string, uint32 length, IfxStdIf_DPipe *io)
|
||||
{
|
||||
IfxStdIf_DPipe_print(io, ""ENDL);
|
||||
IfxStdIf_DPipe_print(io, "CRC tester v1.1 written on 13/01/2003 by Sven Reifegerste (zorc/reflex)"ENDL);
|
||||
IfxStdIf_DPipe_print(io, "-----------------------------------------------------------------------"ENDL);
|
||||
IfxStdIf_DPipe_print(io, ""ENDL);
|
||||
IfxStdIf_DPipe_print(io, "Parameters:"ENDL);
|
||||
IfxStdIf_DPipe_print(io, ""ENDL);
|
||||
IfxStdIf_DPipe_print(io, " polynom : 0x%x"ENDL, driver->table->polynom);
|
||||
IfxStdIf_DPipe_print(io, " order : %d"ENDL, driver->table->order);
|
||||
IfxStdIf_DPipe_print(io, " crcinit : 0x%x direct, 0x%x nondirect"ENDL, driver->crcinit_direct, driver->crcinit_nondirect);
|
||||
IfxStdIf_DPipe_print(io, " crcxor : 0x%x"ENDL, driver->crcxor);
|
||||
IfxStdIf_DPipe_print(io, " refin : %d"ENDL, driver->table->refin);
|
||||
IfxStdIf_DPipe_print(io, " refout : %d"ENDL, driver->refout);
|
||||
IfxStdIf_DPipe_print(io, ""ENDL);
|
||||
// IfxStdIf_DPipe_print(io," data string : '%s' (%d bytes)"ENDL, string, stringLength);
|
||||
IfxStdIf_DPipe_print(io, ""ENDL);
|
||||
IfxStdIf_DPipe_print(io, "Results:"ENDL);
|
||||
IfxStdIf_DPipe_print(io, ""ENDL);
|
||||
#if 0
|
||||
IfxCpu_Perf perf;
|
||||
uint32 result;
|
||||
|
||||
IfxCpu_resetAndStartCounters(IfxCpu_CounterMode_normal);
|
||||
result = Ifx_Crc_bitByBit(driver, (uint8 *)string, length);
|
||||
perf = IfxCpu_stopCounters();
|
||||
IfxStdIf_DPipe_print(io, " crc bit by bit : 0x%X, %d cycles"ENDL, result, perf.clock.counter);
|
||||
|
||||
IfxCpu_resetAndStartCounters(IfxCpu_CounterMode_normal);
|
||||
result = Ifx_Crc_bitByBitFast(driver, (uint8 *)string, length);
|
||||
perf = IfxCpu_stopCounters();
|
||||
IfxStdIf_DPipe_print(io, " crc bit by bit fast : 0x%X, %d cycles"ENDL, result, perf.clock.counter);
|
||||
|
||||
IfxCpu_resetAndStartCounters(IfxCpu_CounterMode_normal);
|
||||
result = Ifx_Crc_table(driver, (uint8 *)string, length);
|
||||
perf = IfxCpu_stopCounters();
|
||||
IfxStdIf_DPipe_print(io, " crc table : 0x%X, %d cycles"ENDL, result, perf.clock.counter);
|
||||
|
||||
IfxCpu_resetAndStartCounters(IfxCpu_CounterMode_normal);
|
||||
result = Ifx_Crc_tableFast(driver, (uint8 *)string, length);
|
||||
perf = IfxCpu_stopCounters();
|
||||
IfxStdIf_DPipe_print(io, " crc table fast : 0x%X, %d cycles"ENDL, result, perf.clock.counter);
|
||||
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,130 @@
|
||||
/**
|
||||
* \file Ifx_Crc.h
|
||||
* \brief CRC algorithm
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_crc CRC
|
||||
* This module implements CRC algorithm
|
||||
* \ingroup library_srvsw_sysse_math
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef IFX_CRC_H
|
||||
#define IFX_CRC_H 1
|
||||
//---------------------------------------------------------------------------
|
||||
#include "Cpu/Std/Ifx_Types.h"
|
||||
|
||||
#ifndef CRC_ENABLE_DPIPE
|
||||
#define CRC_ENABLE_DPIPE 0
|
||||
#endif
|
||||
|
||||
#if CRC_ENABLE_DPIPE
|
||||
#include "IfxStdIf_DPipe.h"
|
||||
#endif
|
||||
//---------------------------------------------------------------------------
|
||||
typedef struct
|
||||
{
|
||||
sint32 order;
|
||||
uint32 polynom;
|
||||
sint32 refin;
|
||||
uint32 crchighbit;
|
||||
uint32 crcmask;
|
||||
}Ifc_Crc_Table;
|
||||
typedef struct
|
||||
{
|
||||
Ifc_Crc_Table data; /**< \brief CRC data, must be 1st member of the struct */
|
||||
uint8 crctab[256]; /**< \brief CRC Table, must be 2st member of the struct */
|
||||
}Ifc_Crc_Table8;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Ifc_Crc_Table data; /**< \brief CRC data, must be 1st member of the struct */
|
||||
uint16 crctab[256]; /**< \brief CRC Table, must be 2st member of the struct */
|
||||
}Ifc_Crc_Table16;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Ifc_Crc_Table data; /**< \brief CRC data, must be 1st member of the struct */
|
||||
uint32 crctab[256]; /**< \brief CRC Table, must be 2st member of the struct */
|
||||
}Ifc_Crc_Table32;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 crcxor;
|
||||
sint32 refout;
|
||||
|
||||
uint32 crcinit_direct;
|
||||
uint32 crcinit_nondirect;
|
||||
const Ifc_Crc_Table *table;
|
||||
}Ifc_Crc;
|
||||
|
||||
/** \addtogroup library_srvsw_sysse_math_crc
|
||||
* \{ */
|
||||
/**
|
||||
* \param direct [0,1] specifies the kind of algorithm: 1=direct, no augmented zero bits
|
||||
* \param driver pointer to the crc driver
|
||||
* \param table pointer to crc table
|
||||
* \param direct direct
|
||||
* \param crcinit is the initial CRC value belonging to that algorithm
|
||||
* \param crcxor is the final XOR value
|
||||
* \param refout [0,1] specifies if the CRC will be reflected before XOR
|
||||
* \param table pointer to the table: Ifc_Crc_Table8, Ifc_Crc_Table16, Ifc_Crc_Table32
|
||||
*/
|
||||
boolean Ifx_Crc_init(Ifc_Crc *driver, const Ifc_Crc_Table *table, sint32 direct, sint32 refout, uint32 crcinit, uint32 crcxor);
|
||||
/**
|
||||
* \param table pointer to the crc table
|
||||
* \param order [1..32] is the CRC polynom order, counted without the leading '1' bit
|
||||
* \param polynom is the CRC polynom without leading '1' bit
|
||||
* \param refin [0,1] specifies if a data byte is reflected before processing (UART) or not
|
||||
*/
|
||||
boolean Ifx_Crc_createTable(Ifc_Crc_Table *table, sint32 order, uint32 polynom, sint32 refin);
|
||||
|
||||
#if CRC_ENABLE_DPIPE
|
||||
boolean Ifx_Crc_Test(Ifc_Crc *driver, uint8 *string, uint32 length, IfxStdIf_DPipe *io);
|
||||
void Ifx_Crc_printTable(Ifc_Crc_Table *table, IfxStdIf_DPipe *io);
|
||||
#endif
|
||||
uint32 Ifx_Crc_tableFast(Ifc_Crc *driver, uint8 *p, uint32 len);
|
||||
uint32 Ifx_Crc_table(Ifc_Crc *driver, uint8 *p, uint32 len);
|
||||
uint32 Ifx_Crc_bitByBit(Ifc_Crc *driver, uint8 *p, uint32 len);
|
||||
uint32 Ifx_Crc_bitByBitFast(Ifc_Crc *driver, uint8 *p, uint32 len);
|
||||
/** \} */
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
#endif // IFX_CRC_H
|
||||
@@ -0,0 +1,185 @@
|
||||
/**
|
||||
* \file Ifx_FftF32.c
|
||||
* \brief Floating-point Fast Fourier Transform
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
*/
|
||||
|
||||
#include "Ifx_FftF32.h"
|
||||
#include <math.h>
|
||||
|
||||
//#include "Compiler.h"
|
||||
|
||||
cfloat32 *Ifx_FftF32_generateTwiddleFactor(cfloat32 *TF, short nX)
|
||||
{
|
||||
int i;
|
||||
double Theta;
|
||||
|
||||
// prepare twiddle coefficients
|
||||
for (i = 0; i < nX / 2; i++)
|
||||
{
|
||||
Theta = 2 * IFX_PI * i / nX;
|
||||
|
||||
TF[i].real = (float32)(cosf(Theta));
|
||||
TF[i].imag = (float32)(-sinf(Theta));
|
||||
}
|
||||
|
||||
return TF;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
unsigned short Ifx_FftF32_reverseBits(unsigned short n, unsigned bits)
|
||||
{
|
||||
/* This code is from:
|
||||
* http://graphics.stanford.edu/~seander/bithacks.html
|
||||
* */
|
||||
unsigned long v = n; // 32-bit word to reverse bit order
|
||||
|
||||
// swap odd and even bits
|
||||
v = ((v >> 1) & 0x55555555UL) | ((v & 0x55555555UL) << 1);
|
||||
// swap consecutive pairs
|
||||
v = ((v >> 2) & 0x33333333UL) | ((v & 0x33333333UL) << 2);
|
||||
// swap nibbles ...
|
||||
v = ((v >> 4) & 0x0F0F0F0FUL) | ((v & 0x0F0F0F0FUL) << 4);
|
||||
// swap bytes
|
||||
v = ((v >> 8) & 0x00FF00FFUL) | ((v & 0x00FF00FFUL) << 8);
|
||||
// swap 2-byte long pairs
|
||||
v = (v >> 16) | (v << 16);
|
||||
|
||||
v = v >> (32 - bits);
|
||||
return (unsigned short)v;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
void Ifx_FftF32_radix2DecimationInTime(cfloat32 *R, unsigned long p)
|
||||
{
|
||||
/* http://www.engineeringproductivitytools.com/stuff/T0001/PT04.HTM#Head317
|
||||
* */
|
||||
/*Perform in place Ifx_FftF32_radix2DecimationInTime of 2^p points (=size of f)
|
||||
* N.B. The input array f is in bit reversed order! So all the
|
||||
* 'even' input samples are in the 'top' half, all the 'odd'
|
||||
* input samples are in the 'bottom' halR..etc (recursively).
|
||||
*/
|
||||
/*Ifx_FftF32_radix2DecimationInTime*/
|
||||
unsigned long Bp, Np, Npx, P, b, k, BaseT, BaseB;
|
||||
cfloat32 top, bot;
|
||||
/*initialise pass parameters*/
|
||||
Bp = 1 << (p - 1); /*No. of blocks*/
|
||||
Np = 2; /*No. of points in each block*/
|
||||
|
||||
/*perform p passes*/
|
||||
for (P = 0; P < p; P++)
|
||||
{
|
||||
/*pass loop*/
|
||||
Npx = Np >> 1; /*No. of butterflies*/
|
||||
BaseT = 0; /*Reset even base index*/
|
||||
|
||||
for (b = 0; b < Bp; b++)
|
||||
{
|
||||
/*block loop*/
|
||||
BaseB = BaseT + Npx; /*calc odd base index*/
|
||||
|
||||
for (k = 0; k < Npx; k++)
|
||||
{
|
||||
//printf("P = %d; b = %d; Np = %d; k = %d\n", P, b, Np, k);
|
||||
/*butterfly loop*/
|
||||
top = Ifx_FftF32_lookUpTwiddleFactor(Np, k);
|
||||
bot = IFX_Cf32_mul(&R[BaseB + k], &top); /*twiddle the odd n results*/
|
||||
top = R[BaseT + k];
|
||||
R[BaseT + k] = IFX_Cf32_add(&top, &bot); /*top subset*/
|
||||
R[BaseB + k] = IFX_Cf32_sub(&top, &bot); /*bottom subset*/
|
||||
} /*butterfly loop*/
|
||||
|
||||
BaseT = BaseT + Np; /*start of next block*/
|
||||
} /*block loop*/
|
||||
|
||||
/*calc parameters for next pass*/
|
||||
Bp = Bp >> 1; /*half as many blocks*/
|
||||
Np = Np << 1; /*twice as many points in each block*/
|
||||
} /*pass loop*/
|
||||
} /*Ifx_FftF32_radix2DecimationInTime*/
|
||||
|
||||
|
||||
cfloat32 *Ifx_FftF32_radix2(cfloat32 *R, const cfloat32 *X, unsigned short nX)
|
||||
{
|
||||
unsigned int logN = 31 - __clz(nX);
|
||||
unsigned short n, k;
|
||||
|
||||
/* Arrange in bit-reversed index */
|
||||
for (n = 0; n < nX; n++)
|
||||
{
|
||||
//k = Ifx_FftF32_reverseBits(n, logN);
|
||||
k = Ifx_FftF32_lookUpReversedBits(n, logN);
|
||||
R[k] = X[n];
|
||||
}
|
||||
|
||||
Ifx_FftF32_radix2DecimationInTime(R, logN);
|
||||
|
||||
return R;
|
||||
}
|
||||
|
||||
|
||||
cfloat32 *Ifx_FftF32_radix2I(cfloat32 *R, const cfloat32 *X, unsigned short nX)
|
||||
{
|
||||
unsigned int logN = 31 - __clz(nX);
|
||||
unsigned short n, k = 0;
|
||||
|
||||
/* Arrange in bit-reversed index, and conjugate the input */
|
||||
for (n = 0; n < nX; n++)
|
||||
{
|
||||
//k = Ifx_FftF32_reverseBits(n, logN);
|
||||
k = Ifx_FftF32_lookUpReversedBits(n, logN);
|
||||
R[k].real = X[n].real;
|
||||
R[k].imag = -X[n].imag;
|
||||
}
|
||||
|
||||
Ifx_FftF32_radix2DecimationInTime(R, logN);
|
||||
|
||||
/* Conjugate the output */
|
||||
for (n = 0; n < nX; n++)
|
||||
{
|
||||
R[n].imag = -R[n].imag;
|
||||
}
|
||||
|
||||
return R;
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
/**
|
||||
* \file Ifx_FftF32.h
|
||||
* \brief Floating-point Fast Fourier Transform
|
||||
* \ingroup library_srvsw_sysse_math_f32_fft
|
||||
*
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_f32_fft Floating-point FFT
|
||||
* This module implements the Fast Fourier Transform in single precision floating-point
|
||||
* \ingroup library_srvsw_sysse_math_f32
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef IFX_FFTF32_H
|
||||
#define IFX_FFTF32_H
|
||||
|
||||
#include "Ifx_Cf32.h"
|
||||
|
||||
/** \brief Maximum FFT resolution (bits).
|
||||
* If redefined, then \ref Ifx_g_FftF32_bitReverseTable and \ref Ifx_g_FftF32_twiddleTable shall be regenerated. */
|
||||
#define IFX_FFTF32_MAX_RESOLUTION (14)
|
||||
|
||||
/** \brief Maximum FFT length.
|
||||
* If redefined, then \ref Ifx_g_FftF32_bitReverseTable and \ref Ifx_g_FftF32_twiddleTable shall be regenerated. */
|
||||
#define IFX_FFTF32_MAX_LENGTH (1U << IFX_FFTF32_MAX_RESOLUTION)
|
||||
|
||||
/** \brief Bit reversal table */
|
||||
IFX_EXTERN IFX_CONST uint16 Ifx_g_FftF32_bitReverseTable[IFX_FFTF32_MAX_LENGTH];
|
||||
|
||||
/** \brief Twiddle factor table */
|
||||
IFX_EXTERN IFX_CONST cfloat32 Ifx_g_FftF32_twiddleTable[IFX_FFTF32_MAX_LENGTH / 2];
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
/** \addtogroup library_srvsw_sysse_math_f32_fft
|
||||
* \{ */
|
||||
|
||||
/** \name Transform functions
|
||||
* \{ */
|
||||
|
||||
/** \brief Twiddle factor generator */
|
||||
IFX_EXTERN cfloat32 *Ifx_FftF32_generateTwiddleFactor(cfloat32 *TF, sint16 nX);
|
||||
|
||||
/** \brief Radix-2 Fast-Fourier Transform */
|
||||
IFX_EXTERN cfloat32 *Ifx_FftF32_radix2(cfloat32 *R, const cfloat32 *X, uint16 nX);
|
||||
|
||||
/** \brief Radix-2 Inverse Fast-Fourier Transform */
|
||||
IFX_EXTERN cfloat32 *Ifx_FftF32_radix2I(cfloat32 *R, const cfloat32 *X, uint16 nX);
|
||||
|
||||
/** \} */
|
||||
//----------------------------------------------------------------------------------------
|
||||
/** \name Utility functions
|
||||
* \{ */
|
||||
|
||||
/** \brief Lookup from \ref Ifx_g_FftF32_bitReverseTable the bit-reversed \<n\> with \<bits\> as number of bits */
|
||||
IFX_INLINE uint16 Ifx_FftF32_lookUpReversedBits(uint16 n, unsigned bits)
|
||||
{
|
||||
unsigned shift = IFX_FFTF32_MAX_RESOLUTION - bits;
|
||||
uint16 index = Ifx_g_FftF32_bitReverseTable[n];
|
||||
return index >> shift;
|
||||
}
|
||||
|
||||
|
||||
/** \brief Lookup from \ref Ifx_g_FftF32_twiddleTable the twiddle factor for N, k */
|
||||
IFX_INLINE cfloat32 Ifx_FftF32_lookUpTwiddleFactor(sint32 N, sint32 k)
|
||||
{
|
||||
return Ifx_g_FftF32_twiddleTable[k * IFX_FFTF32_MAX_LENGTH / N];
|
||||
}
|
||||
|
||||
|
||||
/** \brief Calculate the bit-reversed \<n\> with \<bits\> as number of bits */
|
||||
IFX_EXTERN uint16 Ifx_FftF32_reverseBits(uint16 n, unsigned bits);
|
||||
|
||||
/** \} */
|
||||
//----------------------------------------------------------------------------------------
|
||||
/** \} */
|
||||
|
||||
#endif /* IFX_FFTF32_H */
|
||||
+16435
File diff suppressed because it is too large.
Load diff
+8243
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,92 @@
|
||||
/**
|
||||
* \file Ifx_IntegralF32.c
|
||||
* \brief Discrete integral approximation
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
*/
|
||||
#include "Ifx_IntegralF32.h"
|
||||
|
||||
void Ifx_IntegralF32_reset(Ifx_IntegralF32 *ci)
|
||||
{
|
||||
ci->uk = 0;
|
||||
ci->ik = 0;
|
||||
}
|
||||
|
||||
|
||||
void Ifx_IntegralF32_init(Ifx_IntegralF32 *ci, float32 gain, float32 Ts)
|
||||
{
|
||||
ci->delta = gain * Ts / 2;
|
||||
}
|
||||
|
||||
|
||||
float32 Ifx_IntegralF32_step(Ifx_IntegralF32 *ci, float32 ik)
|
||||
{
|
||||
ci->uk = ci->uk + (ik + ci->ik) * ci->delta;
|
||||
ci->ik = ik;
|
||||
|
||||
return ci->uk;
|
||||
}
|
||||
|
||||
|
||||
void Ifx_ClpxFloat32_Integral_reset(Ifx_ClpxFloat32_Integral *ci)
|
||||
{
|
||||
ci->uk.real = 0;
|
||||
ci->uk.imag = 0;
|
||||
ci->ik.real = 0;
|
||||
ci->ik.imag = 0;
|
||||
}
|
||||
|
||||
|
||||
void Ifx_ClpxFloat32_Integral_init(Ifx_ClpxFloat32_Integral *ci, float32 gain, float32 Ts)
|
||||
{
|
||||
Ifx_ClpxFloat32_Integral_reset(ci);
|
||||
ci->delta = gain * Ts / 2;
|
||||
}
|
||||
|
||||
|
||||
cfloat32 Ifx_ClpxFloat32_Integral_step(Ifx_ClpxFloat32_Integral *ci, cfloat32 ik)
|
||||
{
|
||||
ci->uk.real = ci->uk.real + (ik.real + ci->ik.real) * ci->delta;
|
||||
ci->uk.imag = ci->uk.imag + (ik.imag + ci->ik.imag) * ci->delta;
|
||||
ci->ik = ik;
|
||||
|
||||
return ci->uk;
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
/**
|
||||
* \file Ifx_IntegralF32.h
|
||||
* \brief Discrete integral approximation
|
||||
* \ingroup library_srvsw_sysse_math_f32_integral
|
||||
*
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_f32_integral Discrete Integral Approximation
|
||||
* \ingroup library_srvsw_sysse_math_f32
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef INTEGRAL_H
|
||||
#define INTEGRAL_H
|
||||
|
||||
#include "Ifx_Cf32.h"
|
||||
|
||||
/** \brief Integrator object for float32 data type */
|
||||
typedef struct
|
||||
{
|
||||
float32 uk;
|
||||
float32 ik;
|
||||
float32 delta;
|
||||
} Ifx_IntegralF32;
|
||||
|
||||
/** \brief Integrator object for cfloat32 data type */
|
||||
typedef struct
|
||||
{
|
||||
cfloat32 uk;
|
||||
cfloat32 ik;
|
||||
float32 delta;
|
||||
} Ifx_ClpxFloat32_Integral;
|
||||
|
||||
/** \addtogroup library_srvsw_sysse_math_f32_integral
|
||||
* \{ */
|
||||
|
||||
/** \brief Initialize the integrator object
|
||||
* \param ci Pointer to the integrator object
|
||||
* \param gain Integrator gain
|
||||
* \param Ts Sampling period */
|
||||
void Ifx_IntegralF32_init(Ifx_IntegralF32 *ci, float32 gain, float32 Ts);
|
||||
|
||||
/** \brief Step function of the integrator object
|
||||
* \param ci Pointer to the integrator object
|
||||
* \param ik input value
|
||||
* \return most actual integrator value */
|
||||
float32 Ifx_IntegralF32_step(Ifx_IntegralF32 *ci, float32 ik);
|
||||
|
||||
/** \brief Reset the integrator object
|
||||
* \param ci Pointer to the integrator object */
|
||||
void Ifx_IntegralF32_reset(Ifx_IntegralF32 *ci);
|
||||
|
||||
/** \brief Initialize the integrator object
|
||||
* \param ci Pointer to the integrator object
|
||||
* \param gain Integrator gain
|
||||
* \param Ts Sampling period */
|
||||
void Ifx_ClpxFloat32_Integral_init(Ifx_ClpxFloat32_Integral *ci, float32 gain, float32 Ts);
|
||||
|
||||
/** \brief Step function of the integrator object
|
||||
* \param ci Pointer to the integrator object
|
||||
* \param ik input value
|
||||
* \return most actual integrator value */
|
||||
cfloat32 Ifx_ClpxFloat32_Integral_step(Ifx_ClpxFloat32_Integral *ci, cfloat32 ik);
|
||||
|
||||
/** \brief Reset the integrator object
|
||||
* \param ci Pointer to the integrator object */
|
||||
void Ifx_ClpxFloat32_Integral_reset(Ifx_ClpxFloat32_Integral *ci);
|
||||
|
||||
/**\}*/
|
||||
|
||||
#endif /* INTEGRAL_H */
|
||||
@@ -0,0 +1,80 @@
|
||||
/**
|
||||
* \file Ifx_LowPassPt1F32.c
|
||||
* \brief Low pass filter PT1
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#include "SysSe/Math/Ifx_LowPassPt1F32.h"
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/** \brief Set the low pass filter configuration
|
||||
*
|
||||
* This function sets the low pass filter configuration and reset the filter output.
|
||||
*
|
||||
* \param filter Specifies PT1 filter.
|
||||
* \param config Specifies the PT1 filter configuration.
|
||||
*
|
||||
* \return None
|
||||
*/
|
||||
void Ifx_LowPassPt1F32_init(Ifx_LowPassPt1F32 *filter, const Ifx_LowPassPt1F32_Config *config)
|
||||
{
|
||||
float32 tStar;
|
||||
float32 T = 1 / config->cutOffFrequency;
|
||||
tStar = 1 / (T / config->samplingTime + 1);
|
||||
|
||||
filter->a = config->gain * tStar;
|
||||
filter->b = tStar;
|
||||
filter->out = 0;
|
||||
}
|
||||
|
||||
|
||||
/** \brief Execute the low pass filter
|
||||
* \param filter Specifies PT1 filter.
|
||||
* \param input Specifies the filter input.
|
||||
*
|
||||
* \return Returns the filter output
|
||||
*/
|
||||
float32 Ifx_LowPassPt1F32_do(Ifx_LowPassPt1F32 *filter, float32 input)
|
||||
{
|
||||
filter->out = filter->out + filter->a * input - filter->b * filter->out;
|
||||
return filter->out;
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
/**
|
||||
* \file Ifx_LowPassPt1F32.h
|
||||
* \brief Low pass filter PT1
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_f32_lowpasspt1 Low-pass Filter: Type PT1
|
||||
* This module implements a PT1 low pass filter.
|
||||
* http://de.wikipedia.org/wiki/PT1-Glied
|
||||
*
|
||||
* Formula: \n
|
||||
* \f$ y_k = y_{k-1} + a * x_k - b * y_{k-1} \f$ \n
|
||||
* with \f$(T^* = \frac{T_s}{T+T_s})\f$, \f$(a = K*T^*)\f$, \f$(b = T^*)\f$
|
||||
* with \f$(T_s: Sample time)\f$, \f$(K: Gain)\f$, \f$(T = \frac{1}{\omega_0})\f$
|
||||
*
|
||||
* \ingroup library_srvsw_sysse_math_f32
|
||||
*
|
||||
*/
|
||||
|
||||
#if !defined(IFX_LOWPASSPT1F32)
|
||||
#define IFX_LOWPASSPT1F32
|
||||
//------------------------------------------------------------------------------
|
||||
#include "Cpu/Std/Ifx_Types.h"
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/** \brief PT1 object definition.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
float32 a; /**< \brief a parameter */
|
||||
float32 b; /**< \brief b parameter */
|
||||
float32 out; /**< \brief last output */
|
||||
} Ifx_LowPassPt1F32;
|
||||
|
||||
/** \brief PT1 configuration */
|
||||
typedef struct
|
||||
{
|
||||
float32 cutOffFrequency; /**< \brief Cut off frequency */
|
||||
float32 gain; /**< \brief Gain */
|
||||
float32 samplingTime; /**< \brief Sampling time */
|
||||
} Ifx_LowPassPt1F32_Config;
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/** \addtogroup library_srvsw_sysse_math_f32_lowpasspt1
|
||||
* \{ */
|
||||
IFX_EXTERN void Ifx_LowPassPt1F32_init(Ifx_LowPassPt1F32 *filter, const Ifx_LowPassPt1F32_Config *config);
|
||||
IFX_INLINE void Ifx_LowPassPt1F32_reset(Ifx_LowPassPt1F32 *filter);
|
||||
IFX_EXTERN float32 Ifx_LowPassPt1F32_do(Ifx_LowPassPt1F32 *filter, float32 input);
|
||||
/** \} */
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/** \brief Reset the internal filter variable
|
||||
* \param filter Specifies PT1 filter.
|
||||
*/
|
||||
IFX_INLINE void Ifx_LowPassPt1F32_reset(Ifx_LowPassPt1F32 *filter)
|
||||
{
|
||||
filter->out = 0.0;
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#endif
|
||||
@@ -0,0 +1,97 @@
|
||||
/**
|
||||
* \file Ifx_Lut.h
|
||||
* \brief Lookup defintion with fixed-point angle data type
|
||||
*
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_lut Look-ups
|
||||
* \ingroup library_srvsw_sysse_math
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_f32_lut Look-ups float32
|
||||
* \ingroup library_srvsw_sysse_math_lut
|
||||
*
|
||||
*/
|
||||
#ifndef IFX_LUT_H
|
||||
#define IFX_LUT_H
|
||||
//________________________________________________________________________________________
|
||||
#include "Cpu/Std/IfxCpu_Intrinsics.h"
|
||||
//________________________________________________________________________________________
|
||||
#ifndef IFX_LUT_TABLE_CONST
|
||||
/** \brief 0 = Lookup tables are generated and stored in RAM,
|
||||
* 1 = Lookup tables are precompiled and stored in FLASH */
|
||||
#define IFX_LUT_TABLE_CONST (1)
|
||||
#endif
|
||||
|
||||
#if (IFX_LUT_TABLE_CONST != 0)
|
||||
/** \brief Lookup table type modifier (stored in ROM) */
|
||||
# define IFX_LUT_TABLE const
|
||||
#else
|
||||
/** \brief Lookup table type modifier (stored in RAM) */
|
||||
# define IFX_LUT_TABLE
|
||||
#endif
|
||||
|
||||
/** \brief Define the resolution (in bits) of cosinus and sinus table \ingroup library_srvsw_sysse_math_lut */
|
||||
#define IFX_LUT_ANGLE_BITS (12)
|
||||
|
||||
/** \brief Define the cosinus and sinus table size \ingroup library_srvsw_sysse_math_lut */
|
||||
#define IFX_LUT_ANGLE_RESOLUTION (1 << IFX_LUT_ANGLE_BITS)
|
||||
|
||||
/** \brief Value used as 180 degree angle */
|
||||
#define IFX_LUT_ANGLE_PI (IFX_LUT_ANGLE_RESOLUTION / 2)
|
||||
|
||||
//________________________________________________________________________________________
|
||||
/** \brief Fixed-point angle type.
|
||||
*
|
||||
* Resolution is defined by \ref IFX_LUT_ANGLE_RESOLUTION */
|
||||
typedef sint32 Ifx_Lut_FxpAngle;
|
||||
|
||||
/** \brief Convert from float32 angle in radian into fixed-point angle type */
|
||||
#define IFX_LUT_F32_TO_FXPANGLE(f) ((Ifx_Lut_FxpAngle)(f / IFX_PI * IFX_LUT_ANGLE_PI))
|
||||
|
||||
/** \brief Convert from fixed-point angle type to float32 angle in radian */
|
||||
#define IFX_LUT_FXPANGLE_TO_F32(fx) ((float32)fx * IFX_PI / IFX_LUT_ANGLE_PI)
|
||||
|
||||
//________________________________________________________________________________________
|
||||
#if (1U << IFX_LUT_ANGLE_BITS) != IFX_LUT_ANGLE_RESOLUTION
|
||||
#error (1U << IFX_LUT_ANGLE_BITS) != IFX_LUT_ANGLE_RESOLUTION
|
||||
#endif
|
||||
//________________________________________________________________________________________
|
||||
#endif /* IFX_LUT_H */
|
||||
@@ -0,0 +1,204 @@
|
||||
/**
|
||||
* \file Ifx_LutAtan2F32.c
|
||||
* \brief ATAN2 lookup functions with fixed-point angle data type
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
*/
|
||||
#include "Ifx_LutAtan2F32.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
void Ifx_LutAtan2F32_init(void)
|
||||
{
|
||||
#if IFX_LUT_TABLE_CONST == 0
|
||||
{ /* generate arctan table */
|
||||
sint32 k;
|
||||
float32 Step, value;
|
||||
Step = (double)IFX_LUT_ATAN_LIMIT_LOW / IFX_LUT_ATAN_SIZE_LOW;
|
||||
|
||||
for (k = 0; k < IFX_LUTATAN2F32_SIZE; k++)
|
||||
{
|
||||
Ifx_g_LutAtan2F32_FxpAngle_table[k] = IFX_LUT_F32_TO_FXPANGLE(atanf(k / Step));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
IFX_INLINE Ifx_Lut_FxpAngle Ifx_LutAtan2F32_fxpAnglePrivate(float32 valf)
|
||||
{
|
||||
uint32 vali;
|
||||
valf = IFX_LUTATAN2F32_SIZE * valf;
|
||||
vali = (uint32)valf;
|
||||
|
||||
if ((valf - (float32)vali) > 0.5)
|
||||
{ /* Round to nearest */
|
||||
vali++;
|
||||
}
|
||||
|
||||
return Ifx_g_LutAtan2F32_FxpAngle_table[vali];
|
||||
}
|
||||
|
||||
|
||||
IFX_INLINE float32 Ifx_LutAtan2F32_float32Private(float32 val)
|
||||
{ /* FIXME round to nearest ?? */
|
||||
return Ifx_g_LutAtan2F32_table[(int)(val * IFX_LUTATAN2F32_SIZE)];
|
||||
}
|
||||
|
||||
|
||||
Ifx_Lut_FxpAngle Ifx_LutAtan2F32_fxpAngle(float32 x, float32 y)
|
||||
{
|
||||
Ifx_Lut_FxpAngle angle;
|
||||
float32 fx = (float32)x;
|
||||
float32 fy = (float32)y;
|
||||
|
||||
if (y < 0)
|
||||
{
|
||||
if (x < 0)
|
||||
{
|
||||
if (-y < -x)
|
||||
{ // 180 .. 225 deg
|
||||
angle = -IFX_LUT_ANGLE_PI + Ifx_LutAtan2F32_fxpAnglePrivate(-fy / -fx);
|
||||
}
|
||||
else
|
||||
{ // 225 .. 270 deg
|
||||
angle = -(IFX_LUT_ANGLE_PI / 2) - Ifx_LutAtan2F32_fxpAnglePrivate(-fx / -fy);
|
||||
}
|
||||
}
|
||||
else // x >= 0
|
||||
{
|
||||
if (-y < x)
|
||||
{ // 315 .. 360 deg
|
||||
angle = -Ifx_LutAtan2F32_fxpAnglePrivate(-fy / fx); // ok
|
||||
}
|
||||
else
|
||||
{ // 225 .. 270 deg
|
||||
angle = -(IFX_LUT_ANGLE_PI / 2) + Ifx_LutAtan2F32_fxpAnglePrivate(fx / -fy);
|
||||
}
|
||||
}
|
||||
}
|
||||
else // y >= 0
|
||||
{
|
||||
if (x < 0)
|
||||
{
|
||||
if (y < -x)
|
||||
{ // 135 .. 180 deg
|
||||
angle = IFX_LUT_ANGLE_PI - Ifx_LutAtan2F32_fxpAnglePrivate(fy / -fx); // ok
|
||||
}
|
||||
else
|
||||
{ // 90 .. 135 deg
|
||||
angle = (IFX_LUT_ANGLE_PI / 2) + Ifx_LutAtan2F32_fxpAnglePrivate(-fx / fy); // ok
|
||||
}
|
||||
}
|
||||
else // x >= 0
|
||||
{
|
||||
if (y < x)
|
||||
{ // 0 .. 45 deg
|
||||
angle = Ifx_LutAtan2F32_fxpAnglePrivate(fy / fx); // ok
|
||||
}
|
||||
else
|
||||
{ // 45 .. 90 deg
|
||||
angle = (IFX_LUT_ANGLE_PI / 2) - Ifx_LutAtan2F32_fxpAnglePrivate(fx / fy); // ok
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return angle & (IFX_LUT_ANGLE_RESOLUTION - 1);
|
||||
}
|
||||
|
||||
|
||||
float32 Ifx_LutAtan2F32_float32(float32 y, float32 x)
|
||||
{
|
||||
float32 angle;
|
||||
|
||||
if (y < 0)
|
||||
{
|
||||
if (x < 0)
|
||||
{
|
||||
if (-y < -x)
|
||||
{ // 180 .. 225 deg
|
||||
angle = -IFX_PI + Ifx_LutAtan2F32_float32Private(-y / -x);
|
||||
}
|
||||
else
|
||||
{ // 225 .. 270 deg
|
||||
angle = -(IFX_PI / 2) - Ifx_LutAtan2F32_float32Private(-x / -y);
|
||||
}
|
||||
}
|
||||
else // x >= 0
|
||||
{
|
||||
if (-y < x)
|
||||
{ // 315 .. 360 deg
|
||||
angle = -Ifx_LutAtan2F32_float32Private(-y / x); // ok
|
||||
}
|
||||
else
|
||||
{ // 225 .. 270 deg
|
||||
angle = -(IFX_PI / 2) + Ifx_LutAtan2F32_float32Private(x / -y);
|
||||
}
|
||||
}
|
||||
}
|
||||
else // y >= 0
|
||||
{
|
||||
if (x < 0)
|
||||
{
|
||||
if (y < -x)
|
||||
{ // 135 .. 180 deg
|
||||
angle = IFX_PI - Ifx_LutAtan2F32_float32Private(y / -x); // ok
|
||||
}
|
||||
else
|
||||
{ // 90 .. 135 deg
|
||||
angle = (IFX_PI / 2) + Ifx_LutAtan2F32_float32Private(-x / y); // ok
|
||||
}
|
||||
}
|
||||
else // x >= 0
|
||||
{
|
||||
if (y < x)
|
||||
{ // 0 .. 45 deg
|
||||
angle = Ifx_LutAtan2F32_float32Private(y / x); // ok
|
||||
}
|
||||
else
|
||||
{ // 45 .. 90 deg
|
||||
angle = (IFX_PI / 2) - Ifx_LutAtan2F32_float32Private(x / y); // ok
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return angle;
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
/**
|
||||
* \file Ifx_LutAtan2F32.h
|
||||
* \brief Floating point signal, vector, and matrix library
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_lut_atan2 ATAN lookup table
|
||||
* \ingroup library_srvsw_sysse_math_f32_lut
|
||||
*/
|
||||
|
||||
#ifndef IFX_LUTATAN2F32_H
|
||||
#define IFX_LUTATAN2F32_H
|
||||
//----------------------------------------------------------------------------------------
|
||||
#include "Ifx_Lut.h"
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
|
||||
#define IFX_LUTATAN2F32_SIZE (1024) /**< \brief size of Ifx_LutAtan2F32 table */
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
|
||||
/** \brief Table I for Ifx_LutAtan2F32_fxpAngle() */
|
||||
IFX_EXTERN IFX_LUT_TABLE Ifx_Lut_FxpAngle Ifx_g_LutAtan2F32_FxpAngle_table[IFX_LUTATAN2F32_SIZE + 1];
|
||||
IFX_EXTERN IFX_LUT_TABLE float32 Ifx_g_LutAtan2F32_table[IFX_LUTATAN2F32_SIZE + 1];
|
||||
|
||||
/** \brief Initialise the lookup tables
|
||||
* \ingroup library_srvsw_sysse_math_lut_atan2
|
||||
*/
|
||||
IFX_EXTERN void Ifx_LutAtan2F32_init(void);
|
||||
|
||||
/**
|
||||
* \brief Look-up arcus tangent value of y/x.
|
||||
* \return fxpAngle 0 .. (IFX_LUT_ANGLE_RESOLUTION - 1), which represents 0 .. 2*IFX_PI
|
||||
* \ingroup library_srvsw_sysse_math_lut_atan2
|
||||
*/
|
||||
IFX_EXTERN Ifx_Lut_FxpAngle Ifx_LutAtan2F32_fxpAngle(float32 x, float32 y);
|
||||
IFX_EXTERN float32 Ifx_LutAtan2F32_float32(float32 y, float32 x);
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,96 @@
|
||||
/**
|
||||
* \file Ifx_LutIndexedLinearF32.h
|
||||
* \brief Look-up functionality
|
||||
*
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_f32_lut_indexedLinear Indexes look-up table (with linear interpolation)
|
||||
* \ingroup library_srvsw_sysse_math_f32_lut
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef IFX_LUTINDEXEDLINEARF32_H
|
||||
#define IFX_LUTINDEXEDLINEARF32_H
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// INCLUDES
|
||||
#include "Cpu/Std/Ifx_Types.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float32 gain; /**< \brief channel gain */
|
||||
float32 offset; /**< \brief channel offset */
|
||||
} Ifx_LutIndexedLinearF32_Item;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16 segmentCount;
|
||||
sint8 shift;
|
||||
const Ifx_LutIndexedLinearF32_Item *segments;
|
||||
} Ifx_LutIndexedLinearF32;
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// FUNCTION PROTOTYPES
|
||||
|
||||
/** \addtogroup library_srvsw_sysse_math_f32_lut_indexedLinear
|
||||
* \{ */
|
||||
IFX_INLINE float32 Ifx_LutIndexedLinearF32_search(const Ifx_LutIndexedLinearF32 *ml, uint32 index);
|
||||
/** \} */
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// INLINE FUNCTION IMPLEMENTATION
|
||||
|
||||
/** \brief Look-up table search
|
||||
*
|
||||
*
|
||||
* \param ml pointer to the multi-segment object
|
||||
* \param index
|
||||
* \return interpolated value */
|
||||
IFX_INLINE float32 Ifx_LutIndexedLinearF32_search(const Ifx_LutIndexedLinearF32 *ml, uint32 index)
|
||||
{
|
||||
uint32 i;
|
||||
i = index >> ml->shift;
|
||||
|
||||
return (ml->segments[i].gain * index) + ml->segments[i].offset;
|
||||
}
|
||||
|
||||
|
||||
#endif /* IFX_LUTINDEXEDLINEARF32_H */
|
||||
@@ -0,0 +1,201 @@
|
||||
/**
|
||||
* \file Ifx_LutLSincosF32.c
|
||||
* \brief Table data for linear interpolation Sin/Cos lookup functions
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* $Revision: 614 $
|
||||
* $Date: 2013-03-04 14:09:48 +0100 (Mon, 04 Mar 2013) $
|
||||
*
|
||||
*/
|
||||
|
||||
#include "Ifx_Lut.h"
|
||||
#include "Ifx_LutIndexedLinearF32.h"
|
||||
|
||||
#if IFX_LUT_TABLE_CONST == 0
|
||||
/* FIXME Table size not consistent */
|
||||
IFX_LUT_TABLE float32 Ifx_g_LutLSincosF32_table[IFX_LUT_ANGLE_RESOLUTION + (IFX_LUT_ANGLE_RESOLUTION / 4)];
|
||||
IFX_LUT_TABLE Ifx_LutIndexedLinearF32 Ifx_g_LutLSincosF32;
|
||||
#else
|
||||
|
||||
#if (IFX_LUT_ANGLE_RESOLUTION != 4096)
|
||||
#error "Inconsistent between Lookup Table and configuration. Please regenerate."
|
||||
#endif
|
||||
|
||||
/*lint -e915*/
|
||||
#define IFX_F32_LUTL_SINCOS_ELEMENT_COUNT (128)
|
||||
|
||||
const Ifx_LutIndexedLinearF32_Item Ifx_g_LutLSincosF32_table[128] = {
|
||||
{0.00153336482273181, 0 },
|
||||
{0.00152967081256696, 0.000118208325275426},
|
||||
{0.00152229169143129, 0.000590472077958315},
|
||||
{0.00151124523627395, 0.00165093177306225 },
|
||||
{0.00149655805897299, 0.00353089046758576 },
|
||||
{0.00147826554222495, 0.00645769314727157 },
|
||||
{0.00145641175430493, 0.010653620427916 },
|
||||
{0.00143104934290218, 0.0163348005821319 },
|
||||
{0.00140223940828726, 0.0237101438435514 },
|
||||
{0.00137005135611611, 0.0329803028688421 },
|
||||
{0.00133456273022575, 0.0443366631537574 },
|
||||
{0.00129585902582439, 0.057960367103036 },
|
||||
{0.00125403348352597, 0.074021375345628 },
|
||||
{0.00120918686472538, 0.0926775687666757 },
|
||||
{0.0011614272088554, 0.114073894596426 },
|
||||
{0.00111086957311029, 0.138341559754081 },
|
||||
{0.00105763575526286, 0.165597274491961 },
|
||||
{0.00100185400024306, 0.195942549222735 },
|
||||
{0.00094365869118462, 0.229463047240396 },
|
||||
{0.000883190025684388, 0.266227995864537 },
|
||||
{0.000820593678053965, 0.306289658348008 },
|
||||
{0.000756020448377588, 0.349682868690533 },
|
||||
{0.000689625899221512, 0.39642463129641 },
|
||||
{0.000621569980870106, 0.446513787203045 },
|
||||
{0.00055201664599169, 0.499930748389669 },
|
||||
{0.000481133454662129, 0.556637301453318 },
|
||||
{0.00040909117069797, 0.616576481711498 },
|
||||
{0.000336063350271452, 0.67967251856001 },
|
||||
{0.000262225923798456, 0.745830852679814 },
|
||||
{0.000187756772106744, 0.814938225449723 },
|
||||
{0.000112835297905487, 0.886862840682929 },
|
||||
{3.76419935883623E-05, 0.961454598565517 },
|
||||
{-3.76419935883623E-05, 1.03854540143448 },
|
||||
{-0.000112835297905484, 1.11794953079336 },
|
||||
{-0.000187756772106747, 1.19946409472434 },
|
||||
{-0.000262225923798456, 1.28286954461905 },
|
||||
{-0.000336063350271452, 1.36793025991594 },
|
||||
{-0.00040909117069797, 1.45439519930094 },
|
||||
{-0.000481133454662129, 1.54199861660136 },
|
||||
{-0.00055201664599169, 1.63046083938065 },
|
||||
{-0.000621569980870103, 1.71948910802502 },
|
||||
{-0.000689625899221512, 1.80877847290207 },
|
||||
{-0.000756020448377592, 1.89801274696784 },
|
||||
{-0.000820593678053958, 1.98686551100252 },
|
||||
{-0.000883190025684391, 2.07500116846617 },
|
||||
{-0.00094365869118462, 2.1620760467865 },
|
||||
{-0.00100185400024307, 2.24773954172053 },
|
||||
{-0.00105763575526286, 2.3316353012703 },
|
||||
{-0.00111086957311028, 2.41340244548394 },
|
||||
{-0.00116142720885541, 2.4926768183323 },
|
||||
{-0.00120918686472538, 2.56909226772425 },
|
||||
{-0.00125403348352598, 2.64228194960683 },
|
||||
{-0.00129585902582439, 2.71187965199138 },
|
||||
{-0.00133456273022575, 2.77752113465609 },
|
||||
{-0.00137005135611612, 2.83884548019465 },
|
||||
{-0.00140223940828725, 2.89549645201585 },
|
||||
{-0.00143104934290217, 2.94712385484579 },
|
||||
{-0.00145641175430494, 2.99338489324442 },
|
||||
{-0.00147826554222495, 3.03394552362397 },
|
||||
{-0.00149655805897298, 3.06848179524426 },
|
||||
{-0.00151124523627396, 3.09668117566214 },
|
||||
{-0.00152229169143128, 3.11824385612922 },
|
||||
{-0.00152967081256696, 3.13288403246242 },
|
||||
{-0.00153336482273181, 3.14033115695474 },
|
||||
{-0.00153336482273181, 3.14033115695474 },
|
||||
{-0.00152967081256696, 3.13264761581187 },
|
||||
{-0.00152229169143128, 3.11706291197331 },
|
||||
{-0.00151124523627396, 3.09337931211601 },
|
||||
{-0.00149655805897298, 3.06142001430908 },
|
||||
{-0.00147826554222495, 3.02103013732942 },
|
||||
{-0.00145641175430494, 2.9720776523886 },
|
||||
{-0.00143104934290217, 2.91445425368152 },
|
||||
{-0.00140223940828725, 2.84807616432874 },
|
||||
{-0.00137005135611612, 2.77288487445697 },
|
||||
{-0.00133456273022575, 2.68884780834857 },
|
||||
{-0.00129585902582439, 2.59595891778531 },
|
||||
{-0.00125403348352598, 2.49423919891558 },
|
||||
{-0.00120918686472538, 2.38373713019089 },
|
||||
{-0.00116142720885541, 2.26452902913946 },
|
||||
{-0.00111086957311028, 2.13671932597577 },
|
||||
{-0.00105763575526286, 2.00044075228637 },
|
||||
{-0.00100185400024306, 1.85585444327504 },
|
||||
{-0.000943658691184637, 1.70314995230575 },
|
||||
{-0.000883190025684381, 1.54254517673707 },
|
||||
{-0.000820593678053962, 1.3742861943065 },
|
||||
{-0.000756020448377592, 1.19864700958678 },
|
||||
{-0.000689625899221506, 1.01592921030923 },
|
||||
{-0.000621569980870106, 0.826461533618933 },
|
||||
{-0.000552016645991697, 0.630599342601331 },
|
||||
{-0.000481133454662126, 0.428724013694713 },
|
||||
{-0.000409091170697973, 0.221242235877955 },
|
||||
{-0.000336063350271448, 0.00858522279591345 },
|
||||
{-0.000262225923798456, -0.208792160740577 },
|
||||
{-0.000187756772106751, -0.430412356175091 },
|
||||
{-0.000112835297905484, -0.655776150572502 },
|
||||
{-3.76419935883623E-05, -0.884363795696551 },
|
||||
{3.76419935883623E-05, -1.11563620430345 },
|
||||
{0.000112835297905484, -1.34903622090379 },
|
||||
{0.000187756772106751, -1.58398996399897 },
|
||||
{0.000262225923798452, -1.81990823655828 },
|
||||
{0.000336063350271452, -2.05618800127188 },
|
||||
{0.00040909117069797, -2.29221391689038 },
|
||||
{0.000481133454662126, -2.52735993174939 },
|
||||
{0.000552016645991697, -2.76099093037165 },
|
||||
{0.000621569980870103, -2.99246442884699 },
|
||||
{0.000689625899221509, -3.22113231450771 },
|
||||
{0.000756020448377588, -3.44634262524513 },
|
||||
{0.000820593678053962, -3.66744136365704 },
|
||||
{0.000883190025684381, -3.88377434106776 },
|
||||
{0.000943658691184637, -4.09468904633266 },
|
||||
{0.00100185400024306, -4.29953653421829 },
|
||||
{0.00105763575526286, -4.49767332804863 },
|
||||
{0.00111086957311028, -4.6884633312138 },
|
||||
{0.0011614272088554, -4.87127974206814 },
|
||||
{0.0012091868647254, -5.04550696668189 },
|
||||
{0.00125403348352597, -5.21054252386801 },
|
||||
{0.00129585902582438, -5.36579893687972 },
|
||||
{0.00133456273022575, -5.51070560615843 },
|
||||
{0.00137005135611611, -5.64471065752041 },
|
||||
{0.00140223940828725, -5.76728276018815 },
|
||||
{0.0014310493429022, -5.87791290910954 },
|
||||
{0.00145641175430492, -5.97611616606088 },
|
||||
{0.00147826554222495, -6.06143335410066 },
|
||||
{0.00149655805897298, -6.13343270002092 },
|
||||
{0.00151124523627395, -6.19171141955115 },
|
||||
{0.00152229169143131, -6.2358972401806 },
|
||||
{0.00152967081256695, -6.2656498565995 },
|
||||
{0.00153336482273181, -6.28066231390948 },
|
||||
};
|
||||
|
||||
const Ifx_LutIndexedLinearF32 Ifx_g_LutLSincosF32 = {
|
||||
.segmentCount = IFX_F32_LUTL_SINCOS_ELEMENT_COUNT,
|
||||
.shift = 5,
|
||||
.segments = Ifx_g_LutLSincosF32_table
|
||||
};
|
||||
#endif
|
||||
@@ -0,0 +1,107 @@
|
||||
/**
|
||||
* \file Ifx_LutLSincosF32.h
|
||||
* \brief Sin/Cos linear approximated lookup functions with fixed-point angle data type
|
||||
* \ingroup library_srvsw_sysse_math_lut_lsincos
|
||||
*
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_lut_lsincos Linear trigonometric Look-ups
|
||||
* \ingroup library_srvsw_sysse_math_f32_lut
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef IFX_LUTLSINCOSF32_H
|
||||
#define IFX_LUTLSINCOSF32_H
|
||||
//________________________________________________________________________________________
|
||||
|
||||
#include "SysSe/Math/IFX_Cf32.h"
|
||||
#include "Ifx_Lut.h"
|
||||
#include "Ifx_LutIndexedLinearF32.h"
|
||||
//________________________________________________________________________________________
|
||||
|
||||
/**
|
||||
* \brief Look-up table for sin */
|
||||
IFX_EXTERN const Ifx_LutIndexedLinearF32 Ifx_g_LutLSincosF32;
|
||||
|
||||
/**
|
||||
* \brief Sine lookup function
|
||||
* \param fxpAngle 0 .. (IFX_LUT_ANGLE_RESOLUTION - 1)
|
||||
* \return sin(2*IFX_PI*fxpAngle/IFX_LUT_ANGLE_RESOLUTION)
|
||||
* \ingroup library_srvsw_sysse_math_lut_lsincos
|
||||
*/
|
||||
IFX_INLINE float32 Ifx_LutLSincosF32_sin(Ifx_Lut_FxpAngle fxpAngle)
|
||||
{
|
||||
fxpAngle = fxpAngle & (IFX_LUT_ANGLE_RESOLUTION - 1);
|
||||
|
||||
return Ifx_LutIndexedLinearF32_search(&Ifx_g_LutLSincosF32, fxpAngle);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Cosine lookup function
|
||||
* \param fxpAngle 0 .. (IFX_LUT_ANGLE_RESOLUTION - 1), which represents 0 .. 2*IFX_PI
|
||||
* \return cos(2*IFX_PI*fxpAngle/IFX_LUT_ANGLE_RESOLUTION)
|
||||
* \ingroup library_srvsw_sysse_math_lut_lsincos
|
||||
*/
|
||||
IFX_INLINE float32 Ifx_LutLSincosF32_cos(Ifx_Lut_FxpAngle fxpAngle)
|
||||
{
|
||||
return Ifx_LutLSincosF32_sin((IFX_LUT_ANGLE_PI / 2) - fxpAngle);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Sine and Cosine lookup function
|
||||
* \param fxpAngle 0 .. (IFX_LUT_ANGLE_RESOLUTION - 1), which represents 0 .. 2*IFX_PI
|
||||
* \retval real = cos(2*IFX_PI*fxpAngle/IFX_LUT_ANGLE_RESOLUTION)
|
||||
* \retval imag = sin(2*IFX_PI*fxpAngle/IFX_LUT_ANGLE_RESOLUTION)
|
||||
* \ingroup library_srvsw_sysse_math_lut_lsincos
|
||||
*/
|
||||
IFX_INLINE cfloat32 Ifx_LutLSincosF32_cossin(Ifx_Lut_FxpAngle fxpAngle)
|
||||
{
|
||||
cfloat32 result;
|
||||
result.imag = Ifx_LutLSincosF32_sin(fxpAngle);
|
||||
result.real = Ifx_LutLSincosF32_sin((IFX_LUT_ANGLE_PI / 2) - fxpAngle);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
//________________________________________________________________________________________
|
||||
#endif
|
||||
@@ -0,0 +1,99 @@
|
||||
/**
|
||||
* \file Ifx_LutLinearF32.c
|
||||
* \brief Linear look-up function
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
*/
|
||||
|
||||
#include "Ifx_LutLinearF32.h"
|
||||
|
||||
/** \brief Look-up table with binary search implementation
|
||||
*
|
||||
* Value inside table will be linearly interpolated.
|
||||
* Value outside table will be linearly extrapolated.
|
||||
*
|
||||
* \param ml pointer to the multi-segment object
|
||||
* \param index
|
||||
* \return linear interpolated value */
|
||||
float32 Ifx_LutLinearF32_searchBin(const Ifx_LutLinearF32 *ml, float32 index)
|
||||
{
|
||||
sint16 imin;
|
||||
sint16 imax;
|
||||
sint16 imid;
|
||||
|
||||
imin = 0;
|
||||
imax = ml->segmentCount - 1;
|
||||
|
||||
if (ml->segments[1].boundary > ml->segments[0].boundary)
|
||||
{
|
||||
while (imin < imax)
|
||||
{
|
||||
imid = imin + (imax - imin) / 2;
|
||||
|
||||
if (index > ml->segments[imid].boundary)
|
||||
{
|
||||
imin = imid + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
imax = imid;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (imin < imax)
|
||||
{
|
||||
imid = imin + (imax - imin) / 2;
|
||||
|
||||
if (index < ml->segments[imid].boundary)
|
||||
{
|
||||
imin = imid + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
imax = imid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (ml->segments[imin].gain * index) + ml->segments[imin].offset;
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
/**
|
||||
* \file Ifx_LutLinearF32.h
|
||||
* \brief Look-up functionality
|
||||
*
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_f32_lut_linear Look-up table (with linear interpolation)
|
||||
* \ingroup library_srvsw_sysse_math_f32_lut
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef IFX_LUTLINEARF32_H
|
||||
#define IFX_LUTLINEARF32_H
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// INCLUDES
|
||||
#include "Cpu/Std/Ifx_Types.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float32 gain; /**< \brief channel gain */
|
||||
float32 offset; /**< \brief channel offset */
|
||||
float32 boundary; /**< \brief segment input upper limit */
|
||||
} Ifx_LutLinearF32_Item;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
sint8 segmentCount;
|
||||
const Ifx_LutLinearF32_Item *segments;
|
||||
} Ifx_LutLinearF32;
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// FUNCTION PROTOTYPES
|
||||
|
||||
/** \addtogroup library_srvsw_sysse_math_f32_lut_linear
|
||||
* \{ */
|
||||
IFX_EXTERN float32 Ifx_LutLinearF32_searchBin(const Ifx_LutLinearF32 *ml, float32 index);
|
||||
IFX_INLINE float32 Ifx_LutLinearF32_searchNegSeq(const Ifx_LutLinearF32 *ml, float32 index);
|
||||
IFX_INLINE float32 Ifx_LutLinearF32_searchPosSeq(const Ifx_LutLinearF32 *ml, float32 index);
|
||||
/** \} */
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// INLINE FUNCTION IMPLEMENTATION
|
||||
|
||||
/** \brief Look-up table with positive sequential search implementation
|
||||
*
|
||||
* Value inside table will be linearly interpolated
|
||||
* Value outside table will be linearly extrapolated
|
||||
*
|
||||
* \param ml pointer to the multi-segment object
|
||||
* \param index
|
||||
* \return interpolated value */
|
||||
IFX_INLINE float32 Ifx_LutLinearF32_searchPosSeq(const Ifx_LutLinearF32 *ml, float32 index)
|
||||
{
|
||||
sint8 i = 0;
|
||||
|
||||
while ((index > ml->segments[i].boundary) && (i < ml->segmentCount - 1))
|
||||
{
|
||||
i++;
|
||||
}
|
||||
|
||||
return (ml->segments[i].gain * index) + ml->segments[i].offset;
|
||||
}
|
||||
|
||||
|
||||
/** \brief Look-up table with negative sequential search implementation
|
||||
*
|
||||
* Value inside table will be linearly interpolated
|
||||
* Value outside table will be linearly extrapolated
|
||||
*
|
||||
* \param ml pointer to the multi-segment object
|
||||
* \param index
|
||||
* \return interpolated value */
|
||||
IFX_INLINE float32 Ifx_LutLinearF32_searchNegSeq(const Ifx_LutLinearF32 *ml, float32 index)
|
||||
{
|
||||
sint8 i = ml->segmentCount - 1;
|
||||
|
||||
while ((i - 1 >= 0) && (index > ml->segments[i - 1].boundary))
|
||||
{
|
||||
i--;
|
||||
}
|
||||
|
||||
return (ml->segments[i].gain * index) + ml->segments[i].offset;
|
||||
}
|
||||
|
||||
|
||||
#endif /* IFX_LUTLINEARF32_H */
|
||||
@@ -0,0 +1,90 @@
|
||||
/**
|
||||
* \file Ifx_LutSincosF32.c
|
||||
* \brief Sin/Cos lookup functions with fixed-point angle data type
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
*/
|
||||
#include "Ifx_LutSincosF32.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
void Ifx_LutSincosF32_init(void)
|
||||
{
|
||||
#if IFX_LUT_TABLE_CONST == 0
|
||||
{ /* generate sin and cos table */
|
||||
sint32 k;
|
||||
|
||||
for (k = 0; k <= (IFX_LUT_ANGLE_PI / 2); k++)
|
||||
{
|
||||
Ifx_g_LutSincosF32_table[k] = sinf((IFX_PI * 2 * k) / IFX_LUT_ANGLE_RESOLUTION);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
float32 Ifx_LutSincosF32_sin(Ifx_Lut_FxpAngle fxpAngle)
|
||||
{
|
||||
float32 result;
|
||||
fxpAngle = fxpAngle & (IFX_LUT_ANGLE_RESOLUTION - 1);
|
||||
|
||||
if (fxpAngle < (IFX_LUT_ANGLE_PI / 2))
|
||||
{
|
||||
result = Ifx_g_LutSincosF32_table[fxpAngle];
|
||||
}
|
||||
else if (fxpAngle < IFX_LUT_ANGLE_PI)
|
||||
{
|
||||
fxpAngle = IFX_LUT_ANGLE_PI - fxpAngle;
|
||||
result = Ifx_g_LutSincosF32_table[fxpAngle];
|
||||
}
|
||||
else if (fxpAngle < (IFX_LUT_ANGLE_PI / 2 * 3))
|
||||
{
|
||||
fxpAngle = fxpAngle - IFX_LUT_ANGLE_PI;
|
||||
result = -Ifx_g_LutSincosF32_table[fxpAngle];
|
||||
}
|
||||
else
|
||||
{
|
||||
fxpAngle = IFX_LUT_ANGLE_RESOLUTION - fxpAngle;
|
||||
result = -Ifx_g_LutSincosF32_table[fxpAngle];
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
/**
|
||||
* \file Ifx_LutSincosF32.h
|
||||
* \brief Sin/Cos lookup functions with fixed-point angle data type
|
||||
* \ingroup library_srvsw_sysse_math_lut_sincos
|
||||
*
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_lut_sincos Sinus and cosinus Look-ups
|
||||
* \ingroup library_srvsw_sysse_math_f32_lut
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef IFX_LUTSINCOSF32_H
|
||||
#define IFX_LUTSINCOSF32_H
|
||||
//________________________________________________________________________________________
|
||||
|
||||
#include "SysSe/Math/Ifx_Cf32.h"
|
||||
#include "Ifx_Lut.h"
|
||||
//________________________________________________________________________________________
|
||||
|
||||
/**
|
||||
* \brief Look-up table for sin(IFX_PI*2*k/IFX_LUT_ANGLE_RESOLUTION),
|
||||
* where k = 0..IFX_LUT_ANGLE_RESOLUTION */
|
||||
IFX_EXTERN IFX_LUT_TABLE float32 Ifx_g_LutSincosF32_table[(IFX_LUT_ANGLE_PI / 2) + 1];
|
||||
|
||||
/** \brief Initialise the lookup tables
|
||||
* \note This is not required if (\ref IFX_LUT_TABLE_CONST == 1)
|
||||
* \ingroup library_srvsw_sysse_math_lut_sincos
|
||||
*/
|
||||
IFX_EXTERN void Ifx_LutSincosF32_init(void);
|
||||
|
||||
/**
|
||||
* \brief Sine lookup function
|
||||
* \param fxpAngle 0 .. (IFX_LUT_ANGLE_RESOLUTION - 1)
|
||||
* \return sin(2*IFX_PI*fxpAngle/IFX_LUT_ANGLE_RESOLUTION)
|
||||
* \ingroup library_srvsw_sysse_math_lut_sincos
|
||||
*/
|
||||
IFX_EXTERN float32 Ifx_LutSincosF32_sin(Ifx_Lut_FxpAngle fxpAngle);
|
||||
|
||||
/**
|
||||
* \brief Cosine lookup function
|
||||
* \param fxpAngle 0 .. (IFX_LUT_ANGLE_RESOLUTION - 1), which represents 0 .. 2*IFX_PI
|
||||
* \return cos(2*IFX_PI*fxpAngle/IFX_LUT_ANGLE_RESOLUTION)
|
||||
* \ingroup library_srvsw_sysse_math_lut_sincos
|
||||
*/
|
||||
IFX_INLINE float32 Ifx_LutSincosF32_cos(Ifx_Lut_FxpAngle fxpAngle)
|
||||
{
|
||||
return Ifx_LutSincosF32_sin((IFX_LUT_ANGLE_PI / 2) - fxpAngle);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Sine and Cosine lookup function
|
||||
* \param fxpAngle 0 .. (IFX_LUT_ANGLE_RESOLUTION - 1), which represents 0 .. 2*IFX_PI
|
||||
* \retval real = cos(2*IFX_PI*fxpAngle/IFX_LUT_ANGLE_RESOLUTION)
|
||||
* \retval imag = sin(2*IFX_PI*fxpAngle/IFX_LUT_ANGLE_RESOLUTION)
|
||||
* \ingroup library_srvsw_sysse_math_lut_sincos
|
||||
*/
|
||||
IFX_INLINE cfloat32 Ifx_LutSincosF32_cossin(Ifx_Lut_FxpAngle fxpAngle)
|
||||
{
|
||||
cfloat32 result;
|
||||
result.imag = Ifx_LutSincosF32_sin(fxpAngle);
|
||||
result.real = Ifx_LutSincosF32_sin((IFX_LUT_ANGLE_PI / 2) - fxpAngle);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
//________________________________________________________________________________________
|
||||
#endif
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* \file Ifx_RampF32.c
|
||||
* \brief Ramp function
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
*/
|
||||
|
||||
#include "SysSe/Math/Ifx_RampF32.h"
|
||||
|
||||
/**
|
||||
* \brief Execute the Ramp function
|
||||
*
|
||||
* NOTE: shall be called every 'period'.
|
||||
* The period was defined by Ifx_RampF32_init() or Ifx_RampF32_setSlewRate()
|
||||
*
|
||||
* \param ramp Pointer to the Ifx_RampF32 object
|
||||
* \return Actual value
|
||||
*/
|
||||
float32 Ifx_RampF32_step(Ifx_RampF32 *ramp)
|
||||
{
|
||||
if (ramp->uk < ramp->ik)
|
||||
{
|
||||
ramp->uk = __minf(ramp->ik, ramp->uk + ramp->delta);
|
||||
}
|
||||
else if (ramp->uk > ramp->ik)
|
||||
{
|
||||
ramp->uk = __maxf(ramp->ik, ramp->uk - ramp->delta);
|
||||
}
|
||||
else
|
||||
{}
|
||||
|
||||
return ramp->uk;
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
/**
|
||||
* \file Ifx_RampF32.h
|
||||
* \brief Ramp function
|
||||
*
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_f32_ramp Ramp
|
||||
* \ingroup library_srvsw_sysse_math_f32
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef IFX_RAMPF32_H
|
||||
#define IFX_RAMPF32_H
|
||||
|
||||
#include "Cpu/Std/IfxCpu_Intrinsics.h"
|
||||
|
||||
/**
|
||||
* \brief Ifx_RampF32 object definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
float32 uk;
|
||||
float32 ik;
|
||||
float32 delta;
|
||||
} Ifx_RampF32;
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// FUNCTION PROTOTYPES
|
||||
|
||||
/** \addtogroup library_srvsw_sysse_math_f32_ramp
|
||||
* \{ */
|
||||
IFX_INLINE void Ifx_RampF32_init(Ifx_RampF32 *ramp, float32 slewRate, float32 period);
|
||||
IFX_INLINE void Ifx_RampF32_reset(Ifx_RampF32 *ramp);
|
||||
IFX_INLINE void Ifx_RampF32_setSlewRate(Ifx_RampF32 *ramp, float32 slewRate, float32 period);
|
||||
IFX_INLINE void Ifx_RampF32_setRef(Ifx_RampF32 *ramp, float32 ref);
|
||||
IFX_INLINE float32 Ifx_RampF32_getValue(Ifx_RampF32 *ramp);
|
||||
IFX_EXTERN float32 Ifx_RampF32_step(Ifx_RampF32 *ramp);
|
||||
/** \} */
|
||||
|
||||
//________________________________________________________________________________________
|
||||
// INLINE FUNCTION IMPLEMENTATION
|
||||
|
||||
/**
|
||||
* \brief Reset internal values
|
||||
* \param ramp Pointer to the Ifx_RampF32 object
|
||||
*/
|
||||
IFX_INLINE void Ifx_RampF32_reset(Ifx_RampF32 *ramp)
|
||||
{
|
||||
ramp->ik = 0;
|
||||
ramp->uk = 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Get the reference value
|
||||
* \param ramp Pointer to the Ifx_RampF32 object
|
||||
* \return Returns the ref value
|
||||
*/
|
||||
IFX_INLINE float32 Ifx_RampF32_getRef(Ifx_RampF32 *ramp)
|
||||
{
|
||||
return ramp->ik;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Set the maximum slew rate
|
||||
* \param ramp Pointer to the Ifx_RampF32 object
|
||||
* \param slewRate Maximum slew rate, value per second
|
||||
* \param period Sampling period of the Ifx_RampF32_step() function
|
||||
*/
|
||||
IFX_INLINE void Ifx_RampF32_setSlewRate(Ifx_RampF32 *ramp, float32 slewRate, float32 period)
|
||||
{
|
||||
ramp->delta = slewRate * period;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Initialize the Ifx_RampF32 object.
|
||||
* \param ramp Pointer to the Ifx_RampF32 object
|
||||
* \param slewRate Maximum slew rate, value per second
|
||||
* \param period Sampling period of the Ifx_RampF32_step() function
|
||||
*/
|
||||
IFX_INLINE void Ifx_RampF32_init(Ifx_RampF32 *ramp, float32 slewRate, float32 period)
|
||||
{
|
||||
Ifx_RampF32_setSlewRate(ramp, slewRate, period);
|
||||
Ifx_RampF32_reset(ramp);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Set the reference value
|
||||
* \param ramp Pointer to the Ifx_RampF32 object
|
||||
* \param ref Reference value
|
||||
*/
|
||||
IFX_INLINE void Ifx_RampF32_setRef(Ifx_RampF32 *ramp, float32 ref)
|
||||
{
|
||||
ramp->ik = ref;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Get the actual output value
|
||||
* \param ramp Pointer to the Ifx_RampF32 object
|
||||
* \return Actual value
|
||||
*/
|
||||
IFX_INLINE float32 Ifx_RampF32_getValue(Ifx_RampF32 *ramp)
|
||||
{
|
||||
return ramp->uk;
|
||||
}
|
||||
|
||||
|
||||
#endif /* IFX_RAMPF32_H */
|
||||
@@ -0,0 +1,74 @@
|
||||
/**
|
||||
* \file Ifx_WndF32.h
|
||||
* \brief Windowing function
|
||||
* \ingroup library_srvsw_sysse_math_f32_wnd
|
||||
*
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_f32_wnd Window functions
|
||||
* \ingroup library_srvsw_sysse_math_f32
|
||||
*/
|
||||
|
||||
#ifndef IFX_WNDF32_H
|
||||
#define IFX_WNDF32_H
|
||||
|
||||
#include "Ifx_Cf32.h"
|
||||
|
||||
#define IFX_WNDF32_TABLE_LENGTH (1024)
|
||||
|
||||
/** \addtogroup library_srvsw_sysse_math_f32_wnd
|
||||
* \{ */
|
||||
|
||||
IFX_EXTERN CONST_CFG float32 Ifx_g_WndF32_hannTable[IFX_WNDF32_TABLE_LENGTH / 2];
|
||||
IFX_EXTERN CONST_CFG float32 Ifx_g_WndF32_blackmanHarrisTable[IFX_WNDF32_TABLE_LENGTH / 2];
|
||||
|
||||
/** \brief Apply a window to complex array x which has nX length.
|
||||
*
|
||||
* Example: Ifx_WndF32_apply(x, Ifx_g_WndF32_hannTable, 1024); */
|
||||
IFX_INLINE void Ifx_WndF32_apply(cfloat32 *x, CONST_CFG float32 *window, short nX)
|
||||
{
|
||||
VecWin_f32(&x->real, window, nX, IFX_WNDF32_TABLE_LENGTH, 2, 1);
|
||||
}
|
||||
|
||||
|
||||
/** \} */
|
||||
|
||||
#endif /* IFX_WNDF32_H */
|
||||
+565
@@ -0,0 +1,565 @@
|
||||
/**
|
||||
* \file Ifx_WndF32_BlackmanHarrisTable.c
|
||||
* \brief Lookup table for Blackman-Harris window function
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
*/
|
||||
|
||||
#include "Ifx_WndF32.h"
|
||||
|
||||
#if IFX_WNDF32_TABLE_LENGTH != 1024
|
||||
#error This was generated with IFX_WNDF32_TABLE_LENGTH = 1024. Please regenerate.
|
||||
#endif
|
||||
|
||||
CONST_CFG float32 Ifx_g_WndF32_blackmanHarrisTable[(IFX_WNDF32_TABLE_LENGTH / 2)] = {
|
||||
_DATAF(0.000060000000000001),
|
||||
_DATAF(6.05336435769415E-05),
|
||||
_DATAF(6.21351621010909E-05),
|
||||
_DATAF(6.48063189517042E-05),
|
||||
_DATAF(6.85500530901977E-05),
|
||||
_DATAF(7.33704790552552E-05),
|
||||
_DATAF(7.92728869546643E-05),
|
||||
_DATAF(8.62637424542366E-05),
|
||||
_DATAF(9.43506867646833E-05),
|
||||
_DATAF(0.000103542536623254),
|
||||
_DATAF(0.000113849284272844),
|
||||
_DATAF(0.00012528209743509),
|
||||
_DATAF(0.000137853319279022),
|
||||
_DATAF(0.000151576468382483),
|
||||
_DATAF(0.000166466238687386),
|
||||
_DATAF(0.000182538499446352),
|
||||
_DATAF(0.000199810295160321),
|
||||
_DATAF(0.000218299845506252),
|
||||
_DATAF(0.000238026545253333),
|
||||
_DATAF(0.000259010964166398),
|
||||
_DATAF(0.000281274846895671),
|
||||
_DATAF(0.000304841112851225),
|
||||
_DATAF(0.000329733856060103),
|
||||
_DATAF(0.000355978345005534),
|
||||
_DATAF(0.000383601022445701),
|
||||
_DATAF(0.00041262950521132),
|
||||
_DATAF(0.000443092583978778),
|
||||
_DATAF(0.000475020223018621),
|
||||
_DATAF(0.000508443559916298),
|
||||
_DATAF(0.000543394905263906),
|
||||
_DATAF(0.000579907742319714),
|
||||
_DATAF(0.000618016726635444),
|
||||
_DATAF(0.000657757685646449),
|
||||
_DATAF(0.000699167618224639),
|
||||
_DATAF(0.000742284694190907),
|
||||
_DATAF(0.000787148253784491),
|
||||
_DATAF(0.000833798807087666),
|
||||
_DATAF(0.000882278033402194),
|
||||
_DATAF(0.000932628780575385),
|
||||
_DATAF(0.000984895064273818),
|
||||
_DATAF(0.00103912206720055),
|
||||
_DATAF(0.00109535613825471),
|
||||
_DATAF(0.00115364479162906),
|
||||
_DATAF(0.00121403670584417),
|
||||
_DATAF(0.00127658172271511),
|
||||
_DATAF(0.00134133084624859),
|
||||
_DATAF(0.0014083362414667),
|
||||
_DATAF(0.00147765123315459),
|
||||
_DATAF(0.00154933030452976),
|
||||
_DATAF(0.0016234290958281),
|
||||
_DATAF(0.00170000440280525),
|
||||
_DATAF(0.00177911417514856),
|
||||
_DATAF(0.00186081751479774),
|
||||
_DATAF(0.00194517467416997),
|
||||
_DATAF(0.00203224705428634),
|
||||
_DATAF(0.00212209720279637),
|
||||
_DATAF(0.0022147888118974),
|
||||
_DATAF(0.00231038671614482),
|
||||
_DATAF(0.00240895689015029),
|
||||
_DATAF(0.00251056644616419),
|
||||
_DATAF(0.00261528363153874),
|
||||
_DATAF(0.00272317782606849),
|
||||
_DATAF(0.0028343195392042),
|
||||
_DATAF(0.00294878040713723),
|
||||
_DATAF(0.00306663318975018),
|
||||
_DATAF(0.00318795176743033),
|
||||
_DATAF(0.00331281113774309),
|
||||
_DATAF(0.00344128741195982),
|
||||
_DATAF(0.00357345781143924),
|
||||
_DATAF(0.00370940066385603),
|
||||
_DATAF(0.00384919539927517),
|
||||
_DATAF(0.00399292254606638),
|
||||
_DATAF(0.00414066372665728),
|
||||
_DATAF(0.00429250165311901),
|
||||
_DATAF(0.00444852012258346),
|
||||
_DATAF(0.00460880401248608),
|
||||
_DATAF(0.00477343927563203),
|
||||
_DATAF(0.0049425129350816),
|
||||
_DATAF(0.00511611307885149),
|
||||
_DATAF(0.00529432885442795),
|
||||
_DATAF(0.00547725046308894),
|
||||
_DATAF(0.00566496915403105),
|
||||
_DATAF(0.00585757721829767),
|
||||
_DATAF(0.00605516798250564),
|
||||
_DATAF(0.00625783580236627),
|
||||
_DATAF(0.00646567605599707),
|
||||
_DATAF(0.00667878513702144),
|
||||
_DATAF(0.00689726044745254),
|
||||
_DATAF(0.00712120039035792),
|
||||
_DATAF(0.00735070436230157),
|
||||
_DATAF(0.00758587274556064),
|
||||
_DATAF(0.00782680690011242),
|
||||
_DATAF(0.00807360915538975),
|
||||
_DATAF(0.00832638280180106),
|
||||
_DATAF(0.00858523208201078),
|
||||
_DATAF(0.0088502621819799),
|
||||
_DATAF(0.00912157922176039),
|
||||
_DATAF(0.00939929024604285),
|
||||
_DATAF(0.00968350321445337),
|
||||
_DATAF(0.00997432699159716),
|
||||
_DATAF(0.0102718713368455),
|
||||
_DATAF(0.010576246893865),
|
||||
_DATAF(0.0108875651798833),
|
||||
_DATAF(0.0112059385746926),
|
||||
_DATAF(0.0115314803093847),
|
||||
_DATAF(0.011864304454818),
|
||||
_DATAF(0.0122045259098121),
|
||||
_DATAF(0.0125522603890683),
|
||||
_DATAF(0.0129076244108144),
|
||||
_DATAF(0.0132707352841705),
|
||||
_DATAF(0.013641711096234),
|
||||
_DATAF(0.0140206706988822),
|
||||
_DATAF(0.0144077336952905),
|
||||
_DATAF(0.0148030204261634),
|
||||
_DATAF(0.0152066519556773),
|
||||
_DATAF(0.0156187500571341),
|
||||
_DATAF(0.0160394371983217),
|
||||
_DATAF(0.0164688365265826),
|
||||
_DATAF(0.0169070718535868),
|
||||
_DATAF(0.0173542676398092),
|
||||
_DATAF(0.0178105489787098),
|
||||
_DATAF(0.0182760415806149),
|
||||
_DATAF(0.0187508717562994),
|
||||
_DATAF(0.0192351664002677),
|
||||
_DATAF(0.0197290529737345),
|
||||
_DATAF(0.020232659487302),
|
||||
_DATAF(0.0207461144833353),
|
||||
_DATAF(0.0212695470180336),
|
||||
_DATAF(0.0218030866431987),
|
||||
_DATAF(0.0223468633876972),
|
||||
_DATAF(0.0229010077386208),
|
||||
_DATAF(0.0234656506221394),
|
||||
_DATAF(0.0240409233840514),
|
||||
_DATAF(0.0246269577700285),
|
||||
_DATAF(0.0252238859055558),
|
||||
_DATAF(0.025831840275569),
|
||||
_DATAF(0.026450953703786),
|
||||
_DATAF(0.0270813593317373),
|
||||
_DATAF(0.0277231905974923),
|
||||
_DATAF(0.0283765812140843),
|
||||
_DATAF(0.0290416651476349),
|
||||
_DATAF(0.029718576595178),
|
||||
_DATAF(0.0304074499621848),
|
||||
_DATAF(0.031108419839792),
|
||||
_DATAF(0.0318216209817327),
|
||||
_DATAF(0.0325471882809733),
|
||||
_DATAF(0.0332852567460565),
|
||||
_DATAF(0.0340359614771537),
|
||||
_DATAF(0.0347994376418264),
|
||||
_DATAF(0.0355758204505013),
|
||||
_DATAF(0.036365245131659),
|
||||
_DATAF(0.0371678469067388),
|
||||
_DATAF(0.0379837609647635),
|
||||
_DATAF(0.038813122436685),
|
||||
_DATAF(0.039656066369453),
|
||||
_DATAF(0.0405127276998116),
|
||||
_DATAF(0.041383241227825),
|
||||
_DATAF(0.0422677415901346),
|
||||
_DATAF(0.0431663632329524),
|
||||
_DATAF(0.0440792403847932),
|
||||
_DATAF(0.0450065070289477),
|
||||
_DATAF(0.0459482968757025),
|
||||
_DATAF(0.0469047433343071),
|
||||
_DATAF(0.0478759794846953),
|
||||
_DATAF(0.0488621380489625),
|
||||
_DATAF(0.0498633513626023),
|
||||
_DATAF(0.0508797513455092),
|
||||
_DATAF(0.0519114694727488),
|
||||
_DATAF(0.0529586367451015),
|
||||
_DATAF(0.0540213836593831),
|
||||
_DATAF(0.0550998401785474),
|
||||
_DATAF(0.0561941357015757),
|
||||
_DATAF(0.0573043990331573),
|
||||
_DATAF(0.0584307583531662),
|
||||
_DATAF(0.0595733411859395),
|
||||
_DATAF(0.0607322743693613),
|
||||
_DATAF(0.06190768402376),
|
||||
_DATAF(0.0630996955206202),
|
||||
_DATAF(0.0643084334511193),
|
||||
_DATAF(0.0655340215944914),
|
||||
_DATAF(0.0667765828862246),
|
||||
_DATAF(0.0680362393860989),
|
||||
_DATAF(0.0693131122460692),
|
||||
_DATAF(0.0706073216779996),
|
||||
_DATAF(0.0719189869212565),
|
||||
_DATAF(0.0732482262101651),
|
||||
_DATAF(0.0745951567413363),
|
||||
_DATAF(0.0759598946408714),
|
||||
_DATAF(0.0773425549314486),
|
||||
_DATAF(0.0787432514993022),
|
||||
_DATAF(0.0801620970610963),
|
||||
_DATAF(0.0815992031307037),
|
||||
_DATAF(0.083054679985896),
|
||||
_DATAF(0.0845286366349502),
|
||||
_DATAF(0.0860211807831818),
|
||||
_DATAF(0.0875324187994092),
|
||||
_DATAF(0.0890624556823589),
|
||||
_DATAF(0.0906113950270166),
|
||||
_DATAF(0.092179338990934),
|
||||
_DATAF(0.0937663882604969),
|
||||
_DATAF(0.0953726420171649),
|
||||
_DATAF(0.0969981979036867),
|
||||
_DATAF(0.0986431519903029),
|
||||
_DATAF(0.100307598740941),
|
||||
_DATAF(0.101991630979414),
|
||||
_DATAF(0.103695339855624),
|
||||
_DATAF(0.105418814811791),
|
||||
_DATAF(0.107162143548701),
|
||||
_DATAF(0.108925411991991),
|
||||
_DATAF(0.110708704258479),
|
||||
_DATAF(0.112512102622539),
|
||||
_DATAF(0.114335687482543),
|
||||
_DATAF(0.116179537327367),
|
||||
_DATAF(0.118043728702971),
|
||||
_DATAF(0.119928336179073),
|
||||
_DATAF(0.121833432315909),
|
||||
_DATAF(0.123759087631096),
|
||||
_DATAF(0.125705370566615),
|
||||
_DATAF(0.127672347455906),
|
||||
_DATAF(0.129660082491093),
|
||||
_DATAF(0.131668637690355),
|
||||
_DATAF(0.133698072865431),
|
||||
_DATAF(0.135748445589297),
|
||||
_DATAF(0.137819811163995),
|
||||
_DATAF(0.139912222588642),
|
||||
_DATAF(0.142025730527626),
|
||||
_DATAF(0.144160383278985),
|
||||
_DATAF(0.146316226742996),
|
||||
_DATAF(0.14849330439097),
|
||||
_DATAF(0.150691657234271),
|
||||
_DATAF(0.152911323793562),
|
||||
_DATAF(0.155152340068285),
|
||||
_DATAF(0.157414739506395),
|
||||
_DATAF(0.15969855297435),
|
||||
_DATAF(0.162003808727361),
|
||||
_DATAF(0.164330532379924),
|
||||
_DATAF(0.166678746876629),
|
||||
_DATAF(0.169048472463272),
|
||||
_DATAF(0.171439726658257),
|
||||
_DATAF(0.173852524224323),
|
||||
_DATAF(0.176286877140581),
|
||||
_DATAF(0.178742794574886),
|
||||
_DATAF(0.181220282856548),
|
||||
_DATAF(0.183719345449389),
|
||||
_DATAF(0.186239982925158),
|
||||
_DATAF(0.188782192937316),
|
||||
_DATAF(0.191345970195187),
|
||||
_DATAF(0.193931306438502),
|
||||
_DATAF(0.196538190412331),
|
||||
_DATAF(0.199166607842421),
|
||||
_DATAF(0.201816541410937),
|
||||
_DATAF(0.204487970732631),
|
||||
_DATAF(0.207180872331433),
|
||||
_DATAF(0.209895219617483),
|
||||
_DATAF(0.212630982864606),
|
||||
_DATAF(0.21538812918824),
|
||||
_DATAF(0.218166622523828),
|
||||
_DATAF(0.220966423605681),
|
||||
_DATAF(0.223787489946321),
|
||||
_DATAF(0.226629775816306),
|
||||
_DATAF(0.229493232224558),
|
||||
_DATAF(0.232377806899193),
|
||||
_DATAF(0.235283444268855),
|
||||
_DATAF(0.238210085444584),
|
||||
_DATAF(0.241157668202195),
|
||||
_DATAF(0.244126126965209),
|
||||
_DATAF(0.247115392788316),
|
||||
_DATAF(0.25012539334139),
|
||||
_DATAF(0.253156052894067),
|
||||
_DATAF(0.256207292300887),
|
||||
_DATAF(0.259279028987005),
|
||||
_DATAF(0.262371176934486),
|
||||
_DATAF(0.265483646669187),
|
||||
_DATAF(0.268616345248233),
|
||||
_DATAF(0.271769176248094),
|
||||
_DATAF(0.27494203975327),
|
||||
_DATAF(0.278134832345589),
|
||||
_DATAF(0.281347447094127),
|
||||
_DATAF(0.284579773545761),
|
||||
_DATAF(0.287831697716344),
|
||||
_DATAF(0.291103102082533),
|
||||
_DATAF(0.294393865574252),
|
||||
_DATAF(0.297703863567812),
|
||||
_DATAF(0.301032967879694),
|
||||
_DATAF(0.30438104676098),
|
||||
_DATAF(0.307747964892468),
|
||||
_DATAF(0.311133583380456),
|
||||
_DATAF(0.314537759753201),
|
||||
_DATAF(0.317960347958064),
|
||||
_DATAF(0.321401198359353),
|
||||
_DATAF(0.324860157736845),
|
||||
_DATAF(0.328337069285016),
|
||||
_DATAF(0.331831772612977),
|
||||
_DATAF(0.335344103745104),
|
||||
_DATAF(0.338873895122394),
|
||||
_DATAF(0.342420975604529),
|
||||
_DATAF(0.345985170472656),
|
||||
_DATAF(0.3495663014329),
|
||||
_DATAF(0.353164186620592),
|
||||
_DATAF(0.356778640605235),
|
||||
_DATAF(0.360409474396196),
|
||||
_DATAF(0.364056495449141),
|
||||
_DATAF(0.367719507673201),
|
||||
_DATAF(0.371398311438886),
|
||||
_DATAF(0.375092703586736),
|
||||
_DATAF(0.378802477436722),
|
||||
_DATAF(0.382527422798394),
|
||||
_DATAF(0.386267325981779),
|
||||
_DATAF(0.39002196980903),
|
||||
_DATAF(0.393791133626826),
|
||||
_DATAF(0.397574593319535),
|
||||
_DATAF(0.401372121323116),
|
||||
_DATAF(0.4051834866398),
|
||||
_DATAF(0.409008454853506),
|
||||
_DATAF(0.412846788146031),
|
||||
_DATAF(0.416698245313995),
|
||||
_DATAF(0.420562581786534),
|
||||
_DATAF(0.424439549643771),
|
||||
_DATAF(0.428328897636028),
|
||||
_DATAF(0.432230371203805),
|
||||
_DATAF(0.436143712498517),
|
||||
_DATAF(0.440068660403987),
|
||||
_DATAF(0.444004950558688),
|
||||
_DATAF(0.447952315378757),
|
||||
_DATAF(0.451910484081743),
|
||||
_DATAF(0.455879182711121),
|
||||
_DATAF(0.459858134161553),
|
||||
_DATAF(0.463847058204895),
|
||||
_DATAF(0.46784567151695),
|
||||
_DATAF(0.471853687704974),
|
||||
_DATAF(0.475870817335914),
|
||||
_DATAF(0.479896767965388),
|
||||
_DATAF(0.483931244167404),
|
||||
_DATAF(0.487973947564809),
|
||||
_DATAF(0.492024576860471),
|
||||
_DATAF(0.496082827869183),
|
||||
_DATAF(0.500148393550297),
|
||||
_DATAF(0.50422096404107),
|
||||
_DATAF(0.508300226690728),
|
||||
_DATAF(0.512385866095238),
|
||||
_DATAF(0.516477564132795),
|
||||
_DATAF(0.520575),
|
||||
_DATAF(0.524677850248738),
|
||||
_DATAF(0.528785788823753),
|
||||
_DATAF(0.532898487100904),
|
||||
_DATAF(0.537015613926103),
|
||||
_DATAF(0.541136835654929),
|
||||
_DATAF(0.545261816192918),
|
||||
_DATAF(0.549390217036503),
|
||||
_DATAF(0.553521697314626),
|
||||
_DATAF(0.557655913830994),
|
||||
_DATAF(0.561792521106979),
|
||||
_DATAF(0.565931171425163),
|
||||
_DATAF(0.570071514873506),
|
||||
_DATAF(0.574213199390142),
|
||||
_DATAF(0.578355870808795),
|
||||
_DATAF(0.582499172904798),
|
||||
_DATAF(0.586642747441718),
|
||||
_DATAF(0.590786234218577),
|
||||
_DATAF(0.594929271117651),
|
||||
_DATAF(0.599071494152859),
|
||||
_DATAF(0.603212537518709),
|
||||
_DATAF(0.607352033639815),
|
||||
_DATAF(0.611489613220962),
|
||||
_DATAF(0.615624905297715),
|
||||
_DATAF(0.619757537287565),
|
||||
_DATAF(0.623887135041594),
|
||||
_DATAF(0.628013322896669),
|
||||
_DATAF(0.632135723728129),
|
||||
_DATAF(0.636253959002978),
|
||||
_DATAF(0.640367648833561),
|
||||
_DATAF(0.644476412031722),
|
||||
_DATAF(0.648579866163425),
|
||||
_DATAF(0.652677627603835),
|
||||
_DATAF(0.656769311592843),
|
||||
_DATAF(0.660854532291033),
|
||||
_DATAF(0.664932902836069),
|
||||
_DATAF(0.669004035399499),
|
||||
_DATAF(0.673067541243964),
|
||||
_DATAF(0.6771230307808),
|
||||
_DATAF(0.681170113628019),
|
||||
_DATAF(0.685208398668663),
|
||||
_DATAF(0.689237494109519),
|
||||
_DATAF(0.693257007540177),
|
||||
_DATAF(0.697266545992425),
|
||||
_DATAF(0.701265715999973),
|
||||
_DATAF(0.705254123658479),
|
||||
_DATAF(0.70923137468589),
|
||||
_DATAF(0.713197074483052),
|
||||
_DATAF(0.717150828194615),
|
||||
_DATAF(0.721092240770188),
|
||||
_DATAF(0.72502091702575),
|
||||
_DATAF(0.7289364617053),
|
||||
_DATAF(0.732838479542731),
|
||||
_DATAF(0.736726575323917),
|
||||
_DATAF(0.740600353949007),
|
||||
_DATAF(0.744459420494891),
|
||||
_DATAF(0.748303380277859),
|
||||
_DATAF(0.752131838916412),
|
||||
_DATAF(0.755944402394215),
|
||||
_DATAF(0.759740677123202),
|
||||
_DATAF(0.763520270006787),
|
||||
_DATAF(0.76728278850319),
|
||||
_DATAF(0.771027840688865),
|
||||
_DATAF(0.774755035321995),
|
||||
_DATAF(0.778463981906066),
|
||||
_DATAF(0.782154290753498),
|
||||
_DATAF(0.785825573049304),
|
||||
_DATAF(0.789477440914794),
|
||||
_DATAF(0.793109507471277),
|
||||
_DATAF(0.796721386903776),
|
||||
_DATAF(0.800312694524721),
|
||||
_DATAF(0.803883046837616),
|
||||
_DATAF(0.807432061600672),
|
||||
_DATAF(0.810959357890378),
|
||||
_DATAF(0.814464556165),
|
||||
_DATAF(0.817947278328014),
|
||||
_DATAF(0.821407147791419),
|
||||
_DATAF(0.824843789538964),
|
||||
_DATAF(0.82825683018923),
|
||||
_DATAF(0.831645898058594),
|
||||
_DATAF(0.835010623224019),
|
||||
_DATAF(0.8383506375857),
|
||||
_DATAF(0.841665574929516),
|
||||
_DATAF(0.844955070989297),
|
||||
_DATAF(0.848218763508878),
|
||||
_DATAF(0.851456292303937),
|
||||
_DATAF(0.854667299323595),
|
||||
_DATAF(0.85785142871177),
|
||||
_DATAF(0.861008326868267),
|
||||
_DATAF(0.864137642509598),
|
||||
_DATAF(0.867239026729501),
|
||||
_DATAF(0.87031213305917),
|
||||
_DATAF(0.87335661752716),
|
||||
_DATAF(0.876372138718963),
|
||||
_DATAF(0.879358357836245),
|
||||
_DATAF(0.882314938755719),
|
||||
_DATAF(0.885241548087659),
|
||||
_DATAF(0.888137855234021),
|
||||
_DATAF(0.891003532446169),
|
||||
_DATAF(0.8938382548822),
|
||||
_DATAF(0.896641700663836),
|
||||
_DATAF(0.899413550932886),
|
||||
_DATAF(0.90215348990726),
|
||||
_DATAF(0.90486120493652),
|
||||
_DATAF(0.907536386556961),
|
||||
_DATAF(0.9101787285462),
|
||||
_DATAF(0.912787927977272),
|
||||
_DATAF(0.915363685272211),
|
||||
_DATAF(0.917905704255112),
|
||||
_DATAF(0.92041369220465),
|
||||
_DATAF(0.922887359906061),
|
||||
_DATAF(0.925326421702555),
|
||||
_DATAF(0.927730595546164),
|
||||
_DATAF(0.930099603048002),
|
||||
_DATAF(0.932433169527932),
|
||||
_DATAF(0.93473102406363),
|
||||
_DATAF(0.936992899539027),
|
||||
_DATAF(0.939218532692123),
|
||||
_DATAF(0.941407664162166),
|
||||
_DATAF(0.943560038536173),
|
||||
_DATAF(0.945675404394792),
|
||||
_DATAF(0.947753514357501),
|
||||
_DATAF(0.949794125127105),
|
||||
_DATAF(0.951796997533564),
|
||||
_DATAF(0.953761896577093),
|
||||
_DATAF(0.955688591470572),
|
||||
_DATAF(0.957576855681214),
|
||||
_DATAF(0.959426466971513),
|
||||
_DATAF(0.961237207439446),
|
||||
_DATAF(0.963008863557916),
|
||||
_DATAF(0.964741226213449),
|
||||
_DATAF(0.966434090744106),
|
||||
_DATAF(0.968087256976625),
|
||||
_DATAF(0.969700529262773),
|
||||
_DATAF(0.971273716514903),
|
||||
_DATAF(0.972806632240705),
|
||||
_DATAF(0.974299094577144),
|
||||
_DATAF(0.975750926323582),
|
||||
_DATAF(0.977161954974065),
|
||||
_DATAF(0.978532012748779),
|
||||
_DATAF(0.979860936624663),
|
||||
_DATAF(0.981148568365171),
|
||||
_DATAF(0.982394754549168),
|
||||
_DATAF(0.98359934659898),
|
||||
_DATAF(0.984762200807557),
|
||||
_DATAF(0.985883178364764),
|
||||
_DATAF(0.986962145382792),
|
||||
_DATAF(0.987998972920675),
|
||||
_DATAF(0.988993537007913),
|
||||
_DATAF(0.989945718667196),
|
||||
_DATAF(0.990855403936222),
|
||||
_DATAF(0.991722483888599),
|
||||
_DATAF(0.992546854653837),
|
||||
_DATAF(0.993328417436418),
|
||||
_DATAF(0.994067078533934),
|
||||
_DATAF(0.994762749354304),
|
||||
_DATAF(0.995415346432055),
|
||||
_DATAF(0.996024791443661),
|
||||
_DATAF(0.996591011221945),
|
||||
_DATAF(0.997113937769534),
|
||||
_DATAF(0.997593508271372),
|
||||
_DATAF(0.998029665106271),
|
||||
_DATAF(0.99842235585752),
|
||||
_DATAF(0.998771533322532),
|
||||
_DATAF(0.999077155521532),
|
||||
_DATAF(0.99933918570529),
|
||||
_DATAF(0.999557592361884),
|
||||
_DATAF(0.999732349222509),
|
||||
_DATAF(0.999863435266309),
|
||||
_DATAF(0.999950834724255),
|
||||
_DATAF(0.999994537082046),
|
||||
};
|
||||
@@ -0,0 +1,565 @@
|
||||
/**
|
||||
* \file Ifx_WndF32_HannTable.c
|
||||
* \brief Lookup table for Hann window function
|
||||
*
|
||||
*
|
||||
* \version disabled
|
||||
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
|
||||
*
|
||||
*
|
||||
* IMPORTANT NOTICE
|
||||
*
|
||||
*
|
||||
* Use of this file is subject to the terms of use agreed between (i) you or
|
||||
* the company in which ordinary course of business you are acting and (ii)
|
||||
* Infineon Technologies AG or its licensees. If and as long as no such
|
||||
* terms of use are agreed, use of this file is subject to following:
|
||||
|
||||
|
||||
* Boost Software License - Version 1.0 - August 17th, 2003
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person or
|
||||
* organization obtaining a copy of the software and accompanying
|
||||
* documentation covered by this license (the "Software") to use, reproduce,
|
||||
* display, distribute, execute, and transmit the Software, and to prepare
|
||||
* derivative works of the Software, and to permit third-parties to whom the
|
||||
* Software is furnished to do so, all subject to the following:
|
||||
|
||||
* The copyright notices in the Software and this entire statement, including
|
||||
* the above license grant, this restriction and the following disclaimer, must
|
||||
* be included in all copies of the Software, in whole or in part, and all
|
||||
* derivative works of the Software, unless such copies or derivative works are
|
||||
* solely in the form of machine-executable object code generated by a source
|
||||
* language processor.
|
||||
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*
|
||||
*/
|
||||
|
||||
#include "Ifx_WndF32.h"
|
||||
|
||||
#if IFX_WNDF32_TABLE_LENGTH != 1024
|
||||
#error This was generated with IFX_WNDF32_TABLE_LENGTH = 1024. Please regenerate.
|
||||
#endif
|
||||
|
||||
CONST_CFG float32 Ifx_g_WndF32_hannTable[(IFX_WNDF32_TABLE_LENGTH / 2)] = {
|
||||
_DATAF(0.00000000000000000000),
|
||||
_DATAF(0.00000943076884141192),
|
||||
_DATAF(0.00003772272248170339),
|
||||
_DATAF(0.00008487478771712631),
|
||||
_DATAF(0.00015088518557604402),
|
||||
_DATAF(0.00023575144587084651),
|
||||
_DATAF(0.00033947033807635307),
|
||||
_DATAF(0.00046203794772736728),
|
||||
_DATAF(0.00060344970552250743),
|
||||
_DATAF(0.00076370022725313902),
|
||||
_DATAF(0.00094278343021869659),
|
||||
_DATAF(0.00114069262053817510),
|
||||
_DATAF(0.00135742034763097760),
|
||||
_DATAF(0.00159295846242457630),
|
||||
_DATAF(0.00184729788452386860),
|
||||
_DATAF(0.00212042918428778650),
|
||||
_DATAF(0.00241234223358333110),
|
||||
_DATAF(0.00272302562370896340),
|
||||
_DATAF(0.00305246794596314430),
|
||||
_DATAF(0.00340065662749111650),
|
||||
_DATAF(0.00376757839694619180),
|
||||
_DATAF(0.00415321951732039450),
|
||||
_DATAF(0.00455756578594446180),
|
||||
_DATAF(0.00498060183599591260),
|
||||
_DATAF(0.00542231136932969090),
|
||||
_DATAF(0.00588267762213945390),
|
||||
_DATAF(0.00636168383061885830),
|
||||
_DATAF(0.00685931136831641200),
|
||||
_DATAF(0.00737554160878062250),
|
||||
_DATAF(0.00791035499423742290),
|
||||
_DATAF(0.00846373196691274640),
|
||||
_DATAF(0.00903565157204866410),
|
||||
_DATAF(0.00962609145790338520),
|
||||
_DATAF(0.01023502927273511900),
|
||||
_DATAF(0.01086244266480207400),
|
||||
_DATAF(0.01150830835103988600),
|
||||
_DATAF(0.01217260118573904000),
|
||||
_DATAF(0.01285529602319002200),
|
||||
_DATAF(0.01355636864900589000),
|
||||
_DATAF(0.01427579019218683200),
|
||||
_DATAF(0.01501353550702333500),
|
||||
_DATAF(0.01576957479119300800),
|
||||
_DATAF(0.01654388196766376500),
|
||||
_DATAF(0.01733642630279064200),
|
||||
_DATAF(0.01814717799425125100),
|
||||
_DATAF(0.01897610723972320600),
|
||||
_DATAF(0.01982318051159381900),
|
||||
_DATAF(0.02068836987018585200),
|
||||
_DATAF(0.02157163806259632100),
|
||||
_DATAF(0.02247295528650283800),
|
||||
_DATAF(0.02339228615164756800),
|
||||
_DATAF(0.02432959713041782400),
|
||||
_DATAF(0.02528485096991062200),
|
||||
_DATAF(0.02625801227986812600),
|
||||
_DATAF(0.02724904380738735200),
|
||||
_DATAF(0.02825791016221046400),
|
||||
_DATAF(0.02928457222878933000),
|
||||
_DATAF(0.03032899089157581300),
|
||||
_DATAF(0.03139112517237663300),
|
||||
_DATAF(0.03247094154357910200),
|
||||
_DATAF(0.03356838971376419100),
|
||||
_DATAF(0.03468343615531921400),
|
||||
_DATAF(0.03581603243947029100),
|
||||
_DATAF(0.03696614131331443800),
|
||||
_DATAF(0.03813371807336807300),
|
||||
_DATAF(0.03931871801614761400),
|
||||
_DATAF(0.04052109271287918100),
|
||||
_DATAF(0.04174080491065979000),
|
||||
_DATAF(0.04297780245542526200),
|
||||
_DATAF(0.04423204064369201700),
|
||||
_DATAF(0.04550346732139587400),
|
||||
_DATAF(0.04679204523563385000),
|
||||
_DATAF(0.04809771478176116900),
|
||||
_DATAF(0.04942043498158454900),
|
||||
_DATAF(0.05076014995574951200),
|
||||
_DATAF(0.05211681500077247600),
|
||||
_DATAF(0.05349037423729896500),
|
||||
_DATAF(0.05488077551126480100),
|
||||
_DATAF(0.05628796666860580400),
|
||||
_DATAF(0.05771189928054809600),
|
||||
_DATAF(0.05915251374244689900),
|
||||
_DATAF(0.06060976162552833600),
|
||||
_DATAF(0.06208358332514762900),
|
||||
_DATAF(0.06357392668724060100),
|
||||
_DATAF(0.06508072465658187900),
|
||||
_DATAF(0.06660393625497818000),
|
||||
_DATAF(0.06814350187778472900),
|
||||
_DATAF(0.06969934701919555700),
|
||||
_DATAF(0.07127143442630767800),
|
||||
_DATAF(0.07285968959331512500),
|
||||
_DATAF(0.07446406036615371700),
|
||||
_DATAF(0.07608447968959808300),
|
||||
_DATAF(0.07772088795900344800),
|
||||
_DATAF(0.07937323302030563400),
|
||||
_DATAF(0.08104144036769866900),
|
||||
_DATAF(0.08272545784711837800),
|
||||
_DATAF(0.08442521095275878900),
|
||||
_DATAF(0.08614064753055572500),
|
||||
_DATAF(0.08787168562412262000),
|
||||
_DATAF(0.08961828052997589100),
|
||||
_DATAF(0.09138035029172897300),
|
||||
_DATAF(0.09315783530473709100),
|
||||
_DATAF(0.09495066851377487200),
|
||||
_DATAF(0.09675878286361694300),
|
||||
_DATAF(0.09858211129903793300),
|
||||
_DATAF(0.10042057186365128000),
|
||||
_DATAF(0.10227411240339279000),
|
||||
_DATAF(0.10414265841245651000),
|
||||
_DATAF(0.10602613538503647000),
|
||||
_DATAF(0.10792447626590729000),
|
||||
_DATAF(0.10983760654926300000),
|
||||
_DATAF(0.11176545172929764000),
|
||||
_DATAF(0.11370794475078583000),
|
||||
_DATAF(0.11566501110792160000),
|
||||
_DATAF(0.11763656884431839000),
|
||||
_DATAF(0.11962255835533142000),
|
||||
_DATAF(0.12162289768457413000),
|
||||
_DATAF(0.12363750487565994000),
|
||||
_DATAF(0.12566630542278290000),
|
||||
_DATAF(0.12770923972129822000),
|
||||
_DATAF(0.12976621091365814000),
|
||||
_DATAF(0.13183714449405670000),
|
||||
_DATAF(0.13392198085784912000),
|
||||
_DATAF(0.13602061569690704000),
|
||||
_DATAF(0.13813297450542450000),
|
||||
_DATAF(0.14025899767875671000),
|
||||
_DATAF(0.14239858090877533000),
|
||||
_DATAF(0.14455166459083557000),
|
||||
_DATAF(0.14671814441680908000),
|
||||
_DATAF(0.14889796078205109000),
|
||||
_DATAF(0.15109102427959442000),
|
||||
_DATAF(0.15329724550247192000),
|
||||
_DATAF(0.15551653504371643000),
|
||||
_DATAF(0.15774883329868317000),
|
||||
_DATAF(0.15999403595924377000),
|
||||
_DATAF(0.16225206851959229000),
|
||||
_DATAF(0.16452284157276154000),
|
||||
_DATAF(0.16680626571178436000),
|
||||
_DATAF(0.16910226643085480000),
|
||||
_DATAF(0.17141073942184448000),
|
||||
_DATAF(0.17373161017894745000),
|
||||
_DATAF(0.17606478929519653000),
|
||||
_DATAF(0.17841020226478577000),
|
||||
_DATAF(0.18076772987842560000),
|
||||
_DATAF(0.18313729763031006000),
|
||||
_DATAF(0.18551883101463318000),
|
||||
_DATAF(0.18791222572326660000),
|
||||
_DATAF(0.19031739234924316000),
|
||||
_DATAF(0.19273422658443451000),
|
||||
_DATAF(0.19516266882419586000),
|
||||
_DATAF(0.19760259985923767000),
|
||||
_DATAF(0.20005394518375397000),
|
||||
_DATAF(0.20251661539077759000),
|
||||
_DATAF(0.20499049127101898000),
|
||||
_DATAF(0.20747549831867218000),
|
||||
_DATAF(0.20997154712677002000),
|
||||
_DATAF(0.21247853338718414000),
|
||||
_DATAF(0.21499636769294739000),
|
||||
_DATAF(0.21752494573593140000),
|
||||
_DATAF(0.22006417810916901000),
|
||||
_DATAF(0.22261397540569305000),
|
||||
_DATAF(0.22517424821853638000),
|
||||
_DATAF(0.22774487733840942000),
|
||||
_DATAF(0.23032577335834503000),
|
||||
_DATAF(0.23291684687137604000),
|
||||
_DATAF(0.23551799356937408000),
|
||||
_DATAF(0.23812912404537201000),
|
||||
_DATAF(0.24075011909008026000),
|
||||
_DATAF(0.24338090419769287000),
|
||||
_DATAF(0.24602137506008148000),
|
||||
_DATAF(0.24867141246795654000),
|
||||
_DATAF(0.25133094191551208000),
|
||||
_DATAF(0.25399985909461975000),
|
||||
_DATAF(0.25667804479598999000),
|
||||
_DATAF(0.25936540961265564000),
|
||||
_DATAF(0.26206183433532715000),
|
||||
_DATAF(0.26476725935935974000),
|
||||
_DATAF(0.26748156547546387000),
|
||||
_DATAF(0.27020460367202759000),
|
||||
_DATAF(0.27293634414672852000),
|
||||
_DATAF(0.27567663788795471000),
|
||||
_DATAF(0.27842539548873901000),
|
||||
_DATAF(0.28118252754211426000),
|
||||
_DATAF(0.28394788503646851000),
|
||||
_DATAF(0.28672140836715698000),
|
||||
_DATAF(0.28950297832489014000),
|
||||
_DATAF(0.29229250550270081000),
|
||||
_DATAF(0.29508984088897705000),
|
||||
_DATAF(0.29789492487907410000),
|
||||
_DATAF(0.30070760846138000000),
|
||||
_DATAF(0.30352783203125000000),
|
||||
_DATAF(0.30635544657707214000),
|
||||
_DATAF(0.30919039249420166000),
|
||||
_DATAF(0.31203252077102661000),
|
||||
_DATAF(0.31488174200057983000),
|
||||
_DATAF(0.31773793697357178000),
|
||||
_DATAF(0.32060101628303528000),
|
||||
_DATAF(0.32347086071968079000),
|
||||
_DATAF(0.32634738087654114000),
|
||||
_DATAF(0.32923042774200439000),
|
||||
_DATAF(0.33211994171142578000),
|
||||
_DATAF(0.33501577377319336000),
|
||||
_DATAF(0.33791780471801758000),
|
||||
_DATAF(0.34082597494125366000),
|
||||
_DATAF(0.34374016523361206000),
|
||||
_DATAF(0.34666022658348083000),
|
||||
_DATAF(0.34958606958389282000),
|
||||
_DATAF(0.35251760482788086000),
|
||||
_DATAF(0.35545471310615540000),
|
||||
_DATAF(0.35839724540710449000),
|
||||
_DATAF(0.36134514212608337000),
|
||||
_DATAF(0.36429825425148010000),
|
||||
_DATAF(0.36725649237632751000),
|
||||
_DATAF(0.37021973729133606000),
|
||||
_DATAF(0.37318786978721619000),
|
||||
_DATAF(0.37616080045700073000),
|
||||
_DATAF(0.37913838028907776000),
|
||||
_DATAF(0.38212051987648010000),
|
||||
_DATAF(0.38510712981224060000),
|
||||
_DATAF(0.38809806108474731000),
|
||||
_DATAF(0.39109322428703308000),
|
||||
_DATAF(0.39409247040748596000),
|
||||
_DATAF(0.39709573984146118000),
|
||||
_DATAF(0.40010288357734680000),
|
||||
_DATAF(0.40311378240585327000),
|
||||
_DATAF(0.40612834692001343000),
|
||||
_DATAF(0.40914645791053772000),
|
||||
_DATAF(0.41216799616813660000),
|
||||
_DATAF(0.41519284248352051000),
|
||||
_DATAF(0.41822087764739990000),
|
||||
_DATAF(0.42125201225280762000),
|
||||
_DATAF(0.42428609728813171000),
|
||||
_DATAF(0.42732307314872742000),
|
||||
_DATAF(0.43036276102066040000),
|
||||
_DATAF(0.43340510129928589000),
|
||||
_DATAF(0.43644991517066956000),
|
||||
_DATAF(0.43949717283248901000),
|
||||
_DATAF(0.44254666566848755000),
|
||||
_DATAF(0.44559836387634277000),
|
||||
_DATAF(0.44865208864212036000),
|
||||
_DATAF(0.45170778036117554000),
|
||||
_DATAF(0.45476526021957397000),
|
||||
_DATAF(0.45782446861267090000),
|
||||
_DATAF(0.46088525652885437000),
|
||||
_DATAF(0.46394753456115723000),
|
||||
_DATAF(0.46701115369796753000),
|
||||
_DATAF(0.47007602453231812000),
|
||||
_DATAF(0.47314202785491943000),
|
||||
_DATAF(0.47620904445648193000),
|
||||
_DATAF(0.47927695512771606000),
|
||||
_DATAF(0.48234564065933228000),
|
||||
_DATAF(0.48541501164436340000),
|
||||
_DATAF(0.48848491907119751000),
|
||||
_DATAF(0.49155527353286743000),
|
||||
_DATAF(0.49462592601776123000),
|
||||
_DATAF(0.49769678711891174000),
|
||||
_DATAF(0.50076776742935181000),
|
||||
_DATAF(0.50383865833282471000),
|
||||
_DATAF(0.50690943002700806000),
|
||||
_DATAF(0.50997996330261230000),
|
||||
_DATAF(0.51305007934570313000),
|
||||
_DATAF(0.51611977815628052000),
|
||||
_DATAF(0.51918876171112061000),
|
||||
_DATAF(0.52225708961486816000),
|
||||
_DATAF(0.52532458305358887000),
|
||||
_DATAF(0.52839112281799316000),
|
||||
_DATAF(0.53145653009414673000),
|
||||
_DATAF(0.53452080488204956000),
|
||||
_DATAF(0.53758376836776733000),
|
||||
_DATAF(0.54064530134201050000),
|
||||
_DATAF(0.54370534420013428000),
|
||||
_DATAF(0.54676371812820435000),
|
||||
_DATAF(0.54982030391693115000),
|
||||
_DATAF(0.55287504196166992000),
|
||||
_DATAF(0.55592775344848633000),
|
||||
_DATAF(0.55897837877273560000),
|
||||
_DATAF(0.56202673912048340000),
|
||||
_DATAF(0.56507277488708496000),
|
||||
_DATAF(0.56811636686325073000),
|
||||
_DATAF(0.57115739583969116000),
|
||||
_DATAF(0.57419574260711670000),
|
||||
_DATAF(0.57723128795623779000),
|
||||
_DATAF(0.58026391267776489000),
|
||||
_DATAF(0.58329355716705322000),
|
||||
_DATAF(0.58631998300552368000),
|
||||
_DATAF(0.58934319019317627000),
|
||||
_DATAF(0.59236299991607666000),
|
||||
_DATAF(0.59537935256958008000),
|
||||
_DATAF(0.59839212894439697000),
|
||||
_DATAF(0.60140115022659302000),
|
||||
_DATAF(0.60440635681152344000),
|
||||
_DATAF(0.60740762948989868000),
|
||||
_DATAF(0.61040484905242920000),
|
||||
_DATAF(0.61339795589447021000),
|
||||
_DATAF(0.61638671159744263000),
|
||||
_DATAF(0.61937111616134644000),
|
||||
_DATAF(0.62235099077224731000),
|
||||
_DATAF(0.62532627582550049000),
|
||||
_DATAF(0.62829679250717163000),
|
||||
_DATAF(0.63126254081726074000),
|
||||
_DATAF(0.63422328233718872000),
|
||||
_DATAF(0.63717895746231079000),
|
||||
_DATAF(0.64012944698333740000),
|
||||
_DATAF(0.64307469129562378000),
|
||||
_DATAF(0.64601451158523560000),
|
||||
_DATAF(0.64894884824752808000),
|
||||
_DATAF(0.65187758207321167000),
|
||||
_DATAF(0.65480053424835205000),
|
||||
_DATAF(0.65771764516830444000),
|
||||
_DATAF(0.66062885522842407000),
|
||||
_DATAF(0.66353398561477661000),
|
||||
_DATAF(0.66643291711807251000),
|
||||
_DATAF(0.66932559013366699000),
|
||||
_DATAF(0.67221188545227051000),
|
||||
_DATAF(0.67509168386459351000),
|
||||
_DATAF(0.67796486616134644000),
|
||||
_DATAF(0.68083137273788452000),
|
||||
_DATAF(0.68369102478027344000),
|
||||
_DATAF(0.68654376268386841000),
|
||||
_DATAF(0.68938946723937988000),
|
||||
_DATAF(0.69222795963287354000),
|
||||
_DATAF(0.69505929946899414000),
|
||||
_DATAF(0.69788318872451782000),
|
||||
_DATAF(0.70069968700408936000),
|
||||
_DATAF(0.70350855588912964000),
|
||||
_DATAF(0.70630979537963867000),
|
||||
_DATAF(0.70910322666168213000),
|
||||
_DATAF(0.71188879013061523000),
|
||||
_DATAF(0.71466636657714844000),
|
||||
_DATAF(0.71743583679199219000),
|
||||
_DATAF(0.72019708156585693000),
|
||||
_DATAF(0.72295004129409790000),
|
||||
_DATAF(0.72569459676742554000),
|
||||
_DATAF(0.72843056917190552000),
|
||||
_DATAF(0.73115801811218262000),
|
||||
_DATAF(0.73387670516967773000),
|
||||
_DATAF(0.73658657073974609000),
|
||||
_DATAF(0.73928749561309814000),
|
||||
_DATAF(0.74197942018508911000),
|
||||
_DATAF(0.74466222524642944000),
|
||||
_DATAF(0.74733579158782959000),
|
||||
_DATAF(0.75000000000000000000),
|
||||
_DATAF(0.75265479087829590000),
|
||||
_DATAF(0.75530004501342773000),
|
||||
_DATAF(0.75793570280075073000),
|
||||
_DATAF(0.76056158542633057000),
|
||||
_DATAF(0.76317769289016724000),
|
||||
_DATAF(0.76578384637832642000),
|
||||
_DATAF(0.76837992668151855000),
|
||||
_DATAF(0.77096593379974365000),
|
||||
_DATAF(0.77354174852371216000),
|
||||
_DATAF(0.77610719203948975000),
|
||||
_DATAF(0.77866220474243164000),
|
||||
_DATAF(0.78120678663253784000),
|
||||
_DATAF(0.78374069929122925000),
|
||||
_DATAF(0.78626388311386108000),
|
||||
_DATAF(0.78877633810043335000),
|
||||
_DATAF(0.79127782583236694000),
|
||||
_DATAF(0.79376840591430664000),
|
||||
_DATAF(0.79624783992767334000),
|
||||
_DATAF(0.79871612787246704000),
|
||||
_DATAF(0.80117315053939819000),
|
||||
_DATAF(0.80361878871917725000),
|
||||
_DATAF(0.80605298280715942000),
|
||||
_DATAF(0.80847567319869995000),
|
||||
_DATAF(0.81088668107986450000),
|
||||
_DATAF(0.81328594684600830000),
|
||||
_DATAF(0.81567341089248657000),
|
||||
_DATAF(0.81804895401000977000),
|
||||
_DATAF(0.82041257619857788000),
|
||||
_DATAF(0.82276403903961182000),
|
||||
_DATAF(0.82510334253311157000),
|
||||
_DATAF(0.82743036746978760000),
|
||||
_DATAF(0.82974505424499512000),
|
||||
_DATAF(0.83204728364944458000),
|
||||
_DATAF(0.83433699607849121000),
|
||||
_DATAF(0.83661413192749023000),
|
||||
_DATAF(0.83887857198715210000),
|
||||
_DATAF(0.84113019704818726000),
|
||||
_DATAF(0.84336894750595093000),
|
||||
_DATAF(0.84559476375579834000),
|
||||
_DATAF(0.84780752658843994000),
|
||||
_DATAF(0.85000717639923096000),
|
||||
_DATAF(0.85219359397888184000),
|
||||
_DATAF(0.85436677932739258000),
|
||||
_DATAF(0.85652655363082886000),
|
||||
_DATAF(0.85867291688919067000),
|
||||
_DATAF(0.86080569028854370000),
|
||||
_DATAF(0.86292493343353271000),
|
||||
_DATAF(0.86503040790557861000),
|
||||
_DATAF(0.86712217330932617000),
|
||||
_DATAF(0.86920005083084106000),
|
||||
_DATAF(0.87126404047012329000),
|
||||
_DATAF(0.87331396341323853000),
|
||||
_DATAF(0.87534987926483154000),
|
||||
_DATAF(0.87737154960632324000),
|
||||
_DATAF(0.87937903404235840000),
|
||||
_DATAF(0.88137221336364746000),
|
||||
_DATAF(0.88335102796554565000),
|
||||
_DATAF(0.88531535863876343000),
|
||||
_DATAF(0.88726514577865601000),
|
||||
_DATAF(0.88920032978057861000),
|
||||
_DATAF(0.89112079143524170000),
|
||||
_DATAF(0.89302653074264526000),
|
||||
_DATAF(0.89491748809814453000),
|
||||
_DATAF(0.89679348468780518000),
|
||||
_DATAF(0.89865452051162720000),
|
||||
_DATAF(0.90050053596496582000),
|
||||
_DATAF(0.90233147144317627000),
|
||||
_DATAF(0.90414720773696899000),
|
||||
_DATAF(0.90594768524169922000),
|
||||
_DATAF(0.90773284435272217000),
|
||||
_DATAF(0.90950262546539307000),
|
||||
_DATAF(0.91125696897506714000),
|
||||
_DATAF(0.91299575567245483000),
|
||||
_DATAF(0.91471904516220093000),
|
||||
_DATAF(0.91642659902572632000),
|
||||
_DATAF(0.91811853647232056000),
|
||||
_DATAF(0.91979461908340454000),
|
||||
_DATAF(0.92145490646362305000),
|
||||
_DATAF(0.92309933900833130000),
|
||||
_DATAF(0.92472773790359497000),
|
||||
_DATAF(0.92634016275405884000),
|
||||
_DATAF(0.92793643474578857000),
|
||||
_DATAF(0.92951661348342896000),
|
||||
_DATAF(0.93108057975769043000),
|
||||
_DATAF(0.93262833356857300000),
|
||||
_DATAF(0.93415969610214233000),
|
||||
_DATAF(0.93567472696304321000),
|
||||
_DATAF(0.93717330694198608000),
|
||||
_DATAF(0.93865537643432617000),
|
||||
_DATAF(0.94012093544006348000),
|
||||
_DATAF(0.94156986474990845000),
|
||||
_DATAF(0.94300216436386108000),
|
||||
_DATAF(0.94441771507263184000),
|
||||
_DATAF(0.94581651687622070000),
|
||||
_DATAF(0.94719851016998291000),
|
||||
_DATAF(0.94856363534927368000),
|
||||
_DATAF(0.94991183280944824000),
|
||||
_DATAF(0.95124304294586182000),
|
||||
_DATAF(0.95255726575851440000),
|
||||
_DATAF(0.95385438203811646000),
|
||||
_DATAF(0.95513439178466797000),
|
||||
_DATAF(0.95639723539352417000),
|
||||
_DATAF(0.95764285326004028000),
|
||||
_DATAF(0.95887118577957153000),
|
||||
_DATAF(0.96008229255676270000),
|
||||
_DATAF(0.96127593517303467000),
|
||||
_DATAF(0.96245223283767700000),
|
||||
_DATAF(0.96361112594604492000),
|
||||
_DATAF(0.96475243568420410000),
|
||||
_DATAF(0.96587628126144409000),
|
||||
_DATAF(0.96698254346847534000),
|
||||
_DATAF(0.96807116270065308000),
|
||||
_DATAF(0.96914213895797729000),
|
||||
_DATAF(0.97019541263580322000),
|
||||
_DATAF(0.97123098373413086000),
|
||||
_DATAF(0.97224873304367065000),
|
||||
_DATAF(0.97324872016906738000),
|
||||
_DATAF(0.97423082590103149000),
|
||||
_DATAF(0.97519499063491821000),
|
||||
_DATAF(0.97614127397537231000),
|
||||
_DATAF(0.97706961631774902000),
|
||||
_DATAF(0.97797995805740356000),
|
||||
_DATAF(0.97887223958969116000),
|
||||
_DATAF(0.97974646091461182000),
|
||||
_DATAF(0.98060262203216553000),
|
||||
_DATAF(0.98144060373306274000),
|
||||
_DATAF(0.98226046562194824000),
|
||||
_DATAF(0.98306214809417725000),
|
||||
_DATAF(0.98384553194046021000),
|
||||
_DATAF(0.98461073637008667000),
|
||||
_DATAF(0.98535764217376709000),
|
||||
_DATAF(0.98608618974685669000),
|
||||
_DATAF(0.98679643869400024000),
|
||||
_DATAF(0.98748832941055298000),
|
||||
_DATAF(0.98816186189651489000),
|
||||
_DATAF(0.98881691694259644000),
|
||||
_DATAF(0.98945355415344238000),
|
||||
_DATAF(0.99007177352905273000),
|
||||
_DATAF(0.99067145586013794000),
|
||||
_DATAF(0.99125260114669800000),
|
||||
_DATAF(0.99181526899337769000),
|
||||
_DATAF(0.99235939979553223000),
|
||||
_DATAF(0.99288487434387207000),
|
||||
_DATAF(0.99339181184768677000),
|
||||
_DATAF(0.99388015270233154000),
|
||||
_DATAF(0.99434983730316162000),
|
||||
_DATAF(0.99480086565017700000),
|
||||
_DATAF(0.99523323774337769000),
|
||||
_DATAF(0.99564695358276367000),
|
||||
_DATAF(0.99604195356369019000),
|
||||
_DATAF(0.99641823768615723000),
|
||||
_DATAF(0.99677580595016479000),
|
||||
_DATAF(0.99711459875106812000),
|
||||
_DATAF(0.99743467569351196000),
|
||||
_DATAF(0.99773597717285156000),
|
||||
_DATAF(0.99801850318908691000),
|
||||
_DATAF(0.99828219413757324000),
|
||||
_DATAF(0.99852716922760010000),
|
||||
_DATAF(0.99875330924987793000),
|
||||
_DATAF(0.99896061420440674000),
|
||||
_DATAF(0.99914908409118652000),
|
||||
_DATAF(0.99931877851486206000),
|
||||
_DATAF(0.99946963787078857000),
|
||||
_DATAF(0.99960160255432129000),
|
||||
_DATAF(0.99971473217010498000),
|
||||
_DATAF(0.99980902671813965000),
|
||||
_DATAF(0.99988448619842529000),
|
||||
_DATAF(0.99994105100631714000),
|
||||
_DATAF(0.99997878074645996000),
|
||||
_DATAF(0.99999761581420898000),
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* \defgroup library_srvsw_sysse_math Math
|
||||
* \ingroup library_srvsw_sysse
|
||||
*
|
||||
* \defgroup library_srvsw_sysse_math_f32 Math 32bit floating point
|
||||
* \ingroup library_srvsw_sysse_math
|
||||
*/
|
||||
Reference in new issue
Block a user