3.11.7 Q15_MULTIPLY_SAT Macro

C

#define   Q15_MULTIPLY_SAT(x, y) ({                \
    int32_t result = ((int32_t)(x) * (int32_t)(y)) >> 15U; \
    if (result > INT16_MAX) result = INT16_MAX;            \
    else if (result < INT16_MIN) result = INT16_MIN;       \
    (int16_t)result;                                       \
})

Summary

Performs multiplication of two fixed-point numbers represented in Q15 format and.

Description

This macro performs multiplication of two Q15 (fixed-point) numbers with saturation handling. It ensures that the result does not exceed the range of a Q15 value, which is between -32768 (INT16_MIN) and 32767 (INT16_MAX).

Example

int16_t a = 20000;  // Approximately 0.61035 in Q15
int16_t b = 20000;  // Approximately 0.61035 in Q15

int16_t result = Q15_MULTIPLY_SAT(a, b);  // Expected to handle saturation if needed  
    

Remarks

None