picosig2.c revision e9f72c8954f29f10cb4feb16d328a1b5c1fd7169
1/*
2 * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16/**
17 * @file picosig2.c
18 *
19 * Signal Generation PU - Internal functions - Implementation
20 *
21 * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
22 * All rights reserved.
23 *
24 * History:
25 * - 2009-04-20 -- initial version
26 *
27 */
28#include "picoos.h"
29#include "picodsp.h"
30#include "picosig2.h"
31#include "picofftsg.h"
32
33#ifdef __cplusplus
34extern "C" {
35#endif
36#if 0
37}
38#endif
39/*---------------------------------------------------------------------------
40 * INTERNAL FUNCTIONS DECLARATION
41 *---------------------------------------------------------------------------*/
42static void gen_hann2(sig_innerobj_t *sig_inObj);
43static void get_simple_excitation(sig_innerobj_t *sig_inObj,
44        picoos_int16 *nextPeak);
45static void enh_wind_init(sig_innerobj_t *sig_inObj);
46static void init_rand(sig_innerobj_t *sig_inObj);
47static void get_trig(picoos_int32 ang, picoos_int32 *table, picoos_int32 *cs,
48        picoos_int32 *sn);
49
50/*---------------------------------------------------------------------------
51 * PICO SYSTEM FUNCTIONS
52 *---------------------------------------------------------------------------*/
53/**
54 * allocation of DSP memory for SIG PU
55 * @param   mm : memory manager
56 * @param   sig_inObj : sig PU internal object of the sub-object
57 * @return  PICO_OK : allocation successful
58 * @return  PICO_ERR_OTHER : allocation NOT successful
59 * @callgraph
60 * @callergraph
61 */
62pico_status_t sigAllocate(picoos_MemoryManager mm, sig_innerobj_t *sig_inObj)
63{
64    picoos_int16 *data_i;
65    picoos_int32 *d32;
66    picoos_int32 nCount;
67
68    sig_inObj->int_vec22 =
69    sig_inObj->int_vec23 =
70    sig_inObj->int_vec24 =
71    sig_inObj->int_vec25 =
72    sig_inObj->int_vec26 =
73    sig_inObj->int_vec28 =
74    sig_inObj->int_vec29 =
75    sig_inObj->int_vec38 =
76    sig_inObj->int_vec30 =
77    sig_inObj->int_vec31 =
78    sig_inObj->int_vec32 =
79    sig_inObj->int_vec33 =
80    sig_inObj->int_vec34 =
81    sig_inObj->int_vec35 =
82    sig_inObj->int_vec36 =
83    sig_inObj->int_vec37 =
84    sig_inObj->int_vec38 =
85    sig_inObj->int_vec39 =
86    sig_inObj->int_vec40 = NULL;
87
88    sig_inObj->sig_vec1 = NULL;
89
90    sig_inObj->idx_vect1 = sig_inObj->idx_vect2 = sig_inObj->idx_vect4 = NULL;
91    sig_inObj->idx_vect5 = sig_inObj->idx_vect6 = sig_inObj->idx_vect7 =
92    sig_inObj->idx_vect8 = sig_inObj->idx_vect9 = NULL;
93    sig_inObj->ivalue17 = sig_inObj->ivalue18 = 0;
94
95    /*-----------------------------------------------------------------
96     * Memory allocations
97     * NOTE : it would be far better to do a single allocation
98     *          and to do pointer initialization inside this routine
99     * ------------------------------------------------------------------*/
100    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
101            * PICODSP_FFTSIZE);
102    if (NULL == data_i) {
103        sigDeallocate(mm, sig_inObj);
104        return PICO_ERR_OTHER;
105    }
106    sig_inObj->idx_vect1 = data_i;
107
108    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
109            * PICODSP_HFFTSIZE_P1);
110    if (NULL == data_i) {
111        sigDeallocate(mm, sig_inObj);
112        return PICO_ERR_OTHER;
113    }
114    sig_inObj->idx_vect2 = data_i;
115
116    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
117            * PICODSP_FFTSIZE);
118    if (NULL == data_i) {
119        sigDeallocate(mm, sig_inObj);
120        return PICO_ERR_OTHER;
121    }
122    sig_inObj->idx_vect4 = data_i;
123
124    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
125            * PICODSP_FFTSIZE);
126    if (NULL == data_i) {
127        sigDeallocate(mm, sig_inObj);
128        return PICO_ERR_OTHER;
129    }
130    sig_inObj->idx_vect5 = data_i;
131
132    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
133            * PICODSP_FFTSIZE);
134    if (NULL == data_i) {
135        sigDeallocate(mm, sig_inObj);
136        return PICO_ERR_OTHER;
137    }
138    sig_inObj->idx_vect6 = data_i;
139
140    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
141            * PICODSP_HFFTSIZE_P1);
142    if (NULL == data_i) {
143        sigDeallocate(mm, sig_inObj);
144        return PICO_ERR_OTHER;
145    }
146    sig_inObj->idx_vect7 = data_i;
147
148    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
149            * PICODSP_MAX_EX);
150    if (NULL == data_i) {
151        sigDeallocate(mm, sig_inObj);
152        return PICO_ERR_OTHER;
153    }
154    sig_inObj->idx_vect8 = data_i;
155
156    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
157            * PICODSP_MAX_EX);
158    if (data_i == NULL) {
159        sigDeallocate(mm, sig_inObj);
160        return PICO_ERR_OTHER;
161    }
162    sig_inObj->idx_vect9 = data_i;
163
164    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
165            * PICODSP_FFTSIZE);
166    if (NULL == d32) {
167        sigDeallocate(mm, sig_inObj);
168        return PICO_ERR_OTHER;
169    }
170    sig_inObj->int_vec22 = d32;
171    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
172            * PICODSP_FFTSIZE);
173    if (NULL == d32) {
174        sigDeallocate(mm, sig_inObj);
175        return PICO_ERR_OTHER;
176    }
177    sig_inObj->int_vec23 = d32;
178    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
179            * PICODSP_FFTSIZE);
180    if (NULL == d32) {
181        sigDeallocate(mm, sig_inObj);
182        return PICO_ERR_OTHER;
183    }
184    sig_inObj->int_vec24 = d32;
185    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
186            * PICODSP_FFTSIZE);
187    if (NULL == d32) {
188        sigDeallocate(mm, sig_inObj);
189        return PICO_ERR_OTHER;
190    }
191    sig_inObj->int_vec25 = d32;
192    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
193            * PICODSP_FFTSIZE * 2);
194    if (NULL == d32) {
195        sigDeallocate(mm, sig_inObj);
196        return PICO_ERR_OTHER;
197    }
198    sig_inObj->int_vec26 = d32;
199
200    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
201            * PICODSP_FFTSIZE);
202    if (NULL == d32) {
203        sigDeallocate(mm, sig_inObj);
204        return PICO_ERR_OTHER;
205    }
206    sig_inObj->int_vec28 = d32;
207    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
208            * PICODSP_FFTSIZE);
209    if (NULL == d32) {
210        sigDeallocate(mm, sig_inObj);
211        return PICO_ERR_OTHER;
212    }
213    sig_inObj->int_vec29 = d32;
214    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
215            * PICODSP_FFTSIZE);
216    if (NULL == d32) {
217        sigDeallocate(mm, sig_inObj);
218        return PICO_ERR_OTHER;
219    }
220    sig_inObj->int_vec38 = d32;
221    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
222            * PICODSP_FFTSIZE);
223    if (NULL == d32) {
224        sigDeallocate(mm, sig_inObj);
225        return PICO_ERR_OTHER;
226    }
227    sig_inObj->int_vec30 = d32;
228    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
229            * PICODSP_FFTSIZE);
230    if (NULL == d32) {
231        sigDeallocate(mm, sig_inObj);
232        return PICO_ERR_OTHER;
233    }
234    sig_inObj->int_vec31 = d32;
235
236    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
237            * PICODSP_FFTSIZE);
238    if (NULL == d32) {
239        sigDeallocate(mm, sig_inObj);
240        return PICO_ERR_OTHER;
241    }
242    sig_inObj->int_vec32 = d32;
243    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
244            * PICODSP_FFTSIZE);
245    if (NULL == d32) {
246        sigDeallocate(mm, sig_inObj);
247        return PICO_ERR_OTHER;
248    }
249    sig_inObj->int_vec33 = d32;
250    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
251            * PICODSP_N_RAND_TABLE);
252    if (NULL == d32) {
253        sigDeallocate(mm, sig_inObj);
254        return PICO_ERR_OTHER;
255    }
256    sig_inObj->int_vec34 = d32;
257    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
258            * PICODSP_N_RAND_TABLE);
259    if (NULL == d32) {
260        sigDeallocate(mm, sig_inObj);
261        return PICO_ERR_OTHER;
262    }
263    sig_inObj->int_vec35 = d32;
264    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
265            * PICODSP_N_RAND_TABLE);
266    if (NULL == d32) {
267        sigDeallocate(mm, sig_inObj);
268        return PICO_ERR_OTHER;
269    }
270    sig_inObj->int_vec36 = d32;
271    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
272            * PICODSP_N_RAND_TABLE);
273    if (NULL == d32) {
274        sigDeallocate(mm, sig_inObj);
275        return PICO_ERR_OTHER;
276    }
277    sig_inObj->int_vec37 = d32;
278
279    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
280            * PICODSP_HFFTSIZE_P1);
281    if (NULL == d32) {
282        sigDeallocate(mm, sig_inObj);
283        return PICO_ERR_OTHER;
284    }
285    sig_inObj->int_vec39 = d32;
286    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) * (1
287            + PICODSP_COS_TABLE_LEN));
288    if (NULL == d32) {
289        sigDeallocate(mm, sig_inObj);
290        return PICO_ERR_OTHER;
291    }
292    sig_inObj->int_vec40 = d32;
293
294    for (nCount = 0; nCount < CEPST_BUFF_SIZE; nCount++) {
295        d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) * (PICODSP_CEPORDER));
296        if (NULL == d32) {
297            sigDeallocate(mm, sig_inObj);
298            return PICO_ERR_OTHER;
299        }
300        sig_inObj->int_vec41[nCount] = d32;
301    }
302
303    for (nCount = 0; nCount < PHASE_BUFF_SIZE; nCount++) {
304        d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) * (PICODSP_PHASEORDER));
305        if (NULL == d32) {
306            sigDeallocate(mm, sig_inObj);
307            return PICO_ERR_OTHER;
308        }
309        sig_inObj->int_vec42[nCount] = d32;
310    }
311
312    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
313            * PICODSP_FFTSIZE * 2); /* - fixed point */
314    if (NULL == d32) {
315        sigDeallocate(mm, sig_inObj);
316        return PICO_ERR_OTHER;
317    }
318    sig_inObj->sig_vec1 = d32;
319
320    return PICO_OK;
321}/*sigAllocate*/
322
323/**
324 * frees DSP memory for SIG PU
325 * @param   mm : memory manager
326 * @param   sig_inObj : sig PU internal object of the sub-object
327 * @return  void
328 * @callgraph
329 * @callergraph
330 */
331void sigDeallocate(picoos_MemoryManager mm, sig_innerobj_t *sig_inObj)
332{
333    picoos_int32 nCount;
334    /*-----------------------------------------------------------------
335     * Memory de-allocations
336     * ------------------------------------------------------------------*/
337    if (NULL != sig_inObj->idx_vect1)
338        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect1));
339    if (NULL != sig_inObj->idx_vect2)
340        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect2));
341    if (NULL != sig_inObj->idx_vect4)
342        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect4));
343    if (NULL != sig_inObj->idx_vect5)
344        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect5));
345    if (NULL != sig_inObj->idx_vect6)
346        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect6));
347    if (NULL != sig_inObj->idx_vect7)
348        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect7));
349    if (NULL != sig_inObj->idx_vect8)
350        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect8));
351    if (NULL != sig_inObj->idx_vect9)
352        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect9));
353
354    if (NULL != sig_inObj->int_vec22)
355        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec22));
356    if (NULL != sig_inObj->int_vec23)
357        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec23));
358    if (NULL != sig_inObj->int_vec24)
359        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec24));
360    if (NULL != sig_inObj->int_vec25)
361        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec25));
362    if (NULL != sig_inObj->int_vec26)
363        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec26));
364    if (NULL != sig_inObj->int_vec28)
365        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec28));
366    if (NULL != sig_inObj->int_vec29)
367        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec29));
368    if (NULL != sig_inObj->int_vec38)
369        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec38));
370    if (NULL != sig_inObj->int_vec30)
371        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec30));
372    if (NULL != sig_inObj->int_vec31)
373        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec31));
374    if (NULL != sig_inObj->int_vec32)
375        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec32));
376    if (NULL != sig_inObj->int_vec33)
377        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec33));
378    if (NULL != sig_inObj->int_vec34)
379        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec34));
380    if (NULL != sig_inObj->int_vec35)
381        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec35));
382    if (NULL != sig_inObj->int_vec36)
383        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec36));
384    if (NULL != sig_inObj->int_vec37)
385        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec37));
386    if (NULL != sig_inObj->int_vec39)
387        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec39));
388    if (NULL != sig_inObj->int_vec40)
389        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec40));
390
391    for (nCount = 0; nCount < CEPST_BUFF_SIZE; nCount++) {
392        if (NULL != sig_inObj->int_vec41[nCount]) {
393            picoos_deallocate(mm, (void *) &(sig_inObj->int_vec41[nCount]));
394        }
395    }
396
397    for (nCount = 0; nCount < PHASE_BUFF_SIZE; nCount++) {
398        if (NULL != sig_inObj->int_vec42[nCount]) {
399            picoos_deallocate(mm, (void *) &(sig_inObj->int_vec42[nCount]));
400        }
401    }
402
403    if (NULL != sig_inObj->sig_vec1) {
404        picoos_deallocate(mm, (void *) &(sig_inObj->sig_vec1));
405    }
406}/*sigDeAllocate*/
407
408/**
409 * initializes all memory neededed by DSP at instance creation time
410 * @param   sig_inObj : sig PU internal object of the sub-object
411 * @return  void
412 * @callgraph
413 * @callergraph
414 */
415void sigDspInitialize(sig_innerobj_t *sig_inObj, picoos_int32 resetMode)
416{
417    picoos_int32 i, j;
418    picoos_int32 *pnt;
419
420    if (resetMode == PICO_RESET_SOFT) {
421        /*minimal initialization when receiving a soft reset */
422        return;
423    }
424    /*-----------------------------------------------------------------
425     * Initialization
426     * ------------------------------------------------------------------*/
427    sig_inObj->warp_p = PICODSP_FREQ_WARP_FACT;
428    sig_inObj->VCutoff_p = PICODSP_V_CUTOFF_FREQ; /*voicing cut off frequency in Hz (will be modeled in the future)*/
429    sig_inObj->UVCutoff_p = PICODSP_UV_CUTOFF_FREQ;/*unvoiced frames only (periodize lowest components to mask bad voicing transitions)*/
430    sig_inObj->Fs_p = PICODSP_SAMP_FREQ; /*Sampling freq*/
431
432    sig_inObj->m1_p = PICODSP_CEPORDER;
433    sig_inObj->m2_p = PICODSP_FFTSIZE; /*also initializes windowLen*/
434    sig_inObj->framesz_p = PICODSP_DISPLACE; /*1/4th of the frame size = displacement*/
435    sig_inObj->hfftsize_p = PICODSP_H_FFTSIZE; /*half of the FFT size*/
436    sig_inObj->voxbnd_p = (picoos_int32) ((picoos_single) sig_inObj->hfftsize_p
437            / ((picoos_single) sig_inObj->Fs_p / (picoos_single) 2)
438            * (picoos_single) sig_inObj->VCutoff_p);
439    sig_inObj->voxbnd2_p
440            = (picoos_int32) ((picoos_single) sig_inObj->hfftsize_p
441                    / ((picoos_single) sig_inObj->Fs_p / (picoos_single) 2)
442                    * (picoos_single) sig_inObj->UVCutoff_p);
443    sig_inObj->hop_p = sig_inObj->framesz_p;
444    sig_inObj->nextPeak_p = (((int) (PICODSP_FFTSIZE))
445            / ((int) PICODSP_DISPLACE) - 1) * sig_inObj->hop_p;
446    sig_inObj->phId_p = 0; /*phonetic id*/
447    sig_inObj->E_p = (picoos_single) 0.0f;
448    sig_inObj->F0_p = (picoos_single) 0.0f;
449    sig_inObj->voiced_p = 0;
450    sig_inObj->nV = sig_inObj->nU = 0;
451    sig_inObj->sMod_p = (picoos_single) 1.0f;
452
453    /*cleanup vectors*/
454    for (i = 0; i < 2 * PICODSP_FFTSIZE; i++) {
455        sig_inObj->sig_vec1[i] = 0;
456        sig_inObj->int_vec26[i] = 0; /*wav buff cleanup */
457    }
458
459    for (i = 0; i < PICODSP_FFTSIZE; i++) {
460        sig_inObj->idx_vect1[i] = sig_inObj->idx_vect4[i]
461                = sig_inObj->idx_vect5[i] = sig_inObj->idx_vect6[i] = 0;
462        sig_inObj->int_vec32[i] = sig_inObj->int_vec33[i] = 0;
463    }
464
465    for (i = 0; i < PICODSP_HFFTSIZE_P1; i++) {
466        sig_inObj->idx_vect2[i] = (picoos_int16) 0;
467    }
468
469    for (i = 0; i < CEPST_BUFF_SIZE; i++) {
470        sig_inObj->F0Buff[i]=0;
471        sig_inObj->PhIdBuff[i]=0;
472        sig_inObj->VoicingBuff[i]=0;
473        sig_inObj->FuVBuff[i]=0;
474        if (NULL != sig_inObj->CepBuff[i]) {
475            pnt = sig_inObj->CepBuff[i];
476            for (j = 0; j < PICODSP_CEPORDER; j++) {
477                pnt[j] = 0;
478            }
479        }
480    }
481
482    for (i = 0; i < PHASE_BUFF_SIZE; i++) {
483        if (NULL != sig_inObj->int_vec42[i]) {
484            pnt = sig_inObj->int_vec42[i];
485            for (j = 0; j < PICODSP_PHASEORDER; j++) {
486                pnt[j] = 0;
487            }
488        }
489    }
490    sig_inObj->n_available=0;
491    /*---------------------------------------------
492     Init    formant enhancement window
493     hanning window,
494     Post Filter Hermite's interpolator Matrix
495     Mel-2-Lin lookup tables
496     ---------------------------------------------*/
497    enh_wind_init(sig_inObj); /*creates the formant enhancement window*/
498    init_rand(sig_inObj);
499    gen_hann2(sig_inObj);
500    mel_2_lin_init(sig_inObj);
501
502}/*sigDspInitialize*/
503
504/*-------------------------------------------------------------------------------
505 PROCESSING FUNCTIONS : CALLED WITHIN sigStep (cfr. picosig.c)
506 --------------------------------------------------------------------------------*/
507/**
508 * convert from mel scale to linear scale
509 * @param   sig_inObj : sig PU internal object of the sub-object
510 * @param   scmeanMGC : mean value of the MGC
511 * @return  void
512 * @callgraph
513 * @callergraph
514 * @remarks translated from matlab code to c-code
515 * Input
516 * - c1 : input mfcc vector (ceporder=m1, real)
517 * - m1 : input order
518 * - A,B,D : lookup tables
519 * - m2 : output order
520 * - Xr,Xi (m2=FFT size, real) temporary arrays for FFT
521 * - WNr,WNi (m2=FFT size, real) cos and sin precalculated tables
522 * Output
523 * - Xr (m2=FFT size, real) linear cepstral vector
524 */
525void mel_2_lin_lookup(sig_innerobj_t *sig_inObj, picoos_uint32 scmeanMGC)
526{
527    /*Local vars*/
528    picoos_int16 nI, k;
529    picoos_int32 delta, term1, term2;
530
531    /*Local vars to be linked with sig data object*/
532    picoos_int32 *c1, *XXr;
533    picoos_single K1;
534    picoos_int32 *D, K2, shift;
535    picoos_int16 m1, *A, m2, m4, voiced, i;
536
537    /*Link local variables with sig data object*/
538    c1 = sig_inObj->wcep_pI;
539    m1 = sig_inObj->m1_p;
540    m2 = PICODSP_FFTSIZE;
541    m4 = m2 >> 1;
542
543    A = sig_inObj->A_p;
544    D = sig_inObj->d_p;
545
546    XXr = sig_inObj->wcep_pI;
547    voiced = sig_inObj->voiced_p;
548
549    shift = 27 - scmeanMGC;
550    K2 = 1 << shift;
551    K1 = (picoos_single) PICODSP_START_FLOAT_NORM * K2;
552    XXr[0] = (picoos_int32) ((picoos_single) c1[0] * K1);
553    for (nI = 1; nI < m1; nI++) {
554        XXr[nI] = c1[nI] << shift;
555    }
556    i = sizeof(picoos_int32) * (PICODSP_FFTSIZE + 1 - m1);
557    picoos_mem_set(XXr + m1, 0, i);
558    dfct_nmf(m4, XXr); /* DFCT directly in fixed point */
559
560    /* *****************************************************************************************
561     Linear frequency scale envelope through interpolation.
562     Two additions and one multiplication per entry.
563
564     Optimization of linear interpolation algorithm
565     - Start from 1 and stop at PICODSP_H_FFTSIZE-1 because 0 and PICODSP_H_FFTSIZE are invariant points
566     - B[k]=A[k]+1 except for 0 and PICODSP_H_FFTSIZE
567     - get rid of extra -1 operation by adapting the table A[]
568
569     *******************************************************************************************/
570    for (nI = 1; nI < PICODSP_H_FFTSIZE; nI++) {
571        k = A[nI];
572        term2 = XXr[k];
573        term1 = XXr[k + 1];
574        delta = term1 - term2;
575        XXr[nI] = term2 + ((D[nI] * delta) >> 5); /* ok because nI<=A[nI] <=B[nI] */
576    }
577}/*mel_2_lin_lookup*/
578
579/**
580 * calculate phase
581 * @remarks voiced phase taken from phase codebook and smoothed,
582 * @remarks unvoiced phase - random
583 * @param   sig_inObj : sig PU internal object of the sub-object
584 * @return  void
585 * @callgraph
586 * @callergraph
587 */
588void phase_spec2(sig_innerobj_t *sig_inObj)
589{
590    picoos_int16 nI, iRand, firstUV;
591    picoos_int32 *tmp1, *tmp2;
592    picoos_int16 VOXBND_M1;
593    picoos_int32 *spect, *ang;
594    picoos_int16 voiced, m2;
595    picoos_int32 *co, *so, *c, *s, voxbnd, voxbnd2;
596    picoos_int16 i,j, k, n_comp;
597    picoos_int16 *Pvoxbnd;
598    picoos_int32 *phs_p2, *phs_p1, *phs_n1, *phs_n2;
599    picoos_int32 *phs;
600
601    /*Link local variables to sig data object*/
602    spect = sig_inObj->wcep_pI; /* spect_p;*/
603    /* current spect scale : times PICODSP_FIX_SCALE1 */
604    ang = sig_inObj->ang_p;
605    voxbnd = (picoos_int32) (sig_inObj->voxbnd_p * sig_inObj->voicing);
606    voxbnd2 = sig_inObj->voxbnd2_p;
607    voiced = sig_inObj->voiced_p;
608    m2 = sig_inObj->m2_p;
609    VOXBND_M1 = voxbnd - 1;
610    firstUV = 1;
611
612    /*code starts here*/
613    if (voiced == 1) {
614        firstUV = voxbnd;
615        Pvoxbnd =  sig_inObj->VoxBndBuff;
616        n_comp   = Pvoxbnd[2];
617        phs_p2 = sig_inObj->PhsBuff[0];
618        phs_p1 = sig_inObj->PhsBuff[1];
619        phs    = sig_inObj->PhsBuff[2];
620        phs_n1 = sig_inObj->PhsBuff[3];
621        phs_n2 = sig_inObj->PhsBuff[4];
622
623        /* find and smooth components which have full context */
624        j = n_comp;
625        for (i=0; i<5; i++) {
626            if (Pvoxbnd[i]<j) j = Pvoxbnd[i];
627        }
628        for (i=0; i<j; i++) {
629            ang[i] = -(((phs_p2[i]+phs_p1[i]+phs[i]+phs_n1[i]+phs_n2[i])<<6) / 5);
630        }
631
632        /* find and smooth components which at least one component on each side */
633        k = n_comp;
634        if (Pvoxbnd[2]<k) k = Pvoxbnd[2];
635        if (Pvoxbnd[4]<k) k = Pvoxbnd[4];
636        for (i=j; i<k; i++) {  /* smooth using only two surrounding neighbours */
637                ang[i] = -(((phs_p1[i]+phs[i]+phs_n1[i])<<6) / 3);
638        }
639
640        /* handle rest of components - at least one side does not exist */
641        for (i=k; i<n_comp; i++) {
642            ang[i] = -(phs[i]<<6); /* - simple copy without smoothing */
643        }
644
645        /*Phase unwrap - cumsum */
646        tmp1 = &(ang[1]);
647        tmp2 = &(ang[0]);
648        /* current ang scale : PICODSP_M_PI = PICODSP_FIX_SCALE2 */
649        FAST_DEVICE(VOXBND_M1,*(tmp1++)+=*(tmp2)-PICODSP_FIX_SCALE2;*(tmp2)=(*tmp2>=0)?(*tmp2)>>PICODSP_SHIFT_FACT4:-((-(*tmp2))>>PICODSP_SHIFT_FACT4);tmp2++);
650        *tmp2 = (*tmp2 >= 0) ? (*tmp2) >> PICODSP_SHIFT_FACT4 : -((-(*tmp2))
651                >> PICODSP_SHIFT_FACT4); /*ang[voxbnd-1]/=2;*/
652    }
653
654    /* now for the unvoiced part */
655    iRand = sig_inObj->iRand;
656    c = sig_inObj->randCosTbl + iRand;
657    s = sig_inObj->randSinTbl + iRand;
658    co = sig_inObj->outCosTbl + firstUV;
659    so = sig_inObj->outSinTbl + firstUV;
660    for (nI = firstUV; nI < PICODSP_HFFTSIZE_P1 - 1; nI++) {
661        *co++ = *c++;
662        *so++ = *s++;
663    }
664    *co = 1;
665    *so = 0;
666    sig_inObj->iRand += (PICODSP_HFFTSIZE_P1 - firstUV);
667    if (sig_inObj->iRand > PICODSP_N_RAND_TABLE - PICODSP_HFFTSIZE_P1)
668        sig_inObj->iRand = 1 + sig_inObj->iRand + PICODSP_HFFTSIZE_P1
669            - PICODSP_N_RAND_TABLE;
670}/*phase_spec2*/
671
672/**
673 * Prepare Envelope spectrum for inverse FFT
674 * @param   sig_inObj : sig PU internal object of the sub-object
675 * @return  void
676 * @remarks make phase bilateral -->> angh (FFT size, real)
677 * @remarks combine in complex input vector for IFFT F = e**(spet/2+j*ang)
678 * @remarks Compute energy -->> E (scalar, real)
679 * @callgraph
680 * @callergraph
681 * Input
682 * - spect (FFT size, real)
683 * - ang (half FFT size -1, real)
684 * - m2    fftsize
685 *  - WNr,WNi (FFT size, real) the tabulated sine and cosine values
686 *  - brev (FFT size, real) the tabulated bit reversal indexes
687 * Output
688 * - Fr, Fi (FFT size, complex) the envelope spectrum
689 * - E (scalar, real) the energy
690 */
691void env_spec(sig_innerobj_t *sig_inObj)
692{
693
694    picoos_int16 nI;
695    picoos_int32 fcX, fsX, fExp, voxbnd;
696    picoos_int32 *spect, *ang, *ctbl;
697    picoos_int16 voiced, prev_voiced;
698    picoos_int32 *co, *so;
699    picoos_int32 *Fr, *Fi;
700    picoos_single mult;
701
702    /*Link local variables to sig object*/
703    spect = sig_inObj->wcep_pI; /*spect_p*/
704    /*  current spect scale : times PICODSP_FIX_SCALE1 */
705    ang = sig_inObj->ang_p;
706    /*  current spect scale : PICODSP_M_PI =  PICODSP_FIX_SCALE2 */
707    Fr = sig_inObj->F2r_p;
708    Fi = sig_inObj->F2i_p;
709    voiced = sig_inObj->voiced_p;
710    prev_voiced = sig_inObj->prevVoiced_p;
711    voxbnd = (picoos_int32) (sig_inObj->voxbnd_p * sig_inObj->voicing);
712    ctbl = sig_inObj->cos_table;
713    /*  ctbl scale : times 4096 */
714    mult = PICODSP_ENVSPEC_K1 / PICODSP_FIX_SCALE1;
715
716    /*remove dc from real part*/
717    if (sig_inObj->F0_p > 120) {
718        spect[0] = spect[1] = 0;
719        spect[2] /= PICODSP_ENVSPEC_K2;
720    } else {
721        spect[0] = 0;
722    }
723
724    /* if using rand table, use sin and cos tables as well */
725    if (voiced || (prev_voiced)) {
726        /*Envelope becomes a complex exponential : F=exp(.5*spect + j*angh);*/
727        for (nI = 0; nI < voxbnd; nI++) {
728            get_trig(ang[nI], ctbl, &fcX, &fsX);
729            fExp = (picoos_int32) EXP((double)spect[nI]*mult);
730            Fr[nI] = fExp * fcX;
731            Fi[nI] = fExp * fsX;
732        }
733        /*         ao=sig_inObj->ang_p+(picoos_int32)voxbnd; */
734        co = sig_inObj->outCosTbl + voxbnd;
735        so = sig_inObj->outSinTbl + voxbnd;
736
737        for (nI = voxbnd; nI < PICODSP_HFFTSIZE_P1; nI++) {
738            fcX = *co++;
739            fsX = *so++;
740            fExp = (picoos_int32) EXP((double)spect[nI]*mult);
741            Fr[nI] = fExp * fcX;
742            Fi[nI] = fExp * fsX;
743        }
744    } else {
745        /*ao=sig_inObj->ang_p+1;*/
746        co = sig_inObj->outCosTbl + 1;
747        so = sig_inObj->outSinTbl + 1;
748        for (nI = 1; nI < PICODSP_HFFTSIZE_P1; nI++) {
749            fcX = *co++;
750            fsX = *so++;
751            fExp = (picoos_int32) EXP((double)spect[nI]*mult);
752
753            Fr[nI] = fExp * fcX;
754            Fi[nI] = fExp * fsX;
755        }
756    }
757
758}/*env_spec*/
759
760/**
761 * Calculates the impulse response of the comlpex spectrum through inverse rFFT
762 * @param   sig_inObj : sig PU internal object of the sub-object
763 * @return  void
764 * @remarks Imp corresponds with the real part of the FFT
765 * @callgraph
766 * @callergraph
767 * Input
768 * - Fr, Fi (FFT size, real & imaginary) the complex envelope spectrum (only first half of spectrum)
769 * Output
770 * - Imp: impulse response (length: m2)
771 * - E (scalar, real) RMS value
772 */
773void impulse_response(sig_innerobj_t *sig_inObj)
774{
775    /*Define local variables*/
776    picoos_single f;
777    picoos_int16 nI, nn, m2, m4, voiced;
778    picoos_single *E;
779    picoos_int32 *norm_window; /* - fixed point */
780    picoos_int32 *fr, *Fr, *Fi, *t1, ff; /* - fixed point */
781
782    picoos_int32 mx,mn, rat;
783
784    /*Link local variables with sig object*/
785    m2 = sig_inObj->m2_p;
786    m4 = m2 >> 1;
787    Fr = sig_inObj->F2r_p;
788    Fi = sig_inObj->F2i_p;
789    norm_window = sig_inObj->norm_window_p;
790    E = &(sig_inObj->E_p); /*as pointer: value will be modified*/
791    voiced = sig_inObj->voiced_p;
792    fr = sig_inObj->imp_p;
793
794    /*Inverse FFT*/
795    for (nI = 0, nn = 0; nI < m4; nI++, nn += 2) {
796        fr[nn] = Fr[nI]; /* - fixed point */
797    }
798
799    fr[1] = (picoos_int32) (Fr[m4]);
800    for (nI = 1, nn = 3; nI < m4; nI++, nn += 2) {
801        fr[nn] = -Fi[nI]; /* - fixed point */
802    }
803
804    rdft(m2, -1, fr);
805    /*window, normalize and differentiate*/
806    *E = norm_result(m2, fr, norm_window);
807
808    if (*E > 0) {
809        f = *E * PICODSP_FIXRESP_NORM;
810    } else {
811        f = 20; /*PICODSP_FIXRESP_NORM*/
812    }
813    ff = (picoos_int32) f;
814    if (ff < 1)
815        ff = 1;
816    /*normalize impulse response*/
817    t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,*(t1++) /= ff;); /* - fixed point */
818
819
820    mx = mn = 0;
821    t1 = fr;
822    FAST_DEVICE(PICODSP_FFTSIZE,if (*t1>mx) mx=*t1; if (*t1<mn) mn=*t1; t1++;);
823    mn = -mn;
824    if (mx>mn) {
825        rat = mx / (mn>>5);     /* ratio * 32*/
826        if (rat > 40) rat = 40; /* 1.25 * 32 */
827        /* now rat is between 32 and 40 */
828        switch (rat) {
829            case 32:  /* do nothing */
830                break;
831            case 33:
832                t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(-*t1)>>5; t1++;);
833                break;
834            case 34:
835                t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(-*t1)>>4; t1++;);
836                break;
837            case 35:
838                t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(((-*t1)>>5)+((-*t1)>>4)); t1++;);
839                break;
840            case 36:
841                t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(-*t1)>>3; t1++;);
842                break;
843            case 37:
844                t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(((-*t1)>>5)+((-*t1)>>3)); t1++;);
845                break;
846            case 38:
847                t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(((-*t1)>>4)+((-*t1)>>3)); t1++;);
848                break;
849            case 39:
850                t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(((-*t1)>>5)+((-*t1)>>4) + ((-*t1)>>3)); t1++;);
851                break;
852            case 40:
853                t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(-*t1)>>2; t1++;);
854                break;
855        }
856    }
857
858} /* impulse_response */
859
860/**
861 * time domain pitch synchronous overlap add over two frames (when no voicing transition)
862 * @param    sig_inObj : sig PU internal object of the sub-object
863 * @return  void
864 * @remarks Special treatment at voicing boundaries
865 * @remarks Introduced to get rid of time-domain aliasing (and additional speed up)
866 * @callgraph
867 * @callergraph
868 */
869void td_psola2(sig_innerobj_t *sig_inObj)
870{
871    picoos_int16 nI;
872    picoos_int16 hop, m2, *nextPeak, voiced;
873    picoos_int32 *t1, *t2;
874    picoos_int16 cnt;
875    picoos_int32 *fr, *v1, ff, f;
876    picoos_int16 a, i;
877    picoos_int32 *window;
878    picoos_int16 s = (picoos_int16) 1;
879    window = sig_inObj->window_p;
880
881    /*Link local variables with sig object*/
882    hop = sig_inObj->hop_p;
883    m2 = sig_inObj->m2_p;
884    nextPeak = &(sig_inObj->nextPeak_p);
885    voiced = sig_inObj->voiced_p;
886    fr = sig_inObj->imp_p;
887    /*toggle the pointers and initialize signal vector */
888    v1 = sig_inObj->sig_vec1;
889
890    t1 = v1;
891    FAST_DEVICE(PICODSP_FFTSIZE-PICODSP_DISPLACE,*(t1++)=0;);
892    t1 = &(v1[PICODSP_FFTSIZE - PICODSP_DISPLACE]);
893    t2 = &(v1[PICODSP_FFTSIZE]);
894    FAST_DEVICE(PICODSP_FFTSIZE, *(t1++)=*(t2++););
895    t1 = &(v1[2 * PICODSP_FFTSIZE - PICODSP_DISPLACE]);FAST_DEVICE(PICODSP_DISPLACE,*(t1++)=0;);
896    /*calculate excitation points*/
897    get_simple_excitation(sig_inObj, nextPeak);
898
899    /*TD-PSOLA based on excitation vector */
900    if ((sig_inObj->nU == 0) && (sig_inObj->voiced_p == 1)) {
901        /* purely voiced */
902        for (nI = 0; nI < sig_inObj->nV; nI++) {
903            f = sig_inObj->EnV[nI];
904            a = 0;
905            cnt = PICODSP_FFTSIZE;
906            ff = (f * window[sig_inObj->LocV[nI]]) >> PICODSP_SHIFT_FACT1;
907            t1 = &(v1[a + sig_inObj->LocV[nI]]);
908            t2 = &(fr[a]);
909            if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff;);
910        }
911    } else if ((sig_inObj->nV == 0) && (sig_inObj->voiced_p == 0)) {
912        /* PURELY UNVOICED*/
913        for (nI = 0; nI < sig_inObj->nU; nI++) {
914            f = sig_inObj->EnU[nI];
915            s = -s; /*reverse order to reduce the periodicity effect*/
916            if (s == 1) {
917                a = 0;
918                cnt = PICODSP_FFTSIZE;
919                ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1;
920                t1 = &(v1[a + sig_inObj->LocU[nI]]);
921                t2 = &(fr[a]);
922                if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff; );
923            } else { /*s==-1*/
924                a = 0;
925                cnt = PICODSP_FFTSIZE;
926                ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1;
927                t1 = &(v1[(m2 - 1 - a) + sig_inObj->LocU[nI]]);
928                t2 = &(fr[a]);
929                if (cnt > 0)FAST_DEVICE(cnt,*(t1--)+=*(t2++)*ff; );
930            }
931        }
932    } else if (sig_inObj->VoicTrans == 0) {
933        /*voicing transition from unvoiced to voiced*/
934        for (nI = 0; nI < sig_inObj->nV; nI++) {
935            f = sig_inObj->EnV[nI];
936            a = 0;
937            cnt = PICODSP_FFTSIZE;
938            ff = (f * window[sig_inObj->LocV[nI]]) >> PICODSP_SHIFT_FACT1;
939            t1 = &(v1[a + sig_inObj->LocV[nI]]);
940            t2 = &(fr[a]);
941            if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff;);
942        }
943        /*add remaining stuff from unvoiced part*/
944        for (nI = 0; nI < sig_inObj->nU; nI++) {
945            f = sig_inObj->EnU[nI];
946            s = -s; /*reverse order to reduce the periodicity effect*/
947            if (s == 1) {
948                a = 0;
949                cnt = PICODSP_FFTSIZE;
950                ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1;
951                t1 = &(v1[a + sig_inObj->LocU[nI]]);
952                t2 = &(sig_inObj->ImpResp_p[a]); /*saved impulse response*/
953                if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff; );
954            } else {
955                a = 0;
956                cnt = PICODSP_FFTSIZE;
957                ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1;
958                t1 = &(v1[(m2 - 1 - a) + sig_inObj->LocU[nI]]);
959                t2 = &(sig_inObj->ImpResp_p[a]);
960                if (cnt > 0)FAST_DEVICE(cnt,*(t1--)+=*(t2++)*ff; );
961            }
962        }
963    } else {
964        /*voiced to unvoiced*/
965        for (nI = 0; nI < sig_inObj->nU; nI++) {
966            f = sig_inObj->EnU[nI];
967            s = -s; /*reverse order to reduce the periodicity effect*/
968            if (s > 0) {
969                a = 0;
970                cnt = PICODSP_FFTSIZE;
971                ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1;
972                t1 = &(v1[a + sig_inObj->LocU[nI]]);
973                t2 = &(fr[a]);
974                if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff; );
975            } else {
976                a = 0;
977                cnt = PICODSP_FFTSIZE;
978                ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1;
979                t1 = &(v1[(m2 - 1 - a) + sig_inObj->LocU[nI]]);
980                t2 = &(fr[a]);
981                if (cnt > 0)FAST_DEVICE(cnt,*(t1--)+=*(t2++)*ff; );
982            }
983        }
984        /*add remaining stuff from voiced part*/
985        for (nI = 0; nI < sig_inObj->nV; nI++) {
986            f = sig_inObj->EnV[nI];
987            a = 0;
988            cnt = PICODSP_FFTSIZE;
989            ff = (f * window[sig_inObj->LocV[nI]]) >> PICODSP_SHIFT_FACT1;
990            t1 = &(v1[a + sig_inObj->LocV[nI]]);
991            t2 = &(sig_inObj->ImpResp_p[a]);
992            if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff;);
993        }
994    }
995
996    t1 = sig_inObj->sig_vec1;
997    for (i = 0; i < PICODSP_FFTSIZE; i++, t1++) {
998        if (*t1 >= 0)
999            *t1 >>= PICODSP_SHIFT_FACT5;
1000        else
1001            *t1 = -((-*t1) >> PICODSP_SHIFT_FACT5);
1002    }
1003
1004}/*td_psola2*/
1005
1006/**
1007 * overlap + add summing of impulse responses on the final destination sample buffer
1008 * @param    sig_inObj : sig PU internal object of the sub-object
1009 * @return  void
1010 * @remarks Special treatment at voicing boundaries
1011 * @remarks Introduced to get rid of time-domain aliasing (and additional speed up)
1012 * Input
1013 * - wlet : the generic impulse response (FFT size, real)
1014 * - window : the windowing funcion (FFT size, real) fixed
1015 * - WavBuff : the destination buffer with past samples (FFT size*2, short)
1016 * - m2 : fftsize
1017 * Output
1018 * - WavBuff : the destination buffer with updated samples (FFT size*2, short)
1019 * @callgraph
1020 * @callergraph
1021 */
1022void overlap_add(sig_innerobj_t *sig_inObj)
1023{
1024    /*Local variables*/
1025    picoos_int32 *w, *v;
1026
1027    /*Link local variables with sig object*/
1028    w = sig_inObj->WavBuff_p;
1029    v = sig_inObj->sig_vec1;
1030
1031    FAST_DEVICE(PICODSP_FFTSIZE, *(w++)+=*(v++)<<PICODSP_SHIFT_FACT6;);
1032
1033}/*overlap_add*/
1034
1035/*-------------------------------------------------------------------------------
1036 INITIALIZATION AND INTERNAL    FUNCTIONS
1037 --------------------------------------------------------------------------------*/
1038/**
1039 * Hanning window initialization
1040 * @param    sig_inObj : sig PU internal object of the sub-object
1041 * @return  PICO_OK
1042 * @callgraph
1043 * @callergraph
1044 */
1045static void gen_hann2(sig_innerobj_t *sig_inObj)
1046{
1047    picoos_int32 *hann;
1048    picoos_int32 *norm;
1049    /*link local variables with sig object*/
1050    hann = sig_inObj->window_p;
1051    norm = sig_inObj->norm_window_p;
1052
1053    norm[0] = 80224;
1054    norm[1] = 320832;
1055    norm[2] = 721696;
1056    norm[3] = 1282560;
1057    norm[4] = 2003104;
1058    norm[5] = 2882880;
1059    norm[6] = 3921376;
1060    norm[7] = 5117984;
1061    norm[8] = 6471952;
1062    norm[9] = 7982496;
1063    norm[10] = 9648720;
1064    norm[11] = 11469616;
1065    norm[12] = 13444080;
1066    norm[13] = 15570960;
1067    norm[14] = 17848976;
1068    norm[15] = 20276752;
1069    norm[16] = 22852864;
1070    norm[17] = 25575744;
1071    norm[18] = 28443776;
1072    norm[19] = 31455264;
1073    norm[20] = 34608368;
1074    norm[21] = 37901248;
1075    norm[22] = 41331904;
1076    norm[23] = 44898304;
1077    norm[24] = 48598304;
1078    norm[25] = 52429696;
1079    norm[26] = 56390192;
1080    norm[27] = 60477408;
1081    norm[28] = 64688944;
1082    norm[29] = 69022240;
1083    norm[30] = 73474720;
1084    norm[31] = 78043744;
1085    norm[32] = 82726544;
1086    norm[33] = 87520352;
1087    norm[34] = 92422272;
1088    norm[35] = 97429408;
1089    norm[36] = 102538752;
1090    norm[37] = 107747248;
1091    norm[38] = 113051776;
1092    norm[39] = 118449184;
1093    norm[40] = 123936224;
1094    norm[41] = 129509648;
1095    norm[42] = 135166080;
1096    norm[43] = 140902192;
1097    norm[44] = 146714528;
1098    norm[45] = 152599584;
1099    norm[46] = 158553904;
1100    norm[47] = 164573888;
1101    norm[48] = 170655936;
1102    norm[49] = 176796448;
1103    norm[50] = 182991712;
1104    norm[51] = 189238064;
1105    norm[52] = 195531744;
1106    norm[53] = 201868992;
1107    norm[54] = 208246016;
1108    norm[55] = 214659040;
1109    norm[56] = 221104176;
1110    norm[57] = 227577616;
1111    norm[58] = 234075488;
1112    norm[59] = 240593872;
1113    norm[60] = 247128912;
1114    norm[61] = 253676688;
1115    norm[62] = 260233280;
1116    norm[63] = 266794768;
1117    norm[64] = 273357248;
1118    norm[65] = 279916768;
1119    norm[66] = 286469440;
1120    norm[67] = 293011360;
1121    norm[68] = 299538560;
1122    norm[69] = 306047168;
1123    norm[70] = 312533312;
1124    norm[71] = 318993088;
1125    norm[72] = 325422656;
1126    norm[73] = 331818144;
1127    norm[74] = 338175744;
1128    norm[75] = 344491680;
1129    norm[76] = 350762176;
1130    norm[77] = 356983424;
1131    norm[78] = 363151808;
1132    norm[79] = 369263520;
1133    norm[80] = 375315008;
1134    norm[81] = 381302592;
1135    norm[82] = 387222720;
1136    norm[83] = 393071872;
1137    norm[84] = 398846528;
1138    norm[85] = 404543232;
1139    norm[86] = 410158560;
1140    norm[87] = 415689216;
1141    norm[88] = 421131840;
1142    norm[89] = 426483200;
1143    norm[90] = 431740096;
1144    norm[91] = 436899392;
1145    norm[92] = 441958016;
1146    norm[93] = 446912928;
1147    norm[94] = 451761152;
1148    norm[95] = 456499840;
1149    norm[96] = 461126080;
1150    norm[97] = 465637152;
1151    norm[98] = 470030400;
1152    norm[99] = 474303104;
1153    norm[100] = 478452800;
1154    norm[101] = 482476960;
1155    norm[102] = 486373184;
1156    norm[103] = 490139200;
1157    norm[104] = 493772640;
1158    norm[105] = 497271424;
1159    norm[106] = 500633440;
1160    norm[107] = 503856704;
1161    norm[108] = 506939200;
1162    norm[109] = 509879168;
1163    norm[110] = 512674880;
1164    norm[111] = 515324544;
1165    norm[112] = 517826688;
1166    norm[113] = 520179776;
1167    norm[114] = 522382368;
1168    norm[115] = 524433184;
1169    norm[116] = 526331008;
1170    norm[117] = 528074688;
1171    norm[118] = 529663200;
1172    norm[119] = 531095552;
1173    norm[120] = 532370944;
1174    norm[121] = 533488576;
1175    norm[122] = 534447808;
1176    norm[123] = 535248000;
1177    norm[124] = 535888768;
1178    norm[125] = 536369664;
1179    norm[126] = 536690432;
1180    norm[127] = 536850880;
1181    norm[128] = 536850880;
1182    norm[129] = 536690432;
1183    norm[130] = 536369664;
1184    norm[131] = 535888768;
1185    norm[132] = 535248000;
1186    norm[133] = 534447808;
1187    norm[134] = 533488576;
1188    norm[135] = 532370944;
1189    norm[136] = 531095552;
1190    norm[137] = 529663200;
1191    norm[138] = 528074688;
1192    norm[139] = 526331008;
1193    norm[140] = 524433216;
1194    norm[141] = 522382368;
1195    norm[142] = 520179776;
1196    norm[143] = 517826688;
1197    norm[144] = 515324544;
1198    norm[145] = 512674880;
1199    norm[146] = 509879168;
1200    norm[147] = 506939200;
1201    norm[148] = 503856704;
1202    norm[149] = 500633472;
1203    norm[150] = 497271424;
1204    norm[151] = 493772672;
1205    norm[152] = 490139200;
1206    norm[153] = 486373184;
1207    norm[154] = 482476992;
1208    norm[155] = 478452800;
1209    norm[156] = 474303104;
1210    norm[157] = 470030400;
1211    norm[158] = 465637184;
1212    norm[159] = 461126080;
1213    norm[160] = 456499840;
1214    norm[161] = 451761152;
1215    norm[162] = 446912960;
1216    norm[163] = 441958016;
1217    norm[164] = 436899424;
1218    norm[165] = 431740096;
1219    norm[166] = 426483200;
1220    norm[167] = 421131840;
1221    norm[168] = 415689216;
1222    norm[169] = 410158560;
1223    norm[170] = 404543232;
1224    norm[171] = 398846528;
1225    norm[172] = 393071872;
1226    norm[173] = 387222720;
1227    norm[174] = 381302592;
1228    norm[175] = 375315008;
1229    norm[176] = 369263552;
1230    norm[177] = 363151808;
1231    norm[178] = 356983456;
1232    norm[179] = 350762176;
1233    norm[180] = 344491712;
1234    norm[181] = 338175776;
1235    norm[182] = 331818144;
1236    norm[183] = 325422656;
1237    norm[184] = 318993088;
1238    norm[185] = 312533312;
1239    norm[186] = 306047168;
1240    norm[187] = 299538560;
1241    norm[188] = 293011360;
1242    norm[189] = 286469472;
1243    norm[190] = 279916800;
1244    norm[191] = 273357248;
1245    norm[192] = 266794784;
1246    norm[193] = 260233280;
1247    norm[194] = 253676688;
1248    norm[195] = 247128928;
1249    norm[196] = 240593888;
1250    norm[197] = 234075488;
1251    norm[198] = 227577632;
1252    norm[199] = 221104192;
1253    norm[200] = 214659040;
1254    norm[201] = 208246032;
1255    norm[202] = 201868992;
1256    norm[203] = 195531744;
1257    norm[204] = 189238080;
1258    norm[205] = 182991728;
1259    norm[206] = 176796448;
1260    norm[207] = 170655952;
1261    norm[208] = 164573888;
1262    norm[209] = 158553920;
1263    norm[210] = 152599600;
1264    norm[211] = 146714528;
1265    norm[212] = 140902208;
1266    norm[213] = 135166096;
1267    norm[214] = 129509648;
1268    norm[215] = 123936240;
1269    norm[216] = 118449184;
1270    norm[217] = 113051776;
1271    norm[218] = 107747248;
1272    norm[219] = 102538752;
1273    norm[220] = 97429424;
1274    norm[221] = 92422288;
1275    norm[222] = 87520352;
1276    norm[223] = 82726544;
1277    norm[224] = 78043744;
1278    norm[225] = 73474736;
1279    norm[226] = 69022240;
1280    norm[227] = 64688944;
1281    norm[228] = 60477424;
1282    norm[229] = 56390192;
1283    norm[230] = 52429696;
1284    norm[231] = 48598304;
1285    norm[232] = 44898304;
1286    norm[233] = 41331904;
1287    norm[234] = 37901248;
1288    norm[235] = 34608384;
1289    norm[236] = 31455264;
1290    norm[237] = 28443792;
1291    norm[238] = 25575744;
1292    norm[239] = 22852864;
1293    norm[240] = 20276752;
1294    norm[241] = 17848976;
1295    norm[242] = 15570960;
1296    norm[243] = 13444080;
1297    norm[244] = 11469616;
1298    norm[245] = 9648720;
1299    norm[246] = 7982512;
1300    norm[247] = 6471952;
1301    norm[248] = 5117984;
1302    norm[249] = 3921376;
1303    norm[250] = 2882880;
1304    norm[251] = 2003104;
1305    norm[252] = 1282560;
1306    norm[253] = 721696;
1307    norm[254] = 320832;
1308    norm[255] = 80224;
1309    hann[0] = 0;
1310    hann[1] = 0;
1311    hann[2] = 1;
1312    hann[3] = 2;
1313    hann[4] = 3;
1314    hann[5] = 5;
1315    hann[6] = 7;
1316    hann[7] = 9;
1317    hann[8] = 12;
1318    hann[9] = 15;
1319    hann[10] = 18;
1320    hann[11] = 21;
1321    hann[12] = 25;
1322    hann[13] = 29;
1323    hann[14] = 34;
1324    hann[15] = 38;
1325    hann[16] = 43;
1326    hann[17] = 48;
1327    hann[18] = 54;
1328    hann[19] = 59;
1329    hann[20] = 66;
1330    hann[21] = 72;
1331    hann[22] = 78;
1332    hann[23] = 85;
1333    hann[24] = 92;
1334    hann[25] = 100;
1335    hann[26] = 107;
1336    hann[27] = 115;
1337    hann[28] = 123;
1338    hann[29] = 131;
1339    hann[30] = 140;
1340    hann[31] = 148;
1341    hann[32] = 157;
1342    hann[33] = 166;
1343    hann[34] = 176;
1344    hann[35] = 185;
1345    hann[36] = 195;
1346    hann[37] = 205;
1347    hann[38] = 215;
1348    hann[39] = 225;
1349    hann[40] = 236;
1350    hann[41] = 247;
1351    hann[42] = 257;
1352    hann[43] = 268;
1353    hann[44] = 279;
1354    hann[45] = 291;
1355    hann[46] = 302;
1356    hann[47] = 313;
1357    hann[48] = 325;
1358    hann[49] = 337;
1359    hann[50] = 349;
1360    hann[51] = 360;
1361    hann[52] = 372;
1362    hann[53] = 385;
1363    hann[54] = 397;
1364    hann[55] = 409;
1365    hann[56] = 421;
1366    hann[57] = 434;
1367    hann[58] = 446;
1368    hann[59] = 458;
1369    hann[60] = 471;
1370    hann[61] = 483;
1371    hann[62] = 496;
1372    hann[63] = 508;
1373    hann[64] = 521;
1374    hann[65] = 533;
1375    hann[66] = 546;
1376    hann[67] = 558;
1377    hann[68] = 571;
1378    hann[69] = 583;
1379    hann[70] = 596;
1380    hann[71] = 608;
1381    hann[72] = 620;
1382    hann[73] = 632;
1383    hann[74] = 645;
1384    hann[75] = 657;
1385    hann[76] = 669;
1386    hann[77] = 680;
1387    hann[78] = 692;
1388    hann[79] = 704;
1389    hann[80] = 715;
1390    hann[81] = 727;
1391    hann[82] = 738;
1392    hann[83] = 749;
1393    hann[84] = 760;
1394    hann[85] = 771;
1395    hann[86] = 782;
1396    hann[87] = 792;
1397    hann[88] = 803;
1398    hann[89] = 813;
1399    hann[90] = 823;
1400    hann[91] = 833;
1401    hann[92] = 842;
1402    hann[93] = 852;
1403    hann[94] = 861;
1404    hann[95] = 870;
1405    hann[96] = 879;
1406    hann[97] = 888;
1407    hann[98] = 896;
1408    hann[99] = 904;
1409    hann[100] = 912;
1410    hann[101] = 920;
1411    hann[102] = 927;
1412    hann[103] = 934;
1413    hann[104] = 941;
1414    hann[105] = 948;
1415    hann[106] = 954;
1416    hann[107] = 961;
1417    hann[108] = 966;
1418    hann[109] = 972;
1419    hann[110] = 977;
1420    hann[111] = 982;
1421    hann[112] = 987;
1422    hann[113] = 992;
1423    hann[114] = 996;
1424    hann[115] = 1000;
1425    hann[116] = 1003;
1426    hann[117] = 1007;
1427    hann[118] = 1010;
1428    hann[119] = 1012;
1429    hann[120] = 1015;
1430    hann[121] = 1017;
1431    hann[122] = 1019;
1432    hann[123] = 1020;
1433    hann[124] = 1022;
1434    hann[125] = 1023;
1435    hann[126] = 1023;
1436    hann[127] = 1023;
1437    hann[128] = 1023;
1438    hann[129] = 1023;
1439    hann[130] = 1023;
1440    hann[131] = 1022;
1441    hann[132] = 1020;
1442    hann[133] = 1019;
1443    hann[134] = 1017;
1444    hann[135] = 1015;
1445    hann[136] = 1012;
1446    hann[137] = 1010;
1447    hann[138] = 1007;
1448    hann[139] = 1003;
1449    hann[140] = 1000;
1450    hann[141] = 996;
1451    hann[142] = 992;
1452    hann[143] = 987;
1453    hann[144] = 982;
1454    hann[145] = 977;
1455    hann[146] = 972;
1456    hann[147] = 966;
1457    hann[148] = 961;
1458    hann[149] = 954;
1459    hann[150] = 948;
1460    hann[151] = 941;
1461    hann[152] = 934;
1462    hann[153] = 927;
1463    hann[154] = 920;
1464    hann[155] = 912;
1465    hann[156] = 904;
1466    hann[157] = 896;
1467    hann[158] = 888;
1468    hann[159] = 879;
1469    hann[160] = 870;
1470    hann[161] = 861;
1471    hann[162] = 852;
1472    hann[163] = 842;
1473    hann[164] = 833;
1474    hann[165] = 823;
1475    hann[166] = 813;
1476    hann[167] = 803;
1477    hann[168] = 792;
1478    hann[169] = 782;
1479    hann[170] = 771;
1480    hann[171] = 760;
1481    hann[172] = 749;
1482    hann[173] = 738;
1483    hann[174] = 727;
1484    hann[175] = 715;
1485    hann[176] = 704;
1486    hann[177] = 692;
1487    hann[178] = 680;
1488    hann[179] = 669;
1489    hann[180] = 657;
1490    hann[181] = 645;
1491    hann[182] = 632;
1492    hann[183] = 620;
1493    hann[184] = 608;
1494    hann[185] = 596;
1495    hann[186] = 583;
1496    hann[187] = 571;
1497    hann[188] = 558;
1498    hann[189] = 546;
1499    hann[190] = 533;
1500    hann[191] = 521;
1501    hann[192] = 508;
1502    hann[193] = 496;
1503    hann[194] = 483;
1504    hann[195] = 471;
1505    hann[196] = 458;
1506    hann[197] = 446;
1507    hann[198] = 434;
1508    hann[199] = 421;
1509    hann[200] = 409;
1510    hann[201] = 397;
1511    hann[202] = 385;
1512    hann[203] = 372;
1513    hann[204] = 360;
1514    hann[205] = 349;
1515    hann[206] = 337;
1516    hann[207] = 325;
1517    hann[208] = 313;
1518    hann[209] = 302;
1519    hann[210] = 291;
1520    hann[211] = 279;
1521    hann[212] = 268;
1522    hann[213] = 257;
1523    hann[214] = 247;
1524    hann[215] = 236;
1525    hann[216] = 225;
1526    hann[217] = 215;
1527    hann[218] = 205;
1528    hann[219] = 195;
1529    hann[220] = 185;
1530    hann[221] = 176;
1531    hann[222] = 166;
1532    hann[223] = 157;
1533    hann[224] = 148;
1534    hann[225] = 140;
1535    hann[226] = 131;
1536    hann[227] = 123;
1537    hann[228] = 115;
1538    hann[229] = 107;
1539    hann[230] = 100;
1540    hann[231] = 92;
1541    hann[232] = 85;
1542    hann[233] = 78;
1543    hann[234] = 72;
1544    hann[235] = 66;
1545    hann[236] = 59;
1546    hann[237] = 54;
1547    hann[238] = 48;
1548    hann[239] = 43;
1549    hann[240] = 38;
1550    hann[241] = 34;
1551    hann[242] = 29;
1552    hann[243] = 25;
1553    hann[244] = 21;
1554    hann[245] = 18;
1555    hann[246] = 15;
1556    hann[247] = 12;
1557    hann[248] = 9;
1558    hann[249] = 7;
1559    hann[250] = 5;
1560    hann[251] = 3;
1561    hann[252] = 2;
1562    hann[253] = 1;
1563    hann[254] = 0;
1564    hann[255] = 0;
1565
1566} /* gen_hann2 */
1567
1568/**
1569 * Creates the non uniform enhancement window (bilinearly mapped hannning window)
1570 * in order to reduce the formant enhancement in the high spectrum
1571 * @param    mm : memory manager
1572 * @param    sig_inObj : sig PU internal object of the sub-object
1573 * @return   void
1574 * @callgraph
1575 * @callergraph
1576 * @remarks the outgput is based on the matlab script below\n
1577 matlab script
1578 -------------
1579 function makeEnhWind(alpha)
1580 N=129; % =HFFTSIZEE_P1
1581 s=(bilinmap(alpha,N));
1582 h=[hann(N)'];
1583 x=(1:N)/N;
1584 W=interp1(x,h,s); W(1)=0;
1585
1586 fid=fopen('enhwind.txt','wt');
1587 fprintf(fid,'picoos_int16 enh_wind_init(sig_innerobj_t *sig_inObj) {\n');
1588 for i=1:N,
1589 fprintf(fid,['   sig_inObj->enhwind[' int2str(i) '] = (picoos_single)' num2str(W(i),'%0.7g') ';\n']);
1590 end;
1591 fprintf(fid,'   return PICO_OK;\n');
1592 fprintf(fid,' }; \n');
1593 fclose(fid);
1594 %figure(1); plot(x*8,W);
1595 */
1596static void enh_wind_init(sig_innerobj_t *sig_inObj)
1597{
1598    /*     picoos_int16 i; */
1599    picoos_int32 *c;
1600
1601    c = sig_inObj->cos_table;
1602
1603    c[0] = 4096;
1604    c[1] = 4095;
1605    c[2] = 4095;
1606    c[3] = 4095;
1607    c[4] = 4095;
1608    c[5] = 4095;
1609    c[6] = 4095;
1610    c[7] = 4095;
1611    c[8] = 4094;
1612    c[9] = 4094;
1613    c[10] = 4094;
1614    c[11] = 4093;
1615    c[12] = 4093;
1616    c[13] = 4092;
1617    c[14] = 4092;
1618    c[15] = 4091;
1619    c[16] = 4091;
1620    c[17] = 4090;
1621    c[18] = 4089;
1622    c[19] = 4089;
1623    c[20] = 4088;
1624    c[21] = 4087;
1625    c[22] = 4086;
1626    c[23] = 4085;
1627    c[24] = 4084;
1628    c[25] = 4083;
1629    c[26] = 4082;
1630    c[27] = 4081;
1631    c[28] = 4080;
1632    c[29] = 4079;
1633    c[30] = 4078;
1634    c[31] = 4077;
1635    c[32] = 4076;
1636    c[33] = 4075;
1637    c[34] = 4073;
1638    c[35] = 4072;
1639    c[36] = 4071;
1640    c[37] = 4069;
1641    c[38] = 4068;
1642    c[39] = 4066;
1643    c[40] = 4065;
1644    c[41] = 4063;
1645    c[42] = 4062;
1646    c[43] = 4060;
1647    c[44] = 4058;
1648    c[45] = 4057;
1649    c[46] = 4055;
1650    c[47] = 4053;
1651    c[48] = 4051;
1652    c[49] = 4049;
1653    c[50] = 4047;
1654    c[51] = 4045;
1655    c[52] = 4043;
1656    c[53] = 4041;
1657    c[54] = 4039;
1658    c[55] = 4037;
1659    c[56] = 4035;
1660    c[57] = 4033;
1661    c[58] = 4031;
1662    c[59] = 4029;
1663    c[60] = 4026;
1664    c[61] = 4024;
1665    c[62] = 4022;
1666    c[63] = 4019;
1667    c[64] = 4017;
1668    c[65] = 4014;
1669    c[66] = 4012;
1670    c[67] = 4009;
1671    c[68] = 4007;
1672    c[69] = 4004;
1673    c[70] = 4001;
1674    c[71] = 3999;
1675    c[72] = 3996;
1676    c[73] = 3993;
1677    c[74] = 3990;
1678    c[75] = 3988;
1679    c[76] = 3985;
1680    c[77] = 3982;
1681    c[78] = 3979;
1682    c[79] = 3976;
1683    c[80] = 3973;
1684    c[81] = 3970;
1685    c[82] = 3967;
1686    c[83] = 3963;
1687    c[84] = 3960;
1688    c[85] = 3957;
1689    c[86] = 3954;
1690    c[87] = 3950;
1691    c[88] = 3947;
1692    c[89] = 3944;
1693    c[90] = 3940;
1694    c[91] = 3937;
1695    c[92] = 3933;
1696    c[93] = 3930;
1697    c[94] = 3926;
1698    c[95] = 3923;
1699    c[96] = 3919;
1700    c[97] = 3915;
1701    c[98] = 3912;
1702    c[99] = 3908;
1703    c[100] = 3904;
1704    c[101] = 3900;
1705    c[102] = 3897;
1706    c[103] = 3893;
1707    c[104] = 3889;
1708    c[105] = 3885;
1709    c[106] = 3881;
1710    c[107] = 3877;
1711    c[108] = 3873;
1712    c[109] = 3869;
1713    c[110] = 3864;
1714    c[111] = 3860;
1715    c[112] = 3856;
1716    c[113] = 3852;
1717    c[114] = 3848;
1718    c[115] = 3843;
1719    c[116] = 3839;
1720    c[117] = 3834;
1721    c[118] = 3830;
1722    c[119] = 3826;
1723    c[120] = 3821;
1724    c[121] = 3816;
1725    c[122] = 3812;
1726    c[123] = 3807;
1727    c[124] = 3803;
1728    c[125] = 3798;
1729    c[126] = 3793;
1730    c[127] = 3789;
1731    c[128] = 3784;
1732    c[129] = 3779;
1733    c[130] = 3774;
1734    c[131] = 3769;
1735    c[132] = 3764;
1736    c[133] = 3759;
1737    c[134] = 3754;
1738    c[135] = 3749;
1739    c[136] = 3744;
1740    c[137] = 3739;
1741    c[138] = 3734;
1742    c[139] = 3729;
1743    c[140] = 3723;
1744    c[141] = 3718;
1745    c[142] = 3713;
1746    c[143] = 3708;
1747    c[144] = 3702;
1748    c[145] = 3697;
1749    c[146] = 3691;
1750    c[147] = 3686;
1751    c[148] = 3680;
1752    c[149] = 3675;
1753    c[150] = 3669;
1754    c[151] = 3664;
1755    c[152] = 3658;
1756    c[153] = 3652;
1757    c[154] = 3647;
1758    c[155] = 3641;
1759    c[156] = 3635;
1760    c[157] = 3629;
1761    c[158] = 3624;
1762    c[159] = 3618;
1763    c[160] = 3612;
1764    c[161] = 3606;
1765    c[162] = 3600;
1766    c[163] = 3594;
1767    c[164] = 3588;
1768    c[165] = 3582;
1769    c[166] = 3576;
1770    c[167] = 3570;
1771    c[168] = 3563;
1772    c[169] = 3557;
1773    c[170] = 3551;
1774    c[171] = 3545;
1775    c[172] = 3538;
1776    c[173] = 3532;
1777    c[174] = 3526;
1778    c[175] = 3519;
1779    c[176] = 3513;
1780    c[177] = 3506;
1781    c[178] = 3500;
1782    c[179] = 3493;
1783    c[180] = 3487;
1784    c[181] = 3480;
1785    c[182] = 3473;
1786    c[183] = 3467;
1787    c[184] = 3460;
1788    c[185] = 3453;
1789    c[186] = 3447;
1790    c[187] = 3440;
1791    c[188] = 3433;
1792    c[189] = 3426;
1793    c[190] = 3419;
1794    c[191] = 3412;
1795    c[192] = 3405;
1796    c[193] = 3398;
1797    c[194] = 3391;
1798    c[195] = 3384;
1799    c[196] = 3377;
1800    c[197] = 3370;
1801    c[198] = 3363;
1802    c[199] = 3356;
1803    c[200] = 3348;
1804    c[201] = 3341;
1805    c[202] = 3334;
1806    c[203] = 3326;
1807    c[204] = 3319;
1808    c[205] = 3312;
1809    c[206] = 3304;
1810    c[207] = 3297;
1811    c[208] = 3289;
1812    c[209] = 3282;
1813    c[210] = 3274;
1814    c[211] = 3267;
1815    c[212] = 3259;
1816    c[213] = 3252;
1817    c[214] = 3244;
1818    c[215] = 3236;
1819    c[216] = 3229;
1820    c[217] = 3221;
1821    c[218] = 3213;
1822    c[219] = 3205;
1823    c[220] = 3197;
1824    c[221] = 3190;
1825    c[222] = 3182;
1826    c[223] = 3174;
1827    c[224] = 3166;
1828    c[225] = 3158;
1829    c[226] = 3150;
1830    c[227] = 3142;
1831    c[228] = 3134;
1832    c[229] = 3126;
1833    c[230] = 3117;
1834    c[231] = 3109;
1835    c[232] = 3101;
1836    c[233] = 3093;
1837    c[234] = 3085;
1838    c[235] = 3076;
1839    c[236] = 3068;
1840    c[237] = 3060;
1841    c[238] = 3051;
1842    c[239] = 3043;
1843    c[240] = 3034;
1844    c[241] = 3026;
1845    c[242] = 3018;
1846    c[243] = 3009;
1847    c[244] = 3000;
1848    c[245] = 2992;
1849    c[246] = 2983;
1850    c[247] = 2975;
1851    c[248] = 2966;
1852    c[249] = 2957;
1853    c[250] = 2949;
1854    c[251] = 2940;
1855    c[252] = 2931;
1856    c[253] = 2922;
1857    c[254] = 2914;
1858    c[255] = 2905;
1859    c[256] = 2896;
1860    c[257] = 2887;
1861    c[258] = 2878;
1862    c[259] = 2869;
1863    c[260] = 2860;
1864    c[261] = 2851;
1865    c[262] = 2842;
1866    c[263] = 2833;
1867    c[264] = 2824;
1868    c[265] = 2815;
1869    c[266] = 2806;
1870    c[267] = 2796;
1871    c[268] = 2787;
1872    c[269] = 2778;
1873    c[270] = 2769;
1874    c[271] = 2760;
1875    c[272] = 2750;
1876    c[273] = 2741;
1877    c[274] = 2732;
1878    c[275] = 2722;
1879    c[276] = 2713;
1880    c[277] = 2703;
1881    c[278] = 2694;
1882    c[279] = 2684;
1883    c[280] = 2675;
1884    c[281] = 2665;
1885    c[282] = 2656;
1886    c[283] = 2646;
1887    c[284] = 2637;
1888    c[285] = 2627;
1889    c[286] = 2617;
1890    c[287] = 2608;
1891    c[288] = 2598;
1892    c[289] = 2588;
1893    c[290] = 2578;
1894    c[291] = 2569;
1895    c[292] = 2559;
1896    c[293] = 2549;
1897    c[294] = 2539;
1898    c[295] = 2529;
1899    c[296] = 2519;
1900    c[297] = 2510;
1901    c[298] = 2500;
1902    c[299] = 2490;
1903    c[300] = 2480;
1904    c[301] = 2470;
1905    c[302] = 2460;
1906    c[303] = 2450;
1907    c[304] = 2439;
1908    c[305] = 2429;
1909    c[306] = 2419;
1910    c[307] = 2409;
1911    c[308] = 2399;
1912    c[309] = 2389;
1913    c[310] = 2379;
1914    c[311] = 2368;
1915    c[312] = 2358;
1916    c[313] = 2348;
1917    c[314] = 2337;
1918    c[315] = 2327;
1919    c[316] = 2317;
1920    c[317] = 2306;
1921    c[318] = 2296;
1922    c[319] = 2286;
1923    c[320] = 2275;
1924    c[321] = 2265;
1925    c[322] = 2254;
1926    c[323] = 2244;
1927    c[324] = 2233;
1928    c[325] = 2223;
1929    c[326] = 2212;
1930    c[327] = 2201;
1931    c[328] = 2191;
1932    c[329] = 2180;
1933    c[330] = 2170;
1934    c[331] = 2159;
1935    c[332] = 2148;
1936    c[333] = 2138;
1937    c[334] = 2127;
1938    c[335] = 2116;
1939    c[336] = 2105;
1940    c[337] = 2094;
1941    c[338] = 2084;
1942    c[339] = 2073;
1943    c[340] = 2062;
1944    c[341] = 2051;
1945    c[342] = 2040;
1946    c[343] = 2029;
1947    c[344] = 2018;
1948    c[345] = 2007;
1949    c[346] = 1997;
1950    c[347] = 1986;
1951    c[348] = 1975;
1952    c[349] = 1964;
1953    c[350] = 1952;
1954    c[351] = 1941;
1955    c[352] = 1930;
1956    c[353] = 1919;
1957    c[354] = 1908;
1958    c[355] = 1897;
1959    c[356] = 1886;
1960    c[357] = 1875;
1961    c[358] = 1864;
1962    c[359] = 1852;
1963    c[360] = 1841;
1964    c[361] = 1830;
1965    c[362] = 1819;
1966    c[363] = 1807;
1967    c[364] = 1796;
1968    c[365] = 1785;
1969    c[366] = 1773;
1970    c[367] = 1762;
1971    c[368] = 1751;
1972    c[369] = 1739;
1973    c[370] = 1728;
1974    c[371] = 1717;
1975    c[372] = 1705;
1976    c[373] = 1694;
1977    c[374] = 1682;
1978    c[375] = 1671;
1979    c[376] = 1659;
1980    c[377] = 1648;
1981    c[378] = 1636;
1982    c[379] = 1625;
1983    c[380] = 1613;
1984    c[381] = 1602;
1985    c[382] = 1590;
1986    c[383] = 1579;
1987    c[384] = 1567;
1988    c[385] = 1555;
1989    c[386] = 1544;
1990    c[387] = 1532;
1991    c[388] = 1520;
1992    c[389] = 1509;
1993    c[390] = 1497;
1994    c[391] = 1485;
1995    c[392] = 1474;
1996    c[393] = 1462;
1997    c[394] = 1450;
1998    c[395] = 1438;
1999    c[396] = 1427;
2000    c[397] = 1415;
2001    c[398] = 1403;
2002    c[399] = 1391;
2003    c[400] = 1379;
2004    c[401] = 1368;
2005    c[402] = 1356;
2006    c[403] = 1344;
2007    c[404] = 1332;
2008    c[405] = 1320;
2009    c[406] = 1308;
2010    c[407] = 1296;
2011    c[408] = 1284;
2012    c[409] = 1272;
2013    c[410] = 1260;
2014    c[411] = 1248;
2015    c[412] = 1237;
2016    c[413] = 1225;
2017    c[414] = 1213;
2018    c[415] = 1201;
2019    c[416] = 1189;
2020    c[417] = 1176;
2021    c[418] = 1164;
2022    c[419] = 1152;
2023    c[420] = 1140;
2024    c[421] = 1128;
2025    c[422] = 1116;
2026    c[423] = 1104;
2027    c[424] = 1092;
2028    c[425] = 1080;
2029    c[426] = 1068;
2030    c[427] = 1056;
2031    c[428] = 1043;
2032    c[429] = 1031;
2033    c[430] = 1019;
2034    c[431] = 1007;
2035    c[432] = 995;
2036    c[433] = 983;
2037    c[434] = 970;
2038    c[435] = 958;
2039    c[436] = 946;
2040    c[437] = 934;
2041    c[438] = 921;
2042    c[439] = 909;
2043    c[440] = 897;
2044    c[441] = 885;
2045    c[442] = 872;
2046    c[443] = 860;
2047    c[444] = 848;
2048    c[445] = 836;
2049    c[446] = 823;
2050    c[447] = 811;
2051    c[448] = 799;
2052    c[449] = 786;
2053    c[450] = 774;
2054    c[451] = 762;
2055    c[452] = 749;
2056    c[453] = 737;
2057    c[454] = 725;
2058    c[455] = 712;
2059    c[456] = 700;
2060    c[457] = 687;
2061    c[458] = 675;
2062    c[459] = 663;
2063    c[460] = 650;
2064    c[461] = 638;
2065    c[462] = 625;
2066    c[463] = 613;
2067    c[464] = 601;
2068    c[465] = 588;
2069    c[466] = 576;
2070    c[467] = 563;
2071    c[468] = 551;
2072    c[469] = 538;
2073    c[470] = 526;
2074    c[471] = 513;
2075    c[472] = 501;
2076    c[473] = 488;
2077    c[474] = 476;
2078    c[475] = 463;
2079    c[476] = 451;
2080    c[477] = 438;
2081    c[478] = 426;
2082    c[479] = 413;
2083    c[480] = 401;
2084    c[481] = 388;
2085    c[482] = 376;
2086    c[483] = 363;
2087    c[484] = 351;
2088    c[485] = 338;
2089    c[486] = 326;
2090    c[487] = 313;
2091    c[488] = 301;
2092    c[489] = 288;
2093    c[490] = 276;
2094    c[491] = 263;
2095    c[492] = 251;
2096    c[493] = 238;
2097    c[494] = 226;
2098    c[495] = 213;
2099    c[496] = 200;
2100    c[497] = 188;
2101    c[498] = 175;
2102    c[499] = 163;
2103    c[500] = 150;
2104    c[501] = 138;
2105    c[502] = 125;
2106    c[503] = 113;
2107    c[504] = 100;
2108    c[505] = 87;
2109    c[506] = 75;
2110    c[507] = 62;
2111    c[508] = 50;
2112    c[509] = 37;
2113    c[510] = 25;
2114    c[511] = 12;
2115    c[512] = 0;
2116} /*enh_wind_init*/
2117
2118/**
2119 * Initializes a useful large array of random numbers
2120 * @param  sig_inObj : sig PU internal object of the sub-object
2121 * @return void
2122 * @callgraph
2123 * @callergraph
2124 */
2125static void init_rand(sig_innerobj_t *sig_inObj)
2126{
2127    picoos_int32 *q = sig_inObj->int_vec34;
2128    picoos_int32 *r = sig_inObj->int_vec35;
2129
2130    sig_inObj->iRand = 0;
2131
2132    q[0] = -2198;
2133    r[0] = 3455;
2134    q[1] = 3226;
2135    r[1] = -2522;
2136    q[2] = -845;
2137    r[2] = 4007;
2138    q[3] = -1227;
2139    r[3] = 3907;
2140    q[4] = -3480;
2141    r[4] = 2158;
2142    q[5] = -1325;
2143    r[5] = -3875;
2144    q[6] = 2089;
2145    r[6] = -3522;
2146    q[7] = -468;
2147    r[7] = 4069;
2148    q[8] = 711;
2149    r[8] = -4033;
2150    q[9] = 3862;
2151    r[9] = 1362;
2152    q[10] = 4054;
2153    r[10] = -579;
2154    q[11] = 2825;
2155    r[11] = 2965;
2156    q[12] = 2704;
2157    r[12] = -3076;
2158    q[13] = 4081;
2159    r[13] = 344;
2160    q[14] = -3912;
2161    r[14] = 1211;
2162    q[15] = -3541;
2163    r[15] = 2058;
2164    q[16] = 2694;
2165    r[16] = 3084;
2166    q[17] = 835;
2167    r[17] = 4009;
2168    q[18] = -2578;
2169    r[18] = -3182;
2170    q[19] = 3205;
2171    r[19] = 2550;
2172    q[20] = -4074;
2173    r[20] = -418;
2174    q[21] = -183;
2175    r[21] = -4091;
2176    q[22] = -2665;
2177    r[22] = -3110;
2178    q[23] = -1367;
2179    r[23] = 3860;
2180    q[24] = -2266;
2181    r[24] = -3411;
2182    q[25] = 3327;
2183    r[25] = -2387;
2184    q[26] = -2807;
2185    r[26] = -2982;
2186    q[27] = -3175;
2187    r[27] = -2587;
2188    q[28] = -4095;
2189    r[28] = 27;
2190    q[29] = -811;
2191    r[29] = -4014;
2192    q[30] = 4082;
2193    r[30] = 332;
2194    q[31] = -2175;
2195    r[31] = 3470;
2196    q[32] = 3112;
2197    r[32] = 2662;
2198    q[33] = 1168;
2199    r[33] = -3925;
2200    q[34] = 2659;
2201    r[34] = 3115;
2202    q[35] = 4048;
2203    r[35] = 622;
2204    q[36] = 4092;
2205    r[36] = -165;
2206    q[37] = -4036;
2207    r[37] = 697;
2208    q[38] = 1081;
2209    r[38] = -3950;
2210    q[39] = -548;
2211    r[39] = 4059;
2212    q[40] = 4038;
2213    r[40] = 685;
2214    q[41] = -511;
2215    r[41] = 4063;
2216    q[42] = 3317;
2217    r[42] = -2402;
2218    q[43] = -3180;
2219    r[43] = 2580;
2220    q[44] = 851;
2221    r[44] = -4006;
2222    q[45] = 2458;
2223    r[45] = -3276;
2224    q[46] = -1453;
2225    r[46] = 3829;
2226    q[47] = -3577;
2227    r[47] = 1995;
2228    q[48] = -3708;
2229    r[48] = -1738;
2230    q[49] = -3890;
2231    r[49] = 1282;
2232    q[50] = 4041;
2233    r[50] = 666;
2234    q[51] = -3511;
2235    r[51] = -2108;
2236    q[52] = -1454;
2237    r[52] = -3828;
2238    q[53] = 2124;
2239    r[53] = 3502;
2240    q[54] = -3159;
2241    r[54] = 2606;
2242    q[55] = 2384;
2243    r[55] = -3330;
2244    q[56] = -3767;
2245    r[56] = -1607;
2246    q[57] = -4063;
2247    r[57] = -513;
2248    q[58] = 3952;
2249    r[58] = -1075;
2250    q[59] = -3778;
2251    r[59] = -1581;
2252    q[60] = -301;
2253    r[60] = -4084;
2254    q[61] = -4026;
2255    r[61] = 751;
2256    q[62] = -3346;
2257    r[62] = 2361;
2258    q[63] = -2426;
2259    r[63] = 3299;
2260    q[64] = 428;
2261    r[64] = -4073;
2262    q[65] = 3968;
2263    r[65] = 1012;
2264    q[66] = 2900;
2265    r[66] = -2892;
2266    q[67] = -263;
2267    r[67] = 4087;
2268    q[68] = 4083;
2269    r[68] = 322;
2270    q[69] = 2024;
2271    r[69] = 3560;
2272    q[70] = 4015;
2273    r[70] = 808;
2274    q[71] = -3971;
2275    r[71] = -1000;
2276    q[72] = 3785;
2277    r[72] = -1564;
2278    q[73] = -3726;
2279    r[73] = 1701;
2280    q[74] = -3714;
2281    r[74] = 1725;
2282    q[75] = 743;
2283    r[75] = 4027;
2284    q[76] = 875;
2285    r[76] = -4001;
2286    q[77] = 294;
2287    r[77] = 4085;
2288    q[78] = 2611;
2289    r[78] = 3155;
2290    q[79] = 2491;
2291    r[79] = -3251;
2292    q[80] = 1558;
2293    r[80] = 3787;
2294    q[81] = -2063;
2295    r[81] = -3538;
2296    q[82] = 3809;
2297    r[82] = -1505;
2298    q[83] = -2987;
2299    r[83] = 2802;
2300    q[84] = -1955;
2301    r[84] = 3599;
2302    q[85] = 1980;
2303    r[85] = -3585;
2304    q[86] = -539;
2305    r[86] = -4060;
2306    q[87] = -3210;
2307    r[87] = 2543;
2308    q[88] = 2415;
2309    r[88] = -3308;
2310    q[89] = 1587;
2311    r[89] = 3775;
2312    q[90] = -3943;
2313    r[90] = 1106;
2314    q[91] = 3476;
2315    r[91] = 2165;
2316    q[92] = 2253;
2317    r[92] = 3420;
2318    q[93] = -2584;
2319    r[93] = 3177;
2320    q[94] = 3804;
2321    r[94] = -1518;
2322    q[95] = -3637;
2323    r[95] = 1883;
2324    q[96] = 3289;
2325    r[96] = -2440;
2326    q[97] = -1621;
2327    r[97] = 3761;
2328    q[98] = 1645;
2329    r[98] = 3751;
2330    q[99] = -3471;
2331    r[99] = 2173;
2332    q[100] = 4071;
2333    r[100] = -449;
2334    q[101] = -872;
2335    r[101] = -4001;
2336    q[102] = -3897;
2337    r[102] = 1259;
2338    q[103] = -3590;
2339    r[103] = 1970;
2340    q[104] = -2456;
2341    r[104] = -3277;
2342    q[105] = -3004;
2343    r[105] = 2783;
2344    q[106] = 2589;
2345    r[106] = 3173;
2346    q[107] = 3727;
2347    r[107] = -1698;
2348    q[108] = 2992;
2349    r[108] = 2796;
2350    q[109] = 794;
2351    r[109] = -4018;
2352    q[110] = -918;
2353    r[110] = 3991;
2354    q[111] = 1446;
2355    r[111] = -3831;
2356    q[112] = 3871;
2357    r[112] = -1338;
2358    q[113] = -612;
2359    r[113] = -4049;
2360    q[114] = -1566;
2361    r[114] = -3784;
2362    q[115] = 672;
2363    r[115] = -4040;
2364    q[116] = 3841;
2365    r[116] = 1422;
2366    q[117] = 3545;
2367    r[117] = -2051;
2368    q[118] = -1982;
2369    r[118] = -3584;
2370    q[119] = -3413;
2371    r[119] = 2263;
2372    q[120] = -3265;
2373    r[120] = -2473;
2374    q[121] = -2876;
2375    r[121] = -2915;
2376    q[122] = 4094;
2377    r[122] = -117;
2378    q[123] = -269;
2379    r[123] = 4087;
2380    q[124] = -4077;
2381    r[124] = 391;
2382    q[125] = -3759;
2383    r[125] = 1626;
2384    q[126] = 1639;
2385    r[126] = 3753;
2386    q[127] = 3041;
2387    r[127] = -2743;
2388    q[128] = 5;
2389    r[128] = 4095;
2390    q[129] = 2778;
2391    r[129] = -3009;
2392    q[130] = 1121;
2393    r[130] = -3939;
2394    q[131] = -455;
2395    r[131] = -4070;
2396    q[132] = 3532;
2397    r[132] = 2073;
2398    q[133] = -143;
2399    r[133] = -4093;
2400    q[134] = -2357;
2401    r[134] = -3349;
2402    q[135] = 458;
2403    r[135] = 4070;
2404    q[136] = -2887;
2405    r[136] = -2904;
2406    q[137] = -1104;
2407    r[137] = 3944;
2408    q[138] = -2104;
2409    r[138] = -3513;
2410    q[139] = 126;
2411    r[139] = 4094;
2412    q[140] = -3655;
2413    r[140] = -1848;
2414    q[141] = -3896;
2415    r[141] = 1263;
2416    q[142] = -3874;
2417    r[142] = -1327;
2418    q[143] = 4058;
2419    r[143] = 553;
2420    q[144] = -1831;
2421    r[144] = -3663;
2422    q[145] = -255;
2423    r[145] = -4088;
2424    q[146] = -1211;
2425    r[146] = 3912;
2426    q[147] = 445;
2427    r[147] = 4071;
2428    q[148] = 2268;
2429    r[148] = 3410;
2430    q[149] = -4010;
2431    r[149] = 833;
2432    q[150] = 2621;
2433    r[150] = 3147;
2434    q[151] = -250;
2435    r[151] = 4088;
2436    q[152] = -3409;
2437    r[152] = -2269;
2438    q[153] = -2710;
2439    r[153] = -3070;
2440    q[154] = 4063;
2441    r[154] = 518;
2442    q[155] = -3611;
2443    r[155] = -1933;
2444    q[156] = -3707;
2445    r[156] = -1741;
2446    q[157] = -1151;
2447    r[157] = -3930;
2448    q[158] = 3976;
2449    r[158] = -983;
2450    q[159] = -1736;
2451    r[159] = 3709;
2452    q[160] = 3669;
2453    r[160] = 1820;
2454    q[161] = -143;
2455    r[161] = 4093;
2456    q[162] = -3879;
2457    r[162] = -1313;
2458    q[163] = -2242;
2459    r[163] = -3427;
2460    q[164] = -4095;
2461    r[164] = 0;
2462    q[165] = -1159;
2463    r[165] = -3928;
2464    q[166] = -3155;
2465    r[166] = 2611;
2466    q[167] = -2887;
2467    r[167] = -2904;
2468    q[168] = -4095;
2469    r[168] = 56;
2470    q[169] = -3861;
2471    r[169] = -1364;
2472    q[170] = -2814;
2473    r[170] = 2976;
2474    q[171] = -3680;
2475    r[171] = -1798;
2476    q[172] = -4094;
2477    r[172] = -107;
2478    q[173] = -3626;
2479    r[173] = 1903;
2480    q[174] = 3403;
2481    r[174] = 2278;
2482    q[175] = -1735;
2483    r[175] = -3710;
2484    q[176] = -2126;
2485    r[176] = -3500;
2486    q[177] = 3183;
2487    r[177] = -2577;
2488    q[178] = -3499;
2489    r[178] = 2128;
2490    q[179] = -1736;
2491    r[179] = 3709;
2492    q[180] = 2592;
2493    r[180] = -3170;
2494    q[181] = 3875;
2495    r[181] = 1326;
2496    q[182] = 3596;
2497    r[182] = 1960;
2498    q[183] = 3915;
2499    r[183] = -1202;
2500    q[184] = 1570;
2501    r[184] = 3783;
2502    q[185] = -3319;
2503    r[185] = -2400;
2504    q[186] = 4019;
2505    r[186] = 787;
2506    q[187] = -187;
2507    r[187] = 4091;
2508    q[188] = 1370;
2509    r[188] = -3859;
2510    q[189] = -4091;
2511    r[189] = 199;
2512    q[190] = 3626;
2513    r[190] = 1904;
2514    q[191] = -2943;
2515    r[191] = 2848;
2516    q[192] = 56;
2517    r[192] = 4095;
2518    q[193] = 2824;
2519    r[193] = 2966;
2520    q[194] = -3994;
2521    r[194] = -904;
2522    q[195] = 56;
2523    r[195] = 4095;
2524    q[196] = -2045;
2525    r[196] = 3548;
2526    q[197] = -3653;
2527    r[197] = 1850;
2528    q[198] = -2864;
2529    r[198] = 2927;
2530    q[199] = -1996;
2531    r[199] = 3576;
2532    q[200] = -4061;
2533    r[200] = 527;
2534    q[201] = 159;
2535    r[201] = 4092;
2536    q[202] = -3363;
2537    r[202] = 2336;
2538    q[203] = -4074;
2539    r[203] = 421;
2540    q[204] = 2043;
2541    r[204] = 3549;
2542    q[205] = 4095;
2543    r[205] = -70;
2544    q[206] = -2107;
2545    r[206] = -3512;
2546    q[207] = -1973;
2547    r[207] = 3589;
2548    q[208] = -3138;
2549    r[208] = 2631;
2550    q[209] = -3625;
2551    r[209] = -1905;
2552    q[210] = 2413;
2553    r[210] = 3309;
2554    q[211] = -50;
2555    r[211] = -4095;
2556    q[212] = 2813;
2557    r[212] = 2976;
2558    q[213] = -535;
2559    r[213] = -4060;
2560    q[214] = 1250;
2561    r[214] = 3900;
2562    q[215] = 1670;
2563    r[215] = -3739;
2564    q[216] = 1945;
2565    r[216] = -3604;
2566    q[217] = -476;
2567    r[217] = -4068;
2568    q[218] = -3659;
2569    r[218] = -1840;
2570    q[219] = 2745;
2571    r[219] = 3039;
2572    q[220] = -674;
2573    r[220] = -4040;
2574    q[221] = 2383;
2575    r[221] = 3330;
2576    q[222] = 4086;
2577    r[222] = 274;
2578    q[223] = -4030;
2579    r[223] = 730;
2580    q[224] = 768;
2581    r[224] = -4023;
2582    q[225] = 3925;
2583    r[225] = 1170;
2584    q[226] = 785;
2585    r[226] = 4019;
2586    q[227] = -3101;
2587    r[227] = -2675;
2588    q[228] = 4030;
2589    r[228] = -729;
2590    q[229] = 3422;
2591    r[229] = 2249;
2592    q[230] = -3847;
2593    r[230] = 1403;
2594    q[231] = 3902;
2595    r[231] = -1243;
2596    q[232] = 2114;
2597    r[232] = -3507;
2598    q[233] = -2359;
2599    r[233] = 3348;
2600    q[234] = 3754;
2601    r[234] = -1638;
2602    q[235] = -4095;
2603    r[235] = -83;
2604    q[236] = 2301;
2605    r[236] = -3388;
2606    q[237] = 3336;
2607    r[237] = 2375;
2608    q[238] = -2045;
2609    r[238] = 3548;
2610    q[239] = -413;
2611    r[239] = -4075;
2612    q[240] = 1848;
2613    r[240] = 3655;
2614    q[241] = 4072;
2615    r[241] = -437;
2616    q[242] = 4069;
2617    r[242] = -463;
2618    q[243] = 1386;
2619    r[243] = -3854;
2620    q[244] = 966;
2621    r[244] = 3980;
2622    q[245] = -1684;
2623    r[245] = -3733;
2624    q[246] = 2953;
2625    r[246] = 2837;
2626    q[247] = -3961;
2627    r[247] = -1040;
2628    q[248] = 3512;
2629    r[248] = -2107;
2630    q[249] = 1363;
2631    r[249] = 3862;
2632    q[250] = 1883;
2633    r[250] = 3637;
2634    q[251] = 2657;
2635    r[251] = 3116;
2636    q[252] = 2347;
2637    r[252] = -3356;
2638    q[253] = -1635;
2639    r[253] = -3755;
2640    q[254] = 3170;
2641    r[254] = 2593;
2642    q[255] = 2856;
2643    r[255] = 2935;
2644    q[256] = 494;
2645    r[256] = 4066;
2646    q[257] = 1936;
2647    r[257] = -3609;
2648    q[258] = 245;
2649    r[258] = 4088;
2650    q[259] = -1211;
2651    r[259] = -3912;
2652    q[260] = -3600;
2653    r[260] = 1952;
2654    q[261] = 1632;
2655    r[261] = 3756;
2656    q[262] = 2341;
2657    r[262] = 3360;
2658    q[263] = 186;
2659    r[263] = -4091;
2660    q[264] = 4011;
2661    r[264] = 829;
2662    q[265] = -3490;
2663    r[265] = -2143;
2664    q[266] = 269;
2665    r[266] = -4087;
2666    q[267] = -2939;
2667    r[267] = 2852;
2668    q[268] = 1600;
2669    r[268] = 3770;
2670    q[269] = -3405;
2671    r[269] = -2275;
2672    q[270] = -3134;
2673    r[270] = -2636;
2674    q[271] = 2642;
2675    r[271] = -3129;
2676    q[272] = 3629;
2677    r[272] = 1898;
2678    q[273] = 3413;
2679    r[273] = 2264;
2680    q[274] = 2050;
2681    r[274] = 3545;
2682    q[275] = 988;
2683    r[275] = -3975;
2684    q[276] = -660;
2685    r[276] = 4042;
2686    q[277] = 978;
2687    r[277] = -3977;
2688    q[278] = 1965;
2689    r[278] = -3593;
2690    q[279] = -1513;
2691    r[279] = -3806;
2692    q[280] = -4076;
2693    r[280] = 401;
2694    q[281] = -4094;
2695    r[281] = -92;
2696    q[282] = -1914;
2697    r[282] = 3621;
2698    q[283] = 2006;
2699    r[283] = -3570;
2700    q[284] = -1550;
2701    r[284] = -3791;
2702    q[285] = 3774;
2703    r[285] = -1591;
2704    q[286] = -3958;
2705    r[286] = 1052;
2706    q[287] = -3576;
2707    r[287] = 1997;
2708    q[288] = -382;
2709    r[288] = 4078;
2710    q[289] = 1288;
2711    r[289] = 3888;
2712    q[290] = -2965;
2713    r[290] = -2825;
2714    q[291] = 1608;
2715    r[291] = 3767;
2716    q[292] = 3052;
2717    r[292] = -2731;
2718    q[293] = -622;
2719    r[293] = 4048;
2720    q[294] = -3836;
2721    r[294] = 1434;
2722    q[295] = -3542;
2723    r[295] = 2056;
2724    q[296] = -2648;
2725    r[296] = 3124;
2726    q[297] = -1178;
2727    r[297] = -3922;
2728    q[298] = -1109;
2729    r[298] = 3942;
2730    q[299] = 3910;
2731    r[299] = 1217;
2732    q[300] = 1199;
2733    r[300] = -3916;
2734    q[301] = -3386;
2735    r[301] = 2303;
2736    q[302] = -3453;
2737    r[302] = 2202;
2738    q[303] = -2877;
2739    r[303] = 2914;
2740    q[304] = 4095;
2741    r[304] = -47;
2742    q[305] = 3635;
2743    r[305] = 1886;
2744    q[306] = -2134;
2745    r[306] = -3495;
2746    q[307] = 613;
2747    r[307] = -4049;
2748    q[308] = -2700;
2749    r[308] = 3079;
2750    q[309] = 4091;
2751    r[309] = -195;
2752    q[310] = 3989;
2753    r[310] = -927;
2754    q[311] = -2385;
2755    r[311] = 3329;
2756    q[312] = 4094;
2757    r[312] = -103;
2758    q[313] = 1044;
2759    r[313] = -3960;
2760    q[314] = -1734;
2761    r[314] = -3710;
2762    q[315] = 1646;
2763    r[315] = 3750;
2764    q[316] = 575;
2765    r[316] = 4055;
2766    q[317] = -2629;
2767    r[317] = -3140;
2768    q[318] = 3266;
2769    r[318] = 2471;
2770    q[319] = 4091;
2771    r[319] = -194;
2772    q[320] = -2154;
2773    r[320] = 3483;
2774    q[321] = 659;
2775    r[321] = 4042;
2776    q[322] = -1785;
2777    r[322] = -3686;
2778    q[323] = -717;
2779    r[323] = -4032;
2780    q[324] = 4095;
2781    r[324] = -37;
2782    q[325] = -2963;
2783    r[325] = -2827;
2784    q[326] = -2645;
2785    r[326] = -3126;
2786    q[327] = 2619;
2787    r[327] = -3148;
2788    q[328] = 1855;
2789    r[328] = -3651;
2790    q[329] = -3726;
2791    r[329] = 1699;
2792    q[330] = -3437;
2793    r[330] = 2227;
2794    q[331] = 2948;
2795    r[331] = 2842;
2796    q[332] = -2125;
2797    r[332] = 3501;
2798    q[333] = -1700;
2799    r[333] = 3726;
2800    q[334] = 4094;
2801    r[334] = -101;
2802    q[335] = 2084;
2803    r[335] = -3525;
2804    q[336] = 3225;
2805    r[336] = -2524;
2806    q[337] = 2220;
2807    r[337] = 3442;
2808    q[338] = 3174;
2809    r[338] = 2588;
2810    q[339] = 229;
2811    r[339] = -4089;
2812    q[340] = -2381;
2813    r[340] = -3332;
2814    q[341] = -3677;
2815    r[341] = -1803;
2816    q[342] = -3191;
2817    r[342] = -2567;
2818    q[343] = 2465;
2819    r[343] = 3270;
2820    q[344] = 2681;
2821    r[344] = -3096;
2822    q[345] = 975;
2823    r[345] = -3978;
2824    q[346] = 2004;
2825    r[346] = -3572;
2826    q[347] = -3442;
2827    r[347] = -2219;
2828    q[348] = 3676;
2829    r[348] = -1805;
2830    q[349] = -3753;
2831    r[349] = 1638;
2832    q[350] = 3544;
2833    r[350] = 2053;
2834    q[351] = 397;
2835    r[351] = -4076;
2836    q[352] = 2221;
2837    r[352] = 3440;
2838    q[353] = -302;
2839    r[353] = 4084;
2840    q[354] = 4083;
2841    r[354] = -323;
2842    q[355] = -2253;
2843    r[355] = -3420;
2844    q[356] = -3038;
2845    r[356] = 2746;
2846    q[357] = 2884;
2847    r[357] = 2908;
2848    q[358] = 4070;
2849    r[358] = 454;
2850    q[359] = -1072;
2851    r[359] = -3953;
2852    q[360] = 3831;
2853    r[360] = 1449;
2854    q[361] = 3663;
2855    r[361] = -1831;
2856    q[362] = -1971;
2857    r[362] = 3590;
2858    q[363] = 3226;
2859    r[363] = -2522;
2860    q[364] = -145;
2861    r[364] = -4093;
2862    q[365] = 1882;
2863    r[365] = -3637;
2864    q[366] = 529;
2865    r[366] = 4061;
2866    q[367] = 2637;
2867    r[367] = 3133;
2868    q[368] = -4077;
2869    r[368] = 389;
2870    q[369] = 2156;
2871    r[369] = -3482;
2872    q[370] = -3276;
2873    r[370] = 2458;
2874    q[371] = -2687;
2875    r[371] = -3090;
2876    q[372] = 3469;
2877    r[372] = -2177;
2878    q[373] = -4093;
2879    r[373] = -139;
2880    q[374] = -850;
2881    r[374] = 4006;
2882    q[375] = -625;
2883    r[375] = 4048;
2884    q[376] = 1110;
2885    r[376] = -3942;
2886    q[377] = -3078;
2887    r[377] = -2702;
2888    q[378] = -2719;
2889    r[378] = 3063;
2890    q[379] = 742;
2891    r[379] = 4028;
2892    q[380] = -3902;
2893    r[380] = -1245;
2894    q[381] = 3888;
2895    r[381] = -1287;
2896    q[382] = -4081;
2897    r[382] = 347;
2898    q[383] = 1070;
2899    r[383] = 3953;
2900    q[384] = -996;
2901    r[384] = -3972;
2902    q[385] = 4041;
2903    r[385] = -668;
2904    q[386] = -2712;
2905    r[386] = 3069;
2906    q[387] = -3403;
2907    r[387] = -2279;
2908    q[388] = -3320;
2909    r[388] = -2398;
2910    q[389] = 3036;
2911    r[389] = -2749;
2912    q[390] = 1308;
2913    r[390] = -3881;
2914    q[391] = 2256;
2915    r[391] = 3418;
2916    q[392] = -1486;
2917    r[392] = 3816;
2918    q[393] = -2771;
2919    r[393] = -3015;
2920    q[394] = -3883;
2921    r[394] = -1302;
2922    q[395] = -3867;
2923    r[395] = -1349;
2924    q[396] = 3952;
2925    r[396] = -1075;
2926    q[397] = -789;
2927    r[397] = 4019;
2928    q[398] = 1458;
2929    r[398] = 3827;
2930    q[399] = 3832;
2931    r[399] = -1446;
2932    q[400] = -3001;
2933    r[400] = -2787;
2934    q[401] = 3463;
2935    r[401] = 2186;
2936    q[402] = 3606;
2937    r[402] = 1942;
2938    q[403] = 4023;
2939    r[403] = 764;
2940    q[404] = 3387;
2941    r[404] = 2303;
2942    q[405] = 2648;
2943    r[405] = -3124;
2944    q[406] = 1370;
2945    r[406] = -3860;
2946    q[407] = -3134;
2947    r[407] = 2636;
2948    q[408] = 4051;
2949    r[408] = -600;
2950    q[409] = -1977;
2951    r[409] = -3587;
2952    q[410] = 3160;
2953    r[410] = 2605;
2954    q[411] = 4042;
2955    r[411] = 659;
2956    q[412] = 3004;
2957    r[412] = 2783;
2958    q[413] = 3370;
2959    r[413] = 2327;
2960    q[414] = -419;
2961    r[414] = -4074;
2962    q[415] = -1968;
2963    r[415] = 3591;
2964    q[416] = -3705;
2965    r[416] = -1746;
2966    q[417] = -3331;
2967    r[417] = -2383;
2968    q[418] = -3634;
2969    r[418] = 1888;
2970    q[419] = -1981;
2971    r[419] = -3584;
2972    q[420] = 4069;
2973    r[420] = -469;
2974    q[421] = -628;
2975    r[421] = -4047;
2976    q[422] = -1900;
2977    r[422] = 3628;
2978    q[423] = 1039;
2979    r[423] = -3961;
2980    q[424] = 2554;
2981    r[424] = -3201;
2982    q[425] = -2955;
2983    r[425] = 2836;
2984    q[426] = 2286;
2985    r[426] = -3398;
2986    q[427] = -1624;
2987    r[427] = 3760;
2988    q[428] = 2213;
2989    r[428] = 3446;
2990    q[429] = -3989;
2991    r[429] = -926;
2992    q[430] = 192;
2993    r[430] = -4091;
2994    q[431] = -723;
2995    r[431] = 4031;
2996    q[432] = 2878;
2997    r[432] = 2913;
2998    q[433] = -2109;
2999    r[433] = 3511;
3000    q[434] = 1463;
3001    r[434] = -3825;
3002    q[435] = -741;
3003    r[435] = -4028;
3004    q[436] = -1314;
3005    r[436] = -3879;
3006    q[437] = 3115;
3007    r[437] = 2659;
3008    q[438] = -3160;
3009    r[438] = -2605;
3010    q[439] = 1868;
3011    r[439] = 3644;
3012    q[440] = -824;
3013    r[440] = 4012;
3014    q[441] = 781;
3015    r[441] = 4020;
3016    q[442] = -1257;
3017    r[442] = -3898;
3018    q[443] = 3331;
3019    r[443] = -2382;
3020    q[444] = 1642;
3021    r[444] = -3752;
3022    q[445] = 3748;
3023    r[445] = -1650;
3024    q[446] = -487;
3025    r[446] = -4066;
3026    q[447] = 3085;
3027    r[447] = -2694;
3028    q[448] = 4009;
3029    r[448] = 839;
3030    q[449] = -2308;
3031    r[449] = -3383;
3032    q[450] = 3850;
3033    r[450] = 1397;
3034    q[451] = -4078;
3035    r[451] = -374;
3036    q[452] = 2989;
3037    r[452] = -2799;
3038    q[453] = 3023;
3039    r[453] = -2762;
3040    q[454] = 1397;
3041    r[454] = -3850;
3042    q[455] = 323;
3043    r[455] = 4083;
3044    q[456] = 268;
3045    r[456] = -4087;
3046    q[457] = 2414;
3047    r[457] = 3308;
3048    q[458] = 3876;
3049    r[458] = 1322;
3050    q[459] = -3584;
3051    r[459] = 1982;
3052    q[460] = 1603;
3053    r[460] = 3769;
3054    q[461] = -1502;
3055    r[461] = 3810;
3056    q[462] = 1318;
3057    r[462] = 3878;
3058    q[463] = 1554;
3059    r[463] = -3789;
3060    q[464] = 2492;
3061    r[464] = 3250;
3062    q[465] = -4093;
3063    r[465] = -154;
3064    q[466] = 4008;
3065    r[466] = 842;
3066    q[467] = -2279;
3067    r[467] = 3403;
3068    q[468] = 3013;
3069    r[468] = 2774;
3070    q[469] = 2557;
3071    r[469] = 3199;
3072    q[470] = 4068;
3073    r[470] = 475;
3074    q[471] = 3324;
3075    r[471] = -2392;
3076    q[472] = 2653;
3077    r[472] = -3120;
3078    q[473] = 796;
3079    r[473] = 4017;
3080    q[474] = -1312;
3081    r[474] = 3880;
3082    q[475] = 1794;
3083    r[475] = 3681;
3084    q[476] = -2347;
3085    r[476] = -3356;
3086    q[477] = -4008;
3087    r[477] = -840;
3088    q[478] = -3773;
3089    r[478] = -1592;
3090    q[479] = 1609;
3091    r[479] = 3766;
3092    q[480] = -1564;
3093    r[480] = -3785;
3094    q[481] = 3004;
3095    r[481] = 2784;
3096    q[482] = 1258;
3097    r[482] = 3897;
3098    q[483] = 3729;
3099    r[483] = 1693;
3100    q[484] = -4095;
3101    r[484] = -28;
3102    q[485] = -4093;
3103    r[485] = -146;
3104    q[486] = 1393;
3105    r[486] = -3851;
3106    q[487] = 297;
3107    r[487] = -4085;
3108    q[488] = 2294;
3109    r[488] = 3393;
3110    q[489] = -2562;
3111    r[489] = 3195;
3112    q[490] = -1716;
3113    r[490] = -3718;
3114    q[491] = 2224;
3115    r[491] = -3439;
3116    q[492] = 2032;
3117    r[492] = 3555;
3118    q[493] = -2968;
3119    r[493] = 2822;
3120    q[494] = 2338;
3121    r[494] = 3363;
3122    q[495] = 1584;
3123    r[495] = -3776;
3124    q[496] = -3072;
3125    r[496] = 2708;
3126    q[497] = -1596;
3127    r[497] = -3771;
3128    q[498] = -2256;
3129    r[498] = -3418;
3130    q[499] = 4095;
3131    r[499] = 89;
3132    q[500] = -1949;
3133    r[500] = 3602;
3134    q[501] = 1844;
3135    r[501] = 3657;
3136    q[502] = -3375;
3137    r[502] = 2319;
3138    q[503] = -1481;
3139    r[503] = -3818;
3140    q[504] = 3228;
3141    r[504] = -2520;
3142    q[505] = 1116;
3143    r[505] = 3940;
3144    q[506] = -2783;
3145    r[506] = 3004;
3146    q[507] = 3915;
3147    r[507] = 1201;
3148    q[508] = 283;
3149    r[508] = 4086;
3150    q[509] = -3732;
3151    r[509] = 1685;
3152    q[510] = -433;
3153    r[510] = -4072;
3154    q[511] = -3667;
3155    r[511] = 1823;
3156    q[512] = 3883;
3157    r[512] = 1300;
3158    q[513] = -3742;
3159    r[513] = 1663;
3160    q[514] = 4093;
3161    r[514] = -143;
3162    q[515] = 3874;
3163    r[515] = 1328;
3164    q[516] = -3800;
3165    r[516] = 1528;
3166    q[517] = -1257;
3167    r[517] = 3898;
3168    q[518] = -1606;
3169    r[518] = 3767;
3170    q[519] = 3394;
3171    r[519] = 2291;
3172    q[520] = 2255;
3173    r[520] = 3419;
3174    q[521] = -4094;
3175    r[521] = 120;
3176    q[522] = -3767;
3177    r[522] = 1606;
3178    q[523] = 1849;
3179    r[523] = -3654;
3180    q[524] = -2883;
3181    r[524] = 2908;
3182    q[525] = 3469;
3183    r[525] = 2176;
3184    q[526] = 2654;
3185    r[526] = 3119;
3186    q[527] = -239;
3187    r[527] = 4088;
3188    q[528] = -651;
3189    r[528] = 4043;
3190    q[529] = -1140;
3191    r[529] = 3934;
3192    q[530] = 328;
3193    r[530] = -4082;
3194    q[531] = 3246;
3195    r[531] = 2497;
3196    q[532] = 4026;
3197    r[532] = -753;
3198    q[533] = -2041;
3199    r[533] = -3550;
3200    q[534] = -1154;
3201    r[534] = 3929;
3202    q[535] = -2710;
3203    r[535] = 3070;
3204    q[536] = -2860;
3205    r[536] = 2932;
3206    q[537] = 2097;
3207    r[537] = 3517;
3208    q[538] = 3492;
3209    r[538] = -2140;
3210    q[539] = 3123;
3211    r[539] = 2649;
3212    q[540] = 3360;
3213    r[540] = 2342;
3214    q[541] = 2498;
3215    r[541] = 3245;
3216    q[542] = 3976;
3217    r[542] = 982;
3218    q[543] = -2441;
3219    r[543] = -3288;
3220    q[544] = 3601;
3221    r[544] = 1951;
3222    q[545] = -4008;
3223    r[545] = -842;
3224    q[546] = 1243;
3225    r[546] = 3902;
3226    q[547] = 4069;
3227    r[547] = 466;
3228    q[548] = -2031;
3229    r[548] = 3556;
3230    q[549] = 4077;
3231    r[549] = 386;
3232    q[550] = -3112;
3233    r[550] = -2663;
3234    q[551] = 4087;
3235    r[551] = -262;
3236    q[552] = 4087;
3237    r[552] = 266;
3238    q[553] = -3907;
3239    r[553] = -1228;
3240    q[554] = -1611;
3241    r[554] = 3765;
3242    q[555] = 3066;
3243    r[555] = -2715;
3244    q[556] = 2657;
3245    r[556] = 3117;
3246    q[557] = 3912;
3247    r[557] = -1213;
3248    q[558] = -2531;
3249    r[558] = -3220;
3250    q[559] = 3500;
3251    r[559] = -2127;
3252    q[560] = -76;
3253    r[560] = -4095;
3254    q[561] = 3413;
3255    r[561] = -2264;
3256    q[562] = -4071;
3257    r[562] = -448;
3258    q[563] = 828;
3259    r[563] = 4011;
3260    q[564] = 3664;
3261    r[564] = 1830;
3262    q[565] = -1578;
3263    r[565] = 3779;
3264    q[566] = 3555;
3265    r[566] = 2033;
3266    q[567] = 3868;
3267    r[567] = -1345;
3268    q[568] = 4054;
3269    r[568] = -580;
3270    q[569] = -4094;
3271    r[569] = 124;
3272    q[570] = -3820;
3273    r[570] = -1477;
3274    q[571] = -3658;
3275    r[571] = -1842;
3276    q[572] = 2595;
3277    r[572] = 3168;
3278    q[573] = 3354;
3279    r[573] = 2350;
3280    q[574] = -701;
3281    r[574] = -4035;
3282    q[575] = -772;
3283    r[575] = -4022;
3284    q[576] = 2799;
3285    r[576] = 2990;
3286    q[577] = -3632;
3287    r[577] = 1893;
3288    q[578] = 310;
3289    r[578] = 4084;
3290    q[579] = 3984;
3291    r[579] = -947;
3292    q[580] = 3794;
3293    r[580] = -1542;
3294    q[581] = -2419;
3295    r[581] = 3304;
3296    q[582] = -3916;
3297    r[582] = 1200;
3298    q[583] = -3886;
3299    r[583] = 1292;
3300    q[584] = -3299;
3301    r[584] = 2426;
3302    q[585] = -437;
3303    r[585] = 4072;
3304    q[586] = 2053;
3305    r[586] = -3544;
3306    q[587] = 3987;
3307    r[587] = 937;
3308    q[588] = -789;
3309    r[588] = -4019;
3310    q[589] = 4055;
3311    r[589] = -575;
3312    q[590] = -3894;
3313    r[590] = 1270;
3314    q[591] = 4003;
3315    r[591] = -864;
3316    q[592] = -3060;
3317    r[592] = 2721;
3318    q[593] = -4009;
3319    r[593] = 836;
3320    q[594] = -1655;
3321    r[594] = -3746;
3322    q[595] = 3954;
3323    r[595] = -1067;
3324    q[596] = -773;
3325    r[596] = 4022;
3326    q[597] = -422;
3327    r[597] = 4074;
3328    q[598] = -3384;
3329    r[598] = 2306;
3330    q[599] = 195;
3331    r[599] = -4091;
3332    q[600] = -298;
3333    r[600] = 4085;
3334    q[601] = -3988;
3335    r[601] = 931;
3336    q[602] = 2014;
3337    r[602] = -3566;
3338    q[603] = 3349;
3339    r[603] = -2357;
3340    q[604] = 3800;
3341    r[604] = 1526;
3342    q[605] = 3858;
3343    r[605] = 1374;
3344    q[606] = 2947;
3345    r[606] = 2844;
3346    q[607] = -1483;
3347    r[607] = -3818;
3348    q[608] = 4056;
3349    r[608] = -565;
3350    q[609] = 2612;
3351    r[609] = -3154;
3352    q[610] = 2326;
3353    r[610] = 3371;
3354    q[611] = -3545;
3355    r[611] = 2051;
3356    q[612] = -1001;
3357    r[612] = -3971;
3358    q[613] = 3211;
3359    r[613] = 2541;
3360    q[614] = -2717;
3361    r[614] = 3065;
3362    q[615] = -3159;
3363    r[615] = -2606;
3364    q[616] = 2869;
3365    r[616] = -2922;
3366    q[617] = -1290;
3367    r[617] = -3887;
3368    q[618] = 2479;
3369    r[618] = 3260;
3370    q[619] = 3420;
3371    r[619] = 2252;
3372    q[620] = 1823;
3373    r[620] = 3667;
3374    q[621] = 3368;
3375    r[621] = 2330;
3376    q[622] = -3819;
3377    r[622] = -1480;
3378    q[623] = 3800;
3379    r[623] = 1528;
3380    q[624] = 3773;
3381    r[624] = 1594;
3382    q[625] = -189;
3383    r[625] = -4091;
3384    q[626] = -4067;
3385    r[626] = -485;
3386    q[627] = 2277;
3387    r[627] = -3404;
3388    q[628] = -4089;
3389    r[628] = -233;
3390    q[629] = -3634;
3391    r[629] = 1889;
3392    q[630] = 3292;
3393    r[630] = 2437;
3394    q[631] = -530;
3395    r[631] = 4061;
3396    q[632] = -3109;
3397    r[632] = 2666;
3398    q[633] = -3741;
3399    r[633] = 1667;
3400    q[634] = -1903;
3401    r[634] = -3626;
3402    q[635] = 3879;
3403    r[635] = -1315;
3404    q[636] = 4083;
3405    r[636] = -315;
3406    q[637] = -1148;
3407    r[637] = 3931;
3408    q[638] = 2630;
3409    r[638] = 3139;
3410    q[639] = -4001;
3411    r[639] = 876;
3412    q[640] = -2295;
3413    r[640] = -3392;
3414    q[641] = 1090;
3415    r[641] = -3948;
3416    q[642] = -3024;
3417    r[642] = 2762;
3418    q[643] = 2728;
3419    r[643] = -3054;
3420    q[644] = -3305;
3421    r[644] = 2419;
3422    q[645] = 60;
3423    r[645] = 4095;
3424    q[646] = 4048;
3425    r[646] = -620;
3426    q[647] = 589;
3427    r[647] = -4053;
3428    q[648] = -3867;
3429    r[648] = 1347;
3430    q[649] = -2944;
3431    r[649] = -2847;
3432    q[650] = -2721;
3433    r[650] = 3060;
3434    q[651] = 2928;
3435    r[651] = 2863;
3436    q[652] = 801;
3437    r[652] = 4016;
3438    q[653] = -3644;
3439    r[653] = 1870;
3440    q[654] = -1648;
3441    r[654] = -3749;
3442    q[655] = 825;
3443    r[655] = -4012;
3444    q[656] = -2036;
3445    r[656] = -3553;
3446    q[657] = -1192;
3447    r[657] = -3918;
3448    q[658] = 2875;
3449    r[658] = 2916;
3450    q[659] = -1831;
3451    r[659] = -3663;
3452    q[660] = -2865;
3453    r[660] = -2926;
3454    q[661] = -575;
3455    r[661] = -4055;
3456    q[662] = -3870;
3457    r[662] = 1340;
3458    q[663] = -4080;
3459    r[663] = -356;
3460    q[664] = -2176;
3461    r[664] = -3469;
3462    q[665] = -2986;
3463    r[665] = -2803;
3464    q[666] = 3978;
3465    r[666] = -972;
3466    q[667] = 2437;
3467    r[667] = 3291;
3468    q[668] = -3528;
3469    r[668] = 2080;
3470    q[669] = -3300;
3471    r[669] = -2425;
3472    q[670] = 3085;
3473    r[670] = 2693;
3474    q[671] = -3700;
3475    r[671] = -1756;
3476    q[672] = 3216;
3477    r[672] = -2535;
3478    q[673] = 4094;
3479    r[673] = -91;
3480    q[674] = 3775;
3481    r[674] = -1589;
3482    q[675] = 1097;
3483    r[675] = -3946;
3484    q[676] = -152;
3485    r[676] = -4093;
3486    q[677] = -3490;
3487    r[677] = 2142;
3488    q[678] = 3747;
3489    r[678] = 1654;
3490    q[679] = -1490;
3491    r[679] = -3815;
3492    q[680] = -3998;
3493    r[680] = -886;
3494    q[681] = 3726;
3495    r[681] = -1700;
3496    q[682] = -1600;
3497    r[682] = 3770;
3498    q[683] = -87;
3499    r[683] = 4095;
3500    q[684] = 2538;
3501    r[684] = -3214;
3502    q[685] = -4095;
3503    r[685] = 52;
3504    q[686] = -3993;
3505    r[686] = -910;
3506    q[687] = 4051;
3507    r[687] = 603;
3508    q[688] = -1242;
3509    r[688] = -3902;
3510    q[689] = 2155;
3511    r[689] = 3482;
3512    q[690] = 1270;
3513    r[690] = 3893;
3514    q[691] = 1919;
3515    r[691] = -3618;
3516    q[692] = -3145;
3517    r[692] = 2623;
3518    q[693] = 2475;
3519    r[693] = 3263;
3520    q[694] = 2226;
3521    r[694] = -3437;
3522    q[695] = -3894;
3523    r[695] = -1269;
3524    q[696] = -429;
3525    r[696] = 4073;
3526    q[697] = -1346;
3527    r[697] = 3868;
3528    q[698] = 1297;
3529    r[698] = 3885;
3530    q[699] = 1699;
3531    r[699] = 3726;
3532    q[700] = -3375;
3533    r[700] = 2319;
3534    q[701] = 1577;
3535    r[701] = -3779;
3536    q[702] = -63;
3537    r[702] = 4095;
3538    q[703] = 1215;
3539    r[703] = -3911;
3540    q[704] = -1492;
3541    r[704] = 3814;
3542    q[705] = -1530;
3543    r[705] = -3799;
3544    q[706] = 3442;
3545    r[706] = 2218;
3546    q[707] = -3867;
3547    r[707] = -1349;
3548    q[708] = -3291;
3549    r[708] = -2437;
3550    q[709] = -2253;
3551    r[709] = -3420;
3552    q[710] = -150;
3553    r[710] = -4093;
3554    q[711] = -2686;
3555    r[711] = -3092;
3556    q[712] = 3470;
3557    r[712] = 2175;
3558    q[713] = -3826;
3559    r[713] = -1461;
3560    q[714] = -3148;
3561    r[714] = 2619;
3562    q[715] = -3858;
3563    r[715] = 1375;
3564    q[716] = -3844;
3565    r[716] = -1412;
3566    q[717] = -3652;
3567    r[717] = 1854;
3568    q[718] = 4018;
3569    r[718] = -791;
3570    q[719] = 179;
3571    r[719] = -4092;
3572    q[720] = 3498;
3573    r[720] = 2129;
3574    q[721] = -1999;
3575    r[721] = -3574;
3576    q[722] = 3531;
3577    r[722] = 2075;
3578    q[723] = 4050;
3579    r[723] = -606;
3580    q[724] = -1639;
3581    r[724] = 3753;
3582    q[725] = -3661;
3583    r[725] = 1835;
3584    q[726] = 4039;
3585    r[726] = 679;
3586    q[727] = 3561;
3587    r[727] = 2023;
3588    q[728] = 528;
3589    r[728] = 4061;
3590    q[729] = -634;
3591    r[729] = -4046;
3592    q[730] = 364;
3593    r[730] = -4079;
3594    q[731] = 2735;
3595    r[731] = 3048;
3596    q[732] = 3978;
3597    r[732] = 973;
3598    q[733] = -4073;
3599    r[733] = -427;
3600    q[734] = -3722;
3601    r[734] = 1708;
3602    q[735] = 2356;
3603    r[735] = -3350;
3604    q[736] = -1125;
3605    r[736] = -3938;
3606    q[737] = 4054;
3607    r[737] = 580;
3608    q[738] = 3328;
3609    r[738] = -2387;
3610    q[739] = 1439;
3611    r[739] = -3834;
3612    q[740] = 1746;
3613    r[740] = 3705;
3614    q[741] = 2507;
3615    r[741] = 3238;
3616    q[742] = 3839;
3617    r[742] = -1427;
3618    q[743] = 488;
3619    r[743] = -4066;
3620    q[744] = 1187;
3621    r[744] = 3920;
3622    q[745] = 2038;
3623    r[745] = -3552;
3624    q[746] = -905;
3625    r[746] = -3994;
3626    q[747] = -236;
3627    r[747] = 4089;
3628    q[748] = 208;
3629    r[748] = -4090;
3630    q[749] = 1660;
3631    r[749] = 3744;
3632    q[750] = -4074;
3633    r[750] = -415;
3634    q[751] = -2304;
3635    r[751] = 3385;
3636    q[752] = -2457;
3637    r[752] = 3276;
3638    q[753] = 3302;
3639    r[753] = 2423;
3640    q[754] = 1778;
3641    r[754] = -3689;
3642    q[755] = 2019;
3643    r[755] = 3563;
3644    q[756] = 4037;
3645    r[756] = 687;
3646    q[757] = -2365;
3647    r[757] = 3343;
3648    q[758] = 5;
3649    r[758] = -4095;
3650    q[759] = 160;
3651    r[759] = -4092;
3652
3653} /*initRand*/
3654
3655/**
3656 * initializes the MEL-2_LINEAR LOOKUP TABLE
3657 * @param   sig_inObj : sig PU internal object of the sub-object
3658 * @return  void
3659 * @remarks translated from matlab code to c-code
3660 * @callgraph
3661 * @callergraph
3662 *
3663 *  input
3664 *  - bilinTab : base address of bilinTable destination vector
3665 *  - alpha : warping factor
3666 *  - size : size of the vectors to be generated
3667 *  - A,B : base address of array of indexes for lookup table implementation
3668 *  - D : base address of delta array for lookup table implementation
3669 *
3670 *  output
3671 *  - bilinTab, A, B, D  : initialized vectors
3672 */
3673void mel_2_lin_init(sig_innerobj_t *sig_inObj)
3674{
3675
3676    /*Declare variables tied to  I/O PARAMS formerly passed by value or reference*/
3677    picoos_single alpha;
3678    picoos_int32 *D;
3679    picoos_int32 size;
3680    picoos_int16 *A;
3681
3682    /*Link local variables with sig data object*/
3683
3684    alpha = sig_inObj->warp_p;
3685    size = (sig_inObj->hfftsize_p) + 1;
3686    A = sig_inObj->A_p;
3687    D = sig_inObj->d_p;
3688    /*
3689     fixed point interpolation tables
3690     scaling factor: 0x20
3691     corresponding bit shift: 5
3692     */
3693
3694    A[0] = 0;
3695    D[0] = 0;
3696    A[1] = 2;
3697    D[1] = 14;
3698    A[2] = 4;
3699    D[2] = 29;
3700    A[3] = 7;
3701    D[3] = 11;
3702    A[4] = 9;
3703    D[4] = 24;
3704    A[5] = 12;
3705    D[5] = 5;
3706    A[6] = 14;
3707    D[6] = 18;
3708    A[7] = 16;
3709    D[7] = 30;
3710    A[8] = 19;
3711    D[8] = 9;
3712    A[9] = 21;
3713    D[9] = 19;
3714    A[10] = 23;
3715    D[10] = 29;
3716    A[11] = 26;
3717    D[11] = 5;
3718    A[12] = 28;
3719    D[12] = 12;
3720    A[13] = 30;
3721    D[13] = 19;
3722    A[14] = 32;
3723    D[14] = 24;
3724    A[15] = 34;
3725    D[15] = 27;
3726    A[16] = 36;
3727    D[16] = 30;
3728    A[17] = 38;
3729    D[17] = 31;
3730    A[18] = 40;
3731    D[18] = 31;
3732    A[19] = 42;
3733    D[19] = 29;
3734    A[20] = 44;
3735    D[20] = 26;
3736    A[21] = 46;
3737    D[21] = 22;
3738    A[22] = 48;
3739    D[22] = 17;
3740    A[23] = 50;
3741    D[23] = 10;
3742    A[24] = 52;
3743    D[24] = 2;
3744    A[25] = 53;
3745    D[25] = 24;
3746    A[26] = 55;
3747    D[26] = 13;
3748    A[27] = 57;
3749    D[27] = 1;
3750    A[28] = 58;
3751    D[28] = 20;
3752    A[29] = 60;
3753    D[29] = 5;
3754    A[30] = 61;
3755    D[30] = 21;
3756    A[31] = 63;
3757    D[31] = 4;
3758    A[32] = 64;
3759    D[32] = 18;
3760    A[33] = 65;
3761    D[33] = 31;
3762    A[34] = 67;
3763    D[34] = 11;
3764    A[35] = 68;
3765    D[35] = 21;
3766    A[36] = 69;
3767    D[36] = 31;
3768    A[37] = 71;
3769    D[37] = 7;
3770    A[38] = 72;
3771    D[38] = 14;
3772    A[39] = 73;
3773    D[39] = 21;
3774    A[40] = 74;
3775    D[40] = 27;
3776    A[41] = 75;
3777    D[41] = 31;
3778    A[42] = 77;
3779    D[42] = 3;
3780    A[43] = 78;
3781    D[43] = 6;
3782    A[44] = 79;
3783    D[44] = 8;
3784    A[45] = 80;
3785    D[45] = 10;
3786    A[46] = 81;
3787    D[46] = 10;
3788    A[47] = 82;
3789    D[47] = 10;
3790    A[48] = 83;
3791    D[48] = 9;
3792    A[49] = 84;
3793    D[49] = 8;
3794    A[50] = 85;
3795    D[50] = 6;
3796    A[51] = 86;
3797    D[51] = 3;
3798    A[52] = 86;
3799    D[52] = 31;
3800    A[53] = 87;
3801    D[53] = 27;
3802    A[54] = 88;
3803    D[54] = 23;
3804    A[55] = 89;
3805    D[55] = 18;
3806    A[56] = 90;
3807    D[56] = 12;
3808    A[57] = 91;
3809    D[57] = 6;
3810    A[58] = 91;
3811    D[58] = 31;
3812    A[59] = 92;
3813    D[59] = 24;
3814    A[60] = 93;
3815    D[60] = 16;
3816    A[61] = 94;
3817    D[61] = 8;
3818    A[62] = 94;
3819    D[62] = 31;
3820    A[63] = 95;
3821    D[63] = 22;
3822    A[64] = 96;
3823    D[64] = 13;
3824    A[65] = 97;
3825    D[65] = 3;
3826    A[66] = 97;
3827    D[66] = 25;
3828    A[67] = 98;
3829    D[67] = 14;
3830    A[68] = 99;
3831    D[68] = 3;
3832    A[69] = 99;
3833    D[69] = 24;
3834    A[70] = 100;
3835    D[70] = 13;
3836    A[71] = 101;
3837    D[71] = 1;
3838    A[72] = 101;
3839    D[72] = 21;
3840    A[73] = 102;
3841    D[73] = 8;
3842    A[74] = 102;
3843    D[74] = 27;
3844    A[75] = 103;
3845    D[75] = 14;
3846    A[76] = 104;
3847    D[76] = 1;
3848    A[77] = 104;
3849    D[77] = 19;
3850    A[78] = 105;
3851    D[78] = 6;
3852    A[79] = 105;
3853    D[79] = 24;
3854    A[80] = 106;
3855    D[80] = 9;
3856    A[81] = 106;
3857    D[81] = 27;
3858    A[82] = 107;
3859    D[82] = 12;
3860    A[83] = 107;
3861    D[83] = 29;
3862    A[84] = 108;
3863    D[84] = 14;
3864    A[85] = 108;
3865    D[85] = 31;
3866    A[86] = 109;
3867    D[86] = 15;
3868    A[87] = 109;
3869    D[87] = 31;
3870    A[88] = 110;
3871    D[88] = 16;
3872    A[89] = 110;
3873    D[89] = 31;
3874    A[90] = 111;
3875    D[90] = 15;
3876    A[91] = 111;
3877    D[91] = 31;
3878    A[92] = 112;
3879    D[92] = 14;
3880    A[93] = 112;
3881    D[93] = 30;
3882    A[94] = 113;
3883    D[94] = 13;
3884    A[95] = 113;
3885    D[95] = 28;
3886    A[96] = 114;
3887    D[96] = 11;
3888    A[97] = 114;
3889    D[97] = 26;
3890    A[98] = 115;
3891    D[98] = 9;
3892    A[99] = 115;
3893    D[99] = 23;
3894    A[100] = 116;
3895    D[100] = 6;
3896    A[101] = 116;
3897    D[101] = 20;
3898    A[102] = 117;
3899    D[102] = 2;
3900    A[103] = 117;
3901    D[103] = 16;
3902    A[104] = 117;
3903    D[104] = 31;
3904    A[105] = 118;
3905    D[105] = 13;
3906    A[106] = 118;
3907    D[106] = 27;
3908    A[107] = 119;
3909    D[107] = 8;
3910    A[108] = 119;
3911    D[108] = 22;
3912    A[109] = 120;
3913    D[109] = 4;
3914    A[110] = 120;
3915    D[110] = 17;
3916    A[111] = 120;
3917    D[111] = 31;
3918    A[112] = 121;
3919    D[112] = 13;
3920    A[113] = 121;
3921    D[113] = 26;
3922    A[114] = 122;
3923    D[114] = 8;
3924    A[115] = 122;
3925    D[115] = 21;
3926    A[116] = 123;
3927    D[116] = 2;
3928    A[117] = 123;
3929    D[117] = 15;
3930    A[118] = 123;
3931    D[118] = 29;
3932    A[119] = 124;
3933    D[119] = 10;
3934    A[120] = 124;
3935    D[120] = 23;
3936    A[121] = 125;
3937    D[121] = 4;
3938    A[122] = 125;
3939    D[122] = 17;
3940    A[123] = 125;
3941    D[123] = 31;
3942    A[124] = 126;
3943    D[124] = 12;
3944    A[125] = 126;
3945    D[125] = 25;
3946    A[126] = 127;
3947    D[126] = 6;
3948    A[127] = 127;
3949    D[127] = 19;
3950    A[128] = 128;
3951    D[128] = 0;
3952
3953}/*mel_2_lin_init*/
3954
3955/**
3956 * function to be documented
3957 * @param    ang : ??
3958 * @param    table : ??
3959 * @param    cs : ??
3960 * @param    sn : ??
3961 * @return  void
3962 * @callgraph
3963 * @callergraph
3964 */
3965static void get_trig(picoos_int32 ang, picoos_int32 *table, picoos_int32 *cs,
3966        picoos_int32 *sn)
3967{
3968    picoos_int32 i, j, k;
3969
3970    i = k = ang >> PICODSP_PI_SHIFT; /*  * PICODSP_COS_TABLE_LEN2/PICODSP_FIX_SCALE2 */
3971    if (i < 0)
3972        i = -i;
3973    j = 1;
3974    i &= (PICODSP_COS_TABLE_LEN4 - 1);
3975    if (i > PICODSP_COS_TABLE_LEN2)
3976        i = PICODSP_COS_TABLE_LEN4 - i;
3977    if (i > PICODSP_COS_TABLE_LEN) {
3978        j = -1;
3979        i = PICODSP_COS_TABLE_LEN2 - i;
3980    }
3981    if (j == 1)
3982        *cs = table[i];
3983    else
3984        *cs = -table[i];
3985
3986    i = k - PICODSP_COS_TABLE_LEN;
3987    if (i < 0)
3988        i = -i;
3989    j = 1;
3990    i &= (PICODSP_COS_TABLE_LEN4 - 1);
3991    if (i > PICODSP_COS_TABLE_LEN2)
3992        i = PICODSP_COS_TABLE_LEN4 - i;
3993    if (i > PICODSP_COS_TABLE_LEN) {
3994        j = -1;
3995        i = PICODSP_COS_TABLE_LEN2 - i;
3996    }
3997    if (j == 1)
3998        *sn = table[i];
3999    else
4000        *sn = -table[i];
4001}/*get_trig*/
4002
4003/**
4004 * function to be documented
4005 * @param    sig_inObj : sig PU internal object of the sub-object
4006 * @return  void
4007 * @callgraph
4008 * @callergraph
4009 */
4010void save_transition_frame(sig_innerobj_t *sig_inObj)
4011{
4012    picoos_int32 *tmp, *tmp2; /*for loop unrolling*/
4013
4014    if (sig_inObj->voiced_p != sig_inObj->prevVoiced_p) {
4015        sig_inObj->VoicTrans = sig_inObj->prevVoiced_p; /*remember last voicing transition*/
4016        tmp = sig_inObj->ImpResp_p;
4017        tmp2 = sig_inObj->imp_p;
4018        FAST_DEVICE(PICODSP_FFTSIZE,*(tmp++)=*(tmp2++););
4019        if (sig_inObj->voiced_p == 1)
4020            sig_inObj->nV = 0;
4021        else
4022            sig_inObj->nU = 0; /*to avoid problems in case of very short voiced or unvoiced parts (less than 4 frames long)*/
4023    }
4024}/*save_transition_frame*/
4025
4026/**
4027 * calculates an unweighted excitation window
4028 * @param    sig_inObj : sig PU internal object of the sub-object
4029 * @param    nextPeak : position of next peak (excitation position)
4030 * @return  PICO_OK
4031 * @callgraph
4032 * @callergraph
4033 * input
4034 * - hop : hop size in samples
4035 * - winlen : excitation window length
4036 * - E : energy
4037 * - F0 : pitch
4038 * - nextPeak : state that remembers next excitation index
4039 * - Fs - sampling frequency
4040 * output
4041 * - LocV, LocU : (MAX_EN size) location of excitation points
4042 * - EnV,  EnU    : (MAX_EN size) RMS values of excitation (scaled)
4043 * - nV, nU :    (integers) number of excitation points
4044 * - nextPeak    new position of lastPeak to calculate next frame
4045 */
4046static void get_simple_excitation(sig_innerobj_t *sig_inObj,
4047        picoos_int16 *nextPeak)
4048{
4049    /*Define local variables*/
4050    picoos_int16 nI, nJ, k;
4051    /* picoos_single    InvSqrt3=(picoos_single)2/(picoos_single)sqrt(3.0); *//*constant*/
4052    picoos_int32 Ti, sqrtTi;
4053    picoos_int16 hop, winlen, Fs;
4054    picoos_single E, F0;
4055    picoos_int16 voiced;
4056    picoos_single fact; /*normalization factor*/
4057    picoos_single rounding = 0.5f;
4058
4059    /*Link local variables to sig object*/
4060    hop = sig_inObj->hop_p;
4061    winlen = sig_inObj->m2_p;
4062    Fs = sig_inObj->Fs_p;
4063    E = sig_inObj->E_p;
4064    F0 = sig_inObj->F0_p;
4065    voiced = sig_inObj->voiced_p;
4066
4067    E = (E > 5) ? 9 : (E > 1) ? 2 * E - 1 : E;
4068
4069
4070    /* shift previous excitation window by hop samples*/
4071    for (nI = 0; nI < sig_inObj->nV; nI++) {
4072        sig_inObj->LocV[nI] = sig_inObj->LocV[nI] - hop;
4073    }
4074    for (nI = 0; nI < sig_inObj->nU; nI++) {
4075        sig_inObj->LocU[nI] = sig_inObj->LocU[nI] - hop;
4076    }
4077
4078    /*get rid of the voiced points that fall out of the interval*/
4079    nI = 0;
4080    while ((sig_inObj->LocV[nI] < 0) && nI < sig_inObj->nV)
4081        nI++;
4082
4083    for (nJ = nI; nJ < sig_inObj->nV; nJ++) {
4084        sig_inObj->LocV[nJ - nI] = sig_inObj->LocV[nJ];
4085        sig_inObj->EnV[nJ - nI] = sig_inObj->EnV[nJ];
4086    }
4087    sig_inObj->nV -= nI;
4088    /*get rid of the unvoiced points that fall out of the interval */
4089    nI = 0;
4090    while ((sig_inObj->LocU[nI] < 0) && nI < sig_inObj->nU)
4091        nI++;
4092
4093    for (nJ = nI; nJ < sig_inObj->nU; nJ++) {
4094        sig_inObj->LocU[nJ - nI] = sig_inObj->LocU[nJ];
4095        sig_inObj->EnU[nJ - nI] = sig_inObj->EnU[nJ];
4096    }
4097    sig_inObj->nU -= nI;
4098
4099    *nextPeak -= hop;
4100    k = *nextPeak;
4101
4102    fact = 3;
4103    if (voiced == 0) { /*Unvoiced*/
4104
4105        Ti = (picoos_int32) (rounding + (picoos_single) Fs
4106                / (picoos_single) sig_inObj->Fuv_p); /* round Period*/
4107        sqrtTi = (picoos_int32) (E * sqrt((double) Fs
4108                / (hop * sig_inObj->Fuv_p)) * fact * PICODSP_GETEXC_K1);
4109        while (k < winlen) {
4110            if (k < winlen) {
4111                sig_inObj->LocU[sig_inObj->nU] = k;
4112                sig_inObj->EnU[sig_inObj->nU] = sqrtTi;
4113                sig_inObj->nU++;
4114                k += (picoos_int16) Ti;
4115            }
4116        }
4117    } else { /*Voiced*/
4118        Ti
4119                = (picoos_int32) (rounding + (picoos_single) Fs
4120                        / (picoos_single) F0); /*Period*/
4121        sqrtTi = (picoos_int32) (E
4122                * sqrt((double) Fs / (hop * sig_inObj->F0_p)) * fact
4123                * PICODSP_GETEXC_K1);
4124        while (k < winlen) {
4125            sig_inObj->LocV[sig_inObj->nV] = k;
4126            sig_inObj->EnV[sig_inObj->nV] = sqrtTi;
4127            sig_inObj->nV++;
4128            k += (picoos_int16) Ti;
4129        }
4130    }
4131    *nextPeak = k;
4132
4133}/*get_simple_excitation*/
4134
4135#ifdef __cplusplus
4136}
4137#endif
4138
4139/* end picosig2.c */
4140