Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 2 | mjames | 1 | #include "ref.h" |
| 2 | |||
| 3 | void ref_dct4_f32( |
||
| 4 | const arm_dct4_instance_f32 * S, |
||
| 5 | float32_t * pState, |
||
| 6 | float32_t * pInlineBuffer) |
||
| 7 | { |
||
| 8 | uint32_t n,k; |
||
| 9 | float32_t sum; |
||
| 10 | float32_t pi_by_N = 3.14159265358979f / (float32_t)S->N; |
||
| 11 | float32_t tmp; |
||
| 12 | float32_t normalize = sqrtf(2.0f / (float32_t)S->N); |
||
| 13 | |||
| 14 | for(k=0;k<S->N;k++) |
||
| 15 | { |
||
| 16 | sum=0.0f; |
||
| 17 | tmp = ((float32_t)k + 0.5f)*pi_by_N; |
||
| 18 | for(n=0;n<S->N;n++) |
||
| 19 | { |
||
| 20 | sum += pInlineBuffer[n] * cosf(tmp * ((float32_t)n + 0.5f)); |
||
| 21 | } |
||
| 22 | scratchArray[k] = normalize * sum; |
||
| 23 | } |
||
| 24 | |||
| 25 | for(k=0;k<S->N;k++) |
||
| 26 | { |
||
| 27 | pInlineBuffer[k] = scratchArray[k]; |
||
| 28 | } |
||
| 29 | } |
||
| 30 | |||
| 31 | void ref_dct4_q31( |
||
| 32 | const arm_dct4_instance_q31 * S, |
||
| 33 | q31_t * pState, |
||
| 34 | q31_t * pInlineBuffer) |
||
| 35 | { |
||
| 36 | arm_dct4_instance_f32 SS; |
||
| 37 | float32_t *fSrc = (float32_t*)pInlineBuffer; |
||
| 38 | uint32_t i; |
||
| 39 | |||
| 40 | SS.N = S->N; |
||
| 41 | |||
| 42 | for(i=0;i<S->N;i++) |
||
| 43 | { |
||
| 44 | //read the q31 data, cast to float, scale down for float |
||
| 45 | fSrc[i] = (float32_t)pInlineBuffer[i] / 2147483648.0f; |
||
| 46 | } |
||
| 47 | |||
| 48 | ref_dct4_f32(&SS,(float32_t*)0,fSrc); |
||
| 49 | |||
| 50 | for(i=0;i<S->N;i++) |
||
| 51 | { |
||
| 52 | fSrc[i] = fSrc[i] * 2147483648.0f / (float32_t)S->N ; |
||
| 53 | fSrc[i] += (fSrc[i] > 0) ? 0.5f : -0.5f; |
||
| 54 | pInlineBuffer[i] = (q31_t)fSrc[i]; |
||
| 55 | } |
||
| 56 | } |
||
| 57 | |||
| 58 | void ref_dct4_q15( |
||
| 59 | const arm_dct4_instance_q15 * S, |
||
| 60 | q15_t * pState, |
||
| 61 | q15_t * pInlineBuffer) |
||
| 62 | { |
||
| 63 | arm_dct4_instance_f32 SS; |
||
| 64 | float32_t *fSrc = (float32_t*)pInlineBuffer; |
||
| 65 | uint32_t i; |
||
| 66 | |||
| 67 | SS.N = S->N; |
||
| 68 | |||
| 69 | for(i=0;i<S->N;i++) |
||
| 70 | { |
||
| 71 | //read the q15 data, cast to float, scale down for float, place in temporary buffer |
||
| 72 | scratchArray[i] = (float32_t)pInlineBuffer[i] / 32768.0f; |
||
| 73 | } |
||
| 74 | |||
| 75 | for(i=0;i<S->N;i++) |
||
| 76 | { |
||
| 77 | //copy from temp buffer to final buffer |
||
| 78 | fSrc[i] = scratchArray[i]; |
||
| 79 | } |
||
| 80 | |||
| 81 | ref_dct4_f32(&SS,(float32_t*)0,fSrc); |
||
| 82 | |||
| 83 | for(i=0;i<S->N;i++) |
||
| 84 | { |
||
| 85 | fSrc[i] = fSrc[i] * 32768.0f / (float32_t)S->N; |
||
| 86 | fSrc[i] += (fSrc[i] > 0) ? 0.5f : -0.5f; |
||
| 87 | pInlineBuffer[i] = (q15_t)fSrc[i]; |
||
| 88 | } |
||
| 89 | } |