/*
 * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/**
 * @file picosig2.c
 *
 * Signal Generation PU - Internal functions - Implementation
 *
 * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
 * All rights reserved.
 *
 * History:
 * - 2009-04-20 -- initial version
 *
 */
#include "picoos.h"
#include "picodsp.h"
#include "picosig2.h"
#include "picofftsg.h"

#ifdef __cplusplus
extern "C" {
#endif
#if 0
}
#endif
/*---------------------------------------------------------------------------
 * INTERNAL FUNCTIONS DECLARATION
 *---------------------------------------------------------------------------*/
static void gen_hann2(sig_innerobj_t *sig_inObj);
static void get_simple_excitation(sig_innerobj_t *sig_inObj,
        picoos_int16 *nextPeak);
static void enh_wind_init(sig_innerobj_t *sig_inObj);
static void init_rand(sig_innerobj_t *sig_inObj);
static void get_trig(picoos_int32 ang, picoos_int32 *table, picoos_int32 *cs,
        picoos_int32 *sn);

/*---------------------------------------------------------------------------
 * PICO SYSTEM FUNCTIONS
 *---------------------------------------------------------------------------*/
/**
 * allocation of DSP memory for SIG PU
 * @param   mm : memory manager
 * @param   sig_inObj : sig PU internal object of the sub-object
 * @return  PICO_OK : allocation successful
 * @return  PICO_ERR_OTHER : allocation NOT successful
 * @callgraph
 * @callergraph
 */
pico_status_t sigAllocate(picoos_MemoryManager mm, sig_innerobj_t *sig_inObj)
{
    picoos_int16 *data_i;
    picoos_int32 *d32;
    picoos_int32 nCount;

    sig_inObj->int_vec22 =
    sig_inObj->int_vec23 =
    sig_inObj->int_vec24 =
    sig_inObj->int_vec25 =
    sig_inObj->int_vec26 =
    sig_inObj->int_vec28 =
    sig_inObj->int_vec29 =
    sig_inObj->int_vec38 =
    sig_inObj->int_vec30 =
    sig_inObj->int_vec31 =
    sig_inObj->int_vec32 =
    sig_inObj->int_vec33 =
    sig_inObj->int_vec34 =
    sig_inObj->int_vec35 =
    sig_inObj->int_vec36 =
    sig_inObj->int_vec37 =
    sig_inObj->int_vec38 =
    sig_inObj->int_vec39 =
    sig_inObj->int_vec40 = NULL;

    sig_inObj->sig_vec1 = NULL;

    sig_inObj->idx_vect1 = sig_inObj->idx_vect2 = sig_inObj->idx_vect4 = NULL;
    sig_inObj->idx_vect5 = sig_inObj->idx_vect6 = sig_inObj->idx_vect7 =
    sig_inObj->idx_vect8 = sig_inObj->idx_vect9 = NULL;
    sig_inObj->ivalue17 = sig_inObj->ivalue18 = 0;

    /*-----------------------------------------------------------------
     * Memory allocations
     * NOTE : it would be far better to do a single allocation
     *          and to do pointer initialization inside this routine
     * ------------------------------------------------------------------*/
    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
            * PICODSP_FFTSIZE);
    if (NULL == data_i) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->idx_vect1 = data_i;

    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
            * PICODSP_HFFTSIZE_P1);
    if (NULL == data_i) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->idx_vect2 = data_i;

    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
            * PICODSP_FFTSIZE);
    if (NULL == data_i) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->idx_vect4 = data_i;

    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
            * PICODSP_FFTSIZE);
    if (NULL == data_i) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->idx_vect5 = data_i;

    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
            * PICODSP_FFTSIZE);
    if (NULL == data_i) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->idx_vect6 = data_i;

    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
            * PICODSP_HFFTSIZE_P1);
    if (NULL == data_i) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->idx_vect7 = data_i;

    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
            * PICODSP_MAX_EX);
    if (NULL == data_i) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->idx_vect8 = data_i;

    data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16)
            * PICODSP_MAX_EX);
    if (data_i == NULL) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->idx_vect9 = data_i;

    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_FFTSIZE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec22 = d32;
    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_FFTSIZE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec23 = d32;
    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_FFTSIZE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec24 = d32;
    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_FFTSIZE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec25 = d32;
    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_FFTSIZE * 2);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec26 = d32;

    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_FFTSIZE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec28 = d32;
    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_FFTSIZE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec29 = d32;
    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_FFTSIZE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec38 = d32;
    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_FFTSIZE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec30 = d32;
    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_FFTSIZE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec31 = d32;

    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_FFTSIZE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec32 = d32;
    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_FFTSIZE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec33 = d32;
    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_N_RAND_TABLE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec34 = d32;
    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_N_RAND_TABLE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec35 = d32;
    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_N_RAND_TABLE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec36 = d32;
    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_N_RAND_TABLE);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec37 = d32;

    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_HFFTSIZE_P1);
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec39 = d32;
    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) * (1
            + PICODSP_COS_TABLE_LEN));
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->int_vec40 = d32;

    for (nCount = 0; nCount < CEPST_BUFF_SIZE; nCount++) {
        d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) * (PICODSP_CEPORDER));
        if (NULL == d32) {
            sigDeallocate(mm, sig_inObj);
            return PICO_ERR_OTHER;
        }
        sig_inObj->int_vec41[nCount] = d32;
    }

    for (nCount = 0; nCount < PHASE_BUFF_SIZE; nCount++) {
        d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) * (PICODSP_PHASEORDER));
        if (NULL == d32) {
            sigDeallocate(mm, sig_inObj);
            return PICO_ERR_OTHER;
        }
        sig_inObj->int_vec42[nCount] = d32;
    }

    d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32)
            * PICODSP_FFTSIZE * 2); /* - fixed point */
    if (NULL == d32) {
        sigDeallocate(mm, sig_inObj);
        return PICO_ERR_OTHER;
    }
    sig_inObj->sig_vec1 = d32;

    return PICO_OK;
}/*sigAllocate*/

/**
 * frees DSP memory for SIG PU
 * @param   mm : memory manager
 * @param   sig_inObj : sig PU internal object of the sub-object
 * @return  void
 * @callgraph
 * @callergraph
 */
void sigDeallocate(picoos_MemoryManager mm, sig_innerobj_t *sig_inObj)
{
    picoos_int32 nCount;
    /*-----------------------------------------------------------------
     * Memory de-allocations
     * ------------------------------------------------------------------*/
    if (NULL != sig_inObj->idx_vect1)
        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect1));
    if (NULL != sig_inObj->idx_vect2)
        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect2));
    if (NULL != sig_inObj->idx_vect4)
        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect4));
    if (NULL != sig_inObj->idx_vect5)
        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect5));
    if (NULL != sig_inObj->idx_vect6)
        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect6));
    if (NULL != sig_inObj->idx_vect7)
        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect7));
    if (NULL != sig_inObj->idx_vect8)
        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect8));
    if (NULL != sig_inObj->idx_vect9)
        picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect9));

    if (NULL != sig_inObj->int_vec22)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec22));
    if (NULL != sig_inObj->int_vec23)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec23));
    if (NULL != sig_inObj->int_vec24)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec24));
    if (NULL != sig_inObj->int_vec25)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec25));
    if (NULL != sig_inObj->int_vec26)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec26));
    if (NULL != sig_inObj->int_vec28)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec28));
    if (NULL != sig_inObj->int_vec29)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec29));
    if (NULL != sig_inObj->int_vec38)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec38));
    if (NULL != sig_inObj->int_vec30)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec30));
    if (NULL != sig_inObj->int_vec31)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec31));
    if (NULL != sig_inObj->int_vec32)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec32));
    if (NULL != sig_inObj->int_vec33)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec33));
    if (NULL != sig_inObj->int_vec34)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec34));
    if (NULL != sig_inObj->int_vec35)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec35));
    if (NULL != sig_inObj->int_vec36)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec36));
    if (NULL != sig_inObj->int_vec37)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec37));
    if (NULL != sig_inObj->int_vec39)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec39));
    if (NULL != sig_inObj->int_vec40)
        picoos_deallocate(mm, (void *) &(sig_inObj->int_vec40));

    for (nCount = 0; nCount < CEPST_BUFF_SIZE; nCount++) {
        if (NULL != sig_inObj->int_vec41[nCount]) {
            picoos_deallocate(mm, (void *) &(sig_inObj->int_vec41[nCount]));
        }
    }

    for (nCount = 0; nCount < PHASE_BUFF_SIZE; nCount++) {
        if (NULL != sig_inObj->int_vec42[nCount]) {
            picoos_deallocate(mm, (void *) &(sig_inObj->int_vec42[nCount]));
        }
    }

    if (NULL != sig_inObj->sig_vec1) {
        picoos_deallocate(mm, (void *) &(sig_inObj->sig_vec1));
    }
}/*sigDeAllocate*/

/**
 * initializes all memory neededed by DSP at instance creation time
 * @param   sig_inObj : sig PU internal object of the sub-object
 * @return  void
 * @callgraph
 * @callergraph
 */
void sigDspInitialize(sig_innerobj_t *sig_inObj)
{
    picoos_int32 i, j;
    picoos_int32 *pnt;

    /*-----------------------------------------------------------------
     * Initialization
     * ------------------------------------------------------------------*/
    sig_inObj->warp_p = PICODSP_FREQ_WARP_FACT;
    sig_inObj->VCutoff_p = PICODSP_V_CUTOFF_FREQ; /*voicing cut off frequency in Hz (will be modeled in the future)*/
    sig_inObj->UVCutoff_p = PICODSP_UV_CUTOFF_FREQ;/*unvoiced frames only (periodize lowest components to mask bad voicing transitions)*/
    sig_inObj->Fs_p = PICODSP_SAMP_FREQ; /*Sampling freq*/

    sig_inObj->m1_p = PICODSP_CEPORDER;
    sig_inObj->m2_p = PICODSP_FFTSIZE; /*also initializes windowLen*/
    sig_inObj->framesz_p = PICODSP_DISPLACE; /*1/4th of the frame size = displacement*/
    sig_inObj->hfftsize_p = PICODSP_H_FFTSIZE; /*half of the FFT size*/
    sig_inObj->voxbnd_p = (picoos_int32) ((picoos_single) sig_inObj->hfftsize_p
            / ((picoos_single) sig_inObj->Fs_p / (picoos_single) 2)
            * (picoos_single) sig_inObj->VCutoff_p);
    sig_inObj->voxbnd2_p
            = (picoos_int32) ((picoos_single) sig_inObj->hfftsize_p
                    / ((picoos_single) sig_inObj->Fs_p / (picoos_single) 2)
                    * (picoos_single) sig_inObj->UVCutoff_p);
    sig_inObj->hop_p = sig_inObj->framesz_p;
    sig_inObj->nextPeak_p = (((int) (PICODSP_FFTSIZE))
            / ((int) PICODSP_DISPLACE) - 1) * sig_inObj->hop_p;
    sig_inObj->phId_p = 0; /*phonetic id*/
    sig_inObj->E_p = (picoos_single) 0.0f;
    sig_inObj->F0_p = (picoos_single) 0.0f;
    sig_inObj->voiced_p = 0;
    sig_inObj->nV = sig_inObj->nU = 0;
    sig_inObj->sMod_p = (picoos_single) 1.0f;

    /*cleanup vectors*/
    for (i = 0; i < 2 * PICODSP_FFTSIZE; i++) {
        sig_inObj->sig_vec1[i] = 0;
        sig_inObj->int_vec26[i] = 0; /*wav buff cleanup */
    }

    for (i = 0; i < PICODSP_FFTSIZE; i++) {
        sig_inObj->idx_vect1[i] = sig_inObj->idx_vect4[i]
                = sig_inObj->idx_vect5[i] = sig_inObj->idx_vect6[i] = 0;
        sig_inObj->int_vec32[i] = sig_inObj->int_vec33[i] = 0;
    }

    for (i = 0; i < PICODSP_HFFTSIZE_P1; i++) {
        sig_inObj->idx_vect2[i] = (picoos_int16) 0;
    }

    for (i = 0; i < CEPST_BUFF_SIZE; i++) {
        sig_inObj->F0Buff[i]=0;
        sig_inObj->PhIdBuff[i]=0;
        sig_inObj->VoicingBuff[i]=0;
        sig_inObj->FuVBuff[i]=0;
        if (NULL != sig_inObj->CepBuff[i]) {
            pnt = sig_inObj->CepBuff[i];
            for (j = 0; j < PICODSP_CEPORDER; j++) {
                pnt[j] = 0;
            }
        }
    }

    for (i = 0; i < PHASE_BUFF_SIZE; i++) {
        if (NULL != sig_inObj->int_vec42[i]) {
            pnt = sig_inObj->int_vec42[i];
            for (j = 0; j < PICODSP_PHASEORDER; j++) {
                pnt[j] = 0;
            }
        }
    }
    sig_inObj->n_available=0;
    /*---------------------------------------------
     Init    formant enhancement window
     hanning window,
     Post Filter Hermite's interpolator Matrix
     Mel-2-Lin lookup tables
     ---------------------------------------------*/
    enh_wind_init(sig_inObj); /*creates the formant enhancement window*/
    init_rand(sig_inObj);
    gen_hann2(sig_inObj);
    mel_2_lin_init(sig_inObj);

}/*sigDspInitialize*/

/*-------------------------------------------------------------------------------
 PROCESSING FUNCTIONS : CALLED WITHIN sigStep (cfr. picosig.c)
 --------------------------------------------------------------------------------*/
/**
 * convert from mel scale to linear scale
 * @param   sig_inObj : sig PU internal object of the sub-object
 * @param   scmeanMGC : mean value of the MGC
 * @return  void
 * @callgraph
 * @callergraph
 * @remarks translated from matlab code to c-code
 * Input
 * - c1 : input mfcc vector (ceporder=m1, real)
 * - m1 : input order
 * - A,B,D : lookup tables
 * - m2 : output order
 * - Xr,Xi (m2=FFT size, real) temporary arrays for FFT
 * - WNr,WNi (m2=FFT size, real) cos and sin precalculated tables
 * Output
 * - Xr (m2=FFT size, real) linear cepstral vector
 */
