⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 owngsmamr.h

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 H
📖 第 1 页 / 共 2 页
字号:
/*/////////////////////////////////////////////////////////////////////////////
//
//                  INTEL CORPORATION PROPRIETARY INFORMATION
//     This software is supplied under the terms of a license agreement or
//     nondisclosure agreement with Intel Corporation and may not be copied
//     or disclosed except in accordance with the terms of that agreement.
//          Copyright(c) 2005 Intel Corporation. All Rights Reserved.
//
//     Intel(R) Integrated Performance Primitives
//     USC - Unified Speech Codec interface library
//
// By downloading and installing USC codec, you hereby agree that the
// accompanying Materials are being provided to you under the terms and
// conditions of the End User License Agreement for the Intel(R) Integrated
// Performance Primitives product previously accepted by you. Please refer
// to the file ipplic.htm located in the root directory of your Intel(R) IPP
// product installation for more information.
//
// A speech coding standards promoted by ITU, ETSI, 3GPP and other
// organizations. Implementations of these standards, or the standard enabled
// platforms may require licenses from various entities, including
// Intel Corporation.
//
//
// Purpose: GSMAMR speech codec: internal header file.
//
*/

#ifndef __OWNGSMAMR_H__
#define __OWNGSMAMR_H__
#include <stdio.h>
#include <stdlib.h>
#include "gsmamr.h"
#include "gsmamrapi.h"

#include "scratchmem.h"

#define ENC_KEY 0xecdaaa
#define DEC_KEY 0xdecaaa

/* GSMAMR constant definitions.
   Constant names are kept same as IETF GSM AMR */
#define SPEECH_BUF_SIZE          320
#define LP_WINDOW_SIZE           240
#define FRAME_SIZE_GSMAMR        160
#define SUBFR_SIZE_GSMAMR         40
#define LP_ORDER_SIZE             10
#define LP1_ORDER_SIZE     (LP_ORDER_SIZE+1)
#define LSF_GAP                  205
#define LP_ALL_FRAME       (4*LP1_ORDER_SIZE)
#define PITCH_MIN_LAG             20
#define PITCH_MAX_LAG            143
#define FLT_INTER_SIZE        (10+1)
#define PITCH_SHARP_MAX        13017
#define PITCH_SHARP_MIN            0

#define MAX_OFFSET   (PITCH_MAX_LAG +LP1_ORDER_SIZE)
#define MAX_NUM_PRM               57
#define PITCH_GAIN_CLIP        15565        /* Pitch gain clipping = 0.95               */
#define PG_NUM_FRAME               7
#define NUM_MEM_LTPG               5
#define NUM_SUBBANDS_VAD           9
#define DTX_HIST_SIZE              8
#define ENERGY_HIST_SIZE          60
#define CBGAIN_HIST_SIZE           7
#define NUM_PRED_TAPS              4
#define MIN_ENERGY            -14336         /* -14 dB  */
#define MIN_ENERGY_M122        -2381          /* -14 dB / (20*log10(2)) */
#define PSEUDO_NOISE_SEED 0x70816958L
#define INIT_BACKGROUND_NOISE    150
#define INIT_LOWPOW_SEGMENT    13106

/* Constants for pitch detection */
#define LOW_THRESHOLD              4
#define NUM_THRESHOLD              4
#define MAX_MED_SIZE               9
#define LTP_GAIN_LOG10_1        2721 /* 1.0 / (10*log10(2)) */
#define LTP_GAIN_LOG10_2        5443 /* 2.0 / (10*log10(2)) */
#define MAX_UPSAMPLING             6
#define LEN_INTERPOL_10    (FLT_INTER_SIZE-1)
#define LEN_FIRFLT     (MAX_UPSAMPLING*LEN_INTERPOL_10+1)
#define EXP_CONST_016           5243               /* 0.16 */
#define EXP_CONST_084          27525               /* 0.84 */
#define LTP_GAIN_MEM_SIZE          5
#define LTP_THRESH1             9830                /* 0.6  */
#define LTP_THRESH2            14746               /* 0.9  */
#define THRESH_ENERGY_LIMIT    17578         /* 150 */
#define LOW_NOISE_LIMIT           20            /* 5 */
#define UPP_NOISE_LIMIT         1953            /* 50 */
#define LEN_QNT_GAIN              32
#define LEN_QNT_PITCH             16
#define VEC_QNT_M475_SIZE        256
#define VEC_QNT_HIGHRATES_SIZE   128
#define VEC_QNT_LOWRATES_SIZE     64
#define ALPHA_09               29491                  /* 0.9 */
#define ONE_ALPHA               3277                      /* 1.0-ALPHA */
enum enDTXStateType {SPEECH = 0, DTX, DTX_MUTE, DTX_NODATA};
#define DTX_MAX_EMPTY_THRESH      50
#define DTX_ELAPSED_FRAMES_THRESH (24 + 7 -1)
#define DTX_HANG_PERIOD            7

