/* * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @file picosig2.c * * Signal Generation PU - Internal functions - Implementation * * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland * All rights reserved. * * History: * - 2009-04-20 -- initial version * */ #include "picoos.h" #include "picodsp.h" #include "picosig2.h" #include "picofftsg.h" #ifdef __cplusplus extern "C" { #endif #if 0 } #endif /*--------------------------------------------------------------------------- * INTERNAL FUNCTIONS DECLARATION *---------------------------------------------------------------------------*/ static void gen_hann2(sig_innerobj_t *sig_inObj); static void get_simple_excitation(sig_innerobj_t *sig_inObj, picoos_int16 *nextPeak); static void enh_wind_init(sig_innerobj_t *sig_inObj); static void init_rand(sig_innerobj_t *sig_inObj); static void get_trig(picoos_int32 ang, picoos_int32 *table, picoos_int32 *cs, picoos_int32 *sn); /*--------------------------------------------------------------------------- * PICO SYSTEM FUNCTIONS *---------------------------------------------------------------------------*/ /** * allocation of DSP memory for SIG PU * @param mm : memory manager * @param sig_inObj : sig PU internal object of the sub-object * @return PICO_OK : allocation successful * @return PICO_ERR_OTHER : allocation NOT successful * @callgraph * @callergraph */ pico_status_t sigAllocate(picoos_MemoryManager mm, sig_innerobj_t *sig_inObj) { picoos_int16 *data_i; picoos_int32 *d32; picoos_int32 nCount; sig_inObj->int_vec22 = sig_inObj->int_vec23 = sig_inObj->int_vec24 = sig_inObj->int_vec25 = sig_inObj->int_vec26 = sig_inObj->int_vec28 = sig_inObj->int_vec29 = sig_inObj->int_vec30 = sig_inObj->int_vec31 = sig_inObj->int_vec32 = sig_inObj->int_vec33 = sig_inObj->int_vec34 = sig_inObj->int_vec35 = sig_inObj->int_vec36 = sig_inObj->int_vec37 = sig_inObj->int_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 */ /*Link local variables with sig object*/ m2 = sig_inObj->m2_p; m4 = m2 >> 1; Fr = sig_inObj->F2r_p; Fi = sig_inObj->F2i_p; norm_window = sig_inObj->norm_window_p; E = &(sig_inObj->E_p); /*as pointer: value will be modified*/ voiced = sig_inObj->voiced_p; fr = sig_inObj->imp_p; /*Inverse FFT*/ for (nI = 0, nn = 0; nI < m4; nI++, nn += 2) { fr[nn] = Fr[nI]; /* - fixed point */ } fr[1] = (picoos_int32) (Fr[m4]); for (nI = 1, nn = 3; nI < m4; nI++, nn += 2) { fr[nn] = -Fi[nI]; /* - fixed point */ } rdft(m2, -1, fr); /*window, normalize and differentiate*/ *E = norm_result(m2, fr, norm_window); if (*E > 0) { f = *E * PICODSP_FIXRESP_NORM; } else { f = 20; /*PICODSP_FIXRESP_NORM*/ } ff = (picoos_int32) f; if (ff < 1) ff = 1; /*normalize impulse response*/ t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,*(t1++) /= ff;); /* - fixed point */ } /* impulse_response */ /** * time domain pitch synchronous overlap add over two frames (when no voicing transition) * @param sig_inObj : sig PU internal object of the sub-object * @return void * @remarks Special treatment at voicing boundaries * @remarks Introduced to get rid of time-domain aliasing (and additional speed up) * @callgraph * @callergraph */ void td_psola2(sig_innerobj_t *sig_inObj) { picoos_int16 nI; picoos_int16 hop, m2, *nextPeak, voiced; picoos_int32 *t1, *t2; picoos_int16 cnt; picoos_int32 *fr, *v1, ff, f; picoos_int16 a, i; picoos_int32 *window; picoos_int16 s = (picoos_int16) 1; window = sig_inObj->window_p; /*Link local variables with sig object*/ hop = sig_inObj->hop_p; m2 = sig_inObj->m2_p; nextPeak = &(sig_inObj->nextPeak_p); voiced = sig_inObj->voiced_p; fr = sig_inObj->imp_p; /*toggle the pointers and initialize signal vector */ v1 = sig_inObj->sig_vec1; t1 = v1; FAST_DEVICE(PICODSP_FFTSIZE-PICODSP_DISPLACE,*(t1++)=0;); t1 = &(v1[PICODSP_FFTSIZE - PICODSP_DISPLACE]); t2 = &(v1[PICODSP_FFTSIZE]); FAST_DEVICE(PICODSP_FFTSIZE, *(t1++)=*(t2++);); t1 = &(v1[2 * PICODSP_FFTSIZE - PICODSP_DISPLACE]);FAST_DEVICE(PICODSP_DISPLACE,*(t1++)=0;); /*calculate excitation points*/ get_simple_excitation(sig_inObj, nextPeak); /*TD-PSOLA based on excitation vector */ if ((sig_inObj->nU == 0) && (sig_inObj->voiced_p == 1)) { /* purely voiced */ for (nI = 0; nI < sig_inObj->nV; nI++) { f = sig_inObj->EnV[nI]; a = 0; cnt = PICODSP_FFTSIZE; ff = (f * window[sig_inObj->LocV[nI]]) >> PICODSP_SHIFT_FACT1; t1 = &(v1[a + sig_inObj->LocV[nI]]); t2 = &(fr[a]); if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff;); } } else if ((sig_inObj->nV == 0) && (sig_inObj->voiced_p == 0)) { /* PURELY UNVOICED*/ for (nI = 0; nI < sig_inObj->nU; nI++) { f = sig_inObj->EnU[nI]; s = -s; /*reverse order to reduce the periodicity effect*/ if (s == 1) { a = 0; cnt = PICODSP_FFTSIZE; ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1; t1 = &(v1[a + sig_inObj->LocU[nI]]); t2 = &(fr[a]); if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff; ); } else { /*s==-1*/ a = 0; cnt = PICODSP_FFTSIZE; ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1; t1 = &(v1[(m2 - 1 - a) + sig_inObj->LocU[nI]]); t2 = &(fr[a]); if (cnt > 0)FAST_DEVICE(cnt,*(t1--)+=*(t2++)*ff; ); } } } else if (sig_inObj->VoicTrans == 0) { /*voicing transition from unvoiced to voiced*/ for (nI = 0; nI < sig_inObj->nV; nI++) { f = sig_inObj->EnV[nI]; a = 0; cnt = PICODSP_FFTSIZE; ff = (f * window[sig_inObj->LocV[nI]]) >> PICODSP_SHIFT_FACT1; t1 = &(v1[a + sig_inObj->LocV[nI]]); t2 = &(fr[a]); if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff;); } /*add remaining stuff from unvoiced part*/ for (nI = 0; nI < sig_inObj->nU; nI++) { f = sig_inObj->EnU[nI]; s = -s; /*reverse order to reduce the periodicity effect*/ if (s == 1) { a = 0; cnt = PICODSP_FFTSIZE; ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1; t1 = &(v1[a + sig_inObj->LocU[nI]]); t2 = &(sig_inObj->ImpResp_p[a]); /*saved impulse response*/ if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff; ); } else { a = 0; cnt = PICODSP_FFTSIZE; ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1; t1 = &(v1[(m2 - 1 - a) + sig_inObj->LocU[nI]]); t2 = &(sig_inObj->ImpResp_p[a]); if (cnt > 0)FAST_DEVICE(cnt,*(t1--)+=*(t2++)*ff; ); } } } else { /*voiced to unvoiced*/ for (nI = 0; nI < sig_inObj->nU; nI++) { f = sig_inObj->EnU[nI]; s = -s; /*reverse order to reduce the periodicity effect*/ if (s > 0) { a = 0; cnt = PICODSP_FFTSIZE; ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1; t1 = &(v1[a + sig_inObj->LocU[nI]]); t2 = &(fr[a]); if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff; ); } else { a = 0; cnt = PICODSP_FFTSIZE; ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1; t1 = &(v1[(m2 - 1 - a) + sig_inObj->LocU[nI]]); t2 = &(fr[a]); if (cnt > 0)FAST_DEVICE(cnt,*(t1--)+=*(t2++)*ff; ); } } /*add remaining stuff from voiced part*/ for (nI = 0; nI < sig_inObj->nV; nI++) { f = sig_inObj->EnV[nI]; a = 0; cnt = PICODSP_FFTSIZE; ff = (f * window[sig_inObj->LocV[nI]]) >> PICODSP_SHIFT_FACT1; t1 = &(v1[a + sig_inObj->LocV[nI]]); t2 = &(sig_inObj->ImpResp_p[a]); if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff;); } } t1 = sig_inObj->sig_vec1; for (i = 0; i < PICODSP_FFTSIZE; i++, t1++) { if (*t1 >= 0) *t1 >>= PICODSP_SHIFT_FACT5; else *t1 = -((-*t1) >> PICODSP_SHIFT_FACT5); } }/*td_psola2*/ /** * overlap + add summing of impulse responses on the final destination sample buffer * @param sig_inObj : sig PU internal object of the sub-object * @return void * @remarks Special treatment at voicing boundaries * @remarks Introduced to get rid of time-domain aliasing (and additional speed up) * Input * - wlet : the generic impulse response (FFT size, real) * - window : the windowing funcion (FFT size, real) fixed * - WavBuff : the destination buffer with past samples (FFT size*2, short) * - m2 : fftsize * Output * - WavBuff : the destination buffer with updated samples (FFT size*2, short) * @callgraph * @callergraph */ void overlap_add(sig_innerobj_t *sig_inObj) { /*Local variables*/ picoos_int32 *w, *v; /*Link local variables with sig object*/ w = sig_inObj->WavBuff_p; v = sig_inObj->sig_vec1; FAST_DEVICE(PICODSP_FFTSIZE, *(w++)+=*(v++)<<PICODSP_SHIFT_FACT6;); }/*overlap_add*/ /*------------------------------------------------------------------------------- INITIALIZATION AND INTERNAL FUNCTIONS --------------------------------------------------------------------------------*/ /** * Hanning window initialization * @param sig_inObj : sig PU internal object of the sub-object * @return PICO_OK * @callgraph * @callergraph */ static void gen_hann2(sig_innerobj_t *sig_inObj) { picoos_int32 *hann; picoos_int32 *norm; /*link local variables with sig object*/ hann = sig_inObj->window_p; norm = sig_inObj->norm_window_p; norm[0] = 80224; norm[1] = 320832; norm[2] = 721696; norm[3] = 1282560; norm[4] = 2003104; norm[5] = 2882880; norm[6] = 3921376; norm[7] = 5117984; norm[8] = 6471952; norm[9] = 7982496; norm[10] = 9648720; norm[11] = 11469616; norm[12] = 13444080; norm[13] = 15570960; norm[14] = 17848976; norm[15] = 20276752; norm[16] = 22852864; norm[17] = 25575744; norm[18] = 28443776; norm[19] = 31455264; norm[20] = 34608368; norm[21] = 37901248; norm[22] = 41331904; norm[23] = 44898304; norm[24] = 48598304; norm[25] = 52429696; norm[26] = 56390192; norm[27] = 60477408; norm[28] = 64688944; norm[29] = 69022240; norm[30] = 73474720; norm[31] = 78043744; norm[32] = 82726544; norm[33] = 87520352; norm[34] = 92422272; norm[35] = 97429408; norm[36] = 102538752; norm[37] = 107747248; norm[38] = 113051776; norm[39] = 118449184; norm[40] = 123936224; norm[41] = 129509648; norm[42] = 135166080; norm[43] = 140902192; norm[44] = 146714528; norm[45] = 152599584; norm[46] = 158553904; norm[47] = 164573888; norm[48] = 170655936; norm[49] = 176796448; norm[50] = 182991712; norm[51] = 189238064; norm[52] = 195531744; norm[53] = 201868992; norm[54] = 208246016; norm[55] = 214659040; norm[56] = 221104176; norm[57] = 227577616; norm[58] = 234075488; norm[59] = 240593872; norm[60] = 247128912; norm[61] = 253676688; norm[62] = 260233280; norm[63] = 266794768; norm[64] = 273357248; norm[65] = 279916768; norm[66] = 286469440; norm[67] = 293011360; norm[68] = 299538560; norm[69] = 306047168; norm[70] = 312533312; norm[71] = 318993088; norm[72] = 325422656; norm[73] = 331818144; norm[74] = 338175744; norm[75] = 344491680; norm[76] = 350762176; norm[77] = 356983424; norm[78] = 363151808; norm[79] = 369263520; norm[80] = 375315008; norm[81] = 381302592; norm[82] = 387222720; norm[83] = 393071872; norm[84] = 398846528; norm[85] = 404543232; norm[86] = 410158560; norm[87] = 415689216; norm[88] = 421131840; norm[89] = 426483200; norm[90] = 431740096; norm[91] = 436899392; norm[92] = 441958016; norm[93] = 446912928; norm[94] = 451761152; norm[95] = 456499840; norm[96] = 461126080; norm[97] = 465637152; norm[98] = 470030400; norm[99] = 474303104; norm[100] = 478452800; norm[101] = 482476960; norm[102] = 486373184; norm[103] = 490139200; norm[104] = 493772640; norm[105] = 497271424; norm[106] = 500633440; norm[107] = 503856704; norm[108] = 506939200; norm[109] = 509879168; norm[110] = 512674880; norm[111] = 515324544; norm[112] = 517826688; norm[113] = 520179776; norm[114] = 522382368; norm[115] = 524433184; norm[116] = 526331008; norm[117] = 528074688; norm[118] = 529663200; norm[119] = 531095552; norm[120] = 532370944; norm[121] = 533488576; norm[122] = 534447808; norm[123] = 535248000; norm[124] = 535888768; norm[125] = 536369664; norm[126] = 536690432; norm[127] = 536850880; norm[128] = 536850880; norm[129] = 536690432; norm[130] = 536369664; norm[131] = 535888768; norm[132] = 535248000; norm[133] = 534447808; norm[134] = 533488576; norm[135] = 532370944; norm[136] = 531095552; norm[137] = 529663200; norm[138] = 528074688; norm[139] = 526331008; norm[140] = 524433216; norm[141] = 522382368; norm[142] = 520179776; norm[143] = 517826688; norm[144] = 515324544; norm[145] = 512674880; norm[146] = 509879168; norm[147] = 506939200; norm[148] = 503856704; norm[149] = 500633472; norm[150] = 497271424; norm[151] = 493772672; norm[152] = 490139200; norm[153] = 486373184; norm[154] = 482476992; norm[155] = 478452800; norm[156] = 474303104; norm[157] = 470030400; norm[158] = 465637184; norm[159] = 461126080; norm[160] = 456499840; norm[161] = 451761152; norm[162] = 446912960; norm[163] = 441958016; norm[164] = 436899424; norm[165] = 431740096; norm[166] = 426483200; norm[167] = 421131840; norm[168] = 415689216; norm[169] = 410158560; norm[170] = 404543232; norm[171] = 398846528; norm[172] = 393071872; norm[173] = 387222720; norm[174] = 381302592; norm[175] = 375315008; norm[176] = 369263552; norm[177] = 363151808; norm[178] = 356983456; norm[179] = 350762176; norm[180] = 344491712; norm[181] = 338175776; norm[182] = 331818144; norm[183] = 325422656; norm[184] = 318993088; norm[185] = 312533312; norm[186] = 306047168; norm[187] = 299538560; norm[188] = 293011360; norm[189] = 286469472; norm[190] = 279916800; norm[191] = 273357248; norm[192] = 266794784; norm[193] = 260233280; norm[194] = 253676688; norm[195] = 247128928; norm[196] = 240593888; norm[197] = 234075488; norm[198] = 227577632; norm[199] = 221104192; norm[200] = 214659040; norm[201] = 208246032; norm[202] = 201868992; norm[203] = 195531744; norm[204] = 189238080; norm[205] = 182991728; norm[206] = 176796448; norm[207] = 170655952; norm[208] = 164573888; norm[209] = 158553920; norm[210] = 152599600; norm[211] = 146714528; norm[212] = 140902208; norm[213] = 135166096; norm[214] = 129509648; norm[215] = 123936240; norm[216] = 118449184; norm[217] = 113051776; norm[218] = 107747248; norm[219] = 102538752; norm[220] = 97429424; norm[221] = 92422288; norm[222] = 87520352; norm[223] = 82726544; norm[224] = 78043744; norm[225] = 73474736; norm[226] = 69022240; norm[227] = 64688944; norm[228] = 60477424; norm[229] = 56390192; norm[230] = 52429696; norm[231] = 48598304; norm[232] = 44898304; norm[233] = 41331904; norm[234] = 37901248; norm[235] = 34608384; norm[236] = 31455264; norm[237] = 28443792; norm[238] = 25575744; norm[239] = 22852864; norm[240] = 20276752; norm[241] = 17848976; norm[242] = 15570960; norm[243] = 13444080; norm[244] = 11469616; norm[245] = 9648720; norm[246] = 7982512; norm[247] = 6471952; norm[248] = 5117984; norm[249] = 3921376; norm[250] = 2882880; norm[251] = 2003104; norm[252] = 1282560; norm[253] = 721696; norm[254] = 320832; norm[255] = 80224; hann[0] = 0; hann[1] = 0; hann[2] = 1; hann[3] = 2; hann[4] = 3; hann[5] = 5; hann[6] = 7; hann[7] = 9; hann[8] = 12; hann[9] = 15; hann[10] = 18; hann[11] = 21; hann[12] = 25; hann[13] = 29; hann[14] = 34; hann[15] = 38; hann[16] = 43; hann[17] = 48; hann[18] = 54; hann[19] = 59; hann[20] = 66; hann[21] = 72; hann[22] = 78; hann[23] = 85; hann[24] = 92; hann[25] = 100; hann[26] = 107; hann[27] = 115; hann[28] = 123; hann[29] = 131; hann[30] = 140; hann[31] = 148; hann[32] = 157; hann[33] = 166; hann[34] = 176; hann[35] = 185; hann[36] = 195; hann[37] = 205; hann[38] = 215; hann[39] = 225; hann[40] = 236; hann[41] = 247; hann[42] = 257; hann[43] = 268; hann[44] = 279; hann[45] = 291; hann[46] = 302; hann[47] = 313; hann[48] = 325; hann[49] = 337; hann[50] = 349; hann[51] = 360; hann[52] = 372; hann[53] = 385; hann[54] = 397; hann[55] = 409; hann[56] = 421; hann[57] = 434; hann[58] = 446; hann[59] = 458; hann[60] = 471; hann[61] = 483; hann[62] = 496; hann[63] = 508; hann[64] = 521; hann[65] = 533; hann[66] = 546; hann[67] = 558; hann[68] = 571; hann[69] = 583; hann[70] = 596; hann[71] = 608; hann[72] = 620; hann[73] = 632; hann[74] = 645; hann[75] = 657; hann[76] = 669; hann[77] = 680; hann[78] = 692; hann[79] = 704; hann[80] = 715; hann[81] = 727; hann[82] = 738; hann[83] = 749; hann[84] = 760; hann[85] = 771; hann[86] = 782; hann[87] = 792; hann[88] = 803; hann[89] = 813; hann[90] = 823; hann[91] = 833; hann[92] = 842; hann[93] = 852; hann[94] = 861; hann[95] = 870; hann[96] = 879; hann[97] = 888; hann[98] = 896; hann[99] = 904; hann[100] = 912; hann[101] = 920; hann[102] = 927; hann[103] = 934; hann[104] = 941; hann[105] = 948; hann[106] = 954; hann[107] = 961; hann[108] = 966; hann[109] = 972; hann[110] = 977; hann[111] = 982; hann[112] = 987; hann[113] = 992; hann[114] = 996; hann[115] = 1000; hann[116] = 1003; hann[117] = 1007; hann[118] = 1010; hann[119] = 1012; hann[120] = 1015; hann[121] = 1017; hann[122] = 1019; hann[123] = 1020; hann[124] = 1022; hann[125] = 1023; hann[126] = 1023; hann[127] = 1023; hann[128] = 1023; hann[129] = 1023; hann[130] = 1023; hann[131] = 1022; hann[132] = 1020; hann[133] = 1019; hann[134] = 1017; hann[135] = 1015; hann[136] = 1012; hann[137] = 1010; hann[138] = 1007; hann[139] = 1003; hann[140] = 1000; hann[141] = 996; hann[142] = 992; hann[143] = 987; hann[144] = 982; hann[145] = 977; hann[146] = 972; hann[147] = 966; hann[148] = 961; hann[149] = 954; hann[150] = 948; hann[151] = 941; hann[152] = 934; hann[153] = 927; hann[154] = 920; hann[155] = 912; hann[156] = 904; hann[157] = 896; hann[158] = 888; hann[159] = 879; hann[160] = 870; hann[161] = 861; hann[162] = 852; hann[163] = 842; hann[164] = 833; hann[165] = 823; hann[166] = 813; hann[167] = 803; hann[168] = 792; hann[169] = 782; hann[170] = 771; hann[171] = 760; hann[172] = 749; hann[173] = 738; hann[174] = 727; hann[175] = 715; hann[176] = 704; hann[177] = 692; hann[178] = 680; hann[179] = 669; hann[180] = 657; hann[181] = 645; hann[182] = 632; hann[183] = 620; hann[184] = 608; hann[185] = 596; hann[186] = 583; hann[187] = 571; hann[188] = 558; hann[189] = 546; hann[190] = 533; hann[191] = 521; hann[192] = 508; hann[193] = 496; hann[194] = 483; hann[195] = 471; hann[196] = 458; hann[197] = 446; hann[198] = 434; hann[199] = 421; hann[200] = 409; hann[201] = 397; hann[202] = 385; hann[203] = 372; hann[204] = 360; hann[205] = 349; hann[206] = 337; hann[207] = 325; hann[208] = 313; hann[209] = 302; hann[210] = 291; hann[211] = 279; hann[212] = 268; hann[213] = 257; hann[214] = 247; hann[215] = 236; hann[216] = 225; hann[217] = 215; hann[218] = 205; hann[219] = 195; hann[220] = 185; hann[221] = 176; hann[222] = 166; hann[223] = 157; hann[224] = 148; hann[225] = 140; hann[226] = 131; hann[227] = 123; hann[228] = 115; hann[229] = 107; hann[230] = 100; hann[231] = 92; hann[232] = 85; hann[233] = 78; hann[234] = 72; hann[235] = 66; hann[236] = 59; hann[237] = 54; hann[238] = 48; hann[239] = 43; hann[240] = 38; hann[241] = 34; hann[242] = 29; hann[243] = 25; hann[244] = 21; hann[245] = 18; hann[246] = 15; hann[247] = 12; hann[248] = 9; hann[249] = 7; hann[250] = 5; hann[251] = 3; hann[252] = 2; hann[253] = 1; hann[254] = 0; hann[255] = 0; } /* gen_hann2 */ /** * Creates the non uniform enhancement window (bilinearly mapped hannning window) * in order to reduce the formant enhancement in the high spectrum * @param mm : memory manager * @param sig_inObj : sig PU internal object of the sub-object * @return void * @callgraph * @callergraph * @remarks the outgput is based on the matlab script below\n matlab script ------------- function makeEnhWind(alpha) N=129; % =HFFTSIZEE_P1 s=(bilinmap(alpha,N)); h=[hann(N)']; x=(1:N)/N; W=interp1(x,h,s); W(1)=0; fid=fopen('enhwind.txt','wt'); fprintf(fid,'picoos_int16 enh_wind_init(sig_innerobj_t *sig_inObj) {\n'); for i=1:N, fprintf(fid,[' sig_inObj->enhwind[' int2str(i) '] = (picoos_single)' num2str(W(i),'%0.7g') ';\n']); end; fprintf(fid,' return PICO_OK;\n'); fprintf(fid,' }; \n'); fclose(fid); %figure(1); plot(x*8,W); */ static void enh_wind_init(sig_innerobj_t *sig_inObj) { /* picoos_int16 i; */ picoos_int32 *c; c = sig_inObj->cos_table; c[0] = 4096; c[1] = 4095; c[2] = 4095; c[3] = 4095; c[4] = 4095; c[5] = 4095; c[6] = 4095; c[7] = 4095; c[8] = 4094; c[9] = 4094; c[10] = 4094; c[11] = 4093; c[12] = 4093; c[13] = 4092; c[14] = 4092; c[15] = 4091; c[16] = 4091; c[17] = 4090; c[18] = 4089; c[19] = 4089; c[20] = 4088; c[21] = 4087; c[22] = 4086; c[23] = 4085; c[24] = 4084; c[25] = 4083; c[26] = 4082; c[27] = 4081; c[28] = 4080; c[29] = 4079; c[30] = 4078; c[31] = 4077; c[32] = 4076; c[33] = 4075; c[34] = 4073; c[35] = 4072; c[36] = 4071; c[37] = 4069; c[38] = 4068; c[39] = 4066; c[40] = 4065; c[41] = 4063; c[42] = 4062; c[43] = 4060; c[44] = 4058; c[45] = 4057; c[46] = 4055; c[47] = 4053; c[48] = 4051; c[49] = 4049; c[50] = 4047; c[51] = 4045; c[52] = 4043; c[53] = 4041; c[54] = 4039; c[55] = 4037; c[56] = 4035; c[57] = 4033; c[58] = 4031; c[59] = 4029; c[60] = 4026; c[61] = 4024; c[62] = 4022; c[63] = 4019; c[64] = 4017; c[65] = 4014; c[66] = 4012; c[67] = 4009; c[68] = 4007; c[69] = 4004; c[70] = 4001; c[71] = 3999; c[72] = 3996; c[73] = 3993; c[74] = 3990; c[75] = 3988; c[76] = 3985; c[77] = 3982; c[78] = 3979; c[79] = 3976; c[80] = 3973; c[81] = 3970; c[82] = 3967; c[83] = 3963; c[84] = 3960; c[85] = 3957; c[86] = 3954; c[87] = 3950; c[88] = 3947; c[89] = 3944; c[90] = 3940; c[91] = 3937; c[92] = 3933; c[93] = 3930; c[94] = 3926; c[95] = 3923; c[96] = 3919; c[97] = 3915; c[98] = 3912; c[99] = 3908; c[100] = 3904; c[101] = 3900; c[102] = 3897; c[103] = 3893; c[104] = 3889; c[105] = 3885; c[106] = 3881; c[107] = 3877; c[108] = 3873; c[109] = 3869; c[110] = 3864; c[111] = 3860; c[112] = 3856; c[113] = 3852; c[114] = 3848; c[115] = 3843; c[116] = 3839; c[117] = 3834; c[118] = 3830; c[119] = 3826; c[120] = 3821; c[121] = 3816; c[122] = 3812; c[123] = 3807; c[124] = 3803; c[125] = 3798; c[126] = 3793; c[127] = 3789; c[128] = 3784; c[129] = 3779; c[130] = 3774; c[131] = 3769; c[132] = 3764; c[133] = 3759; c[134] = 3754; c[135] = 3749; c[136] = 3744; c[137] = 3739; c[138] = 3734; c[139] = 3729; c[140] = 3723; c[141] = 3718; c[142] = 3713; c[143] = 3708; c[144] = 3702; c[145] = 3697; c[146] = 3691; c[147] = 3686; c[148] = 3680; c[149] = 3675; c[150] = 3669; c[151] = 3664; c[152] = 3658; c[153] = 3652; c[154] = 3647; c[155] = 3641; c[156] = 3635; c[157] = 3629; c[158] = 3624; c[159] = 3618; c[160] = 3612; c[161] = 3606; c[162] = 3600; c[163] = 3594; c[164] = 3588; c[165] = 3582; c[166] = 3576; c[167] = 3570; c[168] = 3563; c[169] = 3557; c[170] = 3551; c[171] = 3545; c[172] = 3538; c[173] = 3532; c[174] = 3526; c[175] = 3519; c[176] = 3513; c[177] = 3506; c[178] = 3500; c[179] = 3493; c[180] = 3487; c[181] = 3480; c[182] = 3473; c[183] = 3467; c[184] = 3460; c[185] = 3453; c[186] = 3447; c[187] = 3440; c[188] = 3433; c[189] = 3426; c[190] = 3419; c[191] = 3412; c[192] = 3405; c[193] = 3398; c[194] = 3391; c[195] = 3384; c[196] = 3377; c[197] = 3370; c[198] = 3363; c[199] = 3356; c[200] = 3348; c[201] = 3341; c[202] = 3334; c[203] = 3326; c[204] = 3319; c[205] = 3312; c[206] = 3304; c[207] = 3297; c[208] = 3289; c[209] = 3282; c[210] = 3274; c[211] = 3267; c[212] = 3259; c[213] = 3252; c[214] = 3244; c[215] = 3236; c[216] = 3229; c[217] = 3221; c[218] = 3213; c[219] = 3205; c[220] = 3197; c[221] = 3190; c[222] = 3182; c[223] = 3174; c[224] = 3166; c[225] = 3158; c[226] = 3150; c[227] = 3142; c[228] = 3134; c[229] = 3126; c[230] = 3117; c[231] = 3109; c[232] = 3101; c[233] = 3093; c[234] = 3085; c[235] = 3076; c[236] = 3068; c[237] = 3060; c[238] = 3051; c[239] = 3043; c[240] = 3034; c[241] = 3026; c[242] = 3018; c[243] = 3009; c[244] = 3000; c[245] = 2992; c[246] = 2983; c[247] = 2975; c[248] = 2966; c[249] = 2957; c[250] = 2949; c[251] = 2940; c[252] = 2931; c[253] = 2922; c[254] = 2914; c[255] = 2905; c[256] = 2896; c[257] = 2887; c[258] = 2878; c[259] = 2869; c[260] = 2860; c[261] = 2851; c[262] = 2842; c[263] = 2833; c[264] = 2824; c[265] = 2815; c[266] = 2806; c[267] = 2796; c[268] = 2787; c[269] = 2778; c[270] = 2769; c[271] = 2760; c[272] = 2750; c[273] = 2741; c[274] = 2732; c[275] = 2722; c[276] = 2713; c[277] = 2703; c[278] = 2694; c[279] = 2684; c[280] = 2675; c[281] = 2665; c[282] = 2656; c[283] = 2646; c[284] = 2637; c[285] = 2627; c[286] = 2617; c[287] = 2608; c[288] = 2598; c[289] = 2588; c[290] = 2578; c[291] = 2569; c[292] = 2559; c[293] = 2549; c[294] = 2539; c[295] = 2529; c[296] = 2519; c[297] = 2510; c[298] = 2500; c[299] = 2490; c[300] = 2480; c[301] = 2470; c[302] = 2460; c[303] = 2450; c[304] = 2439; c[305] = 2429; c[306] = 2419; c[307] = 2409; c[308] = 2399; c[309] = 2389; c[310] = 2379; c[311] = 2368; c[312] = 2358; c[313] = 2348; c[314] = 2337; c[315] = 2327; c[316] = 2317; c[317] = 2306; c[318] = 2296; c[319] = 2286; c[320] = 2275; c[321] = 2265; c[322] = 2254; c[323] = 2244; c[324] = 2233; c[325] = 2223; c[326] = 2212; c[327] = 2201; c[328] = 2191; c[329] = 2180; c[330] = 2170; c[331] = 2159; c[332] = 2148; c[333] = 2138; c[334] = 2127; c[335] = 2116; c[336] = 2105; c[337] = 2094; c[338] = 2084; c[339] = 2073; c[340] = 2062; c[341] = 2051; c[342] = 2040; c[343] = 2029; c[344] = 2018; c[345] = 2007; c[346] = 1997; c[347] = 1986; c[348] = 1975; c[349] = 1964; c[350] = 1952; c[351] = 1941; c[352] = 1930; c[353] = 1919; c[354] = 1908; c[355] = 1897; c[356] = 1886; c[357] = 1875; c[358] = 1864; c[359] = 1852; c[360] = 1841; c[361] = 1830; c[362] = 1819; c[363] = 1807; c[364] = 1796; c[365] = 1785; c[366] = 1773; c[367] = 1762; c[368] = 1751; c[369] = 1739; c[370] = 1728; c[371] = 1717; c[372] = 1705; c[373] = 1694; c[374] = 1682; c[375] = 1671; c[376] = 1659; c[377] = 1648; c[378] = 1636; c[379] = 1625; c[380] = 1613; c[381] = 1602; c[382] = 1590; c[383] = 1579; c[384] = 1567; c[385] = 1555; c[386] = 1544; c[387] = 1532; c[388] = 1520; c[389] = 1509; c[390] = 1497; c[391] = 1485; c[392] = 1474; c[393] = 1462; c[394] = 1450; c[395] = 1438; c[396] = 1427; c[397] = 1415; c[398] = 1403; c[399] = 1391; c[400] = 1379; c[401] = 1368; c[402] = 1356; c[403] = 1344; c[404] = 1332; c[405] = 1320; c[406] = 1308; c[407] = 1296; c[408] = 1284; c[409] = 1272; c[410] = 1260; c[411] = 1248; c[412] = 1237; c[413] = 1225; c[414] = 1213; c[415] = 1201; c[416] = 1189; c[417] = 1176; c[418] = 1164; c[419] = 1152; c[420] = 1140; c[421] = 1128; c[422] = 1116; c[423] = 1104; c[424] = 1092; c[425] = 1080; c[426] = 1068; c[427] = 1056; c[428] = 1043; c[429] = 1031; c[430] = 1019; c[431] = 1007; c[432] = 995; c[433] = 983; c[434] = 970; c[435] = 958; c[436] = 946; c[437] = 934; c[438] = 921; c[439] = 909; c[440] = 897; c[441] = 885; c[442] = 872; c[443] = 860; c[444] = 848; c[445] = 836; c[446] = 823; c[447] = 811; c[448] = 799; c[449] = 786; c[450] = 774; c[451] = 762; c[452] = 749; c[453] = 737; c[454] = 725; c[455] = 712; c[456] = 700; c[457] = 687; c[458] = 675; c[459] = 663; c[460] = 650; c[461] = 638; c[462] = 625; c[463] = 613; c[464] = 601; c[465] = 588; c[466] = 576; c[467] = 563; c[468] = 551; c[469] = 538; c[470] = 526; c[471] = 513; c[472] = 501; c[473] = 488; c[474] = 476; c[475] = 463; c[476] = 451; c[477] = 438; c[478] = 426; c[479] = 413; c[480] = 401; c[481] = 388; c[482] = 376; c[483] = 363; c[484] = 351; c[485] = 338; c[486] = 326; c[487] = 313; c[488] = 301; c[489] = 288; c[490] = 276; c[491] = 263; c[492] = 251; c[493] = 238; c[494] = 226; c[495] = 213; c[496] = 200; c[497] = 188; c[498] = 175; c[499] = 163; c[500] = 150; c[501] = 138; c[502] = 125; c[503] = 113; c[504] = 100; c[505] = 87; c[506] = 75; c[507] = 62; c[508] = 50; c[509] = 37; c[510] = 25; c[511] = 12; c[512] = 0; } /*enh_wind_init*/ /** * Initializes a useful large array of random numbers * @param sig_inObj : sig PU internal object of the sub-object * @return void * @callgraph * @callergraph */ static void init_rand(sig_innerobj_t *sig_inObj) { picoos_int32 *q = sig_inObj->int_vec34; picoos_int32 *r = sig_inObj->int_vec35; sig_inObj->iRand = 0; q[0] = -2198; r[0] = 3455; q[1] = 3226; r[1] = -2522; q[2] = -845; r[2] = 4007; q[3] = -1227; r[3] = 3907; q[4] = -3480; r[4] = 2158; q[5] = -1325; r[5] = -3875; q[6] = 2089; r[6] = -3522; q[7] = -468; r[7] = 4069; q[8] = 711; r[8] = -4033; q[9] = 3862; r[9] = 1362; q[10] = 4054; r[10] = -579; q[11] = 2825; r[11] = 2965; q[12] = 2704; r[12] = -3076; q[13] = 4081; r[13] = 344; q[14] = -3912; r[14] = 1211; q[15] = -3541; r[15] = 2058; q[16] = 2694; r[16] = 3084; q[17] = 835; r[17] = 4009; q[18] = -2578; r[18] = -3182; q[19] = 3205; r[19] = 2550; q[20] = -4074; r[20] = -418; q[21] = -183; r[21] = -4091; q[22] = -2665; r[22] = -3110; q[23] = -1367; r[23] = 3860; q[24] = -2266; r[24] = -3411; q[25] = 3327; r[25] = -2387; q[26] = -2807; r[26] = -2982; q[27] = -3175; r[27] = -2587; q[28] = -4095; r[28] = 27; q[29] = -811; r[29] = -4014; q[30] = 4082; r[30] = 332; q[31] = -2175; r[31] = 3470; q[32] = 3112; r[32] = 2662; q[33] = 1168; r[33] = -3925; q[34] = 2659; r[34] = 3115; q[35] = 4048; r[35] = 622; q[36] = 4092; r[36] = -165; q[37] = -4036; r[37] = 697; q[38] = 1081; r[38] = -3950; q[39] = -548; r[39] = 4059; q[40] = 4038; r[40] = 685; q[41] = -511; r[41] = 4063; q[42] = 3317; r[42] = -2402; q[43] = -3180; r[43] = 2580; q[44] = 851; r[44] = -4006; q[45] = 2458; r[45] = -3276; q[46] = -1453; r[46] = 3829; q[47] = -3577; r[47] = 1995; q[48] = -3708; r[48] = -1738; q[49] = -3890; r[49] = 1282; q[50] = 4041; r[50] = 666; q[51] = -3511; r[51] = -2108; q[52] = -1454; r[52] = -3828; q[53] = 2124; r[53] = 3502; q[54] = -3159; r[54] = 2606; q[55] = 2384; r[55] = -3330; q[56] = -3767; r[56] = -1607; q[57] = -4063; r[57] = -513; q[58] = 3952; r[58] = -1075; q[59] = -3778; r[59] = -1581; q[60] = -301; r[60] = -4084; q[61] = -4026; r[61] = 751; q[62] = -3346; r[62] = 2361; q[63] = -2426; r[63] = 3299; q[64] = 428; r[64] = -4073; q[65] = 3968; r[65] = 1012; q[66] = 2900; r[66] = -2892; q[67] = -263; r[67] = 4087; q[68] = 4083; r[68] = 322; q[69] = 2024; r[69] = 3560; q[70] = 4015; r[70] = 808; q[71] = -3971; r[71] = -1000; q[72] = 3785; r[72] = -1564; q[73] = -3726; r[73] = 1701; q[74] = -3714; r[74] = 1725; q[75] = 743; r[75] = 4027; q[76] = 875; r[76] = -4001; q[77] = 294; r[77] = 4085; q[78] = 2611; r[78] = 3155; q[79] = 2491; r[79] = -3251; q[80] = 1558; r[80] = 3787; q[81] = -2063; r[81] = -3538; q[82] = 3809; r[82] = -1505; q[83] = -2987; r[83] = 2802; q[84] = -1955; r[84] = 3599; q[85] = 1980; r[85] = -3585; q[86] = -539; r[86] = -4060; q[87] = -3210; r[87] = 2543; q[88] = 2415; r[88] = -3308; q[89] = 1587; r[89] = 3775; q[90] = -3943; r[90] = 1106; q[91] = 3476; r[91] = 2165; q[92] = 2253; r[92] = 3420; q[93] = -2584; r[93] = 3177; q[94] = 3804; r[94] = -1518; q[95] = -3637; r[95] = 1883; q[96] = 3289; r[96] = -2440; q[97] = -1621; r[97] = 3761; q[98] = 1645; r[98] = 3751; q[99] = -3471; r[99] = 2173; q[100] = 4071; r[100] = -449; q[101] = -872; r[101] = -4001; q[102] = -3897; r[102] = 1259; q[103] = -3590; r[103] = 1970; q[104] = -2456; r[104] = -3277; q[105] = -3004; r[105] = 2783; q[106] = 2589; r[106] = 3173; q[107] = 3727; r[107] = -1698; q[108] = 2992; r[108] = 2796; q[109] = 794; r[109] = -4018; q[110] = -918; r[110] = 3991; q[111] = 1446; r[111] = -3831; q[112] = 3871; r[112] = -1338; q[113] = -612; r[113] = -4049; q[114] = -1566; r[114] = -3784; q[115] = 672; r[115] = -4040; q[116] = 3841; r[116] = 1422; q[117] = 3545; r[117] = -2051; q[118] = -1982; r[118] = -3584; q[119] = -3413; r[119] = 2263; q[120] = -3265; r[120] = -2473; q[121] = -2876; r[121] = -2915; q[122] = 4094; r[122] = -117; q[123] = -269; r[123] = 4087; q[124] = -4077; r[124] = 391; q[125] = -3759; r[125] = 1626; q[126] = 1639; r[126] = 3753; q[127] = 3041; r[127] = -2743; q[128] = 5; r[128] = 4095; q[129] = 2778; r[129] = -3009; q[130] = 1121; r[130] = -3939; q[131] = -455; r[131] = -4070; q[132] = 3532; r[132] = 2073; q[133] = -143; r[133] = -4093; q[134] = -2357; r[134] = -3349; q[135] = 458; r[135] = 4070; q[136] = -2887; r[136] = -2904; q[137] = -1104; r[137] = 3944; q[138] = -2104; r[138] = -3513; q[139] = 126; r[139] = 4094; q[140] = -3655; r[140] = -1848; q[141] = -3896; r[141] = 1263; q[142] = -3874; r[142] = -1327; q[143] = 4058; r[143] = 553; q[144] = -1831; r[144] = -3663; q[145] = -255; r[145] = -4088; q[146] = -1211; r[146] = 3912; q[147] = 445; r[147] = 4071; q[148] = 2268; r[148] = 3410; q[149] = -4010; r[149] = 833; q[150] = 2621; r[150] = 3147; q[151] = -250; r[151] = 4088; q[152] = -3409; r[152] = -2269; q[153] = -2710; r[153] = -3070; q[154] = 4063; r[154] = 518; q[155] = -3611; r[155] = -1933; q[156] = -3707; r[156] = -1741; q[157] = -1151; r[157] = -3930; q[158] = 3976; r[158] = -983; q[159] = -1736; r[159] = 3709; q[160] = 3669; r[160] = 1820; q[161] = -143; r[161] = 4093; q[162] = -3879; r[162] = -1313; q[163] = -2242; r[163] = -3427; q[164] = -4095; r[164] = 0; q[165] = -1159; r[165] = -3928; q[166] = -3155; r[166] = 2611; q[167] = -2887; r[167] = -2904; q[168] = -4095; r[168] = 56; q[169] = -3861; r[169] = -1364; q[170] = -2814; r[170] = 2976; q[171] = -3680; r[171] = -1798; q[172] = -4094; r[172] = -107; q[173] = -3626; r[173] = 1903; q[174] = 3403; r[174] = 2278; q[175] = -1735; r[175] = -3710; q[176] = -2126; r[176] = -3500; q[177] = 3183; r[177] = -2577; q[178] = -3499; r[178] = 2128; q[179] = -1736; r[179] = 3709; q[180] = 2592; r[180] = -3170; q[181] = 3875; r[181] = 1326; q[182] = 3596; r[182] = 1960; q[183] = 3915; r[183] = -1202; q[184] = 1570; r[184] = 3783; q[185] = -3319; r[185] = -2400; q[186] = 4019; r[186] = 787; q[187] = -187; r[187] = 4091; q[188] = 1370; r[188] = -3859; q[189] = -4091; r[189] = 199; q[190] = 3626; r[190] = 1904; q[191] = -2943; r[191] = 2848; q[192] = 56; r[192] = 4095; q[193] = 2824; r[193] = 2966; q[194] = -3994; r[194] = -904; q[195] = 56; r[195] = 4095; q[196] = -2045; r[196] = 3548; q[197] = -3653; r[197] = 1850; q[198] = -2864; r[198] = 2927; q[199] = -1996; r[199] = 3576; q[200] = -4061; r[200] = 527; q[201] = 159; r[201] = 4092; q[202] = -3363; r[202] = 2336; q[203] = -4074; r[203] = 421; q[204] = 2043; r[204] = 3549; q[205] = 4095; r[205] = -70; q[206] = -2107; r[206] = -3512; q[207] = -1973; r[207] = 3589; q[208] = -3138; r[208] = 2631; q[209] = -3625; r[209] = -1905; q[210] = 2413; r[210] = 3309; q[211] = -50; r[211] = -4095; q[212] = 2813; r[212] = 2976; q[213] = -535; r[213] = -4060; q[214] = 1250; r[214] = 3900; q[215] = 1670; r[215] = -3739; q[216] = 1945; r[216] = -3604; q[217] = -476; r[217] = -4068; q[218] = -3659; r[218] = -1840; q[219] = 2745; r[219] = 3039; q[220] = -674; r[220] = -4040; q[221] = 2383; r[221] = 3330; q[222] = 4086; r[222] = 274; q[223] = -4030; r[223] = 730; q[224] = 768; r[224] = -4023; q[225] = 3925; r[225] = 1170; q[226] = 785; r[226] = 4019; q[227] = -3101; r[227] = -2675; q[228] = 4030; r[228] = -729; q[229] = 3422; r[229] = 2249; q[230] = -3847; r[230] = 1403; q[231] = 3902; r[231] = -1243; q[232] = 2114; r[232] = -3507; q[233] = -2359; r[233] = 3348; q[234] = 3754; r[234] = -1638; q[235] = -4095; r[235] = -83; q[236] = 2301; r[236] = -3388; q[237] = 3336; r[237] = 2375; q[238] = -2045; r[238] = 3548; q[239] = -413; r[239] = -4075; q[240] = 1848; r[240] = 3655; q[241] = 4072; r[241] = -437; q[242] = 4069; r[242] = -463; q[243] = 1386; r[243] = -3854; q[244] = 966; r[244] = 3980; q[245] = -1684; r[245] = -3733; q[246] = 2953; r[246] = 2837; q[247] = -3961; r[247] = -1040; q[248] = 3512; r[248] = -2107; q[249] = 1363; r[249] = 3862; q[250] = 1883; r[250] = 3637; q[251] = 2657; r[251] = 3116; q[252] = 2347; r[252] = -3356; q[253] = -1635; r[253] = -3755; q[254] = 3170; r[254] = 2593; q[255] = 2856; r[255] = 2935; q[256] = 494; r[256] = 4066; q[257] = 1936; r[257] = -3609; q[258] = 245; r[258] = 4088; q[259] = -1211; r[259] = -3912; q[260] = -3600; r[260] = 1952; q[261] = 1632; r[261] = 3756; q[262] = 2341; r[262] = 3360; q[263] = 186; r[263] = -4091; q[264] = 4011; r[264] = 829; q[265] = -3490; r[265] = -2143; q[266] = 269; r[266] = -4087; q[267] = -2939; r[267] = 2852; q[268] = 1600; r[268] = 3770; q[269] = -3405; r[269] = -2275; q[270] = -3134; r[270] = -2636; q[271] = 2642; r[271] = -3129; q[272] = 3629; r[272] = 1898; q[273] = 3413; r[273] = 2264; q[274] = 2050; r[274] = 3545; q[275] = 988; r[275] = -3975; q[276] = -660; r[276] = 4042; q[277] = 978; r[277] = -3977; q[278] = 1965; r[278] = -3593; q[279] = -1513; r[279] = -3806; q[280] = -4076; r[280] = 401; q[281] = -4094; r[281] = -92; q[282] = -1914; r[282] = 3621; q[283] = 2006; r[283] = -3570; q[284] = -1550; r[284] = -3791; q[285] = 3774; r[285] = -1591; q[286] = -3958; r[286] = 1052; q[287] = -3576; r[287] = 1997; q[288] = -382; r[288] = 4078; q[289] = 1288; r[289] = 3888; q[290] = -2965; r[290] = -2825; q[291] = 1608; r[291] = 3767; q[292] = 3052; r[292] = -2731; q[293] = -622; r[293] = 4048; q[294] = -3836; r[294] = 1434; q[295] = -3542; r[295] = 2056; q[296] = -2648; r[296] = 3124; q[297] = -1178; r[297] = -3922; q[298] = -1109; r[298] = 3942; q[299] = 3910; r[299] = 1217; q[300] = 1199; r[300] = -3916; q[301] = -3386; r[301] = 2303; q[302] = -3453; r[302] = 2202; q[303] = -2877; r[303] = 2914; q[304] = 4095; r[304] = -47; q[305] = 3635; r[305] = 1886; q[306] = -2134; r[306] = -3495; q[307] = 613; r[307] = -4049; q[308] = -2700; r[308] = 3079; q[309] = 4091; r[309] = -195; q[310] = 3989; r[310] = -927; q[311] = -2385; r[311] = 3329; q[312] = 4094; r[312] = -103; q[313] = 1044; r[313] = -3960; q[314] = -1734; r[314] = -3710; q[315] = 1646; r[315] = 3750; q[316] = 575; r[316] = 4055; q[317] = -2629; r[317] = -3140; q[318] = 3266; r[318] = 2471; q[319] = 4091; r[319] = -194; q[320] = -2154; r[320] = 3483; q[321] = 659; r[321] = 4042; q[322] = -1785; r[322] = -3686; q[323] = -717; r[323] = -4032; q[324] = 4095; r[324] = -37; q[325] = -2963; r[325] = -2827; q[326] = -2645; r[326] = -3126; q[327] = 2619; r[327] = -3148; q[328] = 1855; r[328] = -3651; q[329] = -3726; r[329] = 1699; q[330] = -3437; r[330] = 2227; q[331] = 2948; r[331] = 2842; q[332] = -2125; r[332] = 3501; q[333] = -1700; r[333] = 3726; q[334] = 4094; r[334] = -101; q[335] = 2084; r[335] = -3525; q[336] = 3225; r[336] = -2524; q[337] = 2220; r[337] = 3442; q[338] = 3174; r[338] = 2588; q[339] = 229; r[339] = -4089; q[340] = -2381; r[340] = -3332; q[341] = -3677; r[341] = -1803; q[342] = -3191; r[342] = -2567; q[343] = 2465; r[343] = 3270; q[344] = 2681; r[344] = -3096; q[345] = 975; r[345] = -3978; q[346] = 2004; r[346] = -3572; q[347] = -3442; r[347] = -2219; q[348] = 3676; r[348] = -1805; q[349] = -3753; r[349] = 1638; q[350] = 3544; r[350] = 2053; q[351] = 397; r[351] = -4076; q[352] = 2221; r[352] = 3440; q[353] = -302; r[353] = 4084; q[354] = 4083; r[354] = -323; q[355] = -2253; r[355] = -3420; q[356] = -3038; r[356] = 2746; q[357] = 2884; r[357] = 2908; q[358] = 4070; r[358] = 454; q[359] = -1072; r[359] = -3953; q[360] = 3831; r[360] = 1449; q[361] = 3663; r[361] = -1831; q[362] = -1971; r[362] = 3590; q[363] = 3226; r[363] = -2522; q[364] = -145; r[364] = -4093; q[365] = 1882; r[365] = -3637; q[366] = 529; r[366] = 4061; q[367] = 2637; r[367] = 3133; q[368] = -4077; r[368] = 389; q[369] = 2156; r[369] = -3482; q[370] = -3276; r[370] = 2458; q[371] = -2687; r[371] = -3090; q[372] = 3469; r[372] = -2177; q[373] = -4093; r[373] = -139; q[374] = -850; r[374] = 4006; q[375] = -625; r[375] = 4048; q[376] = 1110; r[376] = -3942; q[377] = -3078; r[377] = -2702; q[378] = -2719; r[378] = 3063; q[379] = 742; r[379] = 4028; q[380] = -3902; r[380] = -1245; q[381] = 3888; r[381] = -1287; q[382] = -4081; r[382] = 347; q[383] = 1070; r[383] = 3953; q[384] = -996; r[384] = -3972; q[385] = 4041; r[385] = -668; q[386] = -2712; r[386] = 3069; q[387] = -3403; r[387] = -2279; q[388] = -3320; r[388] = -2398; q[389] = 3036; r[389] = -2749; q[390] = 1308; r[390] = -3881; q[391] = 2256; r[391] = 3418; q[392] = -1486; r[392] = 3816; q[393] = -2771; r[393] = -3015; q[394] = -3883; r[394] = -1302; q[395] = -3867; r[395] = -1349; q[396] = 3952; r[396] = -1075; q[397] = -789; r[397] = 4019; q[398] = 1458; r[398] = 3827; q[399] = 3832; r[399] = -1446; q[400] = -3001; r[400] = -2787; q[401] = 3463; r[401] = 2186; q[402] = 3606; r[402] = 1942; q[403] = 4023; r[403] = 764; q[404] = 3387; r[404] = 2303; q[405] = 2648; r[405] = -3124; q[406] = 1370; r[406] = -3860; q[407] = -3134; r[407] = 2636; q[408] = 4051; r[408] = -600; q[409] = -1977; r[409] = -3587; q[410] = 3160; r[410] = 2605; q[411] = 4042; r[411] = 659; q[412] = 3004; r[412] = 2783; q[413] = 3370; r[413] = 2327; q[414] = -419; r[414] = -4074; q[415] = -1968; r[415] = 3591; q[416] = -3705; r[416] = -1746; q[417] = -3331; r[417] = -2383; q[418] = -3634; r[418] = 1888; q[419] = -1981; r[419] = -3584; q[420] = 4069; r[420] = -469; q[421] = -628; r[421] = -4047; q[422] = -1900; r[422] = 3628; q[423] = 1039; r[423] = -3961; q[424] = 2554; r[424] = -3201; q[425] = -2955; r[425] = 2836; q[426] = 2286; r[426] = -3398; q[427] = -1624; r[427] = 3760; q[428] = 2213; r[428] = 3446; q[429] = -3989; r[429] = -926; q[430] = 192; r[430] = -4091; q[431] = -723; r[431] = 4031; q[432] = 2878; r[432] = 2913; q[433] = -2109; r[433] = 3511; q[434] = 1463; r[434] = -3825; q[435] = -741; r[435] = -4028; q[436] = -1314; r[436] = -3879; q[437] = 3115; r[437] = 2659; q[438] = -3160; r[438] = -2605; q[439] = 1868; r[439] = 3644; q[440] = -824; r[440] = 4012; q[441] = 781; r[441] = 4020; q[442] = -1257; r[442] = -3898; q[443] = 3331; r[443] = -2382; q[444] = 1642; r[444] = -3752; q[445] = 3748; r[445] = -1650; q[446] = -487; r[446] = -4066; q[447] = 3085; r[447] = -2694; q[448] = 4009; r[448] = 839; q[449] = -2308; r[449] = -3383; q[450] = 3850; r[450] = 1397; q[451] = -4078; r[451] = -374; q[452] = 2989; r[452] = -2799; q[453] = 3023; r[453] = -2762; q[454] = 1397; r[454] = -3850; q[455] = 323; r[455] = 4083; q[456] = 268; r[456] = -4087; q[457] = 2414; r[457] = 3308; q[458] = 3876; r[458] = 1322; q[459] = -3584; r[459] = 1982; q[460] = 1603; r[460] = 3769; q[461] = -1502; r[461] = 3810; q[462] = 1318; r[462] = 3878; q[463] = 1554; r[463] = -3789; q[464] = 2492; r[464] = 3250; q[465] = -4093; r[465] = -154; q[466] = 4008; r[466] = 842; q[467] = -2279; r[467] = 3403; q[468] = 3013; r[468] = 2774; q[469] = 2557; r[469] = 3199; q[470] = 4068; r[470] = 475; q[471] = 3324; r[471] = -2392; q[472] = 2653; r[472] = -3120; q[473] = 796; r[473] = 4017; q[474] = -1312; r[474] = 3880; q[475] = 1794; r[475] = 3681; q[476] = -2347; r[476] = -3356; q[477] = -4008; r[477] = -840; q[478] = -3773; r[478] = -1592; q[479] = 1609; r[479] = 3766; q[480] = -1564; r[480] = -3785; q[481] = 3004; r[481] = 2784; q[482] = 1258; r[482] = 3897; q[483] = 3729; r[483] = 1693; q[484] = -4095; r[484] = -28; q[485] = -4093; r[485] = -146; q[486] = 1393; r[486] = -3851; q[487] = 297; r[487] = -4085; q[488] = 2294; r[488] = 3393; q[489] = -2562; r[489] = 3195; q[490] = -1716; r[490] = -3718; q[491] = 2224; r[491] = -3439; q[492] = 2032; r[492] = 3555; q[493] = -2968; r[493] = 2822; q[494] = 2338; r[494] = 3363; q[495] = 1584; r[495] = -3776; q[496] = -3072; r[496] = 2708; q[497] = -1596; r[497] = -3771; q[498] = -2256; r[498] = -3418; q[499] = 4095; r[499] = 89; q[500] = -1949; r[500] = 3602; q[501] = 1844; r[501] = 3657; q[502] = -3375; r[502] = 2319; q[503] = -1481; r[503] = -3818; q[504] = 3228; r[504] = -2520; q[505] = 1116; r[505] = 3940; q[506] = -2783; r[506] = 3004; q[507] = 3915; r[507] = 1201; q[508] = 283; r[508] = 4086; q[509] = -3732; r[509] = 1685; q[510] = -433; r[510] = -4072; q[511] = -3667; r[511] = 1823; q[512] = 3883; r[512] = 1300; q[513] = -3742; r[513] = 1663; q[514] = 4093; r[514] = -143; q[515] = 3874; r[515] = 1328; q[516] = -3800; r[516] = 1528; q[517] = -1257; r[517] = 3898; q[518] = -1606; r[518] = 3767; q[519] = 3394; r[519] = 2291; q[520] = 2255; r[520] = 3419; q[521] = -4094; r[521] = 120; q[522] = -3767; r[522] = 1606; q[523] = 1849; r[523] = -3654; q[524] = -2883; r[524] = 2908; q[525] = 3469; r[525] = 2176; q[526] = 2654; r[526] = 3119; q[527] = -239; r[527] = 4088; q[528] = -651; r[528] = 4043; q[529] = -1140; r[529] = 3934; q[530] = 328; r[530] = -4082; q[531] = 3246; r[531] = 2497; q[532] = 4026; r[532] = -753; q[533] = -2041; r[533] = -3550; q[534] = -1154; r[534] = 3929; q[535] = -2710; r[535] = 3070; q[536] = -2860; r[536] = 2932; q[537] = 2097; r[537] = 3517; q[538] = 3492; r[538] = -2140; q[539] = 3123; r[539] = 2649; q[540] = 3360; r[540] = 2342; q[541] = 2498; r[541] = 3245; q[542] = 3976; r[542] = 982; q[543] = -2441; r[543] = -3288; q[544] = 3601; r[544] = 1951; q[545] = -4008; r[545] = -842; q[546] = 1243; r[546] = 3902; q[547] = 4069; r[547] = 466; q[548] = -2031; r[548] = 3556; q[549] = 4077; r[549] = 386; q[550] = -3112; r[550] = -2663; q[551] = 4087; r[551] = -262; q[552] = 4087; r[552] = 266; q[553] = -3907; r[553] = -1228; q[554] = -1611; r[554] = 3765; q[555] = 3066; r[555] = -2715; q[556] = 2657; r[556] = 3117; q[557] = 3912; r[557] = -1213; q[558] = -2531; r[558] = -3220; q[559] = 3500; r[559] = -2127; q[560] = -76; r[560] = -4095; q[561] = 3413; r[561] = -2264; q[562] = -4071; r[562] = -448; q[563] = 828; r[563] = 4011; q[564] = 3664; r[564] = 1830; q[565] = -1578; r[565] = 3779; q[566] = 3555; r[566] = 2033; q[567] = 3868; r[567] = -1345; q[568] = 4054; r[568] = -580; q[569] = -4094; r[569] = 124; q[570] = -3820; r[570] = -1477; q[571] = -3658; r[571] = -1842; q[572] = 2595; r[572] = 3168; q[573] = 3354; r[573] = 2350; q[574] = -701; r[574] = -4035; q[575] = -772; r[575] = -4022; q[576] = 2799; r[576] = 2990; q[577] = -3632; r[577] = 1893; q[578] = 310; r[578] = 4084; q[579] = 3984; r[579] = -947; q[580] = 3794; r[580] = -1542; q[581] = -2419; r[581] = 3304; q[582] = -3916; r[582] = 1200; q[583] = -3886; r[583] = 1292; q[584] = -3299; r[584] = 2426; q[585] = -437; r[585] = 4072; q[586] = 2053; r[586] = -3544; q[587] = 3987; r[587] = 937; q[588] = -789; r[588] = -4019; q[589] = 4055; r[589] = -575; q[590] = -3894; r[590] = 1270; q[591] = 4003; r[591] = -864; q[592] = -3060; r[592] = 2721; q[593] = -4009; r[593] = 836; q[594] = -1655; r[594] = -3746; q[595] = 3954; r[595] = -1067; q[596] = -773; r[596] = 4022; q[597] = -422; r[597] = 4074; q[598] = -3384; r[598] = 2306; q[599] = 195; r[599] = -4091; q[600] = -298; r[600] = 4085; q[601] = -3988; r[601] = 931; q[602] = 2014; r[602] = -3566; q[603] = 3349; r[603] = -2357; q[604] = 3800; r[604] = 1526; q[605] = 3858; r[605] = 1374; q[606] = 2947; r[606] = 2844; q[607] = -1483; r[607] = -3818; q[608] = 4056; r[608] = -565; q[609] = 2612; r[609] = -3154; q[610] = 2326; r[610] = 3371; q[611] = -3545; r[611] = 2051; q[612] = -1001; r[612] = -3971; q[613] = 3211; r[613] = 2541; q[614] = -2717; r[614] = 3065; q[615] = -3159; r[615] = -2606; q[616] = 2869; r[616] = -2922; q[617] = -1290; r[617] = -3887; q[618] = 2479; r[618] = 3260; q[619] = 3420; r[619] = 2252; q[620] = 1823; r[620] = 3667; q[621] = 3368; r[621] = 2330; q[622] = -3819; r[622] = -1480; q[623] = 3800; r[623] = 1528; q[624] = 3773; r[624] = 1594; q[625] = -189; r[625] = -4091; q[626] = -4067; r[626] = -485; q[627] = 2277; r[627] = -3404; q[628] = -4089; r[628] = -233; q[629] = -3634; r[629] = 1889; q[630] = 3292; r[630] = 2437; q[631] = -530; r[631] = 4061; q[632] = -3109; r[632] = 2666; q[633] = -3741; r[633] = 1667; q[634] = -1903; r[634] = -3626; q[635] = 3879; r[635] = -1315; q[636] = 4083; r[636] = -315; q[637] = -1148; r[637] = 3931; q[638] = 2630; r[638] = 3139; q[639] = -4001; r[639] = 876; q[640] = -2295; r[640] = -3392; q[641] = 1090; r[641] = -3948; q[642] = -3024; r[642] = 2762; q[643] = 2728; r[643] = -3054; q[644] = -3305; r[644] = 2419; q[645] = 60; r[645] = 4095; q[646] = 4048; r[646] = -620; q[647] = 589; r[647] = -4053; q[648] = -3867; r[648] = 1347; q[649] = -2944; r[649] = -2847; q[650] = -2721; r[650] = 3060; q[651] = 2928; r[651] = 2863; q[652] = 801; r[652] = 4016; q[653] = -3644; r[653] = 1870; q[654] = -1648; r[654] = -3749; q[655] = 825; r[655] = -4012; q[656] = -2036; r[656] = -3553; q[657] = -1192; r[657] = -3918; q[658] = 2875; r[658] = 2916; q[659] = -1831; r[659] = -3663; q[660] = -2865; r[660] = -2926; q[661] = -575; r[661] = -4055; q[662] = -3870; r[662] = 1340; q[663] = -4080; r[663] = -356; q[664] = -2176; r[664] = -3469; q[665] = -2986; r[665] = -2803; q[666] = 3978; r[666] = -972; q[667] = 2437; r[667] = 3291; q[668] = -3528; r[668] = 2080; q[669] = -3300; r[669] = -2425; q[670] = 3085; r[670] = 2693; q[671] = -3700; r[671] = -1756; q[672] = 3216; r[672] = -2535; q[673] = 4094; r[673] = -91; q[674] = 3775; r[674] = -1589; q[675] = 1097; r[675] = -3946; q[676] = -152; r[676] = -4093; q[677] = -3490; r[677] = 2142; q[678] = 3747; r[678] = 1654; q[679] = -1490; r[679] = -3815; q[680] = -3998; r[680] = -886; q[681] = 3726; r[681] = -1700; q[682] = -1600; r[682] = 3770; q[683] = -87; r[683] = 4095; q[684] = 2538; r[684] = -3214; q[685] = -4095; r[685] = 52; q[686] = -3993; r[686] = -910; q[687] = 4051; r[687] = 603; q[688] = -1242; r[688] = -3902; q[689] = 2155; r[689] = 3482; q[690] = 1270; r[690] = 3893; q[691] = 1919; r[691] = -3618; q[692] = -3145; r[692] = 2623; q[693] = 2475; r[693] = 3263; q[694] = 2226; r[694] = -3437; q[695] = -3894; r[695] = -1269; q[696] = -429; r[696] = 4073; q[697] = -1346; r[697] = 3868; q[698] = 1297; r[698] = 3885; q[699] = 1699; r[699] = 3726; q[700] = -3375; r[700] = 2319; q[701] = 1577; r[701] = -3779; q[702] = -63; r[702] = 4095; q[703] = 1215; r[703] = -3911; q[704] = -1492; r[704] = 3814; q[705] = -1530; r[705] = -3799; q[706] = 3442; r[706] = 2218; q[707] = -3867; r[707] = -1349; q[708] = -3291; r[708] = -2437; q[709] = -2253; r[709] = -3420; q[710] = -150; r[710] = -4093; q[711] = -2686; r[711] = -3092; q[712] = 3470; r[712] = 2175; q[713] = -3826; r[713] = -1461; q[714] = -3148; r[714] = 2619; q[715] = -3858; r[715] = 1375; q[716] = -3844; r[716] = -1412; q[717] = -3652; r[717] = 1854; q[718] = 4018; r[718] = -791; q[719] = 179; r[719] = -4092; q[720] = 3498; r[720] = 2129; q[721] = -1999; r[721] = -3574; q[722] = 3531; r[722] = 2075; q[723] = 4050; r[723] = -606; q[724] = -1639; r[724] = 3753; q[725] = -3661; r[725] = 1835; q[726] = 4039; r[726] = 679; q[727] = 3561; r[727] = 2023; q[728] = 528; r[728] = 4061; q[729] = -634; r[729] = -4046; q[730] = 364; r[730] = -4079; q[731] = 2735; r[731] = 3048; q[732] = 3978; r[732] = 973; q[733] = -4073; r[733] = -427; q[734] = -3722; r[734] = 1708; q[735] = 2356; r[735] = -3350; q[736] = -1125; r[736] = -3938; q[737] = 4054; r[737] = 580; q[738] = 3328; r[738] = -2387; q[739] = 1439; r[739] = -3834; q[740] = 1746; r[740] = 3705; q[741] = 2507; r[741] = 3238; q[742] = 3839; r[742] = -1427; q[743] = 488; r[743] = -4066; q[744] = 1187; r[744] = 3920; q[745] = 2038; r[745] = -3552; q[746] = -905; r[746] = -3994; q[747] = -236; r[747] = 4089; q[748] = 208; r[748] = -4090; q[749] = 1660; r[749] = 3744; q[750] = -4074; r[750] = -415; q[751] = -2304; r[751] = 3385; q[752] = -2457; r[752] = 3276; q[753] = 3302; r[753] = 2423; q[754] = 1778; r[754] = -3689; q[755] = 2019; r[755] = 3563; q[756] = 4037; r[756] = 687; q[757] = -2365; r[757] = 3343; q[758] = 5; r[758] = -4095; q[759] = 160; r[759] = -4092; } /*initRand*/ /** * initializes the MEL-2_LINEAR LOOKUP TABLE * @param sig_inObj : sig PU internal object of the sub-object * @return void * @remarks translated from matlab code to c-code * @callgraph * @callergraph * * input * - bilinTab : base address of bilinTable destination vector * - alpha : warping factor * - size : size of the vectors to be generated * - A,B : base address of array of indexes for lookup table implementation * - D : base address of delta array for lookup table implementation * * output * - bilinTab, A, B, D : initialized vectors */ void mel_2_lin_init(sig_innerobj_t *sig_inObj) { /*Declare variables tied to I/O PARAMS formerly passed by value or reference*/ picoos_single alpha; picoos_int32 *D; picoos_int32 size; picoos_int16 *A; /*Link local variables with sig data object*/ alpha = sig_inObj->warp_p; size = (sig_inObj->hfftsize_p) + 1; A = sig_inObj->A_p; D = sig_inObj->d_p; /* fixed point interpolation tables scaling factor: 0x20 corresponding bit shift: 5 */ A[0] = 0; D[0] = 0; A[1] = 2; D[1] = 14; A[2] = 4; D[2] = 29; A[3] = 7; D[3] = 11; A[4] = 9; D[4] = 24; A[5] = 12; D[5] = 5; A[6] = 14; D[6] = 18; A[7] = 16; D[7] = 30; A[8] = 19; D[8] = 9; A[9] = 21; D[9] = 19; A[10] = 23; D[10] = 29; A[11] = 26; D[11] = 5; A[12] = 28; D[12] = 12; A[13] = 30; D[13] = 19; A[14] = 32; D[14] = 24; A[15] = 34; D[15] = 27; A[16] = 36; D[16] = 30; A[17] = 38; D[17] = 31; A[18] = 40; D[18] = 31; A[19] = 42; D[19] = 29; A[20] = 44; D[20] = 26; A[21] = 46; D[21] = 22; A[22] = 48; D[22] = 17; A[23] = 50; D[23] = 10; A[24] = 52; D[24] = 2; A[25] = 53; D[25] = 24; A[26] = 55; D[26] = 13; A[27] = 57; D[27] = 1; A[28] = 58; D[28] = 20; A[29] = 60; D[29] = 5; A[30] = 61; D[30] = 21; A[31] = 63; D[31] = 4; A[32] = 64; D[32] = 18; A[33] = 65; D[33] = 31; A[34] = 67; D[34] = 11; A[35] = 68; D[35] = 21; A[36] = 69; D[36] = 31; A[37] = 71; D[37] = 7; A[38] = 72; D[38] = 14; A[39] = 73; D[39] = 21; A[40] = 74; D[40] = 27; A[41] = 75; D[41] = 31; A[42] = 77; D[42] = 3; A[43] = 78; D[43] = 6; A[44] = 79; D[44] = 8; A[45] = 80; D[45] = 10; A[46] = 81; D[46] = 10; A[47] = 82; D[47] = 10; A[48] = 83; D[48] = 9; A[49] = 84; D[49] = 8; A[50] = 85; D[50] = 6; A[51] = 86; D[51] = 3; A[52] = 86; D[52] = 31; A[53] = 87; D[53] = 27; A[54] = 88; D[54] = 23; A[55] = 89; D[55] = 18; A[56] = 90; D[56] = 12; A[57] = 91; D[57] = 6; A[58] = 91; D[58] = 31; A[59] = 92; D[59] = 24; A[60] = 93; D[60] = 16; A[61] = 94; D[61] = 8; A[62] = 94; D[62] = 31; A[63] = 95; D[63] = 22; A[64] = 96; D[64] = 13; A[65] = 97; D[65] = 3; A[66] = 97; D[66] = 25; A[67] = 98; D[67] = 14; A[68] = 99; D[68] = 3; A[69] = 99; D[69] = 24; A[70] = 100; D[70] = 13; A[71] = 101; D[71] = 1; A[72] = 101; D[72] = 21; A[73] = 102; D[73] = 8; A[74] = 102; D[74] = 27; A[75] = 103; D[75] = 14; A[76] = 104; D[76] = 1; A[77] = 104; D[77] = 19; A[78] = 105; D[78] = 6; A[79] = 105; D[79] = 24; A[80] = 106; D[80] = 9; A[81] = 106; D[81] = 27; A[82] = 107; D[82] = 12; A[83] = 107; D[83] = 29; A[84] = 108; D[84] = 14; A[85] = 108; D[85] = 31; A[86] = 109; D[86] = 15; A[87] = 109; D[87] = 31; A[88] = 110; D[88] = 16; A[89] = 110; D[89] = 31; A[90] = 111; D[90] = 15; A[91] = 111; D[91] = 31; A[92] = 112; D[92] = 14; A[93] = 112; D[93] = 30; A[94] = 113; D[94] = 13; A[95] = 113; D[95] = 28; A[96] = 114; D[96] = 11; A[97] = 114; D[97] = 26; A[98] = 115; D[98] = 9; A[99] = 115; D[99] = 23; A[100] = 116; D[100] = 6; A[101] = 116; D[101] = 20; A[102] = 117; D[102] = 2; A[103] = 117; D[103] = 16; A[104] = 117; D[104] = 31; A[105] = 118; D[105] = 13; A[106] = 118; D[106] = 27; A[107] = 119; D[107] = 8; A[108] = 119; D[108] = 22; A[109] = 120; D[109] = 4; A[110] = 120; D[110] = 17; A[111] = 120; D[111] = 31; A[112] = 121; D[112] = 13; A[113] = 121; D[113] = 26; A[114] = 122; D[114] = 8; A[115] = 122; D[115] = 21; A[116] = 123; D[116] = 2; A[117] = 123; D[117] = 15; A[118] = 123; D[118] = 29; A[119] = 124; D[119] = 10; A[120] = 124; D[120] = 23; A[121] = 125; D[121] = 4; A[122] = 125; D[122] = 17; A[123] = 125; D[123] = 31; A[124] = 126; D[124] = 12; A[125] = 126; D[125] = 25; A[126] = 127; D[126] = 6; A[127] = 127; D[127] = 19; A[128] = 128; D[128] = 0; }/*mel_2_lin_init*/ /** * function to be documented * @param ang : ?? * @param table : ?? * @param cs : ?? * @param sn : ?? * @return void * @callgraph * @callergraph */ static void get_trig(picoos_int32 ang, picoos_int32 *table, picoos_int32 *cs, picoos_int32 *sn) { picoos_int32 i, j, k; i = k = ang >> PICODSP_PI_SHIFT; /* * PICODSP_COS_TABLE_LEN2/PICODSP_FIX_SCALE2 */ if (i < 0) i = -i; j = 1; i &= (PICODSP_COS_TABLE_LEN4 - 1); if (i > PICODSP_COS_TABLE_LEN2) i = PICODSP_COS_TABLE_LEN4 - i; if (i > PICODSP_COS_TABLE_LEN) { j = -1; i = PICODSP_COS_TABLE_LEN2 - i; } if (j == 1) *cs = table[i]; else *cs = -table[i]; i = k - PICODSP_COS_TABLE_LEN; if (i < 0) i = -i; j = 1; i &= (PICODSP_COS_TABLE_LEN4 - 1); if (i > PICODSP_COS_TABLE_LEN2) i = PICODSP_COS_TABLE_LEN4 - i; if (i > PICODSP_COS_TABLE_LEN) { j = -1; i = PICODSP_COS_TABLE_LEN2 - i; } if (j == 1) *sn = table[i]; else *sn = -table[i]; }/*get_trig*/ /** * function to be documented * @param sig_inObj : sig PU internal object of the sub-object * @return void * @callgraph * @callergraph */ void save_transition_frame(sig_innerobj_t *sig_inObj) { picoos_int32 *tmp, *tmp2; /*for loop unrolling*/ if (sig_inObj->voiced_p != sig_inObj->prevVoiced_p) { sig_inObj->VoicTrans = sig_inObj->prevVoiced_p; /*remember last voicing transition*/ tmp = sig_inObj->ImpResp_p; tmp2 = sig_inObj->imp_p; FAST_DEVICE(PICODSP_FFTSIZE,*(tmp++)=*(tmp2++);); if (sig_inObj->voiced_p == 1) sig_inObj->nV = 0; else sig_inObj->nU = 0; /*to avoid problems in case of very short voiced or unvoiced parts (less than 4 frames long)*/ } }/*save_transition_frame*/ /** * calculates an unweighted excitation window * @param sig_inObj : sig PU internal object of the sub-object * @param nextPeak : position of next peak (excitation position) * @return PICO_OK * @callgraph * @callergraph * input * - hop : hop size in samples * - winlen : excitation window length * - E : energy * - F0 : pitch * - nextPeak : state that remembers next excitation index * - Fs - sampling frequency * output * - LocV, LocU : (MAX_EN size) location of excitation points * - EnV, EnU : (MAX_EN size) RMS values of excitation (scaled) * - nV, nU : (integers) number of excitation points * - nextPeak new position of lastPeak to calculate next frame */ static void get_simple_excitation(sig_innerobj_t *sig_inObj, picoos_int16 *nextPeak) { /*Define local variables*/ picoos_int16 nI, nJ, k; /* picoos_single InvSqrt3=(picoos_single)2/(picoos_single)sqrt(3.0); *//*constant*/ picoos_int32 Ti, sqrtTi; picoos_int16 hop, winlen, Fs; picoos_single E, F0; picoos_int16 voiced; picoos_single fact; /*normalization factor*/ picoos_single rounding = 0.5f; /*Link local variables to sig object*/ hop = sig_inObj->hop_p; winlen = sig_inObj->m2_p; Fs = sig_inObj->Fs_p; E = sig_inObj->E_p; F0 = sig_inObj->F0_p; voiced = sig_inObj->voiced_p; E = (E > 5) ? 9 : (E > 1) ? 2 * E - 1 : E; /* shift previous excitation window by hop samples*/ for (nI = 0; nI < sig_inObj->nV; nI++) { sig_inObj->LocV[nI] = sig_inObj->LocV[nI] - hop; } for (nI = 0; nI < sig_inObj->nU; nI++) { sig_inObj->LocU[nI] = sig_inObj->LocU[nI] - hop; } /*get rid of the voiced points that fall out of the interval*/ nI = 0; while ((sig_inObj->LocV[nI] < 0) && nI < sig_inObj->nV) nI++; for (nJ = nI; nJ < sig_inObj->nV; nJ++) { sig_inObj->LocV[nJ - nI] = sig_inObj->LocV[nJ]; sig_inObj->EnV[nJ - nI] = sig_inObj->EnV[nJ]; } sig_inObj->nV -= nI; /*get rid of the unvoiced points that fall out of the interval */ nI = 0; while ((sig_inObj->LocU[nI] < 0) && nI < sig_inObj->nU) nI++; for (nJ = nI; nJ < sig_inObj->nU; nJ++) { sig_inObj->LocU[nJ - nI] = sig_inObj->LocU[nJ]; sig_inObj->EnU[nJ - nI] = sig_inObj->EnU[nJ]; } sig_inObj->nU -= nI; *nextPeak -= hop; k = *nextPeak; fact = 3; if (voiced == 0) { /*Unvoiced*/ Ti = (picoos_int32) (rounding + (picoos_single) Fs / (picoos_single) sig_inObj->Fuv_p); /* round Period*/ sqrtTi = (picoos_int32) (E * sqrt((double) Fs / (hop * sig_inObj->Fuv_p)) * fact * PICODSP_GETEXC_K1); while (k < winlen) { if (k < winlen) { sig_inObj->LocU[sig_inObj->nU] = k; sig_inObj->EnU[sig_inObj->nU] = sqrtTi; sig_inObj->nU++; k += (picoos_int16) Ti; } } } else { /*Voiced*/ Ti = (picoos_int32) (rounding + (picoos_single) Fs / (picoos_single) F0); /*Period*/ sqrtTi = (picoos_int32) (E * sqrt((double) Fs / (hop * sig_inObj->F0_p)) * fact * PICODSP_GETEXC_K1); while (k < winlen) { sig_inObj->LocV[sig_inObj->nV] = k; sig_inObj->EnV[sig_inObj->nV] = sqrtTi; sig_inObj->nV++; k += (picoos_int16) Ti; } } *nextPeak = k; }/*get_simple_excitation*/ #ifdef __cplusplus } #endif /* end picosig2.c */