void mel_2_lin_lookup(sig_innerobj_t *sig_inObj, picoos_uint32 scmeanMGC)
{
    /*Local vars*/
    picoos_int16 nI, k;
    picoos_int32 delta, term1, term2;

    /*Local vars to be linked with sig data object*/
    picoos_int32 *c1, *XXr;
    picoos_single K1;
    picoos_int32 *D, K2, shift;
    picoos_int16 m1, *A, m2, m4, voiced, i;

    /*Link local variables with sig data object*/
    c1 = sig_inObj->wcep_pI;
    m1 = sig_inObj->m1_p;
    m2 = PICODSP_FFTSIZE;
    m4 = m2 >> 1;

    A = sig_inObj->A_p;
    D = sig_inObj->d_p;

    XXr = sig_inObj->wcep_pI;
    voiced = sig_inObj->voiced_p;

    shift = 27 - scmeanMGC;
    K2 = 1 << shift;
    K1 = (picoos_single) PICODSP_START_FLOAT_NORM * K2;
    XXr[0] = (picoos_int32) ((picoos_single) c1[0] * K1);
    for (nI = 1; nI < m1; nI++) {
        XXr[nI] = c1[nI] << shift;
    }
    i = sizeof(picoos_int32) * (PICODSP_FFTSIZE + 1 - m1);
    picoos_mem_set(XXr + m1, 0, i);
    dfct_nmf(m4, XXr); /* DFCT directly in fixed point */

    /* *****************************************************************************************
     Linear frequency scale envelope through interpolation.
     Two additions and one multiplication per entry.

     Optimization of linear interpolation algorithm
     - Start from 1 and stop at PICODSP_H_FFTSIZE-1 because 0 and PICODSP_H_FFTSIZE are invariant points
     - B[k]=A[k]+1 except for 0 and PICODSP_H_FFTSIZE
     - get rid of extra -1 operation by adapting the table A[]

     *******************************************************************************************/
    for (nI = 1; nI < PICODSP_H_FFTSIZE; nI++) {
        k = A[nI];
        term2 = XXr[k];
        term1 = XXr[k + 1];
        delta = term1 - term2;
        XXr[nI] = term2 + ((D[nI] * delta) >> 5); /* ok because nI<=A[nI] <=B[nI] */
    }
}/*mel_2_lin_lookup*/

/**
 * calculate phase
 * @remarks voiced phase taken from phase codebook and smoothed,
 * @remarks unvoiced phase - random
 * @param   sig_inObj : sig PU internal object of the sub-object
 * @return  void
 * @callgraph
 * @callergraph
 */
void phase_spec2(sig_innerobj_t *sig_inObj)
{
    picoos_int16 nI, iRand, firstUV;
    picoos_int32 *tmp1, *tmp2;
    picoos_int16 VOXBND_M1;
    picoos_int32 *spect, *ang;
    picoos_int16 voiced, m2;
    picoos_int32 *co, *so, *c, *s, voxbnd, voxbnd2;
    picoos_int16 i,j, k, n_comp;
    picoos_int16 *Pvoxbnd;
    picoos_int32 *phs_p2, *phs_p1, *phs_n1, *phs_n2;
    picoos_int32 *phs;

    /*Link local variables to sig data object*/
    spect = sig_inObj->wcep_pI; /* spect_p;*/
    /* current spect scale : times PICODSP_FIX_SCALE1 */
    ang = sig_inObj->ang_p;
    voxbnd = (picoos_int32) (sig_inObj->voxbnd_p * sig_inObj->voicing);
    voxbnd2 = sig_inObj->voxbnd2_p;
    voiced = sig_inObj->voiced_p;
    m2 = sig_inObj->m2_p;
    VOXBND_M1 = voxbnd - 1;
    firstUV = 1;

    /*code starts here*/
    if (voiced == 1) {
        firstUV = voxbnd;
        Pvoxbnd =  sig_inObj->VoxBndBuff;
        n_comp   = Pvoxbnd[2];
        phs_p2 = sig_inObj->PhsBuff[0];
        phs_p1 = sig_inObj->PhsBuff[1];
        phs    = sig_inObj->PhsBuff[2];
        phs_n1 = sig_inObj->PhsBuff[3];
        phs_n2 = sig_inObj->PhsBuff[4];

        /* find and smooth components which have full context */
        j = n_comp;
        for (i=0; i<5; i++) {
            if (Pvoxbnd[i]<j) j = Pvoxbnd[i];
        }
        for (i=0; i<j; i++) {
            ang[i] = -(((phs_p2[i]+phs_p1[i]+phs[i]+phs_n1[i]+phs_n2[i])<<6) / 5);
        }

        /* find and smooth components which at least one component on each side */
        k = n_comp;
        if (Pvoxbnd[2]<k) k = Pvoxbnd[2];
        if (Pvoxbnd[4]<k) k = Pvoxbnd[4];
        for (i=j; i<k; i++) {  /* smooth using only two surrounding neighbours */
                ang[i] = -(((phs_p1[i]+phs[i]+phs_n1[i])<<6) / 3);
        }

        /* handle rest of components - at least one side does not exist */
        for (i=k; i<n_comp; i++) {
            ang[i] = -(phs[i]<<6); /* - simple copy without smoothing */
        }

        /*Phase unwrap - cumsum */
        tmp1 = &(ang[1]);
        tmp2 = &(ang[0]);
        /* current ang scale : PICODSP_M_PI = PICODSP_FIX_SCALE2 */
        FAST_DEVICE(VOXBND_M1,*(tmp1++)+=*(tmp2)-PICODSP_FIX_SCALE2;*(tmp2)=(*tmp2>=0)?(*tmp2)>>PICODSP_SHIFT_FACT4:-((-(*tmp2))>>PICODSP_SHIFT_FACT4);tmp2++);
        *tmp2 = (*tmp2 >= 0) ? (*tmp2) >> PICODSP_SHIFT_FACT4 : -((-(*tmp2))
                >> PICODSP_SHIFT_FACT4); /*ang[voxbnd-1]/=2;*/
    }

    /* now for the unvoiced part */
    iRand = sig_inObj->iRand;
    c = sig_inObj->randCosTbl + iRand;
    s = sig_inObj->randSinTbl + iRand;
    co = sig_inObj->outCosTbl + firstUV;
    so = sig_inObj->outSinTbl + firstUV;
    for (nI = firstUV; nI < PICODSP_HFFTSIZE_P1 - 1; nI++) {
        *co++ = *c++;
        *so++ = *s++;
    }
    *co = 1;
    *so = 0;
    sig_inObj->iRand += (PICODSP_HFFTSIZE_P1 - firstUV);
    if (sig_inObj->iRand > PICODSP_N_RAND_TABLE - PICODSP_HFFTSIZE_P1)
        sig_inObj->iRand = 1 + sig_inObj->iRand + PICODSP_HFFTSIZE_P1
            - PICODSP_N_RAND_TABLE;
}/*phase_spec2*/

/**
 * Prepare Envelope spectrum for inverse FFT
 * @param   sig_inObj : sig PU internal object of the sub-object
 * @return  void
 * @remarks make phase bilateral -->> angh (FFT size, real)
 * @remarks combine in complex input vector for IFFT F = e**(spet/2+j*ang)
 * @remarks Compute energy -->> E (scalar, real)
 * @callgraph
 * @callergraph
 * Input
 * - spect (FFT size, real)
 * - ang (half FFT size -1, real)
 * - m2    fftsize
 *  - WNr,WNi (FFT size, real) the tabulated sine and cosine values
 *  - brev (FFT size, real) the tabulated bit reversal indexes
 * Output
 * - Fr, Fi (FFT size, complex) the envelope spectrum
 * - E (scalar, real) the energy
 */
void env_spec(sig_innerobj_t *sig_inObj)
{

    picoos_int16 nI;
    picoos_int32 fcX, fsX, fExp, voxbnd;
    picoos_int32 *spect, *ang, *ctbl;
    picoos_int16 voiced, prev_voiced;
    picoos_int32 *co, *so;
    picoos_int32 *Fr, *Fi;
    picoos_single mult;

    /*Link local variables to sig object*/
    spect = sig_inObj->wcep_pI; /*spect_p*/
    /*  current spect scale : times PICODSP_FIX_SCALE1 */
    ang = sig_inObj->ang_p;
    /*  current spect scale : PICODSP_M_PI =  PICODSP_FIX_SCALE2 */
    Fr = sig_inObj->F2r_p;
    Fi = sig_inObj->F2i_p;
    voiced = sig_inObj->voiced_p;
    prev_voiced = sig_inObj->prevVoiced_p;
    voxbnd = (picoos_int32) (sig_inObj->voxbnd_p * sig_inObj->voicing);
    ctbl = sig_inObj->cos_table;
    /*  ctbl scale : times 4096 */
    mult = PICODSP_ENVSPEC_K1 / PICODSP_FIX_SCALE1;

    /*remove dc from real part*/
    if (sig_inObj->F0_p > 120) {
        spect[0] = spect[1] = 0;
        spect[2] /= PICODSP_ENVSPEC_K2;
    } else {
        spect[0] = 0;
    }

    /* if using rand table, use sin and cos tables as well */
    if (voiced || (prev_voiced)) {
        /*Envelope becomes a complex exponential : F=exp(.5*spect + j*angh);*/
        for (nI = 0; nI < voxbnd; nI++) {
            get_trig(ang[nI], ctbl, &fcX, &fsX);
            fExp = (picoos_int32) EXP((double)spect[nI]*mult);
            Fr[nI] = fExp * fcX;
            Fi[nI] = fExp * fsX;
        }
        /*         ao=sig_inObj->ang_p+(picoos_int32)voxbnd; */
        co = sig_inObj->outCosTbl + voxbnd;
        so = sig_inObj->outSinTbl + voxbnd;

        for (nI = voxbnd; nI < PICODSP_HFFTSIZE_P1; nI++) {
            fcX = *co++;
            fsX = *so++;
            fExp = (picoos_int32) EXP((double)spect[nI]*mult);
            Fr[nI] = fExp * fcX;
            Fi[nI] = fExp * fsX;
        }
    } else {
        /*ao=sig_inObj->ang_p+1;*/
        co = sig_inObj->outCosTbl + 1;
        so = sig_inObj->outSinTbl + 1;
        for (nI = 1; nI < PICODSP_HFFTSIZE_P1; nI++) {
            fcX = *co++;
            fsX = *so++;
            fExp = (picoos_int32) EXP((double)spect[nI]*mult);

            Fr[nI] = fExp * fcX;
            Fi[nI] = fExp * fsX;
        }
    }

}/*env_spec*/

/**
 * Calculates the impulse response of the comlpex spectrum through inverse rFFT
 * @param   sig_inObj : sig PU internal object of the sub-object
 * @return  void
 * @remarks Imp corresponds with the real part of the FFT
 * @callgraph
 * @callergraph
 * Input
 * - Fr, Fi (FFT size, real & imaginary) the complex envelope spectrum (only first half of spectrum)
 * Output
 * - Imp: impulse response (length: m2)
 * - E (scalar, real) RMS value
 */
void impulse_response(sig_innerobj_t *sig_inObj)
{
    /*Define local variables*/
    picoos_single f;
    picoos_int16 nI, nn, m2, m4, voiced;
    picoos_single *E;
    picoos_int32 *norm_window; /* - fixed point */
    picoos_int32 *fr, *Fr, *Fi, *t1, ff; /* - fixed point */

    /*Link local variables with sig object*/
    m2 = sig_inObj->m2_p;
    m4 = m2 >> 1;
    Fr = sig_inObj->F2r_p;
    Fi = sig_inObj->F2i_p;
    norm_window = sig_inObj->norm_window_p;
    E = &(sig_inObj->E_p); /*as pointer: value will be modified*/
    voiced = sig_inObj->voiced_p;
    fr = sig_inObj->imp_p;

    /*Inverse FFT*/
    for (nI = 0, nn = 0; nI < m4; nI++, nn += 2) {
        fr[nn] = Fr[nI]; /* - fixed point */
    }

    fr[1] = (picoos_int32) (Fr[m4]);
    for (nI = 1, nn = 3; nI < m4; nI++, nn += 2) {
        fr[nn] = -Fi[nI]; /* - fixed point */
    }

    rdft(m2, -1, fr);
    /*window, normalize and differentiate*/
    *E = norm_result(m2, fr, norm_window);

    if (*E > 0)
        f = *E * PICODSP_FIXRESP_NORM;
    else
        f = 20; /*PICODSP_FIXRESP_NORM*/
    ff = (picoos_int32) f;
    if (ff < 1)
        ff = 1;
    /*normalize impulse response*/
    t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,*(t1++) /= ff;); /* - fixed point */

} /* impulse_response */

/**
 * time domain pitch synchronous overlap add over two frames (when no voicing transition)
 * @param    sig_inObj : sig PU internal object of the sub-object
 * @return  void
 * @remarks Special treatment at voicing boundaries
 * @remarks Introduced to get rid of time-domain aliasing (and additional speed up)
 * @callgraph
 * @callergraph
 */
