1*3f1979aaSAndroid Build Coastguard Worker /*
2*3f1979aaSAndroid Build Coastguard Worker This software is part of pffft/pfdsp, a set of simple DSP routines.
3*3f1979aaSAndroid Build Coastguard Worker
4*3f1979aaSAndroid Build Coastguard Worker Copyright (c) 2014, Andras Retzler <[email protected]>
5*3f1979aaSAndroid Build Coastguard Worker Copyright (c) 2020 Hayati Ayguen <[email protected]>
6*3f1979aaSAndroid Build Coastguard Worker
7*3f1979aaSAndroid Build Coastguard Worker All rights reserved.
8*3f1979aaSAndroid Build Coastguard Worker
9*3f1979aaSAndroid Build Coastguard Worker Redistribution and use in source and binary forms, with or without
10*3f1979aaSAndroid Build Coastguard Worker modification, are permitted provided that the following conditions are met:
11*3f1979aaSAndroid Build Coastguard Worker * Redistributions of source code must retain the above copyright
12*3f1979aaSAndroid Build Coastguard Worker notice, this list of conditions and the following disclaimer.
13*3f1979aaSAndroid Build Coastguard Worker * Redistributions in binary form must reproduce the above copyright
14*3f1979aaSAndroid Build Coastguard Worker notice, this list of conditions and the following disclaimer in the
15*3f1979aaSAndroid Build Coastguard Worker documentation and/or other materials provided with the distribution.
16*3f1979aaSAndroid Build Coastguard Worker * Neither the name of the copyright holder nor the
17*3f1979aaSAndroid Build Coastguard Worker names of its contributors may be used to endorse or promote products
18*3f1979aaSAndroid Build Coastguard Worker derived from this software without specific prior written permission.
19*3f1979aaSAndroid Build Coastguard Worker
20*3f1979aaSAndroid Build Coastguard Worker THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
21*3f1979aaSAndroid Build Coastguard Worker ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22*3f1979aaSAndroid Build Coastguard Worker WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23*3f1979aaSAndroid Build Coastguard Worker DISCLAIMED. IN NO EVENT SHALL ANDRAS RETZLER BE LIABLE FOR ANY
24*3f1979aaSAndroid Build Coastguard Worker DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25*3f1979aaSAndroid Build Coastguard Worker (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26*3f1979aaSAndroid Build Coastguard Worker LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
27*3f1979aaSAndroid Build Coastguard Worker ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28*3f1979aaSAndroid Build Coastguard Worker (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29*3f1979aaSAndroid Build Coastguard Worker SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30*3f1979aaSAndroid Build Coastguard Worker */
31*3f1979aaSAndroid Build Coastguard Worker
32*3f1979aaSAndroid Build Coastguard Worker /* include own header first, to see missing includes */
33*3f1979aaSAndroid Build Coastguard Worker #include "pf_carrier.h"
34*3f1979aaSAndroid Build Coastguard Worker #include "fmv.h"
35*3f1979aaSAndroid Build Coastguard Worker
36*3f1979aaSAndroid Build Coastguard Worker #include <limits.h>
37*3f1979aaSAndroid Build Coastguard Worker #include <assert.h>
38*3f1979aaSAndroid Build Coastguard Worker
39*3f1979aaSAndroid Build Coastguard Worker
40*3f1979aaSAndroid Build Coastguard Worker PF_TARGET_CLONES
generate_dc_f(float * output,int size)41*3f1979aaSAndroid Build Coastguard Worker void generate_dc_f(float* output, int size)
42*3f1979aaSAndroid Build Coastguard Worker {
43*3f1979aaSAndroid Build Coastguard Worker for(int i=0;i<2*size;)
44*3f1979aaSAndroid Build Coastguard Worker {
45*3f1979aaSAndroid Build Coastguard Worker /* exp(i*0) = 1+i*0 */
46*3f1979aaSAndroid Build Coastguard Worker output[i++]=(127.0F / 128.0F);
47*3f1979aaSAndroid Build Coastguard Worker output[i++]=0.0F;
48*3f1979aaSAndroid Build Coastguard Worker }
49*3f1979aaSAndroid Build Coastguard Worker }
50*3f1979aaSAndroid Build Coastguard Worker
51*3f1979aaSAndroid Build Coastguard Worker PF_TARGET_CLONES
generate_dc_s16(short * output,int size)52*3f1979aaSAndroid Build Coastguard Worker void generate_dc_s16(short* output, int size)
53*3f1979aaSAndroid Build Coastguard Worker {
54*3f1979aaSAndroid Build Coastguard Worker for(int i=0;i<2*size;)
55*3f1979aaSAndroid Build Coastguard Worker {
56*3f1979aaSAndroid Build Coastguard Worker /* exp(i*0) = 1+i*0 */
57*3f1979aaSAndroid Build Coastguard Worker output[i++]=SHRT_MAX;
58*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
59*3f1979aaSAndroid Build Coastguard Worker }
60*3f1979aaSAndroid Build Coastguard Worker }
61*3f1979aaSAndroid Build Coastguard Worker
62*3f1979aaSAndroid Build Coastguard Worker PF_TARGET_CLONES
generate_pos_fs4_f(float * output,int size)63*3f1979aaSAndroid Build Coastguard Worker void generate_pos_fs4_f(float* output, int size)
64*3f1979aaSAndroid Build Coastguard Worker {
65*3f1979aaSAndroid Build Coastguard Worker /* size must be multiple of 4 */
66*3f1979aaSAndroid Build Coastguard Worker assert(!(size&3));
67*3f1979aaSAndroid Build Coastguard Worker for(int i=0;i<2*size;)
68*3f1979aaSAndroid Build Coastguard Worker {
69*3f1979aaSAndroid Build Coastguard Worker /* exp(i*0) = 1+i*0 */
70*3f1979aaSAndroid Build Coastguard Worker output[i++]=(127.0F / 128.0F);
71*3f1979aaSAndroid Build Coastguard Worker output[i++]=0.0F;
72*3f1979aaSAndroid Build Coastguard Worker /* exp(i* +pi/2) = 0+i*1 */
73*3f1979aaSAndroid Build Coastguard Worker output[i++]=0.0F;
74*3f1979aaSAndroid Build Coastguard Worker output[i++]=(127.0F / 128.0F);
75*3f1979aaSAndroid Build Coastguard Worker /* exp(i* +pi) = -1+i*0 */
76*3f1979aaSAndroid Build Coastguard Worker output[i++]=(-127.0F / 128.0F);
77*3f1979aaSAndroid Build Coastguard Worker output[i++]=0.0F;
78*3f1979aaSAndroid Build Coastguard Worker /* exp(i* -pi/2) = 0+i*-1 */
79*3f1979aaSAndroid Build Coastguard Worker output[i++]=0.0F;
80*3f1979aaSAndroid Build Coastguard Worker output[i++]=(-127.0F / 128.0F);
81*3f1979aaSAndroid Build Coastguard Worker }
82*3f1979aaSAndroid Build Coastguard Worker }
83*3f1979aaSAndroid Build Coastguard Worker
84*3f1979aaSAndroid Build Coastguard Worker PF_TARGET_CLONES
generate_pos_fs4_s16(short * output,int size)85*3f1979aaSAndroid Build Coastguard Worker void generate_pos_fs4_s16(short* output, int size)
86*3f1979aaSAndroid Build Coastguard Worker {
87*3f1979aaSAndroid Build Coastguard Worker /* size must be multiple of 4 */
88*3f1979aaSAndroid Build Coastguard Worker assert(!(size&3));
89*3f1979aaSAndroid Build Coastguard Worker for(int i=0;i<2*size;)
90*3f1979aaSAndroid Build Coastguard Worker {
91*3f1979aaSAndroid Build Coastguard Worker /* exp(i*0) = 1+i*0 */
92*3f1979aaSAndroid Build Coastguard Worker output[i++]=SHRT_MAX;
93*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
94*3f1979aaSAndroid Build Coastguard Worker /* exp(i* +pi/2) = 0+i*1 */
95*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
96*3f1979aaSAndroid Build Coastguard Worker output[i++]=SHRT_MAX;
97*3f1979aaSAndroid Build Coastguard Worker /* exp(i* +pi) = -1+i*0 */
98*3f1979aaSAndroid Build Coastguard Worker output[i++]=-SHRT_MAX;
99*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
100*3f1979aaSAndroid Build Coastguard Worker /* exp(i* -pi/2) = 0+i*-1 */
101*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
102*3f1979aaSAndroid Build Coastguard Worker output[i++]=-SHRT_MAX;
103*3f1979aaSAndroid Build Coastguard Worker }
104*3f1979aaSAndroid Build Coastguard Worker }
105*3f1979aaSAndroid Build Coastguard Worker
106*3f1979aaSAndroid Build Coastguard Worker PF_TARGET_CLONES
generate_neg_fs4_f(float * output,int size)107*3f1979aaSAndroid Build Coastguard Worker void generate_neg_fs4_f(float* output, int size)
108*3f1979aaSAndroid Build Coastguard Worker {
109*3f1979aaSAndroid Build Coastguard Worker /* size must be multiple of 4 */
110*3f1979aaSAndroid Build Coastguard Worker assert(!(size&3));
111*3f1979aaSAndroid Build Coastguard Worker for(int i=0;i<2*size;)
112*3f1979aaSAndroid Build Coastguard Worker {
113*3f1979aaSAndroid Build Coastguard Worker /* exp(i*0) = 1+i*0 */
114*3f1979aaSAndroid Build Coastguard Worker output[i++]=(127.0F / 128.0F);
115*3f1979aaSAndroid Build Coastguard Worker output[i++]=0.0F;
116*3f1979aaSAndroid Build Coastguard Worker /* exp(i* -pi/2) = 0+i*-1 */
117*3f1979aaSAndroid Build Coastguard Worker output[i++]=0.0F;
118*3f1979aaSAndroid Build Coastguard Worker output[i++]=(-127.0F / 128.0F);
119*3f1979aaSAndroid Build Coastguard Worker /* exp(i* +pi) = -1+i*0 */
120*3f1979aaSAndroid Build Coastguard Worker output[i++]=(-127.0F / 128.0F);
121*3f1979aaSAndroid Build Coastguard Worker output[i++]=0.0F;
122*3f1979aaSAndroid Build Coastguard Worker /* exp(i* +pi/2) = 0+i*1 */
123*3f1979aaSAndroid Build Coastguard Worker output[i++]=0.0F;
124*3f1979aaSAndroid Build Coastguard Worker output[i++]=(127.0F / 128.0F);
125*3f1979aaSAndroid Build Coastguard Worker }
126*3f1979aaSAndroid Build Coastguard Worker }
127*3f1979aaSAndroid Build Coastguard Worker
128*3f1979aaSAndroid Build Coastguard Worker PF_TARGET_CLONES
generate_neg_fs4_s16(short * output,int size)129*3f1979aaSAndroid Build Coastguard Worker void generate_neg_fs4_s16(short* output, int size)
130*3f1979aaSAndroid Build Coastguard Worker {
131*3f1979aaSAndroid Build Coastguard Worker /* size must be multiple of 4 */
132*3f1979aaSAndroid Build Coastguard Worker assert(!(size&3));
133*3f1979aaSAndroid Build Coastguard Worker for(int i=0;i<2*size;)
134*3f1979aaSAndroid Build Coastguard Worker {
135*3f1979aaSAndroid Build Coastguard Worker /* exp(i*0) = 1+i*0 */
136*3f1979aaSAndroid Build Coastguard Worker output[i++]=SHRT_MAX;
137*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
138*3f1979aaSAndroid Build Coastguard Worker /* exp(i* -pi/2) = 0+i*-1 */
139*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
140*3f1979aaSAndroid Build Coastguard Worker output[i++]=-SHRT_MAX;
141*3f1979aaSAndroid Build Coastguard Worker /* exp(i* +pi) = -1+i*0 */
142*3f1979aaSAndroid Build Coastguard Worker output[i++]=-SHRT_MAX;
143*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
144*3f1979aaSAndroid Build Coastguard Worker /* exp(i* +pi/2) = 0+i*1 */
145*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
146*3f1979aaSAndroid Build Coastguard Worker output[i++]=SHRT_MAX;
147*3f1979aaSAndroid Build Coastguard Worker }
148*3f1979aaSAndroid Build Coastguard Worker }
149*3f1979aaSAndroid Build Coastguard Worker
150*3f1979aaSAndroid Build Coastguard Worker /****************************************************/
151*3f1979aaSAndroid Build Coastguard Worker
152*3f1979aaSAndroid Build Coastguard Worker PF_TARGET_CLONES
generate_dc_pos_fs4_s16(short * output,int size)153*3f1979aaSAndroid Build Coastguard Worker void generate_dc_pos_fs4_s16(short* output, int size)
154*3f1979aaSAndroid Build Coastguard Worker {
155*3f1979aaSAndroid Build Coastguard Worker const int m = SHRT_MAX / 2;
156*3f1979aaSAndroid Build Coastguard Worker /* size must be multiple of 4 */
157*3f1979aaSAndroid Build Coastguard Worker assert(!(size&3));
158*3f1979aaSAndroid Build Coastguard Worker for(int i=0;i<2*size;)
159*3f1979aaSAndroid Build Coastguard Worker {
160*3f1979aaSAndroid Build Coastguard Worker /* exp(i*0) = 1+1+i*0 */
161*3f1979aaSAndroid Build Coastguard Worker output[i++]=m+m;
162*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
163*3f1979aaSAndroid Build Coastguard Worker /* exp(i* +pi/2) = 1+0+i*1 */
164*3f1979aaSAndroid Build Coastguard Worker output[i++]=m+0;
165*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
166*3f1979aaSAndroid Build Coastguard Worker /* exp(i* +pi) = 1-1+i*0 */
167*3f1979aaSAndroid Build Coastguard Worker output[i++]=m-m;
168*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
169*3f1979aaSAndroid Build Coastguard Worker /* exp(i* -pi/2) = 1+0+i*-1 */
170*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
171*3f1979aaSAndroid Build Coastguard Worker output[i++]=-m;
172*3f1979aaSAndroid Build Coastguard Worker }
173*3f1979aaSAndroid Build Coastguard Worker }
174*3f1979aaSAndroid Build Coastguard Worker
175*3f1979aaSAndroid Build Coastguard Worker PF_TARGET_CLONES
generate_dc_neg_fs4_s16(short * output,int size)176*3f1979aaSAndroid Build Coastguard Worker void generate_dc_neg_fs4_s16(short* output, int size)
177*3f1979aaSAndroid Build Coastguard Worker {
178*3f1979aaSAndroid Build Coastguard Worker const int m = SHRT_MAX / 2;
179*3f1979aaSAndroid Build Coastguard Worker /* size must be multiple of 4 */
180*3f1979aaSAndroid Build Coastguard Worker assert(!(size&3));
181*3f1979aaSAndroid Build Coastguard Worker for(int i=0;i<2*size;)
182*3f1979aaSAndroid Build Coastguard Worker {
183*3f1979aaSAndroid Build Coastguard Worker /* exp(i*0) = 1+1+i*0 */
184*3f1979aaSAndroid Build Coastguard Worker output[i++]=m+m;
185*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
186*3f1979aaSAndroid Build Coastguard Worker /* exp(i* -pi/2) = 1+0+i*-1 */
187*3f1979aaSAndroid Build Coastguard Worker output[i++]=m+0;
188*3f1979aaSAndroid Build Coastguard Worker output[i++]=-m;
189*3f1979aaSAndroid Build Coastguard Worker /* exp(i* +pi) = 1-1+i*0 */
190*3f1979aaSAndroid Build Coastguard Worker output[i++]=m-m;
191*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
192*3f1979aaSAndroid Build Coastguard Worker /* exp(i* +pi/2) = 1+0+i*1 */
193*3f1979aaSAndroid Build Coastguard Worker output[i++]=m+0;
194*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
195*3f1979aaSAndroid Build Coastguard Worker }
196*3f1979aaSAndroid Build Coastguard Worker }
197*3f1979aaSAndroid Build Coastguard Worker
198*3f1979aaSAndroid Build Coastguard Worker PF_TARGET_CLONES
generate_pos_neg_fs4_s16(short * output,int size)199*3f1979aaSAndroid Build Coastguard Worker void generate_pos_neg_fs4_s16(short* output, int size)
200*3f1979aaSAndroid Build Coastguard Worker {
201*3f1979aaSAndroid Build Coastguard Worker const int m = SHRT_MAX / 2;
202*3f1979aaSAndroid Build Coastguard Worker /* size must be multiple of 4 */
203*3f1979aaSAndroid Build Coastguard Worker assert(!(size&3));
204*3f1979aaSAndroid Build Coastguard Worker for(int i=0;i<2*size;)
205*3f1979aaSAndroid Build Coastguard Worker {
206*3f1979aaSAndroid Build Coastguard Worker /* pos(0) + neg(0) = exp(i* 0 ) + exp(i* 0 ) = 1 +i* 0 + 1 +i* 0 */
207*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
208*3f1979aaSAndroid Build Coastguard Worker output[i++]=-m;
209*3f1979aaSAndroid Build Coastguard Worker
210*3f1979aaSAndroid Build Coastguard Worker /* pos(1) + neg(1) = exp(i* +pi/2) + exp(i* -pi/2) = 0 +i* 1 + 0 +i* -1 */
211*3f1979aaSAndroid Build Coastguard Worker output[i++]=-m;
212*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
213*3f1979aaSAndroid Build Coastguard Worker
214*3f1979aaSAndroid Build Coastguard Worker /* pos(2) + neg(2) = exp(i* +pi ) + exp(i* +pi ) = -1 +i* 0 + -1 +i* 0 */
215*3f1979aaSAndroid Build Coastguard Worker output[i++]=-m;
216*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
217*3f1979aaSAndroid Build Coastguard Worker
218*3f1979aaSAndroid Build Coastguard Worker /* pos(3) + neg(3) = exp(i* -pi/2) + exp(i* +pi/2) = 0 +i* -1 + 0 +i* 1 */
219*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
220*3f1979aaSAndroid Build Coastguard Worker output[i++]=-m;
221*3f1979aaSAndroid Build Coastguard Worker }
222*3f1979aaSAndroid Build Coastguard Worker }
223*3f1979aaSAndroid Build Coastguard Worker
224*3f1979aaSAndroid Build Coastguard Worker PF_TARGET_CLONES
generate_dc_pos_neg_fs4_s16(short * output,int size)225*3f1979aaSAndroid Build Coastguard Worker void generate_dc_pos_neg_fs4_s16(short* output, int size)
226*3f1979aaSAndroid Build Coastguard Worker {
227*3f1979aaSAndroid Build Coastguard Worker const int m = SHRT_MAX / 2;
228*3f1979aaSAndroid Build Coastguard Worker /* size must be multiple of 4 */
229*3f1979aaSAndroid Build Coastguard Worker assert(!(size&3));
230*3f1979aaSAndroid Build Coastguard Worker for(int i=0;i<2*size;)
231*3f1979aaSAndroid Build Coastguard Worker {
232*3f1979aaSAndroid Build Coastguard Worker /* dc + pos(0) + neg(0) = dc + exp(i* 0 ) + exp(i* 0 ) = 1 +i* 0 + 1 +i* 0 */
233*3f1979aaSAndroid Build Coastguard Worker output[i++]=m+m;
234*3f1979aaSAndroid Build Coastguard Worker output[i++]=-m;
235*3f1979aaSAndroid Build Coastguard Worker
236*3f1979aaSAndroid Build Coastguard Worker /* dc + pos(1) + neg(1) = dc + exp(i* +pi/2) + exp(i* -pi/2) = 0 +i* 1 + 0 +i* -1 */
237*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
238*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
239*3f1979aaSAndroid Build Coastguard Worker
240*3f1979aaSAndroid Build Coastguard Worker /* dc + pos(2) + neg(2) = dc + exp(i* +pi ) + exp(i* +pi ) = -1 +i* 0 + -1 +i* 0 */
241*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
242*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
243*3f1979aaSAndroid Build Coastguard Worker
244*3f1979aaSAndroid Build Coastguard Worker /* dc + pos(3) + neg(3) = dc + exp(i* -pi/2) + exp(i* +pi/2) = 0 +i* -1 + 0 +i* 1 */
245*3f1979aaSAndroid Build Coastguard Worker output[i++]=m+m;
246*3f1979aaSAndroid Build Coastguard Worker output[i++]=-m;
247*3f1979aaSAndroid Build Coastguard Worker }
248*3f1979aaSAndroid Build Coastguard Worker }
249*3f1979aaSAndroid Build Coastguard Worker
250*3f1979aaSAndroid Build Coastguard Worker
251*3f1979aaSAndroid Build Coastguard Worker PF_TARGET_CLONES
generate_pos_neg_fs2_s16(short * output,int size)252*3f1979aaSAndroid Build Coastguard Worker void generate_pos_neg_fs2_s16(short* output, int size)
253*3f1979aaSAndroid Build Coastguard Worker {
254*3f1979aaSAndroid Build Coastguard Worker const int m = SHRT_MAX / 2;
255*3f1979aaSAndroid Build Coastguard Worker /* size must be multiple of 4 */
256*3f1979aaSAndroid Build Coastguard Worker assert(!(size&3));
257*3f1979aaSAndroid Build Coastguard Worker for(int i=0;i<2*size;)
258*3f1979aaSAndroid Build Coastguard Worker {
259*3f1979aaSAndroid Build Coastguard Worker /* dc + exp(i* 0 ) = +1 */
260*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
261*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
262*3f1979aaSAndroid Build Coastguard Worker /* dc + exp(i* pi) = -1 */
263*3f1979aaSAndroid Build Coastguard Worker output[i++]=-m;
264*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
265*3f1979aaSAndroid Build Coastguard Worker /* dc + exp(i* 0 ) = +1 */
266*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
267*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
268*3f1979aaSAndroid Build Coastguard Worker /* dc + exp(i* pi) = -1 */
269*3f1979aaSAndroid Build Coastguard Worker output[i++]=-m;
270*3f1979aaSAndroid Build Coastguard Worker output[i++]=0;
271*3f1979aaSAndroid Build Coastguard Worker }
272*3f1979aaSAndroid Build Coastguard Worker }
273*3f1979aaSAndroid Build Coastguard Worker
274*3f1979aaSAndroid Build Coastguard Worker PF_TARGET_CLONES
generate_dc_pos_neg_fs2_s16(short * output,int size)275*3f1979aaSAndroid Build Coastguard Worker void generate_dc_pos_neg_fs2_s16(short* output, int size)
276*3f1979aaSAndroid Build Coastguard Worker {
277*3f1979aaSAndroid Build Coastguard Worker const int m = SHRT_MAX / 2;
278*3f1979aaSAndroid Build Coastguard Worker /* size must be multiple of 4 */
279*3f1979aaSAndroid Build Coastguard Worker assert(!(size&3));
280*3f1979aaSAndroid Build Coastguard Worker for(int i=0;i<2*size;)
281*3f1979aaSAndroid Build Coastguard Worker {
282*3f1979aaSAndroid Build Coastguard Worker /* with dc = i*1 */
283*3f1979aaSAndroid Build Coastguard Worker /* dc + exp(i* 0 ) = i*1 +1 */
284*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
285*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
286*3f1979aaSAndroid Build Coastguard Worker /* dc + exp(i* pi) = i*1 -1 */
287*3f1979aaSAndroid Build Coastguard Worker output[i++]=-m;
288*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
289*3f1979aaSAndroid Build Coastguard Worker /* dc + exp(i* 0 ) = i*1 +1 */
290*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
291*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
292*3f1979aaSAndroid Build Coastguard Worker /* dc + exp(i* pi) = i*1 -1 */
293*3f1979aaSAndroid Build Coastguard Worker output[i++]=-m;
294*3f1979aaSAndroid Build Coastguard Worker output[i++]=m;
295*3f1979aaSAndroid Build Coastguard Worker }
296*3f1979aaSAndroid Build Coastguard Worker }
297*3f1979aaSAndroid Build Coastguard Worker
298*3f1979aaSAndroid Build Coastguard Worker
299