| #include "ref.h" |
| |
| void ref_scale_f32( |
| float32_t * pSrc, |
| float32_t scale, |
| float32_t * pDst, |
| uint32_t blockSize) |
| { |
| uint32_t i; |
| |
| for(i=0;i<blockSize;i++) |
| { |
| pDst[i] = pSrc[i] * scale; |
| } |
| } |
| |
| void ref_scale_q31( |
| q31_t * pSrc, |
| q31_t scaleFract, |
| int8_t shift, |
| q31_t * pDst, |
| uint32_t blockSize) |
| { |
| uint32_t i; |
| int8_t kShift = shift + 1; /* Shift to apply after scaling */ |
| int8_t sign = (kShift & 0x80); |
| q63_t temp; |
| |
| for(i=0;i<blockSize;i++) |
| { |
| temp = ((q63_t) pSrc[i] * scaleFract) >> 32; |
| if (sign) |
| pDst[i] = temp >> -kShift; |
| else |
| pDst[i] = ref_sat_q31( (q63_t)temp << kShift ); |
| } |
| } |
| |
| void ref_scale_q15( |
| q15_t * pSrc, |
| q15_t scaleFract, |
| int8_t shift, |
| q15_t * pDst, |
| uint32_t blockSize) |
| { |
| uint32_t i; |
| int8_t kShift = 15 - shift; /* Shift to apply after scaling */ |
| |
| for(i=0;i<blockSize;i++) |
| { |
| pDst[i] = ref_sat_q15(((q31_t) pSrc[i] * scaleFract) >> kShift); |
| } |
| } |
| |
| void ref_scale_q7( |
| q7_t * pSrc, |
| q7_t scaleFract, |
| int8_t shift, |
| q7_t * pDst, |
| uint32_t blockSize) |
| { |
| uint32_t i; |
| int8_t kShift = 7 - shift; /* Shift to apply after scaling */ |
| |
| for(i=0;i<blockSize;i++) |
| { |
| pDst[i] = ref_sat_q7(((q15_t) pSrc[i] * scaleFract) >> kShift); |
| } |
| } |