void td_psola2(sig_innerobj_t *sig_inObj)
{
    picoos_int16 nI;
    picoos_int16 hop, m2, *nextPeak, voiced;
    picoos_int32 *t1, *t2;
    picoos_int16 cnt;
    picoos_int32 *fr, *v1, ff, f;
    picoos_int16 a, i;
    picoos_int32 *window;
    picoos_int16 s = (picoos_int16) 1;
    window = sig_inObj->window_p;

    /*Link local variables with sig object*/
    hop = sig_inObj->hop_p;
    m2 = sig_inObj->m2_p;
    nextPeak = &(sig_inObj->nextPeak_p);
    voiced = sig_inObj->voiced_p;
    fr = sig_inObj->imp_p;
    /*toggle the pointers and initialize signal vector */
    v1 = sig_inObj->sig_vec1;

    t1 = v1;
    FAST_DEVICE(PICODSP_FFTSIZE-PICODSP_DISPLACE,*(t1++)=0;);
    t1 = &(v1[PICODSP_FFTSIZE - PICODSP_DISPLACE]);
    t2 = &(v1[PICODSP_FFTSIZE]);
    FAST_DEVICE(PICODSP_FFTSIZE, *(t1++)=*(t2++););
    t1 = &(v1[2 * PICODSP_FFTSIZE - PICODSP_DISPLACE]);FAST_DEVICE(PICODSP_DISPLACE,*(t1++)=0;);
    /*calculate excitation points*/
    get_simple_excitation(sig_inObj, nextPeak);

    /*TD-PSOLA based on excitation vector */
    if ((sig_inObj->nU == 0) && (sig_inObj->voiced_p == 1)) {
        /* purely voiced */
        for (nI = 0; nI < sig_inObj->nV; nI++) {
            f = sig_inObj->EnV[nI];
            a = 0;
            cnt = PICODSP_FFTSIZE;
            ff = (f * window[sig_inObj->LocV[nI]]) >> PICODSP_SHIFT_FACT1;
            t1 = &(v1[a + sig_inObj->LocV[nI]]);
            t2 = &(fr[a]);
            if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff;);
        }
    } else if ((sig_inObj->nV == 0) && (sig_inObj->voiced_p == 0)) {
        /* PURELY UNVOICED*/
        for (nI = 0; nI < sig_inObj->nU; nI++) {
            f = sig_inObj->EnU[nI];
            s = -s; /*reverse order to reduce the periodicity effect*/
            if (s == 1) {
                a = 0;
                cnt = PICODSP_FFTSIZE;
                ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1;
                t1 = &(v1[a + sig_inObj->LocU[nI]]);
                t2 = &(fr[a]);
                if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff; );
            } else { /*s==-1*/
                a = 0;
                cnt = PICODSP_FFTSIZE;
                ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1;
                t1 = &(v1[(m2 - 1 - a) + sig_inObj->LocU[nI]]);
                t2 = &(fr[a]);
                if (cnt > 0)FAST_DEVICE(cnt,*(t1--)+=*(t2++)*ff; );
            }
        }
    } else if (sig_inObj->VoicTrans == 0) {
        /*voicing transition from unvoiced to voiced*/
        for (nI = 0; nI < sig_inObj->nV; nI++) {
            f = sig_inObj->EnV[nI];
            a = 0;
            cnt = PICODSP_FFTSIZE;
            ff = (f * window[sig_inObj->LocV[nI]]) >> PICODSP_SHIFT_FACT1;
            t1 = &(v1[a + sig_inObj->LocV[nI]]);
            t2 = &(fr[a]);
            if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff;);
        }
        /*add remaining stuff from unvoiced part*/
        for (nI = 0; nI < sig_inObj->nU; nI++) {
            f = sig_inObj->EnU[nI];
            s = -s; /*reverse order to reduce the periodicity effect*/
            if (s == 1) {
                a = 0;
                cnt = PICODSP_FFTSIZE;
                ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1;
                t1 = &(v1[a + sig_inObj->LocU[nI]]);
                t2 = &(sig_inObj->ImpResp_p[a]); /*saved impulse response*/
                if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff; );
            } else {
                a = 0;
                cnt = PICODSP_FFTSIZE;
                ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1;
                t1 = &(v1[(m2 - 1 - a) + sig_inObj->LocU[nI]]);
                t2 = &(sig_inObj->ImpResp_p[a]);
                if (cnt > 0)FAST_DEVICE(cnt,*(t1--)+=*(t2++)*ff; );
            }
        }
    } else {
        /*voiced to unvoiced*/
        for (nI = 0; nI < sig_inObj->nU; nI++) {
            f = sig_inObj->EnU[nI];
            s = -s; /*reverse order to reduce the periodicity effect*/
            if (s > 0) {
                a = 0;
                cnt = PICODSP_FFTSIZE;
                ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1;
                t1 = &(v1[a + sig_inObj->LocU[nI]]);
                t2 = &(fr[a]);
                if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff; );
            } else {
                a = 0;
                cnt = PICODSP_FFTSIZE;
                ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1;
                t1 = &(v1[(m2 - 1 - a) + sig_inObj->LocU[nI]]);
                t2 = &(fr[a]);
                if (cnt > 0)FAST_DEVICE(cnt,*(t1--)+=*(t2++)*ff; );
            }
        }
        /*add remaining stuff from voiced part*/
        for (nI = 0; nI < sig_inObj->nV; nI++) {
            f = sig_inObj->EnV[nI];
            a = 0;
            cnt = PICODSP_FFTSIZE;
            ff = (f * window[sig_inObj->LocV[nI]]) >> PICODSP_SHIFT_FACT1;
            t1 = &(v1[a + sig_inObj->LocV[nI]]);
            t2 = &(sig_inObj->ImpResp_p[a]);
            if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff;);
        }
    }

    t1 = sig_inObj->sig_vec1;
    for (i = 0; i < PICODSP_FFTSIZE; i++, t1++) {
        if (*t1 >= 0)
            *t1 >>= PICODSP_SHIFT_FACT5;
        else
            *t1 = -((-*t1) >> PICODSP_SHIFT_FACT5);
    }

}/*td_psola2*/

/**
 * overlap + add summing of impulse responses on the final destination sample buffer
 * @param    sig_inObj : sig PU internal object of the sub-object
 * @return  void
 * @remarks Special treatment at voicing boundaries
 * @remarks Introduced to get rid of time-domain aliasing (and additional speed up)
 * Input
 * - wlet : the generic impulse response (FFT size, real)
 * - window : the windowing funcion (FFT size, real) fixed
 * - WavBuff : the destination buffer with past samples (FFT size*2, short)
 * - m2 : fftsize
 * Output
 * - WavBuff : the destination buffer with updated samples (FFT size*2, short)
 * @callgraph
 * @callergraph
 */
void overlap_add(sig_innerobj_t *sig_inObj)
{
    /*Local variables*/
    picoos_int32 *w, *v;

    /*Link local variables with sig object*/
    w = sig_inObj->WavBuff_p;
    v = sig_inObj->sig_vec1;

    FAST_DEVICE(PICODSP_FFTSIZE, *(w++)+=*(v++)<<PICODSP_SHIFT_FACT6;);

}/*overlap_add*/

/*-------------------------------------------------------------------------------
 INITIALIZATION AND INTERNAL    FUNCTIONS
 --------------------------------------------------------------------------------*/
/**
 * Hanning window initialization
 * @param    sig_inObj : sig PU internal object of the sub-object
 * @return  PICO_OK
 * @callgraph
 * @callergraph
 */
static void gen_hann2(sig_innerobj_t *sig_inObj)
{
    picoos_int32 *hann;
    picoos_int32 *norm;
    /*link local variables with sig object*/
    hann = sig_inObj->window_p;
    norm = sig_inObj->norm_window_p;

    norm[0] = 80224;
    norm[1] = 320832;
    norm[2] = 721696;
    norm[3] = 1282560;
    norm[4] = 2003104;
    norm[5] = 2882880;
    norm[6] = 3921376;
    norm[7] = 5117984;
    norm[8] = 6471952;
    norm[9] = 7982496;
    norm[10] = 9648720;
    norm[11] = 11469616;
    norm[12] = 13444080;
    norm[13] = 15570960;
    norm[14] = 17848976;
    norm[15] = 20276752;
    norm[16] = 22852864;
    norm[17] = 25575744;
    norm[18] = 28443776;
    norm[19] = 31455264;
    norm[20] = 34608368;
    norm[21] = 37901248;
    norm[22] = 41331904;
    norm[23] = 44898304;
    norm[24] = 48598304;
    norm[25] = 52429696;
    norm[26] = 56390192;
    norm[27] = 60477408;
    norm[28] = 64688944;
    norm[29] = 69022240;
    norm[30] = 73474720;
    norm[31] = 78043744;
    norm[32] = 82726544;
    norm[33] = 87520352;
    norm[34] = 92422272;
    norm[35] = 97429408;
    norm[36] = 102538752;
    norm[37] = 107747248;
    norm[38] = 113051776;
    norm[39] = 118449184;
    norm[40] = 123936224;
    norm[41] = 129509648;
    norm[42] = 135166080;
    norm[43] = 140902192;
    norm[44] = 146714528;
    norm[45] = 152599584;
    norm[46] = 158553904;
    norm[47] = 164573888;
    norm[48] = 170655936;
    norm[49] = 176796448;
    norm[50] = 182991712;
    norm[51] = 189238064;
    norm[52] = 195531744;
    norm[53] = 201868992;
    norm[54] = 208246016;
    norm[55] = 214659040;
    norm[56] = 221104176;
    norm[57] = 227577616;
    norm[58] = 234075488;
    norm[59] = 240593872;
    norm[60] = 247128912;
    norm[61] = 253676688;
    norm[62] = 260233280;
    norm[63] = 266794768;
    norm[64] = 273357248;
    norm[65] = 279916768;
    norm[66] = 286469440;
    norm[67] = 293011360;
    norm[68] = 299538560;
    norm[69] = 306047168;
    norm[70] = 312533312;
    norm[71] = 318993088;
    norm[72] = 325422656;
    norm[73] = 331818144;
    norm[74] = 338175744;
    norm[75] = 344491680;
    norm[76] = 350762176;
    norm[77] = 356983424;
    norm[78] = 363151808;
    norm[79] = 369263520;
    norm[80] = 375315008;
    norm[81] = 381302592;
    norm[82] = 387222720;
    norm[83] = 393071872;
    norm[84] = 398846528;
    norm[85] = 404543232;
    norm[86] = 410158560;
    norm[87] = 415689216;
    norm[88] = 421131840;
    norm[89] = 426483200;
    norm[90] = 431740096;
    norm[91] = 436899392;
    norm[92] = 441958016;
    norm[93] = 446912928;
    norm[94] = 451761152;
    norm[95] = 456499840;
    norm[96] = 461126080;
    norm[97] = 465637152;
    norm[98] = 470030400;
    norm[99] = 474303104;
    norm[100] = 478452800;
    norm[101] = 482476960;
    norm[102] = 486373184;
    norm[103] = 490139200;
    norm[104] = 493772640;
    norm[105] = 497271424;
    norm[106] = 500633440;
    norm[107] = 503856704;
    norm[108] = 506939200;
    norm[109] = 509879168;
    norm[110] = 512674880;
    norm[111] = 515324544;
    norm[112] = 517826688;
    norm[113] = 520179776;
    norm[114] = 522382368;
    norm[115] = 524433184;
    norm[116] = 526331008;
    norm[117] = 528074688;
    norm[118] = 529663200;
    norm[119] = 531095552;
    norm[120] = 532370944;
    norm[121] = 533488576;
    norm[122] = 534447808;
    norm[123] = 535248000;
    norm[124] = 535888768;
    norm[125] = 536369664;
    norm[126] = 536690432;
    norm[127] = 536850880;
    norm[128] = 536850880;
    norm[129] = 536690432;
    norm[130] = 536369664;
    norm[131] = 535888768;
    norm[132] = 535248000;
    norm[133] = 534447808;
    norm[134] = 533488576;
    norm[135] = 532370944;
    norm[136] = 531095552;
    norm[137] = 529663200;
    norm[138] = 528074688;
    norm[139] = 526331008;
    norm[140] = 524433216;
    norm[141] = 522382368;
    norm[142] = 520179776;
    norm[143] = 517826688;
    norm[144] = 515324544;
    norm[145] = 512674880;
    norm[146] = 509879168;
    norm[147] = 506939200;
    norm[148] = 503856704;
    norm[149] = 500633472;
    norm[150] = 497271424;
    norm[151] = 493772672;
    norm[152] = 490139200;
    norm[153] = 486373184;
    norm[154] = 482476992;
    norm[155] = 478452800;
    norm[156] = 474303104;
    norm[157] = 470030400;
    norm[158] = 465637184;
    norm[159] = 461126080;
    norm[160] = 456499840;
    norm[161] = 451761152;
    norm[162] = 446912960;
    norm[163] = 441958016;
    norm[164] = 436899424;
    norm[165] = 431740096;
    norm[166] = 426483200;
    norm[167] = 421131840;
    norm[168] = 415689216;
    norm[169] = 410158560;
    norm[170] = 404543232;
    norm[171] = 398846528;
    norm[172] = 393071872;
    norm[173] = 387222720;
    norm[174] = 381302592;
    norm[175] = 375315008;
    norm[176] = 369263552;
    norm[177] = 363151808;
    norm[178] = 356983456;
    norm[179] = 350762176;
    norm[180] = 344491712;
    norm[181] = 338175776;
    norm[182] = 331818144;
    norm[183] = 325422656;
    norm[184] = 318993088;
    norm[185] = 312533312;
    norm[186] = 306047168;
    norm[187] = 299538560;
    norm[188] = 293011360;
    norm[189] = 286469472;
    norm[190] = 279916800;
    norm[191] = 273357248;
    norm[192] = 266794784;
    norm[193] = 260233280;
    norm[194] = 253676688;
    norm[195] = 247128928;
    norm[196] = 240593888;
    norm[197] = 234075488;
    norm[198] = 227577632;
    norm[199] = 221104192;
    norm[200] = 214659040;
    norm[201] = 208246032;
    norm[202] = 201868992;
    norm[203] = 195531744;
    norm[204] = 189238080;
    norm[205] = 182991728;
    norm[206] = 176796448;
    norm[207] = 170655952;
    norm[208] = 164573888;
    norm[209] = 158553920;
    norm[210] = 152599600;
    norm[211] = 146714528;
    norm[212] = 140902208;
    norm[213] = 135166096;
    norm[214] = 129509648;
    norm[215] = 123936240;
    norm[216] = 118449184;
    norm[217] = 113051776;
    norm[218] = 107747248;
    norm[219] = 102538752;
    norm[220] = 97429424;
    norm[221] = 92422288;
    norm[222] = 87520352;
    norm[223] = 82726544;
    norm[224] = 78043744;
    norm[225] = 73474736;
    norm[226] = 69022240;
    norm[227] = 64688944;
    norm[228] = 60477424;
    norm[229] = 56390192;
    norm[230] = 52429696;
    norm[231] = 48598304;
    norm[232] = 44898304;
    norm[233] = 41331904;
    norm[234] = 37901248;
    norm[235] = 34608384;
    norm[236] = 31455264;
    norm[237] = 28443792;
    norm[238] = 25575744;
    norm[239] = 22852864;
    norm[240] = 20276752;
    norm[241] = 17848976;
    norm[242] = 15570960;
    norm[243] = 13444080;
    norm[244] = 11469616;
    norm[245] = 9648720;
    norm[246] = 7982512;
    norm[247] = 6471952;
    norm[248] = 5117984;
    norm[249] = 3921376;
    norm[250] = 2882880;
    norm[251] = 2003104;
    norm[252] = 1282560;
    norm[253] = 721696;
    norm[254] = 320832;
    norm[255] = 80224;
    hann[0] = 0;
    hann[1] = 0;
    hann[2] = 1;
    hann[3] = 2;
    hann[4] = 3;
    hann[5] = 5;
    hann[6] = 7;
    hann[7] = 9;
    hann[8] = 12;
    hann[9] = 15;
    hann[10] = 18;
    hann[11] = 21;
    hann[12] = 25;
    hann[13] = 29;
    hann[14] = 34;
    hann[15] = 38;
    hann[16] = 43;
    hann[17] = 48;
    hann[18] = 54;
    hann[19] = 59;
    hann[20] = 66;
    hann[21] = 72;
    hann[22] = 78;
    hann[23] = 85;
    hann[24] = 92;
    hann[25] = 100;
    hann[26] = 107;
    hann[27] = 115;
    hann[28] = 123;
    hann[29] = 131;
    hann[30] = 140;
    hann[31] = 148;
    hann[32] = 157;
    hann[33] = 166;
    hann[34] = 176;
    hann[35] = 185;
    hann[36] = 195;
    hann[37] = 205;
    hann[38] = 215;
    hann[39] = 225;
    hann[40] = 236;
    hann[41] = 247;
    hann[42] = 257;
    hann[43] = 268;
    hann[44] = 279;
    hann[45] = 291;
    hann[46] = 302;
    hann[47] = 313;
    hann[48] = 325;
    hann[49] = 337;
    hann[50] = 349;
    hann[51] = 360;
    hann[52] = 372;
    hann[53] = 385;
    hann[54] = 397;
    hann[55] = 409;
    hann[56] = 421;
    hann[57] = 434;
    hann[58] = 446;
    hann[59] = 458;
    hann[60] = 471;
    hann[61] = 483;
    hann[62] = 496;
    hann[63] = 508;
    hann[64] = 521;
    hann[65] = 533;
    hann[66] = 546;
    hann[67] = 558;
    hann[68] = 571;
    hann[69] = 583;
    hann[70] = 596;
    hann[71] = 608;
    hann[72] = 620;
    hann[73] = 632;
    hann[74] = 645;
    hann[75] = 657;
    hann[76] = 669;
    hann[77] = 680;
    hann[78] = 692;
    hann[79] = 704;
    hann[80] = 715;
    hann[81] = 727;
    hann[82] = 738;
    hann[83] = 749;
    hann[84] = 760;
    hann[85] = 771;
    hann[86] = 782;
    hann[87] = 792;
    hann[88] = 803;
    hann[89] = 813;
    hann[90] = 823;
    hann[91] = 833;
    hann[92] = 842;
    hann[93] = 852;
    hann[94] = 861;
    hann[95] = 870;
    hann[96] = 879;
    hann[97] = 888;
    hann[98] = 896;
    hann[99] = 904;
    hann[100] = 912;
    hann[101] = 920;
    hann[102] = 927;
    hann[103] = 934;
    hann[104] = 941;
    hann[105] = 948;
    hann[106] = 954;
    hann[107] = 961;
    hann[108] = 966;
    hann[109] = 972;
    hann[110] = 977;
    hann[111] = 982;
    hann[112] = 987;
    hann[113] = 992;
    hann[114] = 996;
    hann[115] = 1000;
    hann[116] = 1003;
    hann[117] = 1007;
    hann[118] = 1010;
    hann[119] = 1012;
    hann[120] = 1015;
    hann[121] = 1017;
    hann[122] = 1019;
    hann[123] = 1020;
    hann[124] = 1022;
    hann[125] = 1023;
    hann[126] = 1023;
    hann[127] = 1023;
    hann[128] = 1023;
    hann[129] = 1023;
    hann[130] = 1023;
    hann[131] = 1022;
    hann[132] = 1020;
    hann[133] = 1019;
    hann[134] = 1017;
    hann[135] = 1015;
    hann[136] = 1012;
    hann[137] = 1010;
    hann[138] = 1007;
    hann[139] = 1003;
    hann[140] = 1000;
    hann[141] = 996;
    hann[142] = 992;
    hann[143] = 987;
    hann[144] = 982;
    hann[145] = 977;
    hann[146] = 972;
    hann[147] = 966;
    hann[148] = 961;
    hann[149] = 954;
    hann[150] = 948;
    hann[151] = 941;
    hann[152] = 934;
    hann[153] = 927;
    hann[154] = 920;
    hann[155] = 912;
    hann[156] = 904;
    hann[157] = 896;
    hann[158] = 888;
    hann[159] = 879;
    hann[160] = 870;
    hann[161] = 861;
    hann[162] = 852;
    hann[163] = 842;
    hann[164] = 833;
    hann[165] = 823;
    hann[166] = 813;
    hann[167] = 803;
    hann[168] = 792;
    hann[169] = 782;
    hann[170] = 771;
    hann[171] = 760;
    hann[172] = 749;
    hann[173] = 738;
    hann[174] = 727;
    hann[175] = 715;
    hann[176] = 704;
    hann[177] = 692;
    hann[178] = 680;
    hann[179] = 669;
    hann[180] = 657;
    hann[181] = 645;
    hann[182] = 632;
    hann[183] = 620;
    hann[184] = 608;
    hann[185] = 596;
    hann[186] = 583;
    hann[187] = 571;
    hann[188] = 558;
    hann[189] = 546;
    hann[190] = 533;
    hann[191] = 521;
    hann[192] = 508;
    hann[193] = 496;
    hann[194] = 483;
    hann[195] = 471;
    hann[196] = 458;
    hann[197] = 446;
    hann[198] = 434;
    hann[199] = 421;
    hann[200] = 409;
    hann[201] = 397;
    hann[202] = 385;
    hann[203] = 372;
    hann[204] = 360;
    hann[205] = 349;
    hann[206] = 337;
    hann[207] = 325;
    hann[208] = 313;
    hann[209] = 302;
    hann[210] = 291;
    hann[211] = 279;
    hann[212] = 268;
    hann[213] = 257;
    hann[214] = 247;
    hann[215] = 236;
    hann[216] = 225;
    hann[217] = 215;
    hann[218] = 205;
    hann[219] = 195;
    hann[220] = 185;
    hann[221] = 176;
    hann[222] = 166;
    hann[223] = 157;
    hann[224] = 148;
    hann[225] = 140;
    hann[226] = 131;
    hann[227] = 123;
    hann[228] = 115;
    hann[229] = 107;
    hann[230] = 100;
    hann[231] = 92;
    hann[232] = 85;
    hann[233] = 78;
    hann[234] = 72;
    hann[235] = 66;
    hann[236] = 59;
    hann[237] = 54;
    hann[238] = 48;
    hann[239] = 43;
    hann[240] = 38;
    hann[241] = 34;
    hann[242] = 29;
    hann[243] = 25;
    hann[244] = 21;
    hann[245] = 18;
    hann[246] = 15;
    hann[247] = 12;
    hann[248] = 9;
    hann[249] = 7;
    hann[250] = 5;
    hann[251] = 3;
    hann[252] = 2;
    hann[253] = 1;
    hann[254] = 0;
    hann[255] = 0;

} /* gen_hann2 */

