Loading basic_math/math_op.c +21 −22 Original line number Diff line number Diff line Loading @@ -167,53 +167,39 @@ Word32 Pow2( /* (o) Q0 : result (range: 0<=v | dot_product = sum(x[i]*y[i]) i=0..N-1 | |___________________________________________________________________________| */ #ifdef BASOP_NOGLOB Word32 Dot_product12_o( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 y[], /* (i) 12bits: y vector */ const Word16 lg, /* (i) : vector length */ Word16* exp, /* (o) : exponent of result (0..+30) */ Flag* Overflow_out /* o : propagating the Overflow flag to upper level */ Flag* Overflow_out /* o : propagating the Overflow flag to upper level, set to NULL to ignore internal overflows */ ) { Word16 i, sft; Word32 L_sum; L_sum = L_mac(1, x[0], y[0]); FOR(i = 1; i < lg; i++) { L_sum = L_mac_o(L_sum, x[i], y[i], Overflow_out); } /* Normalize acc in Q31 */ sft = norm_l(L_sum); L_sum = L_shl(L_sum, sft); *exp = sub(30, sft); move16(); /* exponent = 0..30 */ return L_sum; } #endif #else /* BASOP_NOGLOB */ Word32 Dot_product12( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 y[], /* (i) 12bits: y vector */ const Word16 lg, /* (i) : vector length */ Word16 * exp /* (o) : exponent of result (0..+30) */ ) #endif /* BASOP_NOGLOB */ { Word16 i, sft; Word32 L_sum; #ifdef BASOP_NOGLOB Flag Overflow = 0; Flag Overflow_ignored = 0; #endif /* BASOP_NOGLOB */ L_sum = L_mac(1, x[0], y[0]); FOR (i = 1; i < lg; i++) { #ifdef BASOP_NOGLOB L_sum = L_mac_o(L_sum, x[i], y[i], &Overflow); L_sum = L_mac_o(L_sum, x[i], y[i], Overflow_out ? Overflow_out : &Overflow_ignored); #else /* BASOP_NOGLOB */ L_sum = L_mac(L_sum, x[i], y[i]); #endif /* BASOP_NOGLOB */ } /* Normalize acc in Q31 */ Loading @@ -225,6 +211,19 @@ Word32 Dot_product12( /* (o) Q31: normalized result (1 < va return L_sum; } #ifdef BASOP_NOGLOB Word32 Dot_product12( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 y[], /* (i) 12bits: y vector */ const Word16 lg, /* (i) : vector length */ Word16 * exp /* (o) : exponent of result (0..+30) */ ) { /* Ignore internal overflows */ return Dot_product12_o(x, y, lg, exp, NULL); } #endif /* BASOP_NOGLOB */ /*___________________________________________________________________________ | | | Function Name : Energy_scale() | Loading basic_math/math_op.h +1 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ Word32 Dot_product12( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 lg, /* (i) : vector length */ Word16 * exp /* (o) : exponent of result (0..+30) */ ); Word32 Energy_scale( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 lg, /* (i) : vector length */ Loading Loading
basic_math/math_op.c +21 −22 Original line number Diff line number Diff line Loading @@ -167,53 +167,39 @@ Word32 Pow2( /* (o) Q0 : result (range: 0<=v | dot_product = sum(x[i]*y[i]) i=0..N-1 | |___________________________________________________________________________| */ #ifdef BASOP_NOGLOB Word32 Dot_product12_o( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 y[], /* (i) 12bits: y vector */ const Word16 lg, /* (i) : vector length */ Word16* exp, /* (o) : exponent of result (0..+30) */ Flag* Overflow_out /* o : propagating the Overflow flag to upper level */ Flag* Overflow_out /* o : propagating the Overflow flag to upper level, set to NULL to ignore internal overflows */ ) { Word16 i, sft; Word32 L_sum; L_sum = L_mac(1, x[0], y[0]); FOR(i = 1; i < lg; i++) { L_sum = L_mac_o(L_sum, x[i], y[i], Overflow_out); } /* Normalize acc in Q31 */ sft = norm_l(L_sum); L_sum = L_shl(L_sum, sft); *exp = sub(30, sft); move16(); /* exponent = 0..30 */ return L_sum; } #endif #else /* BASOP_NOGLOB */ Word32 Dot_product12( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 y[], /* (i) 12bits: y vector */ const Word16 lg, /* (i) : vector length */ Word16 * exp /* (o) : exponent of result (0..+30) */ ) #endif /* BASOP_NOGLOB */ { Word16 i, sft; Word32 L_sum; #ifdef BASOP_NOGLOB Flag Overflow = 0; Flag Overflow_ignored = 0; #endif /* BASOP_NOGLOB */ L_sum = L_mac(1, x[0], y[0]); FOR (i = 1; i < lg; i++) { #ifdef BASOP_NOGLOB L_sum = L_mac_o(L_sum, x[i], y[i], &Overflow); L_sum = L_mac_o(L_sum, x[i], y[i], Overflow_out ? Overflow_out : &Overflow_ignored); #else /* BASOP_NOGLOB */ L_sum = L_mac(L_sum, x[i], y[i]); #endif /* BASOP_NOGLOB */ } /* Normalize acc in Q31 */ Loading @@ -225,6 +211,19 @@ Word32 Dot_product12( /* (o) Q31: normalized result (1 < va return L_sum; } #ifdef BASOP_NOGLOB Word32 Dot_product12( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 y[], /* (i) 12bits: y vector */ const Word16 lg, /* (i) : vector length */ Word16 * exp /* (o) : exponent of result (0..+30) */ ) { /* Ignore internal overflows */ return Dot_product12_o(x, y, lg, exp, NULL); } #endif /* BASOP_NOGLOB */ /*___________________________________________________________________________ | | | Function Name : Energy_scale() | Loading
basic_math/math_op.h +1 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ Word32 Dot_product12( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 lg, /* (i) : vector length */ Word16 * exp /* (o) : exponent of result (0..+30) */ ); Word32 Energy_scale( /* (o) Q31: normalized result (1 < val <= -1) */ const Word16 x[], /* (i) 12bits: x vector */ const Word16 lg, /* (i) : vector length */ Loading