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