/**
 * Creates the non uniform enhancement window (bilinearly mapped hannning window)
 * in order to reduce the formant enhancement in the high spectrum
 * @param    mm : memory manager
 * @param    sig_inObj : sig PU internal object of the sub-object
 * @return   void
 * @callgraph
 * @callergraph
 * @remarks the outgput is based on the matlab script below\n
 matlab script
 -------------
 function makeEnhWind(alpha)
 N=129; % =HFFTSIZEE_P1
 s=(bilinmap(alpha,N));
 h=[hann(N)'];
 x=(1:N)/N;
 W=interp1(x,h,s); W(1)=0;

 fid=fopen('enhwind.txt','wt');
 fprintf(fid,'picoos_int16 enh_wind_init(sig_innerobj_t *sig_inObj) {\n');
 for i=1:N,
 fprintf(fid,['   sig_inObj->enhwind[' int2str(i) '] = (picoos_single)' num2str(W(i),'%0.7g') ';\n']);
 end;
 fprintf(fid,'   return PICO_OK;\n');
 fprintf(fid,' }; \n');
 fclose(fid);
 %figure(1); plot(x*8,W);
 */
static void enh_wind_init(sig_innerobj_t *sig_inObj)
{
    /*     picoos_int16 i; */
    picoos_int32 *c;

    c = sig_inObj->cos_table;

    c[0] = 4096;
    c[1] = 4095;
    c[2] = 4095;
    c[3] = 4095;
    c[4] = 4095;
    c[5] = 4095;
    c[6] = 4095;
    c[7] = 4095;
    c[8] = 4094;
    c[9] = 4094;
    c[10] = 4094;
    c[11] = 4093;
    c[12] = 4093;
    c[13] = 4092;
    c[14] = 4092;
    c[15] = 4091;
    c[16] = 4091;
    c[17] = 4090;
    c[18] = 4089;
    c[19] = 4089;
    c[20] = 4088;
    c[21] = 4087;
    c[22] = 4086;
    c[23] = 4085;
    c[24] = 4084;
    c[25] = 4083;
    c[26] = 4082;
    c[27] = 4081;
    c[28] = 4080;
    c[29] = 4079;
    c[30] = 4078;
    c[31] = 4077;
    c[32] = 4076;
    c[33] = 4075;
    c[34] = 4073;
    c[35] = 4072;
    c[36] = 4071;
    c[37] = 4069;
    c[38] = 4068;
    c[39] = 4066;
    c[40] = 4065;
    c[41] = 4063;
    c[42] = 4062;
    c[43] = 4060;
    c[44] = 4058;
    c[45] = 4057;
    c[46] = 4055;
    c[47] = 4053;
    c[48] = 4051;
    c[49] = 4049;
    c[50] = 4047;
    c[51] = 4045;
    c[52] = 4043;
    c[53] = 4041;
    c[54] = 4039;
    c[55] = 4037;
    c[56] = 4035;
    c[57] = 4033;
    c[58] = 4031;
    c[59] = 4029;
    c[60] = 4026;
    c[61] = 4024;
    c[62] = 4022;
    c[63] = 4019;
    c[64] = 4017;
    c[65] = 4014;
    c[66] = 4012;
    c[67] = 4009;
    c[68] = 4007;
    c[69] = 4004;
    c[70] = 4001;
    c[71] = 3999;
    c[72] = 3996;
    c[73] = 3993;
    c[74] = 3990;
    c[75] = 3988;
    c[76] = 3985;
    c[77] = 3982;
    c[78] = 3979;
    c[79] = 3976;
    c[80] = 3973;
    c[81] = 3970;
    c[82] = 3967;
    c[83] = 3963;
    c[84] = 3960;
    c[85] = 3957;
    c[86] = 3954;
    c[87] = 3950;
    c[88] = 3947;
    c[89] = 3944;
    c[90] = 3940;
    c[91] = 3937;
    c[92] = 3933;
    c[93] = 3930;
    c[94] = 3926;
    c[95] = 3923;
    c[96] = 3919;
    c[97] = 3915;
    c[98] = 3912;
    c[99] = 3908;
    c[100] = 3904;
    c[101] = 3900;
    c[102] = 3897;
    c[103] = 3893;
    c[104] = 3889;
    c[105] = 3885;
    c[106] = 3881;
    c[107] = 3877;
    c[108] = 3873;
    c[109] = 3869;
    c[110] = 3864;
    c[111] = 3860;
    c[112] = 3856;
    c[113] = 3852;
    c[114] = 3848;
    c[115] = 3843;
    c[116] = 3839;
    c[117] = 3834;
    c[118] = 3830;
    c[119] = 3826;
    c[120] = 3821;
    c[121] = 3816;
    c[122] = 3812;
    c[123] = 3807;
    c[124] = 3803;
    c[125] = 3798;
    c[126] = 3793;
    c[127] = 3789;
    c[128] = 3784;
    c[129] = 3779;
    c[130] = 3774;
    c[131] = 3769;
    c[132] = 3764;
    c[133] = 3759;
    c[134] = 3754;
    c[135] = 3749;
    c[136] = 3744;
    c[137] = 3739;
    c[138] = 3734;
    c[139] = 3729;
    c[140] = 3723;
    c[141] = 3718;
    c[142] = 3713;
    c[143] = 3708;
    c[144] = 3702;
    c[145] = 3697;
    c[146] = 3691;
    c[147] = 3686;
    c[148] = 3680;
    c[149] = 3675;
    c[150] = 3669;
    c[151] = 3664;
    c[152] = 3658;
    c[153] = 3652;
    c[154] = 3647;
    c[155] = 3641;
    c[156] = 3635;
    c[157] = 3629;
    c[158] = 3624;
    c[159] = 3618;
    c[160] = 3612;
    c[161] = 3606;
    c[162] = 3600;
    c[163] = 3594;
    c[164] = 3588;
    c[165] = 3582;
    c[166] = 3576;
    c[167] = 3570;
    c[168] = 3563;
    c[169] = 3557;
    c[170] = 3551;
    c[171] = 3545;
    c[172] = 3538;
    c[173] = 3532;
    c[174] = 3526;
    c[175] = 3519;
    c[176] = 3513;
    c[177] = 3506;
    c[178] = 3500;
    c[179] = 3493;
    c[180] = 3487;
    c[181] = 3480;
    c[182] = 3473;
    c[183] = 3467;
    c[184] = 3460;
    c[185] = 3453;
    c[186] = 3447;
    c[187] = 3440;
    c[188] = 3433;
    c[189] = 3426;
    c[190] = 3419;
    c[191] = 3412;
    c[192] = 3405;
    c[193] = 3398;
    c[194] = 3391;
    c[195] = 3384;
    c[196] = 3377;
    c[197] = 3370;
    c[198] = 3363;
    c[199] = 3356;
    c[200] = 3348;
    c[201] = 3341;
    c[202] = 3334;
    c[203] = 3326;
    c[204] = 3319;
    c[205] = 3312;
    c[206] = 3304;
    c[207] = 3297;
    c[208] = 3289;
    c[209] = 3282;
    c[210] = 3274;
    c[211] = 3267;
    c[212] = 3259;
    c[213] = 3252;
    c[214] = 3244;
    c[215] = 3236;
    c[216] = 3229;
    c[217] = 3221;
    c[218] = 3213;
    c[219] = 3205;
    c[220] = 3197;
    c[221] = 3190;
    c[222] = 3182;
    c[223] = 3174;
    c[224] = 3166;
    c[225] = 3158;
    c[226] = 3150;
    c[227] = 3142;
    c[228] = 3134;
    c[229] = 3126;
    c[230] = 3117;
    c[231] = 3109;
    c[232] = 3101;
    c[233] = 3093;
    c[234] = 3085;
    c[235] = 3076;
    c[236] = 3068;
    c[237] = 3060;
    c[238] = 3051;
    c[239] = 3043;
    c[240] = 3034;
    c[241] = 3026;
    c[242] = 3018;
    c[243] = 3009;
    c[244] = 3000;
    c[245] = 2992;
    c[246] = 2983;
    c[247] = 2975;
    c[248] = 2966;
    c[249] = 2957;
    c[250] = 2949;
    c[251] = 2940;
    c[252] = 2931;
    c[253] = 2922;
    c[254] = 2914;
    c[255] = 2905;
    c[256] = 2896;
    c[257] = 2887;
    c[258] = 2878;
    c[259] = 2869;
    c[260] = 2860;
    c[261] = 2851;
    c[262] = 2842;
    c[263] = 2833;
    c[264] = 2824;
    c[265] = 2815;
    c[266] = 2806;
    c[267] = 2796;
    c[268] = 2787;
    c[269] = 2778;
    c[270] = 2769;
    c[271] = 2760;
    c[272] = 2750;
    c[273] = 2741;
    c[274] = 2732;
    c[275] = 2722;
    c[276] = 2713;
    c[277] = 2703;
    c[278] = 2694;
    c[279] = 2684;
    c[280] = 2675;
    c[281] = 2665;
    c[282] = 2656;
    c[283] = 2646;
    c[284] = 2637;
    c[285] = 2627;
    c[286] = 2617;
    c[287] = 2608;
    c[288] = 2598;
    c[289] = 2588;
    c[290] = 2578;
    c[291] = 2569;
    c[292] = 2559;
    c[293] = 2549;
    c[294] = 2539;
    c[295] = 2529;
    c[296] = 2519;
    c[297] = 2510;
    c[298] = 2500;
    c[299] = 2490;
    c[300] = 2480;
    c[301] = 2470;
    c[302] = 2460;
    c[303] = 2450;
    c[304] = 2439;
    c[305] = 2429;
    c[306] = 2419;
    c[307] = 2409;
    c[308] = 2399;
    c[309] = 2389;
    c[310] = 2379;
    c[311] = 2368;
    c[312] = 2358;
    c[313] = 2348;
    c[314] = 2337;
    c[315] = 2327;
    c[316] = 2317;
    c[317] = 2306;
    c[318] = 2296;
    c[319] = 2286;
    c[320] = 2275;
    c[321] = 2265;
    c[322] = 2254;
    c[323] = 2244;
    c[324] = 2233;
    c[325] = 2223;
    c[326] = 2212;
    c[327] = 2201;
    c[328] = 2191;
    c[329] = 2180;
    c[330] = 2170;
    c[331] = 2159;
    c[332] = 2148;
    c[333] = 2138;
    c[334] = 2127;
    c[335] = 2116;
    c[336] = 2105;
    c[337] = 2094;
    c[338] = 2084;
    c[339] = 2073;
    c[340] = 2062;
    c[341] = 2051;
    c[342] = 2040;
    c[343] = 2029;
    c[344] = 2018;
    c[345] = 2007;
    c[346] = 1997;
    c[347] = 1986;
    c[348] = 1975;
    c[349] = 1964;
    c[350] = 1952;
    c[351] = 1941;
    c[352] = 1930;
    c[353] = 1919;
    c[354] = 1908;
    c[355] = 1897;
    c[356] = 1886;
    c[357] = 1875;
    c[358] = 1864;
    c[359] = 1852;
    c[360] = 1841;
    c[361] = 1830;
    c[362] = 1819;
    c[363] = 1807;
    c[364] = 1796;
    c[365] = 1785;
    c[366] = 1773;
    c[367] = 1762;
    c[368] = 1751;
    c[369] = 1739;
    c[370] = 1728;
    c[371] = 1717;
    c[372] = 1705;
    c[373] = 1694;
    c[374] = 1682;
    c[375] = 1671;
    c[376] = 1659;
    c[377] = 1648;
    c[378] = 1636;
    c[379] = 1625;
    c[380] = 1613;
    c[381] = 1602;
    c[382] = 1590;
    c[383] = 1579;
    c[384] = 1567;
    c[385] = 1555;
    c[386] = 1544;
    c[387] = 1532;
    c[388] = 1520;
    c[389] = 1509;
    c[390] = 1497;
    c[391] = 1485;
    c[392] = 1474;
    c[393] = 1462;
    c[394] = 1450;
    c[395] = 1438;
    c[396] = 1427;
    c[397] = 1415;
    c[398] = 1403;
    c[399] = 1391;
    c[400] = 1379;
    c[401] = 1368;
    c[402] = 1356;
    c[403] = 1344;
    c[404] = 1332;
    c[405] = 1320;
    c[406] = 1308;
    c[407] = 1296;
    c[408] = 1284;
    c[409] = 1272;
    c[410] = 1260;
    c[411] = 1248;
    c[412] = 1237;
    c[413] = 1225;
    c[414] = 1213;
    c[415] = 1201;
    c[416] = 1189;
    c[417] = 1176;
    c[418] = 1164;
    c[419] = 1152;
    c[420] = 1140;
    c[421] = 1128;
    c[422] = 1116;
    c[423] = 1104;
    c[424] = 1092;
    c[425] = 1080;
    c[426] = 1068;
    c[427] = 1056;
    c[428] = 1043;
    c[429] = 1031;
    c[430] = 1019;
    c[431] = 1007;
    c[432] = 995;
    c[433] = 983;
    c[434] = 970;
    c[435] = 958;
    c[436] = 946;
    c[437] = 934;
    c[438] = 921;
    c[439] = 909;
    c[440] = 897;
    c[441] = 885;
    c[442] = 872;
    c[443] = 860;
    c[444] = 848;
    c[445] = 836;
    c[446] = 823;
    c[447] = 811;
    c[448] = 799;
    c[449] = 786;
    c[450] = 774;
    c[451] = 762;
    c[452] = 749;
    c[453] = 737;
    c[454] = 725;
    c[455] = 712;
    c[456] = 700;
    c[457] = 687;
    c[458] = 675;
    c[459] = 663;
    c[460] = 650;
    c[461] = 638;
    c[462] = 625;
    c[463] = 613;
    c[464] = 601;
    c[465] = 588;
    c[466] = 576;
    c[467] = 563;
    c[468] = 551;
    c[469] = 538;
    c[470] = 526;
    c[471] = 513;
    c[472] = 501;
    c[473] = 488;
    c[474] = 476;
    c[475] = 463;
    c[476] = 451;
    c[477] = 438;
    c[478] = 426;
    c[479] = 413;
    c[480] = 401;
    c[481] = 388;
    c[482] = 376;
    c[483] = 363;
    c[484] = 351;
    c[485] = 338;
    c[486] = 326;
    c[487] = 313;
    c[488] = 301;
    c[489] = 288;
    c[490] = 276;
    c[491] = 263;
    c[492] = 251;
    c[493] = 238;
    c[494] = 226;
    c[495] = 213;
    c[496] = 200;
    c[497] = 188;
    c[498] = 175;
    c[499] = 163;
    c[500] = 150;
    c[501] = 138;
    c[502] = 125;
    c[503] = 113;
    c[504] = 100;
    c[505] = 87;
    c[506] = 75;
    c[507] = 62;
    c[508] = 50;
    c[509] = 37;
    c[510] = 25;
    c[511] = 12;
    c[512] = 0;
} /*enh_wind_init*/

