4097 lines
96 KiB
C
4097 lines
96 KiB
C
/*
|
|
* 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_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 resetMode)
|
|
{
|
|
picoos_int32 i, j;
|
|
picoos_int32 *pnt;
|
|
|
|
if (resetMode == PICO_RESET_SOFT) {
|
|
/*minimal initialization when receiving a soft reset */
|
|
return;
|
|
}
|
|
/*-----------------------------------------------------------------
|
|
* 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 - 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;
|
|
|
|
E = (E > 5) ? 9 : (E > 1) ? 2 * E - 1 : E;
|
|
|
|
|
|
/* 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 */
|