#define dVADState void
typedef struct {
   short vSinceLastSid;
   short vDTXHangCount;
   short vExpireCount;
   short vDataUpdated;

} sDecoderSidSync;

/* post filter memory */
typedef struct{
   short a_MemSynPst[LP_ORDER_SIZE];
   short vMemPrevRes;
   short vPastGainScale;
   short a_SynthBuf[LP_ORDER_SIZE];
} sPostFilterSt;

typedef struct {
  short a_GainMemory[LTP_GAIN_MEM_SIZE];
  short vPrevState;
  short vPrevGain;
  short vFlagLockGain;
  short vOnSetGain;
} sPhaseDispSt;

typedef struct {
    short vExpPredCBGain;
    short vFracPredCBGain;
    short vExpTargetEnergy;
    short vFracTargetEnergy;
    short a_ExpEnCoeff[5];
    short a_FracEnCoeff[5];
    short *pGainPtr;
    short a_PastQntEnergy[4];
    short a_PastQntEnergy_M122[4];
    short a_PastUnQntEnergy[4];
    short a_PastUnQntEnergy_M122[4];
    short vOnSetQntGain;
    short vPrevAdaptOut;
    short vPrevGainCode;
    short a_LTPHistoryGain[NUM_MEM_LTPG];

} sGainQuantSt;

typedef struct {
   short a_LSPHistory[LP_ORDER_SIZE * DTX_HIST_SIZE];
   short a_LogEnergyHistory[DTX_HIST_SIZE];
   short vHistoryPtr;
   short vLogEnergyIndex;
   short vLSFQntIndex;
   short a_LSPIndex[3];
   /* DTX handler */
   short vDTXHangoverCt;
   short vDecExpireCt;
} sDTXEncoderSt;

typedef struct {
   short vLastSidFrame;
   short vSidPeriodInv;
   short vLogEnergy;
   short vLogEnergyOld;
   int   vPerfSeedDTX_long;
   short a_LSP[LP_ORDER_SIZE];
   short a_LSP_Old[LP_ORDER_SIZE];
   short a_LSFHistory[LP_ORDER_SIZE*DTX_HIST_SIZE];
   short a_LSFHistoryMean[LP_ORDER_SIZE*DTX_HIST_SIZE];
   short vLogMean;
   short a_LogEnergyHistory[DTX_HIST_SIZE];
   short vLogEnergyHistory;
   short vLogEnergyCorrect;
   short vDTXHangoverCt;
   short vDecExpireCt;
   short vFlagSidFrame;
   short vFlagValidData;
   short vDTXHangAdd;
   short vSidUpdateCt;
   enum  enDTXStateType eDTXPrevState;
   short vFlagDataUpdate;

   short vSinceLastSid;
   short vDTXHangCount;
   short vExpireCount;
   short vDataUpdated;

} sDTXDecoderSt;


/* Decoder part */
/********************************************************
*            array & table declarations
*********************************************************/
#define N_MODES     9

extern CONST short TableHammingWindow[LP_WINDOW_SIZE];
extern CONST short TablePastLSFQnt[80];
extern CONST short TableMeanLSF_3[10];
extern CONST short TableDecCode1LSF_3[256*3];
extern CONST short TableDecCode2LSF_3[512*3];
extern CONST short TableDecCode3LSF_3[512*4];
extern CONST short TableMeanLSF_5[10];
extern CONST short TableQuantGainPitch[16];
extern CONST short TableLSPInitData[LP_ORDER_SIZE]; /* removed const for BE code */
extern CONST short TableParamPerModes[N_MODES];
extern CONST short *TableBitAllModes[N_MODES];
extern CONST IppSpchBitRate mode2rates[N_MODES];

/********************************************************
*               function declarations
*********************************************************/

void  ownVADPitchDetection_GSMAMR(IppGSMAMRVad1State *st, short *pTimeVec, short *vLagCountOld, short *vLagOld);

void  ownUpdateLTPFlag_GSMAMR(IppSpchBitRate rate, int L_Rmax, int L_R0, Ipp16s *vFlagLTP);

void  ownLog2_GSMAMR_norm (int inVal, short exp, short *expPart, short *fracPart);