/**
 * Initializes a useful large array of random numbers
 * @param  sig_inObj : sig PU internal object of the sub-object
 * @return void
 * @callgraph
 * @callergraph
 */
static void init_rand(sig_innerobj_t *sig_inObj)
{
    picoos_int32 *q = sig_inObj->int_vec34;
    picoos_int32 *r = sig_inObj->int_vec35;

    sig_inObj->iRand = 0;

    q[0] = -2198;
    r[0] = 3455;
    q[1] = 3226;
    r[1] = -2522;
    q[2] = -845;
    r[2] = 4007;
    q[3] = -1227;
    r[3] = 3907;
    q[4] = -3480;
    r[4] = 2158;
    q[5] = -1325;
    r[5] = -3875;
    q[6] = 2089;
    r[6] = -3522;
    q[7] = -468;
    r[7] = 4069;
    q[8] = 711;
    r[8] = -4033;
    q[9] = 3862;
    r[9] = 1362;
    q[10] = 4054;
    r[10] = -579;
    q[11] = 2825;
    r[11] = 2965;
    q[12] = 2704;
    r[12] = -3076;
    q[13] = 4081;
    r[13] = 344;
    q[14] = -3912;
    r[14] = 1211;
    q[15] = -3541;
    r[15] = 2058;
    q[16] = 2694;
    r[16] = 3084;
    q[17] = 835;
    r[17] = 4009;
    q[18] = -2578;
    r[18] = -3182;
    q[19] = 3205;
    r[19] = 2550;
    q[20] = -4074;
    r[20] = -418;
    q[21] = -183;
    r[21] = -4091;
    q[22] = -2665;
    r[22] = -3110;
    q[23] = -1367;
    r[23] = 3860;
    q[24] = -2266;
    r[24] = -3411;
    q[25] = 3327;
    r[25] = -2387;
    q[26] = -2807;
    r[26] = -2982;
    q[27] = -3175;
    r[27] = -2587;
    q[28] = -4095;
    r[28] = 27;
    q[29] = -811;
    r[29] = -4014;
    q[30] = 4082;
    r[30] = 332;
    q[31] = -2175;
    r[31] = 3470;
    q[32] = 3112;
    r[32] = 2662;
    q[33] = 1168;
    r[33] = -3925;
    q[34] = 2659;
    r[34] = 3115;
    q[35] = 4048;
    r[35] = 622;
    q[36] = 4092;
    r[36] = -165;
    q[37] = -4036;
    r[37] = 697;
    q[38] = 1081;
    r[38] = -3950;
    q[39] = -548;
    r[39] = 4059;
    q[40] = 4038;
    r[40] = 685;
    q[41] = -511;
    r[41] = 4063;
    q[42] = 3317;
    r[42] = -2402;
    q[43] = -3180;
    r[43] = 2580;
    q[44] = 851;
    r[44] = -4006;
    q[45] = 2458;
    r[45] = -3276;
    q[46] = -1453;
    r[46] = 3829;
    q[47] = -3577;
    r[47] = 1995;
    q[48] = -3708;
    r[48] = -1738;
    q[49] = -3890;
    r[49] = 1282;
    q[50] = 4041;
    r[50] = 666;
    q[51] = -3511;
    r[51] = -2108;
    q[52] = -1454;
    r[52] = -3828;
    q[53] = 2124;
    r[53] = 3502;
    q[54] = -3159;
    r[54] = 2606;
    q[55] = 2384;
    r[55] = -3330;
    q[56] = -3767;
    r[56] = -1607;
    q[57] = -4063;
    r[57] = -513;
    q[58] = 3952;
    r[58] = -1075;
    q[59] = -3778;
    r[59] = -1581;
    q[60] = -301;
    r[60] = -4084;
    q[61] = -4026;
    r[61] = 751;
    q[62] = -3346;
    r[62] = 2361;
    q[63] = -2426;
    r[63] = 3299;
    q[64] = 428;
    r[64] = -4073;
    q[65] = 3968;
    r[65] = 1012;
    q[66] = 2900;
    r[66] = -2892;
    q[67] = -263;
    r[67] = 4087;
    q[68] = 4083;
    r[68] = 322;
    q[69] = 2024;
    r[69] = 3560;
    q[70] = 4015;
    r[70] = 808;
    q[71] = -3971;
    r[71] = -1000;
    q[72] = 3785;
    r[72] = -1564;
    q[73] = -3726;
    r[73] = 1701;
    q[74] = -3714;
    r[74] = 1725;
    q[75] = 743;
    r[75] = 4027;
    q[76] = 875;
    r[76] = -4001;
    q[77] = 294;
    r[77] = 4085;
    q[78] = 2611;
    r[78] = 3155;
    q[79] = 2491;
    r[79] = -3251;
    q[80] = 1558;
    r[80] = 3787;
    q[81] = -2063;
    r[81] = -3538;
    q[82] = 3809;
    r[82] = -1505;
    q[83] = -2987;
    r[83] = 2802;
    q[84] = -1955;
    r[84] = 3599;
    q[85] = 1980;
    r[85] = -3585;
    q[86] = -539;
    r[86] = -4060;
    q[87] = -3210;
    r[87] = 2543;
    q[88] = 2415;
    r[88] = -3308;
    q[89] = 1587;
    r[89] = 3775;
    q[90] = -3943;
    r[90] = 1106;
    q[91] = 3476;
    r[91] = 2165;
    q[92] = 2253;
    r[92] = 3420;
    q[93] = -2584;
    r[93] = 3177;
    q[94] = 3804;
    r[94] = -1518;
    q[95] = -3637;
    r[95] = 1883;
    q[96] = 3289;
    r[96] = -2440;
    q[97] = -1621;
    r[97] = 3761;
    q[98] = 1645;
    r[98] = 3751;
    q[99] = -3471;
    r[99] = 2173;
    q[100] = 4071;
    r[100] = -449;
    q[101] = -872;
    r[101] = -4001;
    q[102] = -3897;
    r[102] = 1259;
    q[103] = -3590;
    r[103] = 1970;
    q[104] = -2456;
    r[104] = -3277;
    q[105] = -3004;
    r[105] = 2783;
    q[106] = 2589;
    r[106] = 3173;
    q[107] = 3727;
    r[107] = -1698;
    q[108] = 2992;
    r[108] = 2796;
    q[109] = 794;
    r[109] = -4018;
    q[110] = -918;
    r[110] = 3991;
    q[111] = 1446;
    r[111] = -3831;
    q[112] = 3871;
    r[112] = -1338;
    q[113] = -612;
    r[113] = -4049;
    q[114] = -1566;
    r[114] = -3784;
    q[115] = 672;
    r[115] = -4040;
    q[116] = 3841;
    r[116] = 1422;
    q[117] = 3545;
    r[117] = -2051;
    q[118] = -1982;
    r[118] = -3584;
    q[119] = -3413;
    r[119] = 2263;
    q[120] = -3265;
    r[120] = -2473;
    q[121] = -2876;
    r[121] = -2915;
    q[122] = 4094;
    r[122] = -117;
    q[123] = -269;
    r[123] = 4087;
    q[124] = -4077;
    r[124] = 391;
    q[125] = -3759;
    r[125] = 1626;
    q[126] = 1639;
    r[126] = 3753;
    q[127] = 3041;
    r[127] = -2743;
    q[128] = 5;
    r[128] = 4095;
    q[129] = 2778;
    r[129] = -3009;
    q[130] = 1121;
    r[130] = -3939;
    q[131] = -455;
    r[131] = -4070;
    q[132] = 3532;
    r[132] = 2073;
    q[133] = -143;
    r[133] = -4093;
    q[134] = -2357;
    r[134] = -3349;
    q[135] = 458;
    r[135] = 4070;
    q[136] = -2887;
    r[136] = -2904;
    q[137] = -1104;
    r[137] = 3944;
    q[138] = -2104;
    r[138] = -3513;
    q[139] = 126;
    r[139] = 4094;
    q[140] = -3655;
    r[140] = -1848;
    q[141] = -3896;
    r[141] = 1263;
    q[142] = -3874;
    r[142] = -1327;
    q[143] = 4058;
    r[143] = 553;
    q[144] = -1831;
    r[144] = -3663;
    q[145] = -255;
    r[145] = -4088;
    q[146] = -1211;
    r[146] = 3912;
    q[147] = 445;
    r[147] = 4071;
    q[148] = 2268;
    r[148] = 3410;
    q[149] = -4010;
    r[149] = 833;
    q[150] = 2621;
    r[150] = 3147;
    q[151] = -250;
    r[151] = 4088;
    q[152] = -3409;
    r[152] = -2269;
    q[153] = -2710;
    r[153] = -3070;
    q[154] = 4063;
    r[154] = 518;
    q[155] = -3611;
    r[155] = -1933;
    q[156] = -3707;
    r[156] = -1741;
    q[157] = -1151;
    r[157] = -3930;
    q[158] = 3976;
    r[158] = -983;
    q[159] = -1736;
    r[159] = 3709;
    q[160] = 3669;
    r[160] = 1820;
    q[161] = -143;
    r[161] = 4093;
    q[162] = -3879;
    r[162] = -1313;
    q[163] = -2242;
    r[163] = -3427;
    q[164] = -4095;
    r[164] = 0;
    q[165] = -1159;
    r[165] = -3928;
    q[166] = -3155;
    r[166] = 2611;
    q[167] = -2887;
    r[167] = -2904;
    q[168] = -4095;
    r[168] = 56;
    q[169] = -3861;
    r[169] = -1364;
    q[170] = -2814;
    r[170] = 2976;
    q[171] = -3680;
    r[171] = -1798;
    q[172] = -4094;
    r[172] = -107;
    q[173] = -3626;
    r[173] = 1903;
    q[174] = 3403;
    r[174] = 2278;
    q[175] = -1735;
    r[175] = -3710;
    q[176] = -2126;
    r[176] = -3500;
    q[177] = 3183;
    r[177] = -2577;
    q[178] = -3499;
    r[178] = 2128;
    q[179] = -1736;
    r[179] = 3709;
    q[180] = 2592;
    r[180] = -3170;
    q[181] = 3875;
    r[181] = 1326;
    q[182] = 3596;
    r[182] = 1960;
    q[183] = 3915;
    r[183] = -1202;
    q[184] = 1570;
    r[184] = 3783;
    q[185] = -3319;
    r[185] = -2400;
    q[186] = 4019;
    r[186] = 787;
    q[187] = -187;
    r[187] = 4091;
    q[188] = 1370;
    r[188] = -3859;
    q[189] = -4091;
    r[189] = 199;
    q[190] = 3626;
    r[190] = 1904;
    q[191] = -2943;
    r[191] = 2848;
    q[192] = 56;
    r[192] = 4095;
    q[193] = 2824;
    r[193] = 2966;
    q[194] = -3994;
    r[194] = -904;
    q[195] = 56;
    r[195] = 4095;
    q[196] = -2045;
    r[196] = 3548;
    q[197] = -3653;
    r[197] = 1850;
    q[198] = -2864;
    r[198] = 2927;
    q[199] = -1996;
    r[199] = 3576;
    q[200] = -4061;
    r[200] = 527;
    q[201] = 159;
    r[201] = 4092;
    q[202] = -3363;
    r[202] = 2336;
    q[203] = -4074;
    r[203] = 421;
    q[204] = 2043;
    r[204] = 3549;
    q[205] = 4095;
    r[205] = -70;
    q[206] = -2107;
    r[206] = -3512;
    q[207] = -1973;
    r[207] = 3589;
    q[208] = -3138;
    r[208] = 2631;
    q[209] = -3625;
    r[209] = -1905;
    q[210] = 2413;
    r[210] = 3309;
    q[211] = -50;
    r[211] = -4095;
    q[212] = 2813;
    r[212] = 2976;
    q[213] = -535;
    r[213] = -4060;
    q[214] = 1250;
    r[214] = 3900;
    q[215] = 1670;
    r[215] = -3739;
    q[216] = 1945;
    r[216] = -3604;
    q[217] = -476;
    r[217] = -4068;
    q[218] = -3659;
    r[218] = -1840;
    q[219] = 2745;
    r[219] = 3039;
    q[220] = -674;
    r[220] = -4040;
    q[221] = 2383;
    r[221] = 3330;
    q[222] = 4086;
    r[222] = 274;
    q[223] = -4030;
    r[223] = 730;
    q[224] = 768;
    r[224] = -4023;
    q[225] = 3925;
    r[225] = 1170;
    q[226] = 785;
    r[226] = 4019;
    q[227] = -3101;
    r[227] = -2675;
    q[228] = 4030;
    r[228] = -729;
    q[229] = 3422;
    r[229] = 2249;
    q[230] = -3847;
    r[230] = 1403;
    q[231] = 3902;
    r[231] = -1243;
    q[232] = 2114;
    r[232] = -3507;
    q[233] = -2359;
    r[233] = 3348;
    q[234] = 3754;
    r[234] = -1638;
    q[235] = -4095;
    r[235] = -83;
    q[236] = 2301;
    r[236] = -3388;
    q[237] = 3336;
    r[237] = 2375;
    q[238] = -2045;
    r[238] = 3548;
    q[239] = -413;
    r[239] = -4075;
    q[240] = 1848;
    r[240] = 3655;
    q[241] = 4072;
    r[241] = -437;
    q[242] = 4069;
    r[242] = -463;
    q[243] = 1386;
    r[243] = -3854;
    q[244] = 966;
    r[244] = 3980;
    q[245] = -1684;
    r[245] = -3733;
    q[246] = 2953;
    r[246] = 2837;
    q[247] = -3961;
    r[247] = -1040;
    q[248] = 3512;
    r[248] = -2107;
    q[249] = 1363;
    r[249] = 3862;
    q[250] = 1883;
    r[250] = 3637;
    q[251] = 2657;
    r[251] = 3116;
    q[252] = 2347;
    r[252] = -3356;
    q[253] = -1635;
    r[253] = -3755;
    q[254] = 3170;
    r[254] = 2593;
    q[255] = 2856;
    r[255] = 2935;
    q[256] = 494;
    r[256] = 4066;
    q[257] = 1936;
    r[257] = -3609;
    q[258] = 245;
    r[258] = 4088;
    q[259] = -1211;
    r[259] = -3912;
    q[260] = -3600;
    r[260] = 1952;
    q[261] = 1632;
    r[261] = 3756;
    q[262] = 2341;
    r[262] = 3360;
    q[263] = 186;
    r[263] = -4091;
    q[264] = 4011;
    r[264] = 829;
    q[265] = -3490;
    r[265] = -2143;
    q[266] = 269;
    r[266] = -4087;
    q[267] = -2939;
    r[267] = 2852;
    q[268] = 1600;
    r[268] = 3770;
    q[269] = -3405;
    r[269] = -2275;
    q[270] = -3134;
    r[270] = -2636;
    q[271] = 2642;
    r[271] = -3129;
    q[272] = 3629;
    r[272] = 1898;
    q[273] = 3413;
    r[273] = 2264;
    q[274] = 2050;
    r[274] = 3545;
    q[275] = 988;
    r[275] = -3975;
    q[276] = -660;
    r[276] = 4042;
    q[277] = 978;
    r[277] = -3977;
    q[278] = 1965;
    r[278] = -3593;
    q[279] = -1513;
    r[279] = -3806;
    q[280] = -4076;
    r[280] = 401;
    q[281] = -4094;
    r[281] = -92;
    q[282] = -1914;
    r[282] = 3621;
    q[283] = 2006;
    r[283] = -3570;
    q[284] = -1550;
    r[284] = -3791;
    q[285] = 3774;
    r[285] = -1591;
    q[286] = -3958;
    r[286] = 1052;
    q[287] = -3576;
    r[287] = 1997;
    q[288] = -382;
    r[288] = 4078;
    q[289] = 1288;
    r[289] = 3888;
    q[290] = -2965;
    r[290] = -2825;
    q[291] = 1608;
    r[291] = 3767;
    q[292] = 3052;
    r[292] = -2731;
    q[293] = -622;
    r[293] = 4048;
    q[294] = -3836;
    r[294] = 1434;
    q[295] = -3542;
    r[295] = 2056;
    q[296] = -2648;
    r[296] = 3124;
    q[297] = -1178;
    r[297] = -3922;
    q[298] = -1109;
    r[298] = 3942;
    q[299] = 3910;
    r[299] = 1217;
    q[300] = 1199;
    r[300] = -3916;
    q[301] = -3386;
    r[301] = 2303;
    q[302] = -3453;
    r[302] = 2202;
    q[303] = -2877;
    r[303] = 2914;
    q[304] = 4095;
    r[304] = -47;
    q[305] = 3635;
    r[305] = 1886;
    q[306] = -2134;
    r[306] = -3495;
    q[307] = 613;
    r[307] = -4049;
    q[308] = -2700;
    r[308] = 3079;
    q[309] = 4091;
    r[309] = -195;
    q[310] = 3989;
    r[310] = -927;
    q[311] = -2385;
    r[311] = 3329;
    q[312] = 4094;
    r[312] = -103;
    q[313] = 1044;
    r[313] = -3960;
    q[314] = -1734;
    r[314] = -3710;
    q[315] = 1646;
    r[315] = 3750;
    q[316] = 575;
    r[316] = 4055;
    q[317] = -2629;
    r[317] = -3140;
    q[318] = 3266;
    r[318] = 2471;
    q[319] = 4091;
    r[319] = -194;
    q[320] = -2154;
    r[320] = 3483;
    q[321] = 659;
    r[321] = 4042;
    q[322] = -1785;
    r[322] = -3686;
    q[323] = -717;
    r[323] = -4032;
    q[324] = 4095;
    r[324] = -37;
    q[325] = -2963;
    r[325] = -2827;
    q[326] = -2645;
    r[326] = -3126;
    q[327] = 2619;
    r[327] = -3148;
    q[328] = 1855;
    r[328] = -3651;
    q[329] = -3726;
    r[329] = 1699;
    q[330] = -3437;
    r[330] = 2227;
    q[331] = 2948;
    r[331] = 2842;
    q[332] = -2125;
    r[332] = 3501;
    q[333] = -1700;
    r[333] = 3726;
    q[334] = 4094;
    r[334] = -101;
    q[335] = 2084;
    r[335] = -3525;
    q[336] = 3225;
    r[336] = -2524;
    q[337] = 2220;
    r[337] = 3442;
    q[338] = 3174;
    r[338] = 2588;
    q[339] = 229;
    r[339] = -4089;
    q[340] = -2381;
    r[340] = -3332;
    q[341] = -3677;
    r[341] = -1803;
    q[342] = -3191;
    r[342] = -2567;
    q[343] = 2465;
    r[343] = 3270;
    q[344] = 2681;
    r[344] = -3096;
    q[345] = 975;
    r[345] = -3978;
    q[346] = 2004;
    r[346] = -3572;
    q[347] = -3442;
    r[347] = -2219;
    q[348] = 3676;
    r[348] = -1805;
    q[349] = -3753;
    r[349] = 1638;
    q[350] = 3544;
    r[350] = 2053;
    q[351] = 397;
    r[351] = -4076;
    q[352] = 2221;
    r[352] = 3440;
    q[353] = -302;
    r[353] = 4084;
    q[354] = 4083;
    r[354] = -323;
    q[355] = -2253;
    r[355] = -3420;
    q[356] = -3038;
    r[356] = 2746;
    q[357] = 2884;
    r[357] = 2908;
    q[358] = 4070;
    r[358] = 454;
    q[359] = -1072;
    r[359] = -3953;
    q[360] = 3831;
    r[360] = 1449;
    q[361] = 3663;
    r[361] = -1831;
    q[362] = -1971;
    r[362] = 3590;
    q[363] = 3226;
    r[363] = -2522;
    q[364] = -145;
    r[364] = -4093;
    q[365] = 1882;
    r[365] = -3637;
    q[366] = 529;
    r[366] = 4061;
    q[367] = 2637;
    r[367] = 3133;
    q[368] = -4077;
    r[368] = 389;
    q[369] = 2156;
    r[369] = -3482;
    q[370] = -3276;
    r[370] = 2458;
    q[371] = -2687;
    r[371] = -3090;
    q[372] = 3469;
    r[372] = -2177;
    q[373] = -4093;
    r[373] = -139;
    q[374] = -850;
    r[374] = 4006;
    q[375] = -625;
    r[375] = 4048;
    q[376] = 1110;
    r[376] = -3942;
    q[377] = -3078;
    r[377] = -2702;
    q[378] = -2719;
    r[378] = 3063;
    q[379] = 742;
    r[379] = 4028;
    q[380] = -3902;
    r[380] = -1245;
    q[381] = 3888;
    r[381] = -1287;
    q[382] = -4081;
    r[382] = 347;
    q[383] = 1070;
    r[383] = 3953;
    q[384] = -996;
    r[384] = -3972;
    q[385] = 4041;
    r[385] = -668;
    q[386] = -2712;
    r[386] = 3069;
    q[387] = -3403;
    r[387] = -2279;
    q[388] = -3320;
    r[388] = -2398;
    q[389] = 3036;
    r[389] = -2749;
    q[390] = 1308;
    r[390] = -3881;
    q[391] = 2256;
    r[391] = 3418;
    q[392] = -1486;
    r[392] = 3816;
    q[393] = -2771;
    r[393] = -3015;
    q[394] = -3883;
    r[394] = -1302;
    q[395] = -3867;
    r[395] = -1349;
    q[396] = 3952;
    r[396] = -1075;
    q[397] = -789;
    r[397] = 4019;
    q[398] = 1458;
    r[398] = 3827;
    q[399] = 3832;
    r[399] = -1446;
    q[400] = -3001;
    r[400] = -2787;
    q[401] = 3463;
    r[401] = 2186;
    q[402] = 3606;
    r[402] = 1942;
    q[403] = 4023;
    r[403] = 764;
    q[404] = 3387;
    r[404] = 2303;
    q[405] = 2648;
    r[405] = -3124;
    q[406] = 1370;
    r[406] = -3860;
    q[407] = -3134;
    r[407] = 2636;
    q[408] = 4051;
    r[408] = -600;
    q[409] = -1977;
    r[409] = -3587;
    q[410] = 3160;
    r[410] = 2605;
    q[411] = 4042;
    r[411] = 659;
    q[412] = 3004;
    r[412] = 2783;
    q[413] = 3370;
    r[413] = 2327;
    q[414] = -419;
    r[414] = -4074;
    q[415] = -1968;
    r[415] = 3591;
    q[416] = -3705;
    r[416] = -1746;
    q[417] = -3331;
    r[417] = -2383;
    q[418] = -3634;
    r[418] = 1888;
    q[419] = -1981;
    r[419] = -3584;
    q[420] = 4069;
    r[420] = -469;
    q[421] = -628;
    r[421] = -4047;
    q[422] = -1900;
    r[422] = 3628;
    q[423] = 1039;
    r[423] = -3961;
    q[424] = 2554;
    r[424] = -3201;
    q[425] = -2955;
    r[425] = 2836;
    q[426] = 2286;
    r[426] = -3398;
    q[427] = -1624;
    r[427] = 3760;
    q[428] = 2213;
    r[428] = 3446;
    q[429] = -3989;
    r[429] = -926;
    q[430] = 192;
    r[430] = -4091;
    q[431] = -723;
    r[431] = 4031;
    q[432] = 2878;
    r[432] = 2913;
    q[433] = -2109;
    r[433] = 3511;
    q[434] = 1463;
    r[434] = -3825;
    q[435] = -741;
    r[435] = -4028;
    q[436] = -1314;
    r[436] = -3879;
    q[437] = 3115;
    r[437] = 2659;
    q[438] = -3160;
    r[438] = -2605;
    q[439] = 1868;
    r[439] = 3644;
    q[440] = -824;
    r[440] = 4012;
    q[441] = 781;
    r[441] = 4020;
    q[442] = -1257;
    r[442] = -3898;
    q[443] = 3331;
    r[443] = -2382;
    q[444] = 1642;
    r[444] = -3752;
    q[445] = 3748;
    r[445] = -1650;
    q[446] = -487;
    r[446] = -4066;
    q[447] = 3085;
    r[447] = -2694;
    q[448] = 4009;
    r[448] = 839;
    q[449] = -2308;
    r[449] = -3383;
    q[450] = 3850;
    r[450] = 1397;
    q[451] = -4078;
    r[451] = -374;
    q[452] = 2989;
    r[452] = -2799;
    q[453] = 3023;
    r[453] = -2762;
    q[454] = 1397;
    r[454] = -3850;
    q[455] = 323;
    r[455] = 4083;
    q[456] = 268;
    r[456] = -4087;
    q[457] = 2414;
    r[457] = 3308;
    q[458] = 3876;
    r[458] = 1322;
    q[459] = -3584;
    r[459] = 1982;
    q[460] = 1603;
    r[460] = 3769;
    q[461] = -1502;
    r[461] = 3810;
    q[462] = 1318;
    r[462] = 3878;
    q[463] = 1554;
    r[463] = -3789;
    q[464] = 2492;
    r[464] = 3250;
    q[465] = -4093;
    r[465] = -154;
    q[466] = 4008;
    r[466] = 842;
    q[467] = -2279;
    r[467] = 3403;
    q[468] = 3013;
    r[468] = 2774;
    q[469] = 2557;
    r[469] = 3199;
    q[470] = 4068;
    r[470] = 475;
    q[471] = 3324;
    r[471] = -2392;
    q[472] = 2653;
    r[472] = -3120;
    q[473] = 796;
    r[473] = 4017;
    q[474] = -1312;
    r[474] = 3880;
    q[475] = 1794;
    r[475] = 3681;
    q[476] = -2347;
    r[476] = -3356;
    q[477] = -4008;
    r[477] = -840;
    q[478] = -3773;
    r[478] = -1592;
    q[479] = 1609;
    r[479] = 3766;
    q[480] = -1564;
    r[480] = -3785;
    q[481] = 3004;
    r[481] = 2784;
    q[482] = 1258;
    r[482] = 3897;
    q[483] = 3729;
    r[483] = 1693;
    q[484] = -4095;
    r[484] = -28;
    q[485] = -4093;
    r[485] = -146;
    q[486] = 1393;
    r[486] = -3851;
    q[487] = 297;
    r[487] = -4085;
    q[488] = 2294;
    r[488] = 3393;
    q[489] = -2562;
    r[489] = 3195;
    q[490] = -1716;
    r[490] = -3718;
    q[491] = 2224;
    r[491] = -3439;
    q[492] = 2032;
    r[492] = 3555;
    q[493] = -2968;
    r[493] = 2822;
    q[494] = 2338;
    r[494] = 3363;
    q[495] = 1584;
    r[495] = -3776;
    q[496] = -3072;
    r[496] = 2708;
    q[497] = -1596;
    r[497] = -3771;
    q[498] = -2256;
    r[498] = -3418;
    q[499] = 4095;
    r[499] = 89;
    q[500] = -1949;
    r[500] = 3602;
    q[501] = 1844;
    r[501] = 3657;
    q[502] = -3375;
    r[502] = 2319;
    q[503] = -1481;
    r[503] = -3818;
    q[504] = 3228;
    r[504] = -2520;
    q[505] = 1116;
    r[505] = 3940;
    q[506] = -2783;
    r[506] = 3004;
    q[507] = 3915;
    r[507] = 1201;
    q[508] = 283;
    r[508] = 4086;
    q[509] = -3732;
    r[509] = 1685;
    q[510] = -433;
    r[510] = -4072;
    q[511] = -3667;
    r[511] = 1823;
    q[512] = 3883;
    r[512] = 1300;
    q[513] = -3742;
    r[513] = 1663;
    q[514] = 4093;
    r[514] = -143;
    q[515] = 3874;
    r[515] = 1328;
    q[516] = -3800;
    r[516] = 1528;
    q[517] = -1257;
    r[517] = 3898;
    q[518] = -1606;
    r[518] = 3767;
    q[519] = 3394;
    r[519] = 2291;
    q[520] = 2255;
    r[520] = 3419;
    q[521] = -4094;
    r[521] = 120;
    q[522] = -3767;
    r[522] = 1606;
    q[523] = 1849;
    r[523] = -3654;
    q[524] = -2883;
    r[524] = 2908;
    q[525] = 3469;
    r[525] = 2176;
    q[526] = 2654;
    r[526] = 3119;
    q[527] = -239;
    r[527] = 4088;
    q[528] = -651;
    r[528] = 4043;
    q[529] = -1140;
    r[529] = 3934;
    q[530] = 328;
    r[530] = -4082;
    q[531] = 3246;
    r[531] = 2497;
    q[532] = 4026;
    r[532] = -753;
    q[533] = -2041;
    r[533] = -3550;
    q[534] = -1154;
    r[534] = 3929;
    q[535] = -2710;
    r[535] = 3070;
    q[536] = -2860;
    r[536] = 2932;
    q[537] = 2097;
    r[537] = 3517;
    q[538] = 3492;
    r[538] = -2140;
    q[539] = 3123;
    r[539] = 2649;
    q[540] = 3360;
    r[540] = 2342;
    q[541] = 2498;
    r[541] = 3245;
    q[542] = 3976;
    r[542] = 982;
    q[543] = -2441;
    r[543] = -3288;
    q[544] = 3601;
    r[544] = 1951;
    q[545] = -4008;
    r[545] = -842;
    q[546] = 1243;
    r[546] = 3902;
    q[547] = 4069;
    r[547] = 466;
    q[548] = -2031;
    r[548] = 3556;
    q[549] = 4077;
    r[549] = 386;
    q[550] = -3112;
    r[550] = -2663;
    q[551] = 4087;
    r[551] = -262;
    q[552] = 4087;
    r[552] = 266;
    q[553] = -3907;
    r[553] = -1228;
    q[554] = -1611;
    r[554] = 3765;
    q[555] = 3066;
    r[555] = -2715;
    q[556] = 2657;
    r[556] = 3117;
    q[557] = 3912;
    r[557] = -1213;
    q[558] = -2531;
    r[558] = -3220;
    q[559] = 3500;
    r[559] = -2127;
    q[560] = -76;
    r[560] = -4095;
    q[561] = 3413;
    r[561] = -2264;
    q[562] = -4071;
    r[562] = -448;
    q[563] = 828;
    r[563] = 4011;
    q[564] = 3664;
    r[564] = 1830;
    q[565] = -1578;
    r[565] = 3779;
    q[566] = 3555;
    r[566] = 2033;
    q[567] = 3868;
    r[567] = -1345;
    q[568] = 4054;
    r[568] = -580;
    q[569] = -4094;
    r[569] = 124;
    q[570] = -3820;
    r[570] = -1477;
    q[571] = -3658;
    r[571] = -1842;
    q[572] = 2595;
    r[572] = 3168;
    q[573] = 3354;
    r[573] = 2350;
    q[574] = -701;
    r[574] = -4035;
    q[575] = -772;
    r[575] = -4022;
    q[576] = 2799;
    r[576] = 2990;
    q[577] = -3632;
    r[577] = 1893;
    q[578] = 310;
    r[578] = 4084;
    q[579] = 3984;
    r[579] = -947;
    q[580] = 3794;
    r[580] = -1542;
    q[581] = -2419;
    r[581] = 3304;
    q[582] = -3916;
    r[582] = 1200;
    q[583] = -3886;
    r[583] = 1292;
    q[584] = -3299;
    r[584] = 2426;
    q[585] = -437;
    r[585] = 4072;
    q[586] = 2053;
    r[586] = -3544;
    q[587] = 3987;
    r[587] = 937;
    q[588] = -789;
    r[588] = -4019;
    q[589] = 4055;
    r[589] = -575;
    q[590] = -3894;
    r[590] = 1270;
    q[591] = 4003;
    r[591] = -864;
    q[592] = -3060;
    r[592] = 2721;
    q[593] = -4009;
    r[593] = 836;
    q[594] = -1655;
    r[594] = -3746;
    q[595] = 3954;
    r[595] = -1067;
    q[596] = -773;
    r[596] = 4022;
    q[597] = -422;
    r[597] = 4074;
    q[598] = -3384;
    r[598] = 2306;
    q[599] = 195;
    r[599] = -4091;
    q[600] = -298;
    r[600] = 4085;
    q[601] = -3988;
    r[601] = 931;
    q[602] = 2014;
    r[602] = -3566;
    q[603] = 3349;
    r[603] = -2357;
    q[604] = 3800;
    r[604] = 1526;
    q[605] = 3858;
    r[605] = 1374;
    q[606] = 2947;
    r[606] = 2844;
    q[607] = -1483;
    r[607] = -3818;
    q[608] = 4056;
    r[608] = -565;
    q[609] = 2612;
    r[609] = -3154;
    q[610] = 2326;
    r[610] = 3371;
    q[611] = -3545;
    r[611] = 2051;
    q[612] = -1001;
    r[612] = -3971;
    q[613] = 3211;
    r[613] = 2541;
    q[614] = -2717;
    r[614] = 3065;
    q[615] = -3159;
    r[615] = -2606;
    q[616] = 2869;
    r[616] = -2922;
    q[617] = -1290;
    r[617] = -3887;
    q[618] = 2479;
    r[618] = 3260;
    q[619] = 3420;
    r[619] = 2252;
    q[620] = 1823;
    r[620] = 3667;
    q[621] = 3368;
    r[621] = 2330;
    q[622] = -3819;
    r[622] = -1480;
    q[623] = 3800;
    r[623] = 1528;
    q[624] = 3773;
    r[624] = 1594;
    q[625] = -189;
    r[625] = -4091;
    q[626] = -4067;
    r[626] = -485;
    q[627] = 2277;
    r[627] = -3404;
    q[628] = -4089;
    r[628] = -233;
    q[629] = -3634;
    r[629] = 1889;
    q[630] = 3292;
    r[630] = 2437;
    q[631] = -530;
    r[631] = 4061;
    q[632] = -3109;
    r[632] = 2666;
    q[633] = -3741;
    r[633] = 1667;
    q[634] = -1903;
    r[634] = -3626;
    q[635] = 3879;
    r[635] = -1315;
    q[636] = 4083;
    r[636] = -315;
    q[637] = -1148;
    r[637] = 3931;
    q[638] = 2630;
    r[638] = 3139;
    q[639] = -4001;
    r[639] = 876;
    q[640] = -2295;
    r[640] = -3392;
    q[641] = 1090;
    r[641] = -3948;
    q[642] = -3024;
    r[642] = 2762;
    q[643] = 2728;
    r[643] = -3054;
    q[644] = -3305;
    r[644] = 2419;
    q[645] = 60;
    r[645] = 4095;
    q[646] = 4048;
    r[646] = -620;
    q[647] = 589;
    r[647] = -4053;
    q[648] = -3867;
    r[648] = 1347;
    q[649] = -2944;
    r[649] = -2847;
    q[650] = -2721;
    r[650] = 3060;
    q[651] = 2928;
    r[651] = 2863;
    q[652] = 801;
    r[652] = 4016;
    q[653] = -3644;
    r[653] = 1870;
    q[654] = -1648;
    r[654] = -3749;
    q[655] = 825;
    r[655] = -4012;
    q[656] = -2036;
    r[656] = -3553;
    q[657] = -1192;
    r[657] = -3918;
    q[658] = 2875;
    r[658] = 2916;
    q[659] = -1831;
    r[659] = -3663;
    q[660] = -2865;
    r[660] = -2926;
    q[661] = -575;
    r[661] = -4055;
    q[662] = -3870;
    r[662] = 1340;
    q[663] = -4080;
    r[663] = -356;
    q[664] = -2176;
    r[664] = -3469;
    q[665] = -2986;
    r[665] = -2803;
    q[666] = 3978;
    r[666] = -972;
    q[667] = 2437;
    r[667] = 3291;
    q[668] = -3528;
    r[668] = 2080;
    q[669] = -3300;
    r[669] = -2425;
    q[670] = 3085;
    r[670] = 2693;
    q[671] = -3700;
    r[671] = -1756;
    q[672] = 3216;
    r[672] = -2535;
    q[673] = 4094;
    r[673] = -91;
    q[674] = 3775;
    r[674] = -1589;
    q[675] = 1097;
    r[675] = -3946;
    q[676] = -152;
    r[676] = -4093;
    q[677] = -3490;
    r[677] = 2142;
    q[678] = 3747;
    r[678] = 1654;
    q[679] = -1490;
    r[679] = -3815;
    q[680] = -3998;
    r[680] = -886;
    q[681] = 3726;
    r[681] = -1700;
    q[682] = -1600;
    r[682] = 3770;
    q[683] = -87;
    r[683] = 4095;
    q[684] = 2538;
    r[684] = -3214;
    q[685] = -4095;
    r[685] = 52;
    q[686] = -3993;
    r[686] = -910;
    q[687] = 4051;
    r[687] = 603;
    q[688] = -1242;
    r[688] = -3902;
    q[689] = 2155;
    r[689] = 3482;
    q[690] = 1270;
    r[690] = 3893;
    q[691] = 1919;
    r[691] = -3618;
    q[692] = -3145;
    r[692] = 2623;
    q[693] = 2475;
    r[693] = 3263;
    q[694] = 2226;
    r[694] = -3437;
    q[695] = -3894;
    r[695] = -1269;
    q[696] = -429;
    r[696] = 4073;
    q[697] = -1346;
    r[697] = 3868;
    q[698] = 1297;
    r[698] = 3885;
    q[699] = 1699;
    r[699] = 3726;
    q[700] = -3375;
    r[700] = 2319;
    q[701] = 1577;
    r[701] = -3779;
    q[702] = -63;
    r[702] = 4095;
    q[703] = 1215;
    r[703] = -3911;
    q[704] = -1492;
    r[704] = 3814;
    q[705] = -1530;
    r[705] = -3799;
    q[706] = 3442;
    r[706] = 2218;
    q[707] = -3867;
    r[707] = -1349;
    q[708] = -3291;
    r[708] = -2437;
    q[709] = -2253;
    r[709] = -3420;
    q[710] = -150;
    r[710] = -4093;
    q[711] = -2686;
    r[711] = -3092;
    q[712] = 3470;
    r[712] = 2175;
    q[713] = -3826;
    r[713] = -1461;
    q[714] = -3148;
    r[714] = 2619;
    q[715] = -3858;
    r[715] = 1375;
    q[716] = -3844;
    r[716] = -1412;
    q[717] = -3652;
    r[717] = 1854;
    q[718] = 4018;
    r[718] = -791;
    q[719] = 179;
    r[719] = -4092;
    q[720] = 3498;
    r[720] = 2129;
    q[721] = -1999;
    r[721] = -3574;
    q[722] = 3531;
    r[722] = 2075;
    q[723] = 4050;
    r[723] = -606;
    q[724] = -1639;
    r[724] = 3753;
    q[725] = -3661;
    r[725] = 1835;
    q[726] = 4039;
    r[726] = 679;
    q[727] = 3561;
    r[727] = 2023;
    q[728] = 528;
    r[728] = 4061;
    q[729] = -634;
    r[729] = -4046;
    q[730] = 364;
    r[730] = -4079;
    q[731] = 2735;
    r[731] = 3048;
    q[732] = 3978;
    r[732] = 973;
    q[733] = -4073;
    r[733] = -427;
    q[734] = -3722;
    r[734] = 1708;
    q[735] = 2356;
    r[735] = -3350;
    q[736] = -1125;
    r[736] = -3938;
    q[737] = 4054;
    r[737] = 580;
    q[738] = 3328;
    r[738] = -2387;
    q[739] = 1439;
    r[739] = -3834;
    q[740] = 1746;
    r[740] = 3705;
    q[741] = 2507;
    r[741] = 3238;
    q[742] = 3839;
    r[742] = -1427;
    q[743] = 488;
    r[743] = -4066;
    q[744] = 1187;
    r[744] = 3920;
    q[745] = 2038;
    r[745] = -3552;
    q[746] = -905;
    r[746] = -3994;
    q[747] = -236;
    r[747] = 4089;
    q[748] = 208;
    r[748] = -4090;
    q[749] = 1660;
    r[749] = 3744;
    q[750] = -4074;
    r[750] = -415;
    q[751] = -2304;
    r[751] = 3385;
    q[752] = -2457;
    r[752] = 3276;
    q[753] = 3302;
    r[753] = 2423;
    q[754] = 1778;
    r[754] = -3689;
    q[755] = 2019;
    r[755] = 3563;
    q[756] = 4037;
    r[756] = 687;
    q[757] = -2365;
    r[757] = 3343;
    q[758] = 5;
    r[758] = -4095;
    q[759] = 160;
    r[759] = -4092;

} /*initRand*/

