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

📄 s10_8pf.c

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 C
📖 第 1 页 / 共 2 页
字号:
/***********************************************************************************      GSM AMR-NB speech codec   R98   Version 7.6.0   December 12, 2001*                                R99   Version 3.3.0                *                                REL-4 Version 4.1.0                ***********************************************************************************      File             : s10_8pf.c*      Purpose          : Searches a 35/31 bit algebraic codebook containing *                       : 10/8 pulses in a frame of 40 samples.**********************************************************************************//**********************************************************************************                         MODULE INCLUDE FILE AND VERSION ID*********************************************************************************/#include "s10_8pf.h"const char s10_8pf_id[] = "@(#)$Id $" s10_8pf_h;/**********************************************************************************                         INCLUDE FILES*********************************************************************************/#include "typedef.h"#include "basic_op.h"#include "count.h"#include "cnst.h"/**********************************************************************************                         LOCAL VARIABLES AND TABLES*********************************************************************************//************************************************************************* * *  FUNCTION  search_10and8i40() * *  PURPOSE: Search the best codevector; determine positions of the 10/8  *           pulses in the 40-sample frame. * *   search_10and8i40 (10,5,5,dn, rr, ipos, pos_max, codvec);   for GSMEFR *   search_10and8i40 (8, 4,4,dn, rr, ipos, pos_max, codvec);   for 10.2 * *************************************************************************/#define _1_2    (Word16)(32768L/2)#define _1_4    (Word16)(32768L/4)#define _1_8    (Word16)(32768L/8)#define _1_16   (Word16)(32768L/16)#define _1_32   (Word16)(32768L/32)#define _1_64   (Word16)(32768L/64)#define _1_128  (Word16)(32768L/128)void search_10and8i40 (    Word16 nbPulse,      /* i : nbpulses to find                       */    Word16 step,         /* i :  stepsize                              */    Word16 nbTracks,     /* i :  nbTracks                              */    Word16 dn[],         /* i : correlation between target and h[]     */    Word16 rr[][L_CODE], /* i : matrix of autocorrelation              */    Word16 ipos[],       /* i : starting position for each pulse       */    Word16 pos_max[],    /* i : position of maximum of dn[]            */    Word16 codvec[]      /* o : algebraic codebook vector              */){   Word16 i0, i1, i2, i3, i4, i5, i6, i7, i8, i9;   Word16 i, j, k, pos, ia, ib;   Word16 psk, ps, ps0, ps1, ps2, sq, sq2;   Word16 alpk, alp, alp_16;   Word16 rrv[L_CODE];   Word32 s, alp0, alp1, alp2;   Word16 gsmefrFlag;      test();    if (sub(nbPulse, 10) == 0)   {      gsmefrFlag=1;                             move16 ();   }   else   {      gsmefrFlag=0;                             move16 ();    }   /* fix i0 on maximum of correlation position */   i0 = pos_max[ipos[0]];                       move16 ();       /*------------------------------------------------------------------*    * i1 loop:                                                         *    *------------------------------------------------------------------*/      /* Default value */   psk = -1;                                    move16 ();    alpk = 1;                                    move16 ();    for (i = 0; i < nbPulse; i++)   {      codvec[i] = i;                            move16 ();   }   for (i = 1; i < nbTracks; i++)   {      i1 = pos_max[ipos[1]];                    move16 ();       ps0 = add (dn[i0], dn[i1]);      alp0 = L_mult (rr[i0][i0], _1_16);      alp0 = L_mac (alp0, rr[i1][i1], _1_16);      alp0 = L_mac (alp0, rr[i0][i1], _1_8);            /*----------------------------------------------------------------*       * i2 and i3 loop:                                                *       *----------------------------------------------------------------*/            /* initialize 4 indices for next loop. */      move16 (); /* initialize "rr[i3][i3]" pointer */      move16 (); /* initialize "rr[i0][i3]" pointer */      move16 (); /* initialize "rr[i1][i3]" pointer */      move16 (); /* initialize "rrv[i3]" pointer    */            for (i3 = ipos[3]; i3 < L_CODE; i3 += step)      {         s = L_mult (rr[i3][i3], _1_8);       /* index incr= step+L_CODE */         s = L_mac (s, rr[i0][i3], _1_4);     /* index increment = step  */         s = L_mac (s, rr[i1][i3], _1_4);     /* index increment = step  */         rrv[i3] = round (s);                 move16 ();       }            /* Default value */      sq = -1;                                 move16 ();       alp = 1;                                 move16 ();       ps = 0;                                  move16 ();      ia = ipos[2];                            move16 ();      ib = ipos[3];                            move16 ();            /* initialize 4 indices for i2 loop. */      move16 (); /* initialize "dn[i2]" pointer     */      move16 (); /* initialize "rr[i2][i2]" pointer */      move16 (); /* initialize "rr[i0][i2]" pointer */      move16 (); /* initialize "rr[i1][i2]" pointer */              for (i2 = ipos[2]; i2 < L_CODE; i2 += step)      {         /* index increment = step  */                     ps1 = add (ps0, dn[i2]);                      /* index incr= step+L_CODE */         alp1 = L_mac (alp0, rr[i2][i2], _1_16);            /* index increment = step  */         alp1 = L_mac (alp1, rr[i0][i2], _1_8);         /* index increment = step  */         alp1 = L_mac (alp1, rr[i1][i2], _1_8);                  /* initialize 3 indices for i3 inner loop */         move16 (); /* initialize "dn[i3]" pointer     */         move16 (); /* initialize "rrv[i3]" pointer    */         move16 (); /* initialize "rr[i2][i3]" pointer */                  for (i3 = ipos[3]; i3 < L_CODE; i3 += step)         {            /* index increment = step */                            ps2 = add (ps1, dn[i3]);                                /* index increment = step */            alp2 = L_mac (alp1, rrv[i3], _1_2);            /* index increment = step */            alp2 = L_mac (alp2, rr[i2][i3], _1_8);                        sq2 = mult (ps2, ps2);                        alp_16 = round (alp2);                        s = L_msu (L_mult (alp, sq2), sq, alp_16);                            test ();             if (s > 0)            {               sq = sq2;                    move16 ();                ps = ps2;                    move16 ();                alp = alp_16;                move16 ();                ia = i2;                     move16 ();                ib = i3;                     move16 ();             }         }      }      i2 = ia;                                 move16 ();       i3 = ib;                                 move16 ();               /*----------------------------------------------------------------*         * i4 and i5 loop:                                                *         *----------------------------------------------------------------*/                ps0 = ps;                                move16 ();         alp0 = L_mult (alp, _1_2);                /* initialize 6 indices for next loop (see i2-i3 loop) */        move16 (); move16 (); move16 (); move16 (); move16 (); move16 ();                 for (i5 = ipos[5]; i5 < L_CODE; i5 += step)        {            s = L_mult (rr[i5][i5], _1_8);            s = L_mac (s, rr[i0][i5], _1_4);            s = L_mac (s, rr[i1][i5], _1_4);            s = L_mac (s, rr[i2][i5], _1_4);            s = L_mac (s, rr[i3][i5], _1_4);            rrv[i5] = round (s);                 move16 ();         }                /* Default value */        sq = -1;                                 move16 ();         alp = 1;                                 move16 ();         ps = 0;                                  move16 ();        ia = ipos[4];                            move16 ();        ib = ipos[5];                            move16 ();                /* initialize 6 indices for i4 loop (see i2-i3 loop) */        move16 (); move16 (); move16 (); move16 (); move16 (); move16 ();                 for (i4 = ipos[4]; i4 < L_CODE; i4 += step)        {            ps1 = add (ps0, dn[i4]);                        alp1 = L_mac (alp0, rr[i4][i4], _1_32);            alp1 = L_mac (alp1, rr[i0][i4], _1_16);            alp1 = L_mac (alp1, rr[i1][i4], _1_16);            alp1 = L_mac (alp1, rr[i2][i4], _1_16);            alp1 = L_mac (alp1, rr[i3][i4], _1_16);                        /* initialize 3 indices for i5 inner loop (see i2-i3 loop) */

⌨️ 快捷键说明

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