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

📄 g7231_tame.c

📁 G723.1语音压缩解压在tms320c54系列上的实现代码,本人已在CCS上仿真通过. 包含全部源代码,主函数请自已写(本人的就不奉送了:
💻 C
字号:

#include "typedef.h"
#include "G7231_basop.h"
#include "G7231_cst_lbc.h"
#include "G7231_lbccodec.h"
#include "G7231_coder.h"
#include "G7231_exc_lbc.h"
#include "G7231_tame.h"
#include "G7231_tab_lbc.h"
#include "intrindefs.h"


void G7231Update_Err(
    Word16 Olp, Word16 AcLg, Word16 AcGn
)
{
    Word16 *ptr_tab;
    Word16 i, iz, temp1, temp2;
    Word16 Lag;
    Word32 Worst1, Worst0, L_temp;
    Word16 beta;

    Lag = Olp - (Word16)G7231Pstep + AcLg;

    /* Select Quantization tables */
    i = 0 ;
    ptr_tab = G7231tabgain85;
    if ( G7231CodStat.WrkRate == Rate63 ) {
        if ( Olp >= (Word16) (G7231SubFrLen-2) ) ptr_tab = G7231tabgain170;
    }
    else {
        ptr_tab = G7231tabgain170;
    }
    beta = ptr_tab[(int)AcGn]; /* beta = gain * 8192 */


    if(Lag <= (G7231SubFrLen/2)) {
        Worst0 = G7231L_mls(G7231CodStat.Err[0], beta);
        Worst0 = G7231L_shl(Worst0, 2);
        Worst0 = G7231L_add(G7231Err0, Worst0);
        Worst1 = Worst0;
    }

    else {
        iz = G7231mult(Lag, 1092);   /* Lag / 30 */
        temp1 = G7231add(iz, 1);
        temp2 = G7231sub(G7231shl(temp1, 5), G7231shl(temp1, 1));      /* 30 (iz+1) */
        if(temp2 != Lag) {

            if(iz == 1) {
                Worst0 = G7231L_mls(G7231CodStat.Err[0], beta);
                Worst0 = G7231L_shl(Worst0, 2);
                Worst0 = G7231L_add(G7231Err0, Worst0);
                Worst1 = G7231L_mls(G7231CodStat.Err[1], beta);
                Worst1 = G7231L_shl(Worst1, 2);
                Worst1 = G7231L_add(G7231Err0, Worst1);
                if(Worst0 > Worst1) Worst1 = Worst0;
                else Worst0 = Worst1;
            }

            else {
                Worst0 = G7231L_mls(G7231CodStat.Err[iz-2], beta);
                Worst0 = G7231L_shl(Worst0, 2);
                Worst0 = G7231L_add(G7231Err0, Worst0);
                L_temp = G7231L_mls(G7231CodStat.Err[iz-1], beta);
                L_temp = G7231L_shl(L_temp, 2);
                L_temp = G7231L_add(G7231Err0, L_temp);
                if(L_temp > Worst0) Worst0 = L_temp;
                Worst1 = G7231L_mls(G7231CodStat.Err[iz], beta);
                Worst1 = G7231L_shl(Worst1, 2);
                Worst1 = G7231L_add(G7231Err0, Worst1);
                if(L_temp > Worst1) Worst1 = L_temp;
            }
        }
        else {  /* Lag % SubFrLen = 0 */
            Worst0 = G7231L_mls(G7231CodStat.Err[iz-1], beta);
            Worst0 = G7231L_shl(Worst0, 2);
            Worst0 = G7231L_add(G7231Err0, Worst0);
            Worst1 = G7231L_mls(G7231CodStat.Err[iz], beta);
            Worst1 = G7231L_shl(Worst1, 2);
            Worst1 = G7231L_add(G7231Err0, Worst1);
        }
    }

    for(i=4; i>=2; i--) {
        G7231CodStat.Err[i] = G7231CodStat.Err[i-2];
    }
    G7231CodStat.Err[0] = Worst0;
    G7231CodStat.Err[1] = Worst1;

    return;
}

Word16 G7231Test_Err(
    Word16 Lag1, Word16 Lag2
)
{

    int i, i1, i2;
    Word16 zone1, zone2;
    Word32 Acc, Err_max;
    Word16 iTest;

    i2 = Lag2 + G7231ClPitchOrd/2;
    zone2 = G7231mult( (Word16) i2, (Word16) 1092);

    i1 = - G7231SubFrLen + 1 + Lag1 - G7231ClPitchOrd/2;
    if(i1 <= 0) i1 = 1;
    zone1 = G7231mult( (Word16) i1, (Word16) 1092);

    Err_max = -1L;
    for(i=zone2; i>=zone1; i--) {
        Acc = G7231L_sub(G7231CodStat.Err[i], Err_max);
        if(Acc > 0L) {
                Err_max = G7231CodStat.Err[i];
        }
    }
    Acc = G7231L_sub(Err_max, G7231ThreshErr);
    if((Acc > 0L) || (G7231CodStat.SinDet < 0 ) ) {
        iTest = 0;
    }
    else {
        Acc = G7231L_negate(Acc);
        Acc = G7231L_shr(Acc, G7231DEC);
        iTest = G7231extract_l(Acc);
    }

    return(iTest);
}

⌨️ 快捷键说明

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