/**
 * initializes the MEL-2_LINEAR LOOKUP TABLE
 * @param   sig_inObj : sig PU internal object of the sub-object
 * @return  void
 * @remarks translated from matlab code to c-code
 * @callgraph
 * @callergraph
 *
 *  input
 *  - bilinTab : base address of bilinTable destination vector
 *  - alpha : warping factor
 *  - size : size of the vectors to be generated
 *  - A,B : base address of array of indexes for lookup table implementation
 *  - D : base address of delta array for lookup table implementation
 *
 *  output
 *  - bilinTab, A, B, D  : initialized vectors
 */
void mel_2_lin_init(sig_innerobj_t *sig_inObj)
{

    /*Declare variables tied to  I/O PARAMS formerly passed by value or reference*/
    picoos_single alpha;
    picoos_int32 *D;
    picoos_int32 size;
    picoos_int16 *A;

    /*Link local variables with sig data object*/

    alpha = sig_inObj->warp_p;
    size = (sig_inObj->hfftsize_p) + 1;
    A = sig_inObj->A_p;
    D = sig_inObj->d_p;
    /*
     fixed point interpolation tables
     scaling factor: 0x20
     corresponding bit shift: 5
     */

    A[0] = 0;
    D[0] = 0;
    A[1] = 2;
    D[1] = 14;
    A[2] = 4;
    D[2] = 29;
    A[3] = 7;
    D[3] = 11;
    A[4] = 9;
    D[4] = 24;
    A[5] = 12;
    D[5] = 5;
    A[6] = 14;
    D[6] = 18;
    A[7] = 16;
    D[7] = 30;
    A[8] = 19;
    D[8] = 9;
    A[9] = 21;
    D[9] = 19;
    A[10] = 23;
    D[10] = 29;
    A[11] = 26;
    D[11] = 5;
    A[12] = 28;
    D[12] = 12;
    A[13] = 30;
    D[13] = 19;
    A[14] = 32;
    D[14] = 24;
    A[15] = 34;
    D[15] = 27;
    A[16] = 36;
    D[16] = 30;
    A[17] = 38;
    D[17] = 31;
    A[18] = 40;
    D[18] = 31;
    A[19] = 42;
    D[19] = 29;
    A[20] = 44;
    D[20] = 26;
    A[21] = 46;
    D[21] = 22;
    A[22] = 48;
    D[22] = 17;
    A[23] = 50;
    D[23] = 10;
    A[24] = 52;
    D[24] = 2;
    A[25] = 53;
    D[25] = 24;
    A[26] = 55;
    D[26] = 13;
    A[27] = 57;
    D[27] = 1;
    A[28] = 58;
    D[28] = 20;
    A[29] = 60;
    D[29] = 5;
    A[30] = 61;
    D[30] = 21;
    A[31] = 63;
    D[31] = 4;
    A[32] = 64;
    D[32] = 18;
    A[33] = 65;
    D[33] = 31;
    A[34] = 67;
    D[34] = 11;
    A[35] = 68;
    D[35] = 21;
    A[36] = 69;
    D[36] = 31;
    A[37] = 71;
    D[37] = 7;
    A[38] = 72;
    D[38] = 14;
    A[39] = 73;
    D[39] = 21;
    A[40] = 74;
    D[40] = 27;
    A[41] = 75;
    D[41] = 31;
    A[42] = 77;
    D[42] = 3;
    A[43] = 78;
    D[43] = 6;
    A[44] = 79;
    D[44] = 8;
    A[45] = 80;
    D[45] = 10;
    A[46] = 81;
    D[46] = 10;
    A[47] = 82;
    D[47] = 10;
    A[48] = 83;
    D[48] = 9;
    A[49] = 84;
    D[49] = 8;
    A[50] = 85;
    D[50] = 6;
    A[51] = 86;
    D[51] = 3;
    A[52] = 86;
    D[52] = 31;
    A[53] = 87;
    D[53] = 27;
    A[54] = 88;
    D[54] = 23;
    A[55] = 89;
    D[55] = 18;
    A[56] = 90;
    D[56] = 12;
    A[57] = 91;
    D[57] = 6;
    A[58] = 91;
    D[58] = 31;
    A[59] = 92;
    D[59] = 24;
    A[60] = 93;
    D[60] = 16;
    A[61] = 94;
    D[61] = 8;
    A[62] = 94;
    D[62] = 31;
    A[63] = 95;
    D[63] = 22;
    A[64] = 96;
    D[64] = 13;
    A[65] = 97;
    D[65] = 3;
    A[66] = 97;
    D[66] = 25;
    A[67] = 98;
    D[67] = 14;
    A[68] = 99;
    D[68] = 3;
    A[69] = 99;
    D[69] = 24;
    A[70] = 100;
    D[70] = 13;
    A[71] = 101;
    D[71] = 1;
    A[72] = 101;
    D[72] = 21;
    A[73] = 102;
    D[73] = 8;
    A[74] = 102;
    D[74] = 27;
    A[75] = 103;
    D[75] = 14;
    A[76] = 104;
    D[76] = 1;
    A[77] = 104;
    D[77] = 19;
    A[78] = 105;
    D[78] = 6;
    A[79] = 105;
    D[79] = 24;
    A[80] = 106;
    D[80] = 9;
    A[81] = 106;
    D[81] = 27;
    A[82] = 107;
    D[82] = 12;
    A[83] = 107;
    D[83] = 29;
    A[84] = 108;
    D[84] = 14;
    A[85] = 108;
    D[85] = 31;
    A[86] = 109;
    D[86] = 15;
    A[87] = 109;
    D[87] = 31;
    A[88] = 110;
    D[88] = 16;
    A[89] = 110;
    D[89] = 31;
    A[90] = 111;
    D[90] = 15;
    A[91] = 111;
    D[91] = 31;
    A[92] = 112;
    D[92] = 14;
    A[93] = 112;
    D[93] = 30;
    A[94] = 113;
    D[94] = 13;
    A[95] = 113;
    D[95] = 28;
    A[96] = 114;
    D[96] = 11;
    A[97] = 114;
    D[97] = 26;
    A[98] = 115;
    D[98] = 9;
    A[99] = 115;
    D[99] = 23;
    A[100] = 116;
    D[100] = 6;
    A[101] = 116;
    D[101] = 20;
    A[102] = 117;
    D[102] = 2;
    A[103] = 117;
    D[103] = 16;
    A[104] = 117;
    D[104] = 31;
    A[105] = 118;
    D[105] = 13;
    A[106] = 118;
    D[106] = 27;
    A[107] = 119;
    D[107] = 8;
    A[108] = 119;
    D[108] = 22;
    A[109] = 120;
    D[109] = 4;
    A[110] = 120;
    D[110] = 17;
    A[111] = 120;
    D[111] = 31;
    A[112] = 121;
    D[112] = 13;
    A[113] = 121;
    D[113] = 26;
    A[114] = 122;
    D[114] = 8;
    A[115] = 122;
    D[115] = 21;
    A[116] = 123;
    D[116] = 2;
    A[117] = 123;
    D[117] = 15;
    A[118] = 123;
    D[118] = 29;
    A[119] = 124;
    D[119] = 10;
    A[120] = 124;
    D[120] = 23;
    A[121] = 125;
    D[121] = 4;
    A[122] = 125;
    D[122] = 17;
    A[123] = 125;
    D[123] = 31;
    A[124] = 126;
    D[124] = 12;
    A[125] = 126;
    D[125] = 25;
    A[126] = 127;
    D[126] = 6;
    A[127] = 127;
    D[127] = 19;
    A[128] = 128;
    D[128] = 0;

}/*mel_2_lin_init*/

