Line data Source code
1 : /****************************************************************************** 2 : * ETSI TS 103 634 V1.5.1 * 3 : * Low Complexity Communication Codec Plus (LC3plus) * 4 : * * 5 : * Copyright licence is solely granted through ETSI Intellectual Property * 6 : * Rights Policy, 3rd April 2019. No patent licence is granted by implication, * 7 : * estoppel or otherwise. * 8 : ******************************************************************************/ 9 : 10 : #include "options.h" 11 : #include "wmc_auto.h" 12 : #include "functions.h" 13 : 14 0 : void processNoiseFilling_fl(LC3_FLOAT xq[], LC3_INT nfseed, LC3_INT fac_ns_idx, LC3_INT bw_stopband, LC3_INT frame_dms, LC3_FLOAT fac_ns_pc, LC3_INT spec_inv_idx) 15 : { 16 : LC3_INT zeroLines[MAX_LEN]; 17 0 : LC3_INT nTransWidth, startOffset, j, k, nzeros = 0, kZeroLines; 18 0 : LC3_FLOAT fac_ns = 0; 19 : 20 0 : switch (frame_dms) 21 : { 22 0 : case 25: 23 0 : nTransWidth = 1; 24 0 : startOffset = 6; 25 0 : break; 26 0 : case 50: 27 0 : nTransWidth = 1; 28 0 : startOffset = 12; 29 0 : break; 30 0 : case 75: 31 0 : nTransWidth = 2; 32 0 : startOffset = 18; 33 0 : break; 34 0 : case 100: 35 0 : nTransWidth = 3; 36 0 : startOffset = 24; 37 0 : break; 38 : } 39 : 40 0 : fac_ns = (8.0 - fac_ns_idx) / 16.0; 41 : 42 0 : j = 0; 43 : 44 0 : for (k = startOffset - nTransWidth; k < startOffset + nTransWidth; k++) 45 : { 46 0 : if (xq[k] != 0) 47 : { 48 0 : nzeros = -2 * nTransWidth - 1; 49 : } 50 0 : if (xq[k] == 0) 51 : { 52 0 : nzeros ++; 53 : } 54 : } 55 0 : for (k = startOffset; k < bw_stopband - nTransWidth; k++) 56 : { 57 0 : if (xq[k + nTransWidth] != 0) 58 : { 59 0 : nzeros = -2 * nTransWidth - 1; 60 : } 61 0 : if (xq[k + nTransWidth] == 0) 62 : { 63 0 : nzeros ++; 64 : } 65 0 : if (nzeros >= 0) 66 : { 67 0 : zeroLines[j++] = k; 68 : } 69 : } 70 : 71 0 : for (k = bw_stopband - nTransWidth; k < bw_stopband; k++) 72 : { 73 0 : nzeros ++; 74 0 : if (nzeros >= 0) 75 : { 76 0 : zeroLines[j++] = k; 77 : } 78 : } 79 : 80 0 : kZeroLines = j; 81 : 82 0 : for (k = 0; k < kZeroLines; k++) { 83 0 : nfseed = (13849 + (nfseed + 32768) * 31821) & 65535; 84 0 : nfseed -= 32768; 85 : 86 0 : if (nfseed >= 0) { 87 0 : if (zeroLines[k] < spec_inv_idx) 88 : { 89 0 : xq[zeroLines[k]] = fac_ns; 90 : } else { 91 0 : xq[zeroLines[k]] = fac_ns_pc; 92 : } 93 : } else { 94 0 : if (zeroLines[k] < spec_inv_idx) 95 : { 96 0 : xq[zeroLines[k]] = -fac_ns; 97 : } else { 98 0 : xq[zeroLines[k]] = -fac_ns_pc; 99 : } 100 : } 101 : } 102 : 103 0 : return; 104 : }