1 /* 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 /* 12 * encode_lpc_swb.h 13 * 14 * This file contains declaration of functions used to 15 * encode LPC parameters (Shape & gain) of the upper band. 16 * 17 */ 18 19 #ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_ENCODE_LPC_SWB_H_ 20 #define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_ENCODE_LPC_SWB_H_ 21 22 #include "settings.h" 23 #include "structs.h" 24 #include "webrtc/typedefs.h" 25 26 /****************************************************************************** 27 * WebRtcIsac_RemoveLarMean() 28 * 29 * Remove the means from LAR coefficients. 30 * 31 * Input: 32 * -lar : pointer to lar vectors. LAR vectors are 33 * concatenated. 34 * -bandwidth : indicates if the given LAR vectors belong 35 * to SWB-12kHz or SWB-16kHz. 36 * 37 * Output: 38 * -lar : pointer to mean-removed LAR:s. 39 * 40 * 41 */ 42 int16_t WebRtcIsac_RemoveLarMean( 43 double* lar, 44 int16_t bandwidth); 45 46 /****************************************************************************** 47 * WebRtcIsac_DecorrelateIntraVec() 48 * 49 * Remove the correlation amonge the components of LAR vectors. If LAR vectors 50 * of one frame are put in a matrix where each column is a LAR vector of a 51 * sub-frame, then this is equivalent to multiplying the LAR matrix with 52 * a decorrelting mtrix from left. 53 * 54 * Input: 55 * -inLar : pointer to mean-removed LAR vecrtors. 56 * -bandwidth : indicates if the given LAR vectors belong 57 * to SWB-12kHz or SWB-16kHz. 58 * 59 * Output: 60 * -out : decorrelated LAR vectors. 61 */ 62 int16_t WebRtcIsac_DecorrelateIntraVec( 63 const double* inLAR, 64 double* out, 65 int16_t bandwidth); 66 67 68 /****************************************************************************** 69 * WebRtcIsac_DecorrelateInterVec() 70 * 71 * Remover the correlation among mean-removed LAR vectors. If LAR vectors 72 * of one frame are put in a matrix where each column is a LAR vector of a 73 * sub-frame, then this is equivalent to multiplying the LAR matrix with 74 * a decorrelting mtrix from right. 75 * 76 * Input: 77 * -data : pointer to matrix of LAR vectors. The matrix 78 * is stored column-wise. 79 * -bandwidth : indicates if the given LAR vectors belong 80 * to SWB-12kHz or SWB-16kHz. 81 * 82 * Output: 83 * -out : decorrelated LAR vectors. 84 */ 85 int16_t WebRtcIsac_DecorrelateInterVec( 86 const double* data, 87 double* out, 88 int16_t bandwidth); 89 90 91 /****************************************************************************** 92 * WebRtcIsac_QuantizeUncorrLar() 93 * 94 * Quantize the uncorrelated parameters. 95 * 96 * Input: 97 * -data : uncorrelated LAR vectors. 98 * -bandwidth : indicates if the given LAR vectors belong 99 * to SWB-12kHz or SWB-16kHz. 100 * 101 * Output: 102 * -data : quantized version of the input. 103 * -idx : pointer to quantization indices. 104 */ 105 double WebRtcIsac_QuantizeUncorrLar( 106 double* data, 107 int* idx, 108 int16_t bandwidth); 109 110 111 /****************************************************************************** 112 * WebRtcIsac_CorrelateIntraVec() 113 * 114 * This is the inverse of WebRtcIsac_DecorrelateIntraVec(). 115 * 116 * Input: 117 * -data : uncorrelated parameters. 118 * -bandwidth : indicates if the given LAR vectors belong 119 * to SWB-12kHz or SWB-16kHz. 120 * 121 * Output: 122 * -out : correlated parametrs. 123 */ 124 int16_t WebRtcIsac_CorrelateIntraVec( 125 const double* data, 126 double* out, 127 int16_t bandwidth); 128 129 130 /****************************************************************************** 131 * WebRtcIsac_CorrelateInterVec() 132 * 133 * This is the inverse of WebRtcIsac_DecorrelateInterVec(). 134 * 135 * Input: 136 * -data 137 * -bandwidth : indicates if the given LAR vectors belong 138 * to SWB-12kHz or SWB-16kHz. 139 * 140 * Output: 141 * -out : correlated parametrs. 142 */ 143 int16_t WebRtcIsac_CorrelateInterVec( 144 const double* data, 145 double* out, 146 int16_t bandwidth); 147 148 149 /****************************************************************************** 150 * WebRtcIsac_AddLarMean() 151 * 152 * This is the inverse of WebRtcIsac_RemoveLarMean() 153 * 154 * Input: 155 * -data : pointer to mean-removed LAR:s. 156 * -bandwidth : indicates if the given LAR vectors belong 157 * to SWB-12kHz or SWB-16kHz. 158 * 159 * Output: 160 * -data : pointer to LARs. 161 */ 162 int16_t WebRtcIsac_AddLarMean( 163 double* data, 164 int16_t bandwidth); 165 166 167 /****************************************************************************** 168 * WebRtcIsac_DequantizeLpcParam() 169 * 170 * Get the quantized value of uncorrelated LARs given the quantization indices. 171 * 172 * Input: 173 * -idx : pointer to quantiztion indices. 174 * -bandwidth : indicates if the given LAR vectors belong 175 * to SWB-12kHz or SWB-16kHz. 176 * 177 * Output: 178 * -out : pointer to quantized values. 179 */ 180 int16_t WebRtcIsac_DequantizeLpcParam( 181 const int* idx, 182 double* out, 183 int16_t bandwidth); 184 185 186 /****************************************************************************** 187 * WebRtcIsac_ToLogDomainRemoveMean() 188 * 189 * Transform the LPC gain to log domain then remove the mean value. 190 * 191 * Input: 192 * -lpcGain : pointer to LPC Gain, expecting 6 LPC gains 193 * 194 * Output: 195 * -lpcGain : mean-removed in log domain. 196 */ 197 int16_t WebRtcIsac_ToLogDomainRemoveMean( 198 double* lpGains); 199 200 201 /****************************************************************************** 202 * WebRtcIsac_DecorrelateLPGain() 203 * 204 * Decorrelate LPC gains. There are 6 LPC Gains per frame. This is like 205 * multiplying gain vector with decorrelating matrix. 206 * 207 * Input: 208 * -data : LPC gain in log-domain with mean removed. 209 * 210 * Output: 211 * -out : decorrelated parameters. 212 */ 213 int16_t WebRtcIsac_DecorrelateLPGain( 214 const double* data, 215 double* out); 216 217 218 /****************************************************************************** 219 * WebRtcIsac_QuantizeLpcGain() 220 * 221 * Quantize the decorrelated log-domain gains. 222 * 223 * Input: 224 * -lpcGain : uncorrelated LPC gains. 225 * 226 * Output: 227 * -idx : quantization indices 228 * -lpcGain : quantized value of the inpt. 229 */ 230 double WebRtcIsac_QuantizeLpcGain( 231 double* lpGains, 232 int* idx); 233 234 235 /****************************************************************************** 236 * WebRtcIsac_DequantizeLpcGain() 237 * 238 * Get the quantized values given the quantization indices. 239 * 240 * Input: 241 * -idx : pointer to quantization indices. 242 * 243 * Output: 244 * -lpcGains : quantized values of the given parametes. 245 */ 246 int16_t WebRtcIsac_DequantizeLpcGain( 247 const int* idx, 248 double* lpGains); 249 250 251 /****************************************************************************** 252 * WebRtcIsac_CorrelateLpcGain() 253 * 254 * This is the inverse of WebRtcIsac_DecorrelateLPGain(). 255 * 256 * Input: 257 * -data : decorrelated parameters. 258 * 259 * Output: 260 * -out : correlated parameters. 261 */ 262 int16_t WebRtcIsac_CorrelateLpcGain( 263 const double* data, 264 double* out); 265 266 267 /****************************************************************************** 268 * WebRtcIsac_AddMeanToLinearDomain() 269 * 270 * This is the inverse of WebRtcIsac_ToLogDomainRemoveMean(). 271 * 272 * Input: 273 * -lpcGain : LPC gain in log-domain & mean removed 274 * 275 * Output: 276 * -lpcGain : LPC gain in normal domain. 277 */ 278 int16_t WebRtcIsac_AddMeanToLinearDomain( 279 double* lpcGains); 280 281 282 #endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_ENCODE_LPC_SWB_H_ 283