/**
 * function to be documented
 * @param    ang : ??
 * @param    table : ??
 * @param    cs : ??
 * @param    sn : ??
 * @return  void
 * @callgraph
 * @callergraph
 */
static void get_trig(picoos_int32 ang, picoos_int32 *table, picoos_int32 *cs,
        picoos_int32 *sn)
{
    picoos_int32 i, j, k;

    i = k = ang >> PICODSP_PI_SHIFT; /*  * PICODSP_COS_TABLE_LEN2/PICODSP_FIX_SCALE2 */
    if (i < 0)
        i = -i;
    j = 1;
    i &= (PICODSP_COS_TABLE_LEN4 - 1);
    if (i > PICODSP_COS_TABLE_LEN2)
        i = PICODSP_COS_TABLE_LEN4 - i;
    if (i > PICODSP_COS_TABLE_LEN) {
        j = -1;
        i = PICODSP_COS_TABLE_LEN2 - i;
    }
    if (j == 1)
        *cs = table[i];
    else
        *cs = -table[i];

    i = k - PICODSP_COS_TABLE_LEN;
    if (i < 0)
        i = -i;
    j = 1;
    i &= (PICODSP_COS_TABLE_LEN4 - 1);
    if (i > PICODSP_COS_TABLE_LEN2)
        i = PICODSP_COS_TABLE_LEN4 - i;
    if (i > PICODSP_COS_TABLE_LEN) {
        j = -1;
        i = PICODSP_COS_TABLE_LEN2 - i;
    }
    if (j == 1)
        *sn = table[i];
    else
        *sn = -table[i];
}/*get_trig*/

