| /* |
| * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| /** |
| * @file picosig2.c |
| * |
| * Signal Generation PU - Internal functions - Implementation |
| * |
| * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland |
| * All rights reserved. |
| * |
| * History: |
| * - 2009-04-20 -- initial version |
| * |
| */ |
| #include "picoos.h" |
| #include "picodsp.h" |
| #include "picosig2.h" |
| #include "picofftsg.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| #if 0 |
| } |
| #endif |
| /*--------------------------------------------------------------------------- |
| * INTERNAL FUNCTIONS DECLARATION |
| *---------------------------------------------------------------------------*/ |
| static void gen_hann2(sig_innerobj_t *sig_inObj); |
| static void get_simple_excitation(sig_innerobj_t *sig_inObj, |
| picoos_int16 *nextPeak); |
| static void enh_wind_init(sig_innerobj_t *sig_inObj); |
| static void init_rand(sig_innerobj_t *sig_inObj); |
| static void get_trig(picoos_int32 ang, picoos_int32 *table, picoos_int32 *cs, |
| picoos_int32 *sn); |
| |
| /*--------------------------------------------------------------------------- |
| * PICO SYSTEM FUNCTIONS |
| *---------------------------------------------------------------------------*/ |
| /** |
| * allocation of DSP memory for SIG PU |
| * @param mm : memory manager |
| * @param sig_inObj : sig PU internal object of the sub-object |
| * @return PICO_OK : allocation successful |
| * @return PICO_ERR_OTHER : allocation NOT successful |
| * @callgraph |
| * @callergraph |
| */ |
| pico_status_t sigAllocate(picoos_MemoryManager mm, sig_innerobj_t *sig_inObj) |
| { |
| picoos_int16 *data_i; |
| picoos_int32 *d32; |
| picoos_int32 nCount; |
| |
| sig_inObj->int_vec22 = |
| sig_inObj->int_vec23 = |
| sig_inObj->int_vec24 = |
| sig_inObj->int_vec25 = |
| sig_inObj->int_vec26 = |
| sig_inObj->int_vec28 = |
| sig_inObj->int_vec29 = |
| sig_inObj->int_vec38 = |
| sig_inObj->int_vec30 = |
| sig_inObj->int_vec31 = |
| sig_inObj->int_vec32 = |
| sig_inObj->int_vec33 = |
| sig_inObj->int_vec34 = |
| sig_inObj->int_vec35 = |
| sig_inObj->int_vec36 = |
| sig_inObj->int_vec37 = |
| sig_inObj->int_vec38 = |
| sig_inObj->int_vec39 = |
| sig_inObj->int_vec40 = NULL; |
| |
| sig_inObj->sig_vec1 = NULL; |
| |
| sig_inObj->idx_vect1 = sig_inObj->idx_vect2 = sig_inObj->idx_vect4 = NULL; |
| sig_inObj->idx_vect5 = sig_inObj->idx_vect6 = sig_inObj->idx_vect7 = |
| sig_inObj->idx_vect8 = sig_inObj->idx_vect9 = NULL; |
| sig_inObj->ivalue17 = sig_inObj->ivalue18 = 0; |
| |
| /*----------------------------------------------------------------- |
| * Memory allocations |
| * NOTE : it would be far better to do a single allocation |
| * and to do pointer initialization inside this routine |
| * ------------------------------------------------------------------*/ |
| data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) |
| * PICODSP_FFTSIZE); |
| if (NULL == data_i) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->idx_vect1 = data_i; |
| |
| data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) |
| * PICODSP_HFFTSIZE_P1); |
| if (NULL == data_i) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->idx_vect2 = data_i; |
| |
| data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) |
| * PICODSP_FFTSIZE); |
| if (NULL == data_i) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->idx_vect4 = data_i; |
| |
| data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) |
| * PICODSP_FFTSIZE); |
| if (NULL == data_i) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->idx_vect5 = data_i; |
| |
| data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) |
| * PICODSP_FFTSIZE); |
| if (NULL == data_i) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->idx_vect6 = data_i; |
| |
| data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) |
| * PICODSP_HFFTSIZE_P1); |
| if (NULL == data_i) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->idx_vect7 = data_i; |
| |
| data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) |
| * PICODSP_MAX_EX); |
| if (NULL == data_i) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->idx_vect8 = data_i; |
| |
| data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) |
| * PICODSP_MAX_EX); |
| if (data_i == NULL) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->idx_vect9 = data_i; |
| |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_FFTSIZE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec22 = d32; |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_FFTSIZE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec23 = d32; |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_FFTSIZE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec24 = d32; |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_FFTSIZE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec25 = d32; |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_FFTSIZE * 2); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec26 = d32; |
| |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_FFTSIZE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec28 = d32; |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_FFTSIZE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec29 = d32; |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_FFTSIZE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec38 = d32; |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_FFTSIZE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec30 = d32; |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_FFTSIZE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec31 = d32; |
| |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_FFTSIZE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec32 = d32; |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_FFTSIZE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec33 = d32; |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_N_RAND_TABLE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec34 = d32; |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_N_RAND_TABLE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec35 = d32; |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_N_RAND_TABLE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec36 = d32; |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_N_RAND_TABLE); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec37 = d32; |
| |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_HFFTSIZE_P1); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec39 = d32; |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) * (1 |
| + PICODSP_COS_TABLE_LEN)); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec40 = d32; |
| |
| for (nCount = 0; nCount < CEPST_BUFF_SIZE; nCount++) { |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) * (PICODSP_CEPORDER)); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec41[nCount] = d32; |
| } |
| |
| for (nCount = 0; nCount < PHASE_BUFF_SIZE; nCount++) { |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) * (PICODSP_PHASEORDER)); |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->int_vec42[nCount] = d32; |
| } |
| |
| d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) |
| * PICODSP_FFTSIZE * 2); /* - fixed point */ |
| if (NULL == d32) { |
| sigDeallocate(mm, sig_inObj); |
| return PICO_ERR_OTHER; |
| } |
| sig_inObj->sig_vec1 = d32; |
| |
| return PICO_OK; |
| }/*sigAllocate*/ |
| |
| /** |
| * frees DSP memory for SIG PU |
| * @param mm : memory manager |
| * @param sig_inObj : sig PU internal object of the sub-object |
| * @return void |
| * @callgraph |
| * @callergraph |
| */ |
| void sigDeallocate(picoos_MemoryManager mm, sig_innerobj_t *sig_inObj) |
| { |
| picoos_int32 nCount; |
| /*----------------------------------------------------------------- |
| * Memory de-allocations |
| * ------------------------------------------------------------------*/ |
| if (NULL != sig_inObj->idx_vect1) |
| picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect1)); |
| if (NULL != sig_inObj->idx_vect2) |
| picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect2)); |
| if (NULL != sig_inObj->idx_vect4) |
| picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect4)); |
| if (NULL != sig_inObj->idx_vect5) |
| picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect5)); |
| if (NULL != sig_inObj->idx_vect6) |
| picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect6)); |
| if (NULL != sig_inObj->idx_vect7) |
| picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect7)); |
| if (NULL != sig_inObj->idx_vect8) |
| picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect8)); |
| if (NULL != sig_inObj->idx_vect9) |
| picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect9)); |
| |
| if (NULL != sig_inObj->int_vec22) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec22)); |
| if (NULL != sig_inObj->int_vec23) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec23)); |
| if (NULL != sig_inObj->int_vec24) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec24)); |
| if (NULL != sig_inObj->int_vec25) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec25)); |
| if (NULL != sig_inObj->int_vec26) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec26)); |
| if (NULL != sig_inObj->int_vec28) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec28)); |
| if (NULL != sig_inObj->int_vec29) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec29)); |
| if (NULL != sig_inObj->int_vec38) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec38)); |
| if (NULL != sig_inObj->int_vec30) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec30)); |
| if (NULL != sig_inObj->int_vec31) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec31)); |
| if (NULL != sig_inObj->int_vec32) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec32)); |
| if (NULL != sig_inObj->int_vec33) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec33)); |
| if (NULL != sig_inObj->int_vec34) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec34)); |
| if (NULL != sig_inObj->int_vec35) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec35)); |
| if (NULL != sig_inObj->int_vec36) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec36)); |
| if (NULL != sig_inObj->int_vec37) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec37)); |
| if (NULL != sig_inObj->int_vec39) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec39)); |
| if (NULL != sig_inObj->int_vec40) |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec40)); |
| |
| for (nCount = 0; nCount < CEPST_BUFF_SIZE; nCount++) { |
| if (NULL != sig_inObj->int_vec41[nCount]) { |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec41[nCount])); |
| } |
| } |
| |
| for (nCount = 0; nCount < PHASE_BUFF_SIZE; nCount++) { |
| if (NULL != sig_inObj->int_vec42[nCount]) { |
| picoos_deallocate(mm, (void *) &(sig_inObj->int_vec42[nCount])); |
| } |
| } |
| |
| if (NULL != sig_inObj->sig_vec1) { |
| picoos_deallocate(mm, (void *) &(sig_inObj->sig_vec1)); |
| } |
| }/*sigDeAllocate*/ |
| |
| /** |
| * initializes all memory neededed by DSP at instance creation time |
| * @param sig_inObj : sig PU internal object of the sub-object |
| * @return void |
| * @callgraph |
| * @callergraph |
| */ |
| void sigDspInitialize(sig_innerobj_t *sig_inObj, picoos_int32 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 + 1 - m1); |
| picoos_mem_set(XXr + m1, 0, i); |
| dfct_nmf(m4, XXr); /* DFCT directly in fixed point */ |
| |
| /* ***************************************************************************************** |
| Linear frequency scale envelope through interpolation. |
| Two additions and one multiplication per entry. |
| |
| Optimization of linear interpolation algorithm |
| - Start from 1 and stop at PICODSP_H_FFTSIZE-1 because 0 and PICODSP_H_FFTSIZE are invariant points |
| - B[k]=A[k]+1 except for 0 and PICODSP_H_FFTSIZE |
| - get rid of extra -1 operation by adapting the table A[] |
| |
| *******************************************************************************************/ |
| for (nI = 1; nI < PICODSP_H_FFTSIZE; nI++) { |
| k = A[nI]; |
| term2 = XXr[k]; |
| term1 = XXr[k + 1]; |
| delta = term1 - term2; |
| XXr[nI] = term2 + ((D[nI] * delta) >> 5); /* ok because nI<=A[nI] <=B[nI] */ |
| } |
| }/*mel_2_lin_lookup*/ |
| |
| /** |
| * calculate phase |
| * @remarks voiced phase taken from phase codebook and smoothed, |
| * @remarks unvoiced phase - random |
| * @param sig_inObj : sig PU internal object of the sub-object |
| * @return void |
| * @callgraph |
| * @callergraph |
| */ |
| void phase_spec2(sig_innerobj_t *sig_inObj) |
| { |
| picoos_int16 nI, iRand, firstUV; |
| picoos_int32 *tmp1, *tmp2; |
| picoos_int16 VOXBND_M1; |
| picoos_int32 *spect, *ang; |
| picoos_int16 voiced, m2; |
| picoos_int32 *co, *so, *c, *s, voxbnd, voxbnd2; |
| picoos_int16 i,j, k, n_comp; |
| picoos_int16 *Pvoxbnd; |
| picoos_int32 *phs_p2, *phs_p1, *phs_n1, *phs_n2; |
| picoos_int32 *phs; |
| |
| /*Link local variables to sig data object*/ |
| spect = sig_inObj->wcep_pI; /* spect_p;*/ |
| /* current spect scale : times PICODSP_FIX_SCALE1 */ |
| ang = sig_inObj->ang_p; |
| voxbnd = (picoos_int32) (sig_inObj->voxbnd_p * sig_inObj->voicing); |
| voxbnd2 = sig_inObj->voxbnd2_p; |
| voiced = sig_inObj->voiced_p; |
| m2 = sig_inObj->m2_p; |
| VOXBND_M1 = voxbnd - 1; |
| firstUV = 1; |
| |
| /*code starts here*/ |
| if (voiced == 1) { |
| firstUV = voxbnd; |
| Pvoxbnd = sig_inObj->VoxBndBuff; |
| n_comp = Pvoxbnd[2]; |
| phs_p2 = sig_inObj->PhsBuff[0]; |
| phs_p1 = sig_inObj->PhsBuff[1]; |
| phs = sig_inObj->PhsBuff[2]; |
| phs_n1 = sig_inObj->PhsBuff[3]; |
| phs_n2 = sig_inObj->PhsBuff[4]; |
| |
| /* find and smooth components which have full context */ |
| j = n_comp; |
| for (i=0; i<5; i++) { |
| if (Pvoxbnd[i]<j) j = Pvoxbnd[i]; |
| } |
| for (i=0; i<j; i++) { |
| ang[i] = -(((phs_p2[i]+phs_p1[i]+phs[i]+phs_n1[i]+phs_n2[i])<<6) / 5); |
| } |
| |
| /* find and smooth components which at least one component on each side */ |
| k = n_comp; |
| if (Pvoxbnd[2]<k) k = Pvoxbnd[2]; |
| if (Pvoxbnd[4]<k) k = Pvoxbnd[4]; |
| for (i=j; i<k; i++) { /* smooth using only two surrounding neighbours */ |
| ang[i] = -(((phs_p1[i]+phs[i]+phs_n1[i])<<6) / 3); |
| } |
| |
| /* handle rest of components - at least one side does not exist */ |
| for (i=k; i<n_comp; i++) { |
| ang[i] = -(phs[i]<<6); /* - simple copy without smoothing */ |
| } |
| |
| /*Phase unwrap - cumsum */ |
| tmp1 = &(ang[1]); |
| tmp2 = &(ang[0]); |
| /* current ang scale : PICODSP_M_PI = PICODSP_FIX_SCALE2 */ |
| FAST_DEVICE(VOXBND_M1,*(tmp1++)+=*(tmp2)-PICODSP_FIX_SCALE2;*(tmp2)=(*tmp2>=0)?(*tmp2)>>PICODSP_SHIFT_FACT4:-((-(*tmp2))>>PICODSP_SHIFT_FACT4);tmp2++); |
| *tmp2 = (*tmp2 >= 0) ? (*tmp2) >> PICODSP_SHIFT_FACT4 : -((-(*tmp2)) |
| >> PICODSP_SHIFT_FACT4); /*ang[voxbnd-1]/=2;*/ |
| } |
| |
| /* now for the unvoiced part */ |
| iRand = sig_inObj->iRand; |
| c = sig_inObj->randCosTbl + iRand; |
| s = sig_inObj->randSinTbl + iRand; |
| co = sig_inObj->outCosTbl + firstUV; |
| so = sig_inObj->outSinTbl + firstUV; |
| for (nI = firstUV; nI < PICODSP_HFFTSIZE_P1 - 1; nI++) { |
| *co++ = *c++; |
| *so++ = *s++; |
| } |
| *co = 1; |
| *so = 0; |
| sig_inObj->iRand += (PICODSP_HFFTSIZE_P1 - firstUV); |
| if (sig_inObj->iRand > PICODSP_N_RAND_TABLE - PICODSP_HFFTSIZE_P1) |
| sig_inObj->iRand = 1 + sig_inObj->iRand + PICODSP_HFFTSIZE_P1 |
| - PICODSP_N_RAND_TABLE; |
| }/*phase_spec2*/ |
| |
| /** |
| * Prepare Envelope spectrum for inverse FFT |
| * @param sig_inObj : sig PU internal object of the sub-object |
| * @return void |
| * @remarks make phase bilateral -->> angh (FFT size, real) |
| * @remarks combine in complex input vector for IFFT F = e**(spet/2+j*ang) |
| * @remarks Compute energy -->> E (scalar, real) |
| * @callgraph |
| * @callergraph |
| * Input |
| * - spect (FFT size, real) |
| * - ang (half FFT size -1, real) |
| * - m2 fftsize |
| * - WNr,WNi (FFT size, real) the tabulated sine and cosine values |
| * - brev (FFT size, real) the tabulated bit reversal indexes |
| * Output |
| * - Fr, Fi (FFT size, complex) the envelope spectrum |
| * - E (scalar, real) the energy |
| */ |
| void env_spec(sig_innerobj_t *sig_inObj) |
| { |
| |
| picoos_int16 nI; |
| picoos_int32 fcX, fsX, fExp, voxbnd; |
| picoos_int32 *spect, *ang, *ctbl; |
| picoos_int16 voiced, prev_voiced; |
| picoos_int32 *co, *so; |
| picoos_int32 *Fr, *Fi; |
| picoos_single mult; |
| |
| /*Link local variables to sig object*/ |
| spect = sig_inObj->wcep_pI; /*spect_p*/ |
| /* current spect scale : times PICODSP_FIX_SCALE1 */ |
| ang = sig_inObj->ang_p; |
| /* current spect scale : PICODSP_M_PI = PICODSP_FIX_SCALE2 */ |
| Fr = sig_inObj->F2r_p; |
| Fi = sig_inObj->F2i_p; |
| voiced = sig_inObj->voiced_p; |
| prev_voiced = sig_inObj->prevVoiced_p; |
| voxbnd = (picoos_int32) (sig_inObj->voxbnd_p * sig_inObj->voicing); |
| ctbl = sig_inObj->cos_table; |
| /* ctbl scale : times 4096 */ |
| mult = PICODSP_ENVSPEC_K1 / PICODSP_FIX_SCALE1; |
| |
| /*remove dc from real part*/ |
| if (sig_inObj->F0_p > 120) { |
| spect[0] = spect[1] = 0; |
| spect[2] /= PICODSP_ENVSPEC_K2; |
| } else { |
| spect[0] = 0; |
| } |
| |
| /* if using rand table, use sin and cos tables as well */ |
| if (voiced || (prev_voiced)) { |
| /*Envelope becomes a complex exponential : F=exp(.5*spect + j*angh);*/ |
| for (nI = 0; nI < voxbnd; nI++) { |
| get_trig(ang[nI], ctbl, &fcX, &fsX); |
| fExp = (picoos_int32) EXP((double)spect[nI]*mult); |
| Fr[nI] = fExp * fcX; |
| Fi[nI] = fExp * fsX; |
| } |
| /* ao=sig_inObj->ang_p+(picoos_int32)voxbnd; */ |
| co = sig_inObj->outCosTbl + voxbnd; |
| so = sig_inObj->outSinTbl + voxbnd; |
| |
| for (nI = voxbnd; nI < PICODSP_HFFTSIZE_P1; nI++) { |
| fcX = *co++; |
| fsX = *so++; |
| fExp = (picoos_int32) EXP((double)spect[nI]*mult); |
| Fr[nI] = fExp * fcX; |
| Fi[nI] = fExp * fsX; |
| } |
| } else { |
| /*ao=sig_inObj->ang_p+1;*/ |
| co = sig_inObj->outCosTbl + 1; |
| so = sig_inObj->outSinTbl + 1; |
| for (nI = 1; nI < PICODSP_HFFTSIZE_P1; nI++) { |
| fcX = *co++; |
| fsX = *so++; |
| fExp = (picoos_int32) EXP((double)spect[nI]*mult); |
| |
| Fr[nI] = fExp * fcX; |
| Fi[nI] = fExp * fsX; |
| } |
| } |
| |
| }/*env_spec*/ |
| |
| /** |
| * Calculates the impulse response of the comlpex spectrum through inverse rFFT |
| * @param sig_inObj : sig PU internal object of the sub-object |
| * @return void |
| * @remarks Imp corresponds with the real part of the FFT |
| * @callgraph |
| * @callergraph |
| * Input |
| * - Fr, Fi (FFT size, real & imaginary) the complex envelope spectrum (only first half of spectrum) |
| * Output |
| * - Imp: impulse response (length: m2) |
| * - E (scalar, real) RMS value |
| */ |
| void impulse_response(sig_innerobj_t *sig_inObj) |
| { |
| /*Define local variables*/ |
| picoos_single f; |
| picoos_int16 nI, nn, m2, m4, voiced; |
| picoos_single *E; |
| picoos_int32 *norm_window; /* - fixed point */ |
| picoos_int32 *fr, *Fr, *Fi, *t1, ff; /* - fixed point */ |
| |
| picoos_int32 mx,mn, rat; |
| |
| /*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 */ |
| |
| |
| mx = mn = 0; |
| t1 = fr; |
| FAST_DEVICE(PICODSP_FFTSIZE,if (*t1>mx) mx=*t1; if (*t1<mn) mn=*t1; t1++;); |
| mn = -mn; |
| if (mx>mn) { |
| rat = mx / (mn>>5); /* ratio * 32*/ |
| if (rat > 40) rat = 40; /* 1.25 * 32 */ |
| /* now rat is between 32 and 40 */ |
| switch (rat) { |
| case 32: /* do nothing */ |
| break; |
| case 33: |
| t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(-*t1)>>5; t1++;); |
| break; |
| case 34: |
| t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(-*t1)>>4; t1++;); |
| break; |
| case 35: |
| t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(((-*t1)>>5)+((-*t1)>>4)); t1++;); |
| break; |
| case 36: |
| t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(-*t1)>>3; t1++;); |
| break; |
| case 37: |
| t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(((-*t1)>>5)+((-*t1)>>3)); t1++;); |
| break; |
| case 38: |
| t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(((-*t1)>>4)+((-*t1)>>3)); t1++;); |
| break; |
| case 39: |
| t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(((-*t1)>>5)+((-*t1)>>4) + ((-*t1)>>3)); t1++;); |
| break; |
| case 40: |
| t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,if (*t1<0) *t1-=(-*t1)>>2; t1++;); |
| break; |
| } |
| } |
| |
| } /* 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; |
| |
| if (E>5) E = 4; |
| if (E>1) E *= 2; |
| |
| |
| /* 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 */ |