mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-02-24 10:31:13 +00:00
284 lines
8.3 KiB
C
284 lines
8.3 KiB
C
|
/*
|
||
|
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
||
|
*
|
||
|
* Use of this source code is governed by a BSD-style license
|
||
|
* that can be found in the LICENSE file in the root of the source
|
||
|
* tree. An additional intellectual property rights grant can be found
|
||
|
* in the file PATENTS. All contributing project authors may
|
||
|
* be found in the AUTHORS file in the root of the source tree.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* encode_lpc_swb.h
|
||
|
*
|
||
|
* This file contains declaration of functions used to
|
||
|
* encode LPC parameters (Shape & gain) of the upper band.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_ENCODE_LPC_SWB_H_
|
||
|
#define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_ENCODE_LPC_SWB_H_
|
||
|
|
||
|
#include "typedefs.h"
|
||
|
#include "settings.h"
|
||
|
#include "structs.h"
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* WebRtcIsac_RemoveLarMean()
|
||
|
*
|
||
|
* Remove the means from LAR coefficients.
|
||
|
*
|
||
|
* Input:
|
||
|
* -lar : pointer to lar vectors. LAR vectors are
|
||
|
* concatenated.
|
||
|
* -bandwidth : indicates if the given LAR vectors belong
|
||
|
* to SWB-12kHz or SWB-16kHz.
|
||
|
*
|
||
|
* Output:
|
||
|
* -lar : pointer to mean-removed LAR:s.
|
||
|
*
|
||
|
*
|
||
|
*/
|
||
|
WebRtc_Word16 WebRtcIsac_RemoveLarMean(
|
||
|
double* lar,
|
||
|
WebRtc_Word16 bandwidth);
|
||
|
|
||
|
/******************************************************************************
|
||
|
* WebRtcIsac_DecorrelateIntraVec()
|
||
|
*
|
||
|
* Remove the correlation amonge the components of LAR vectors. If LAR vectors
|
||
|
* of one frame are put in a matrix where each column is a LAR vector of a
|
||
|
* sub-frame, then this is equivalent to multiplying the LAR matrix with
|
||
|
* a decorrelting mtrix from left.
|
||
|
*
|
||
|
* Input:
|
||
|
* -inLar : pointer to mean-removed LAR vecrtors.
|
||
|
* -bandwidth : indicates if the given LAR vectors belong
|
||
|
* to SWB-12kHz or SWB-16kHz.
|
||
|
*
|
||
|
* Output:
|
||
|
* -out : decorrelated LAR vectors.
|
||
|
*/
|
||
|
WebRtc_Word16 WebRtcIsac_DecorrelateIntraVec(
|
||
|
const double* inLAR,
|
||
|
double* out,
|
||
|
WebRtc_Word16 bandwidth);
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* WebRtcIsac_DecorrelateInterVec()
|
||
|
*
|
||
|
* Remover the correlation among mean-removed LAR vectors. If LAR vectors
|
||
|
* of one frame are put in a matrix where each column is a LAR vector of a
|
||
|
* sub-frame, then this is equivalent to multiplying the LAR matrix with
|
||
|
* a decorrelting mtrix from right.
|
||
|
*
|
||
|
* Input:
|
||
|
* -data : pointer to matrix of LAR vectors. The matrix
|
||
|
* is stored column-wise.
|
||
|
* -bandwidth : indicates if the given LAR vectors belong
|
||
|
* to SWB-12kHz or SWB-16kHz.
|
||
|
*
|
||
|
* Output:
|
||
|
* -out : decorrelated LAR vectors.
|
||
|
*/
|
||
|
WebRtc_Word16 WebRtcIsac_DecorrelateInterVec(
|
||
|
const double* data,
|
||
|
double* out,
|
||
|
WebRtc_Word16 bandwidth);
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* WebRtcIsac_QuantizeUncorrLar()
|
||
|
*
|
||
|
* Quantize the uncorrelated parameters.
|
||
|
*
|
||
|
* Input:
|
||
|
* -data : uncorrelated LAR vectors.
|
||
|
* -bandwidth : indicates if the given LAR vectors belong
|
||
|
* to SWB-12kHz or SWB-16kHz.
|
||
|
*
|
||
|
* Output:
|
||
|
* -data : quantized version of the input.
|
||
|
* -idx : pointer to quantization indices.
|
||
|
*/
|
||
|
double WebRtcIsac_QuantizeUncorrLar(
|
||
|
double* data,
|
||
|
int* idx,
|
||
|
WebRtc_Word16 bandwidth);
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* WebRtcIsac_CorrelateIntraVec()
|
||
|
*
|
||
|
* This is the inverse of WebRtcIsac_DecorrelateIntraVec().
|
||
|
*
|
||
|
* Input:
|
||
|
* -data : uncorrelated parameters.
|
||
|
* -bandwidth : indicates if the given LAR vectors belong
|
||
|
* to SWB-12kHz or SWB-16kHz.
|
||
|
*
|
||
|
* Output:
|
||
|
* -out : correlated parametrs.
|
||
|
*/
|
||
|
WebRtc_Word16 WebRtcIsac_CorrelateIntraVec(
|
||
|
const double* data,
|
||
|
double* out,
|
||
|
WebRtc_Word16 bandwidth);
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* WebRtcIsac_CorrelateInterVec()
|
||
|
*
|
||
|
* This is the inverse of WebRtcIsac_DecorrelateInterVec().
|
||
|
*
|
||
|
* Input:
|
||
|
* -data
|
||
|
* -bandwidth : indicates if the given LAR vectors belong
|
||
|
* to SWB-12kHz or SWB-16kHz.
|
||
|
*
|
||
|
* Output:
|
||
|
* -out : correlated parametrs.
|
||
|
*/
|
||
|
WebRtc_Word16 WebRtcIsac_CorrelateInterVec(
|
||
|
const double* data,
|
||
|
double* out,
|
||
|
WebRtc_Word16 bandwidth);
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* WebRtcIsac_AddLarMean()
|
||
|
*
|
||
|
* This is the inverse of WebRtcIsac_RemoveLarMean()
|
||
|
*
|
||
|
* Input:
|
||
|
* -data : pointer to mean-removed LAR:s.
|
||
|
* -bandwidth : indicates if the given LAR vectors belong
|
||
|
* to SWB-12kHz or SWB-16kHz.
|
||
|
*
|
||
|
* Output:
|
||
|
* -data : pointer to LARs.
|
||
|
*/
|
||
|
WebRtc_Word16 WebRtcIsac_AddLarMean(
|
||
|
double* data,
|
||
|
WebRtc_Word16 bandwidth);
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* WebRtcIsac_DequantizeLpcParam()
|
||
|
*
|
||
|
* Get the quantized value of uncorrelated LARs given the quantization indices.
|
||
|
*
|
||
|
* Input:
|
||
|
* -idx : pointer to quantiztion indices.
|
||
|
* -bandwidth : indicates if the given LAR vectors belong
|
||
|
* to SWB-12kHz or SWB-16kHz.
|
||
|
*
|
||
|
* Output:
|
||
|
* -out : pointer to quantized values.
|
||
|
*/
|
||
|
WebRtc_Word16 WebRtcIsac_DequantizeLpcParam(
|
||
|
const int* idx,
|
||
|
double* out,
|
||
|
WebRtc_Word16 bandwidth);
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* WebRtcIsac_ToLogDomainRemoveMean()
|
||
|
*
|
||
|
* Transform the LPC gain to log domain then remove the mean value.
|
||
|
*
|
||
|
* Input:
|
||
|
* -lpcGain : pointer to LPC Gain, expecting 6 LPC gains
|
||
|
*
|
||
|
* Output:
|
||
|
* -lpcGain : mean-removed in log domain.
|
||
|
*/
|
||
|
WebRtc_Word16 WebRtcIsac_ToLogDomainRemoveMean(
|
||
|
double* lpGains);
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* WebRtcIsac_DecorrelateLPGain()
|
||
|
*
|
||
|
* Decorrelate LPC gains. There are 6 LPC Gains per frame. This is like
|
||
|
* multiplying gain vector with decorrelating matrix.
|
||
|
*
|
||
|
* Input:
|
||
|
* -data : LPC gain in log-domain with mean removed.
|
||
|
*
|
||
|
* Output:
|
||
|
* -out : decorrelated parameters.
|
||
|
*/
|
||
|
WebRtc_Word16 WebRtcIsac_DecorrelateLPGain(
|
||
|
const double* data,
|
||
|
double* out);
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* WebRtcIsac_QuantizeLpcGain()
|
||
|
*
|
||
|
* Quantize the decorrelated log-domain gains.
|
||
|
*
|
||
|
* Input:
|
||
|
* -lpcGain : uncorrelated LPC gains.
|
||
|
*
|
||
|
* Output:
|
||
|
* -idx : quantization indices
|
||
|
* -lpcGain : quantized value of the inpt.
|
||
|
*/
|
||
|
double WebRtcIsac_QuantizeLpcGain(
|
||
|
double* lpGains,
|
||
|
int* idx);
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* WebRtcIsac_DequantizeLpcGain()
|
||
|
*
|
||
|
* Get the quantized values given the quantization indices.
|
||
|
*
|
||
|
* Input:
|
||
|
* -idx : pointer to quantization indices.
|
||
|
*
|
||
|
* Output:
|
||
|
* -lpcGains : quantized values of the given parametes.
|
||
|
*/
|
||
|
WebRtc_Word16 WebRtcIsac_DequantizeLpcGain(
|
||
|
const int* idx,
|
||
|
double* lpGains);
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* WebRtcIsac_CorrelateLpcGain()
|
||
|
*
|
||
|
* This is the inverse of WebRtcIsac_DecorrelateLPGain().
|
||
|
*
|
||
|
* Input:
|
||
|
* -data : decorrelated parameters.
|
||
|
*
|
||
|
* Output:
|
||
|
* -out : correlated parameters.
|
||
|
*/
|
||
|
WebRtc_Word16 WebRtcIsac_CorrelateLpcGain(
|
||
|
const double* data,
|
||
|
double* out);
|
||
|
|
||
|
|
||
|
/******************************************************************************
|
||
|
* WebRtcIsac_AddMeanToLinearDomain()
|
||
|
*
|
||
|
* This is the inverse of WebRtcIsac_ToLogDomainRemoveMean().
|
||
|
*
|
||
|
* Input:
|
||
|
* -lpcGain : LPC gain in log-domain & mean removed
|
||
|
*
|
||
|
* Output:
|
||
|
* -lpcGain : LPC gain in normal domain.
|
||
|
*/
|
||
|
WebRtc_Word16 WebRtcIsac_AddMeanToLinearDomain(
|
||
|
double* lpcGains);
|
||
|
|
||
|
|
||
|
#endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_MAIN_SOURCE_ENCODE_LPC_SWB_H_
|