#include #include /* Clarke transform test - compile with ARM GCC */ #define Q15_MULT(a, b) (((int32_t)(a) * (int32_t)(b)) >> 15) #define ONE_OVER_SQRT3_Q15 18919 /* Q15: 1/√3 */ typedef struct { int16_t Alpha; int16_t Beta; } Clarke_t; void Clarke_Transform(int16_t Ia, int16_t Ib, Clarke_t *out) { out->Alpha = Ia; int32_t tmp = (int32_t)Ia + 2 * (int32_t)Ib; out->Beta = (int16_t)(Q15_MULT((int16_t)tmp, ONE_OVER_SQRT3_Q15)); } int main(void) { Clarke_t out; Clarke_Transform(10000, -5000, &out); printf("Ia=%d, Ib=%d -> Ialpha=%d, Ibeta=%d\n", 10000, -5000, out.Alpha, out.Beta); printf("ARM GCC compile test: PASS\n"); return 0; }