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
00028
00029
00030 #include "arm_math.h"
00031
00069 void arm_float_to_q31(
00070 float32_t * pSrc,
00071 q31_t * pDst,
00072 uint32_t blockSize)
00073 {
00074 float32_t *pIn = pSrc;
00075 uint32_t blkCnt;
00076
00077 #ifdef ARM_MATH_ROUNDING
00078
00079 float32_t in;
00080
00081 #endif
00082
00083 #ifndef ARM_MATH_CM0
00084
00085
00086
00087
00088 blkCnt = blockSize >> 2u;
00089
00090
00091
00092 while(blkCnt > 0u)
00093 {
00094
00095 #ifdef ARM_MATH_ROUNDING
00096
00097
00098
00099 in = *pIn++;
00100 in = (in * 2147483648.0f);
00101 in += in > 0 ? 0.5 : -0.5;
00102 *pDst++ = clip_q63_to_q31((q63_t) (in));
00103
00104 in = *pIn++;
00105 in = (in * 2147483648.0f);
00106 in += in > 0 ? 0.5 : -0.5;
00107 *pDst++ = clip_q63_to_q31((q63_t) (in));
00108
00109 in = *pIn++;
00110 in = (in * 2147483648.0f);
00111 in += in > 0 ? 0.5 : -0.5;
00112 *pDst++ = clip_q63_to_q31((q63_t) (in));
00113
00114 in = *pIn++;
00115 in = (in * 2147483648.0f);
00116 in += in > 0 ? 0.5 : -0.5;
00117 *pDst++ = clip_q63_to_q31((q63_t) (in));
00118
00119 #else
00120
00121
00122
00123 *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f));
00124 *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f));
00125 *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f));
00126 *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f));
00127
00128 #endif
00129
00130
00131 blkCnt--;
00132 }
00133
00134
00135
00136 blkCnt = blockSize % 0x4u;
00137
00138 while(blkCnt > 0u)
00139 {
00140
00141 #ifdef ARM_MATH_ROUNDING
00142
00143
00144
00145 in = *pIn++;
00146 in = (in * 2147483648.0f);
00147 in += in > 0 ? 0.5 : -0.5;
00148 *pDst++ = clip_q63_to_q31((q63_t) (in));
00149
00150 #else
00151
00152
00153
00154 *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f));
00155
00156 #endif
00157
00158
00159 blkCnt--;
00160 }
00161
00162
00163 #else
00164
00165
00166
00167
00168 blkCnt = blockSize;
00169
00170 while(blkCnt > 0u)
00171 {
00172
00173 #ifdef ARM_MATH_ROUNDING
00174
00175
00176
00177 in = *pIn++;
00178 in = (in * 2147483648.0f);
00179 in += in > 0 ? 0.5f : -0.5f;
00180 *pDst++ = clip_q63_to_q31((q63_t) (in));
00181
00182 #else
00183
00184
00185
00186 *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f));
00187
00188 #endif
00189
00190
00191 blkCnt--;
00192 }
00193
00194 #endif
00195
00196 }
00197