void  ownLog2_GSMAMR(int inVal, short *expPart, short *fracPart);

int   ownPow2_GSMAMR(short expPart, short fracPart);

int   ownSqrt_Exp_GSMAMR(int inVal, short *exp);

void  ownReorderLSFVec_GSMAMR(short *lsf, short minDistance, short len);

short ownGetMedianElements_GSMAMR(short *pPastGainVal, short num);

short ownCtrlDetectBackgroundNoise_GSMAMR (short *excitation, short excEnergy, short *exEnergyHist,
                                           short vVoiceHangover, short prevBFI, short carefulFlag);

short ownComputeCodebookGain_GSMAMR(short *pTargetVec2, short *pFltVector);

void  ownGainAdaptAlpha_GSMAMR(short *vOnSetQntGain, short *vPrevAdaptOut, short *vPrevGainCode,
                    short *a_LTPHistoryGain, short ltpg, short gainCode, short *alpha);

short ownCBGainAverage_GSMAMR(short *a_GainHistory, short *vHgAverageVar, short *vHgAverageCount, IppSpchBitRate rate,
                              short gainCode, short *lsp, short *lspAver, short badFrame, short vPrevBadFr,
                              short pdfi, short vPrevDegBadFr, short vBackgroundNoise, short vVoiceHangover);

short ownCheckLSPVec_GSMAMR(short *count, short *lsp);

int   ownSubframePostProc_GSMAMR(short *pSpeechVec, IppSpchBitRate rate, short numSubfr,
      short gainPitch, short gainCode, short *pAQnt, short *pLocSynth, short *pTargetVec,
      short *code, short *pAdaptCode, short *pFltVector, short *a_MemorySyn, short *a_MemoryErr,
      short *a_Memory_W0, short *pLTPExc, short *vFlagSharp);

void  ownPredExcMode3_6_GSMAMR (short *pLTPExc, short T0, short frac, short lenSubfr, short flag3);

void  ownPhaseDispersion_GSMAMR (sPhaseDispSt *state, IppSpchBitRate rate, short *x, short cbGain,
                                short ltpGain, short *innovVec, short pitchFactor, short tmpShift);


short ownSourceChDetectorUpdate_GSMAMR (short *a_EnergyHistVector, short *vCountHangover, short *ltpGainHist, short *pSpeechVec, short *vVoiceHangover);

void  ownCalcUnFiltEnergy_GSMAMR(short *pLPResVec, short *exc, short *code, short gainPitch, short lenSubfr, short *fracEnergyCoeff,
                          short *expEnergyCoeff, short *ltpg);

void  ownCalcFiltEnergy_GSMAMR(IppSpchBitRate rate, short *pTargetVec, short *pTargetVec2, short *pAdaptCode, short *pFltVector, short *fracEnergyCoeff,
                        short *expEnergyCoeff, short *optFracCodeGain, short *optExpCodeGain);
void  ownCalcTargetEnergy_GSMAMR(short *pTargetVec, short *optExpCodeGain, short *optFracCodeGain);

void  ownConvertDirectCoeffToReflCoeff_GSMAMR(short *pDirectCoeff, short *pReflCoeff);

void  ownScaleExcitation_GSMAMR(short *pInputSignal, short *pOutputSignal);

void  ownPredEnergyMA_GSMAMR(short *a_PastQntEnergy, short *a_PastQntEnergy_M122, IppSpchBitRate rate, short *code,
        short *expGainCodeCB, short *fracGainCodeCB, short *fracEnergyCoeff, short *frac_en);

short ownQntGainCodebook_GSMAMR(IppSpchBitRate rate, short expGainCodeCB, short fracGainCodeCB, short *gain,
                                short *pQntEnergyErr_M122, short *pQntEnergyErr);
short ownQntGainPitch_M7950_GSMAMR(short gainPitchLimit, short *gain, short *pGainCand, short *pGainCind);

short ownQntGainPitch_M122_GSMAMR(short gainPitchLimit, short gain);

void  ownUpdateUnQntPred_M475(short *a_PastQntEnergy, short *a_PastQntEnergy_M122,
      short expGainCodeCB, short fracGainCodeCB, short optExpCodeGain, short optFracCodeGain);

