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 | } |