Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include "arm_math.h"
00028
00066 void arm_float_to_q31(
00067 float32_t * pSrc,
00068 q31_t * pDst,
00069 uint32_t blockSize)
00070 {
00071 float32_t *pIn = pSrc;
00072 uint32_t blkCnt;
00073
00074 #ifdef ARM_MATH_ROUNDING
00075
00076 float32_t in;
00077
00078 #endif
00079
00080
00081
00082 blkCnt = blockSize >> 2u;
00083
00084
00085
00086 while(blkCnt > 0u)
00087 {
00088 #ifdef ARM_MATH_ROUNDING
00089
00090
00091 in = *pIn++;
00092 in = (in * 2147483648.0f);
00093 in += in > 0 ? 0.5 : -0.5;
00094 *pDst++ = clip_q63_to_q31((q63_t) (in));
00095
00096 in = *pIn++;
00097 in = (in * 2147483648.0f);
00098 in += in > 0 ? 0.5 : -0.5;
00099 *pDst++ = clip_q63_to_q31((q63_t) (in));
00100
00101 in = *pIn++;
00102 in = (in * 2147483648.0f);
00103 in += in > 0 ? 0.5 : -0.5;
00104 *pDst++ = clip_q63_to_q31((q63_t) (in));
00105
00106 in = *pIn++;
00107 in = (in * 2147483648.0f);
00108 in += in > 0 ? 0.5 : -0.5;
00109 *pDst++ = clip_q63_to_q31((q63_t) (in));
00110
00111 #else
00112
00113
00114
00115 *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f));
00116 *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f));
00117 *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f));
00118 *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f));
00119
00120 #endif
00121
00122
00123 blkCnt--;
00124 }
00125
00126
00127
00128 blkCnt = blockSize % 0x4u;
00129
00130 while(blkCnt > 0u)
00131 {
00132 #ifdef ARM_MATH_ROUNDING
00133
00134
00135
00136 in = *pIn++;
00137 in = (in * 2147483648.0f);
00138 in += in > 0 ? 0.5 : -0.5;
00139 *pDst++ = clip_q63_to_q31((q63_t) (in));
00140
00141 #else
00142
00143
00144
00145 *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f));
00146
00147 #endif
00148
00149
00150 blkCnt--;
00151 }
00152 }
00153