/**
 * function to be documented
 * @param    sig_inObj : sig PU internal object of the sub-object
 * @return  void
 * @callgraph
 * @callergraph
 */
void save_transition_frame(sig_innerobj_t *sig_inObj)
{
    picoos_int32 *tmp, *tmp2; /*for loop unrolling*/

    if (sig_inObj->voiced_p != sig_inObj->prevVoiced_p) {
        sig_inObj->VoicTrans = sig_inObj->prevVoiced_p; /*remember last voicing transition*/
        tmp = sig_inObj->ImpResp_p;
        tmp2 = sig_inObj->imp_p;
        FAST_DEVICE(PICODSP_FFTSIZE,*(tmp++)=*(tmp2++););
        if (sig_inObj->voiced_p == 1)
            sig_inObj->nV = 0;
        else
            sig_inObj->nU = 0; /*to avoid problems in case of very short voiced or unvoiced parts (less than 4 frames long)*/
    }
}/*save_transition_frame*/

/**
 * calculates an unweighted excitation window
 * @param    sig_inObj : sig PU internal object of the sub-object
 * @param    nextPeak : position of next peak (excitation position)
 * @return  PICO_OK
 * @callgraph
 * @callergraph
 * input
 * - hop : hop size in samples
 * - winlen : excitation window length
 * - E : energy
 * - F0 : pitch
 * - nextPeak : state that remembers next excitation index
 * - Fs - sampling frequency
 * output
 * - LocV, LocU : (MAX_EN size) location of excitation points
 * - EnV,  EnU    : (MAX_EN size) RMS values of excitation (scaled)
 * - nV, nU :    (integers) number of excitation points
 * - nextPeak    new position of lastPeak to calculate next frame
 */
static void get_simple_excitation(sig_innerobj_t *sig_inObj,
        picoos_int16 *nextPeak)
{
    /*Define local variables*/
    picoos_int16 nI, nJ, k;
    /* picoos_single    InvSqrt3=(picoos_single)2/(picoos_single)sqrt(3.0); *//*constant*/
    picoos_int32 Ti, sqrtTi;
    picoos_int16 hop, winlen, Fs;
    picoos_single E, F0;
    picoos_int16 voiced;
    picoos_single fact; /*normalization factor*/
    picoos_single rounding = 0.5f;

    /*Link local variables to sig object*/
    hop = sig_inObj->hop_p;
    winlen = sig_inObj->m2_p;
    Fs = sig_inObj->Fs_p;
    E = sig_inObj->E_p;
    F0 = sig_inObj->F0_p;
    voiced = sig_inObj->voiced_p;

    /* shift previous excitation window by hop samples*/
    for (nI = 0; nI < sig_inObj->nV; nI++) {
        sig_inObj->LocV[nI] = sig_inObj->LocV[nI] - hop;
    }
    for (nI = 0; nI < sig_inObj->nU; nI++) {
        sig_inObj->LocU[nI] = sig_inObj->LocU[nI] - hop;
    }

    /*get rid of the voiced points that fall out of the interval*/
    nI = 0;
    while ((sig_inObj->LocV[nI] < 0) && nI < sig_inObj->nV)
        nI++;

    for (nJ = nI; nJ < sig_inObj->nV; nJ++) {
        sig_inObj->LocV[nJ - nI] = sig_inObj->LocV[nJ];
        sig_inObj->EnV[nJ - nI] = sig_inObj->EnV[nJ];
    }
    sig_inObj->nV -= nI;
    /*get rid of the unvoiced points that fall out of the interval */
    nI = 0;
    while ((sig_inObj->LocU[nI] < 0) && nI < sig_inObj->nU)
        nI++;

    for (nJ = nI; nJ < sig_inObj->nU; nJ++) {
        sig_inObj->LocU[nJ - nI] = sig_inObj->LocU[nJ];
        sig_inObj->EnU[nJ - nI] = sig_inObj->EnU[nJ];
    }
    sig_inObj->nU -= nI;

    *nextPeak -= hop;
    k = *nextPeak;

    fact = 3;
    if (voiced == 0) { /*Unvoiced*/

        Ti = (picoos_int32) (rounding + (picoos_single) Fs
                / (picoos_single) sig_inObj->Fuv_p); /* round Period*/
        sqrtTi = (picoos_int32) (E * sqrt((double) Fs
                / (hop * sig_inObj->Fuv_p)) * fact * PICODSP_GETEXC_K1);
        while (k < winlen) {
            if (k < winlen) {
                sig_inObj->LocU[sig_inObj->nU] = k;
                sig_inObj->EnU[sig_inObj->nU] = sqrtTi;
                sig_inObj->nU++;
                k += (picoos_int16) Ti;
            }
        }
    } else { /*Voiced*/
        Ti
                = (picoos_int32) (rounding + (picoos_single) Fs
                        / (picoos_single) F0); /*Period*/
        sqrtTi = (picoos_int32) (E
                * sqrt((double) Fs / (hop * sig_inObj->F0_p)) * fact
                * PICODSP_GETEXC_K1);
        while (k < winlen) {
            sig_inObj->LocV[sig_inObj->nV] = k;
            sig_inObj->EnV[sig_inObj->nV] = sqrtTi;
            sig_inObj->nV++;
            k += (picoos_int16) Ti;
        }
    }
    *nextPeak = k;

}/*get_simple_excitation*/

#ifdef __cplusplus
}
#endif

/* end picosig2.c */
