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