short ownGainQnt_M475(short *a_PastQntEnergy, short *a_PastQntEnergy_M122, short vExpPredCBGain,
      short vFracPredCBGain, short *a_ExpEnCoeff, short *a_FracEnCoeff, short vExpTargetEnergy,
      short vFracTargetEnergy, short *codeNoSharpSF1, short expGainCodeSF1, short fracGainCodeSF1,
      short *expCoeffSF1, short *fracCoeffSF1, short expTargetEnergySF1, short fracTargetEnergySF1,
      short gainPitchLimit, short *gainPitSF0, short *gainCodeSF0, short *gainPitSF1, short *gainCodeSF1);

void  ownGainQuant_M795_GSMAMR(short *vOnSetQntGain, short *vPrevAdaptOut, short *vPrevGainCode, short *a_LTPHistoryGain, short *pLTPRes,
      short *pLTPExc, short *code, short *fracEnergyCoeff, short *expEnergyCoeff, short expCodeEnergy, short fracCodeEnergy,
      short expGainCodeCB, short fracGainCodeCB, short lenSubfr, short optFracCodeGain, short optExpCodeGain, short gainPitchLimit,
      short *gainPitch, short *gainCode, short *pQntEnergyErr_M122, short *pQntEnergyErr, short **ppAnalysisParam);

short ownGainQntInward_GSMAMR(IppSpchBitRate rate, short expGainCodeCB, short fracGainCodeCB, short *fracEnergyCoeff, short *expEnergyCoeff,
      short gainPitchLimit, short *gainPitch, short *gainCode, short *pQntEnergyErr_M122, short *pQntEnergyErr);

int   ownGainQuant_GSMAMR(sGainQuantSt *st, IppSpchBitRate rate, short *pLTPRes, short *pLTPExc, short *code, short *pTargetVec,
      short *pTargetVec2, short *pAdaptCode, short *pFltVector, short even_subframe, short gainPitchLimit, short *gainPitSF0,
      short *gainCodeSF0, short *gainPitch, short *gainCode, short **ppAnalysisParam);

void  ownDecodeFixedCodebookGain_GSMAMR(short *a_PastQntEnergy, short *a_PastQntEnergy_M122, IppSpchBitRate rate,
                                       short index, short *code, short *gainCode);

void  ownDecodeCodebookGains_GSMAMR(short *a_PastQntEnergy, short *a_PastQntEnergy_M122, IppSpchBitRate rate, short index,
                                   short *code, short evenSubfr, short * gainPitch, short * gain_cod);

void  ownConcealCodebookGain_GSMAMR(short *a_GainBuffer, short vPastGainCode, short *a_PastQntEnergy,
                                   short *a_PastQntEnergy_M122, short state, short *gainCode);

void  ownConcealCodebookGainUpdate_GSMAMR(short *a_GainBuffer, short *vPastGainCode, short *vPrevGainCode,   /* i   : flag: frame is bad               */
                                         short badFrame, short vPrevBadFr, short *gainCode);

void  ownConcealGainPitch_GSMAMR(short *a_LSFBuffer, short vPastGainZero, short state, short *pGainPitch);

void  ownConcealGainPitchUpdate_GSMAMR(short *a_LSFBuffer, short *vPastGainZero, short *vPrevGainZero,      /* i   : flag: frame is bad                */
                                      short badFrame, short vPrevBadFr, short *gain_pitch);

int   ownCloseLoopFracPitchSearch_GSMAMR(short *vTimePrevSubframe, short *a_GainHistory, IppSpchBitRate rate, short frameOffset,
      short *pLoopPitchLags, short *pImpResVec, short *pLTPExc, short *pPredRes, short *pTargetVec, short lspFlag, short *pTargetVec2,
      short *pAdaptCode, short *pExpPitchDel, short *pFracPitchDel, short *gainPitch, short **ppAnalysisParam, short *gainPitchLimit);

short ownGenNoise_GSMAMR(int *pShiftReg, short numBits);

void  ownBuildCNCode_GSMAMR(int *seed, short *pCNVec);

void  ownBuildCNParam_GSMAMR(short *seed, const short numParam, const short *pTableSizeParam, short *pCNParam);

void  ownDecLSPQuantDTX_GSMAMR(short *a_PastQntPredErr, short *a_PastLSFQnt, short BadFrInd, short *indice, short *lsp1_q);

int   ownDTXDecoder_GSMAMR(sDTXDecoderSt *st, short *a_MemorySyn, short *a_PastQntPredErr, short *a_PastLSFQnt,
      short *a_PastQntEnergy, short *a_PastQntEnergy_M122, short *vHgAverageVar, short *vHgAverageCount,
      enum enDTXStateType newState, GSMAMR_Rate_t rate, short *pParmVec, short *pSynthSpeechVec,
      short *pA_LP);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -