frac32 in
frac32 offset
frac32 outA
frac32 outB
text valuesA
text valuesB
float Avf[32] = {attr_valuesA};
float Bvf[32] = {attr_valuesB};
int32_t *Av = (int32_t *)Avf;
int32_t *Bv = (int32_t *)Bvf;
for (int i = 0; i < 32; i += 2) {
Av[i + 1] = arm::float_to_q(Avf[i + 1] - Avf[i], 22); // dv q28
Av[i] = arm::float_to_q(Avf[i], 21); // v q27
Bv[i + 1] = arm::float_to_q(Bvf[i + 1] - Bvf[i], 22); // dv q28
Bv[i] = arm::float_to_q(Bvf[i], 21); // v q27
}
int32_t in = (inlet_in + inlet_offset) & 0x07FFFFFF;
// q23->q31 remove sign
int32_t a = (in << (31 - (27 - 4))) & 0x7FFFFFFF; // q31
int i = in >> (27 - 4); //[0..15]
i <<= 1; //[0..30] by 2 step
// q28 q31 q27
outlet_outA = ___SMMLA(Av[i + 1], a, Av[i]);
outlet_outB = ___SMMLA(Bv[i + 1], a, Bv[i]);