void SOGI_Run(SOGI_Q15_t *s, int32_t u) {
int64_t alpha;
int64_t beta;
/*
* Alpha channel
*/
alpha =
(int64_t)s->bD0 * u
+ (int64_t)s->bD1 * s->u_z1
+ (int64_t)s->bD2 * s->u_z2
+ (int64_t)s->a1 * s->alpha_z1
+ (int64_t)s->a2 * s->alpha_z2;
alpha >>= 30;
/*
* Beta channel
*/
beta =
(int64_t)s->bQ0 * u
+ (int64_t)s->bQ1 * s->u_z1
+ (int64_t)s->bQ2 * s->u_z2
+ (int64_t)s->a1 * s->beta_z1
+ (int64_t)s->a2 * s->beta_z2;
beta >>= 30;
/*
* Saturation and Outputs
*/
s->alpha = sat_q15(alpha);
s->beta = sat_q15(beta);
/*
* Update state
*/
s->u_z2 = s->u_z1;
s->u_z1 = u;
s->alpha_z2 = s->alpha_z1;
s->alpha_z1 = alpha;
s->beta_z2 = s->beta_z1;
s->beta_z1 = beta;
}