1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/****************************************************************** 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org iLBC Speech Coder ANSI-C Source Code 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIlbcfix_LpcEncode.c 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org******************************************************************/ 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "defines.h" 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "simple_lpc_analysis.h" 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "simple_interpolate_lsf.h" 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "simple_lsf_quant.h" 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "lsf_check.h" 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "constants.h" 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*----------------------------------------------------------------* 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * lpc encoder 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *---------------------------------------------------------------*/ 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid WebRtcIlbcfix_LpcEncode( 31fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t *syntdenum, /* (i/o) synthesis filter coefficients 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org before/after encoding */ 33fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t *weightdenum, /* (i/o) weighting denumerator coefficients 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org before/after encoding */ 35fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t *lsf_index, /* (o) lsf quantization index */ 36fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t *data, /* (i) Speech to do LPC analysis on */ 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org iLBC_Enc_Inst_t *iLBCenc_inst 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* (i/o) the encoder state structure */ 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ) { 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Stack based */ 41fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t lsf[LPC_FILTERORDER * LPC_N_MAX]; 42fbda0fcf2f9e82c82bcaac138f44d4e5144f6e0dpbos@webrtc.org int16_t lsfdeq[LPC_FILTERORDER * LPC_N_MAX]; 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Calculate LSF's from the input speech */ 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIlbcfix_SimpleLpcAnalysis(lsf, data, iLBCenc_inst); 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Quantize the LSF's */ 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIlbcfix_SimpleLsfQ(lsfdeq, lsf_index, lsf, iLBCenc_inst->lpc_n); 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Stableize the LSF's if needed */ 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIlbcfix_LsfCheck(lsfdeq, LPC_FILTERORDER, iLBCenc_inst->lpc_n); 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* Calculate the synthesis and weighting filter coefficients from 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org the optimal LSF and the dequantized LSF */ 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcIlbcfix_SimpleInterpolateLsf(syntdenum, weightdenum, 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org lsf, lsfdeq, iLBCenc_inst->lsfold, 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org iLBCenc_inst->lsfdeqold, LPC_FILTERORDER, iLBCenc_inst); 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return; 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 61