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

📄 c4_17pf.c

📁 arm音频编解码库
💻 C
📖 第 1 页 / 共 2 页
字号:
                                      sq1 = mult(ps1, ps1);                                      alp_16 = round(alp1);                                      s = L_msu(L_mult(alp, sq1), sq, alp_16);                                      test ();                   if (s > 0)                   {                      sq = sq1;         move16 ();                      ps = ps1;         move16 ();                      alp = alp_16;     move16 ();                      ix = i1;          move16 ();                   }                }                i1 = ix;                  move16 ();                                /*----------------------------------------------------------------*                 * i2 loop: 8 positions.                                          *                 *----------------------------------------------------------------*/                                ps0 = ps;                 move16 ();                alp0 = L_mult(alp, _1_4);                                sq = -1;                  move16 ();                alp = 1;                  move16 ();                ps = 0;                   move16 ();                ix = ipos[2];             move16 ();                                                    /* initialize 4 index for next loop (see i1 loop) */                                move16 (); /* account for ptr. init. (rr[i2]) */                move16 (); /* account for ptr. init. (rr[i1]) */                move16 (); /* account for ptr. init. (dn[i2]) */                move16 (); /* account for ptr. init. (rr[io]) */                for (i2 = ipos[2]; i2 < L_CODE; i2 += STEP)                {                   ps1 = add(ps0, dn[i2]); /* index increment = STEP */                                      /* alp1 = alp0 + rr[i0][i2] + rr[i1][i2] + 1/2*rr[i2][i2]; */                                      alp1 = L_mac(alp0, rr[i2][i2], _1_16); /* idx incr = STEP */                   alp1 = L_mac(alp1, rr[i1][i2], _1_8);  /* idx incr = STEP */                   alp1 = L_mac(alp1, rr[i0][i2], _1_8);  /* idx incr = STEP */                                      sq1 = mult(ps1, ps1);                                      alp_16 = round(alp1);                                      s = L_msu(L_mult(alp, sq1), sq, alp_16);                                      test ();                   if (s > 0)                   {                      sq = sq1;         move16 ();                      ps = ps1;         move16 ();                      alp = alp_16;     move16 ();                      ix = i2;          move16 ();                   }                }                i2 = ix;                  move16 ();                                /*----------------------------------------------------------------*                 * i3 loop: 8 positions.                                          *                 *----------------------------------------------------------------*/                                ps0 = ps;                 move16 ();                alp0 = L_deposit_h(alp);                                sq = -1;                  move16 ();                alp = 1;                  move16 ();                ps = 0;                   move16 ();                ix = ipos[3];             move16 ();                                                    /* initialize 5 index for next loop (see i1 loop) */                                move16 (); /* account for ptr. init. (rr[i3]) */                move16 (); /* account for ptr. init. (rr[i2]) */                move16 (); /* account for ptr. init. (rr[i1]) */                move16 (); /* account for ptr. init. (dn[i3]) */                move16 (); /* account for ptr. init. (rr[io]) */                for (i3 = ipos[3]; i3 < L_CODE; i3 += STEP)                {                   ps1 = add(ps0, dn[i3]); /* index increment = STEP */                                      /* alp1 = alp0 + rr[i0][i3] + rr[i1][i3] + rr[i2][i3] + 1/2*rr[i3][i3]; */                                      alp1 = L_mac(alp0, rr[i3][i3], _1_16); /* idx incr = STEP */                   alp1 = L_mac(alp1, rr[i2][i3], _1_8);  /* idx incr = STEP */                   alp1 = L_mac(alp1, rr[i1][i3], _1_8);  /* idx incr = STEP */                   alp1 = L_mac(alp1, rr[i0][i3], _1_8);  /* idx incr = STEP */                                      sq1 = mult(ps1, ps1);                                      alp_16 = round(alp1);                                      s = L_msu(L_mult(alp, sq1), sq, alp_16);                                      test ();                   if (s > 0)                   {                      sq = sq1;         move16 ();                      ps = ps1;         move16 ();                      alp = alp_16;     move16 ();                      ix = i3;          move16 ();                   }                }                                                /*----------------------------------------------------------------*                 * memorise codevector if this one is better than the last one.   *                 *----------------------------------------------------------------*/                                s = L_msu(L_mult(alpk, sq), psk, alp);                                test ();                if (s > 0)                {                   psk = sq;            move16 ();                   alpk = alp;          move16 ();                   codvec[0] = i0;      move16 ();                   codvec[1] = i1;      move16 ();                   codvec[2] = i2;      move16 ();                   codvec[3] = ix;      move16 ();                }             }          }                    /*----------------------------------------------------------------*           * Cyclic permutation of i0,i1,i2 and i3.                         *           *----------------------------------------------------------------*/                    pos = ipos[3];                   move16 ();          ipos[3] = ipos[2];               move16 ();          ipos[2] = ipos[1];               move16 ();          ipos[1] = ipos[0];               move16 ();          ipos[0] = pos;                   move16 ();       }    }        return;}/************************************************************************* * *  FUNCTION:  build_code() * *  PURPOSE: Builds the codeword, the filtered codeword and index of the *           codevector, based on the signs and positions of 4 pulses. * *************************************************************************/static Word16build_code(    Word16 codvec[],  /* i : position of pulses                            */    Word16 dn_sign[], /* i : sign of pulses                                */    Word16 cod[],     /* o : innovative code vector                        */    Word16 h[],       /* i : impulse response of weighted synthesis filter */    Word16 y[],       /* o : filtered innovative code                      */    Word16 sign[]     /* o : index of 4 pulses (sign+position)             */){    Word16 i, j, k, track, index, _sign[NB_PULSE], indx, rsign;    Word16 *p0, *p1, *p2, *p3;    Word32 s;    for (i = 0; i < L_CODE; i++)    {        cod[i] = 0;                         move16 ();    }              indx = 0;                               move16 ();    rsign = 0;                              move16 ();    for (k = 0; k < NB_PULSE; k++)    {       i = codvec[k];            move16 (); /* read pulse position */       j = dn_sign[i];           move16 (); /* read sign          */              index = mult(i, 6554);    /* index = pos/5 */       /* track = pos%5 */       track = sub(i, extract_l(L_shr(L_mult(index, 5), 1)));                     index = gray[index];                 move16 ();              test ();       if (sub(track, 1) == 0)          index = shl(index, 3);       else if (sub(track, 2) == 0)       {          test ();          index = shl(index, 6);       }       else if (sub(track, 3) == 0)       {          test ();test ();			          index = shl(index, 10);       }       else if (sub(track, 4) == 0)       {          test ();test ();test ();			          track = 3;                        move16 ();          index = add(shl(index, 10), 512);       }              test ();       if (j > 0)       {          cod[i] = 8191;                    move16 ();          _sign[k] = 32767;                 move16 ();          rsign = add(rsign, shl(1, track));       } else {          cod[i] = -8192;                   move16 ();          _sign[k] = (Word16) - 32768L;     move16 ();       }              indx = add(indx, index);    }    *sign = rsign;                          move16 ();        p0 = h - codvec[0];                     move16 ();    p1 = h - codvec[1];                     move16 ();    p2 = h - codvec[2];                     move16 ();    p3 = h - codvec[3];                     move16 ();        for (i = 0; i < L_CODE; i++)    {       s = 0;                               move32 ();       s = L_mac(s, *p0++, _sign[0]);       s = L_mac(s, *p1++, _sign[1]);       s = L_mac(s, *p2++, _sign[2]);       s = L_mac(s, *p3++, _sign[3]);       y[i] = round(s);                     move16 ();    }        return indx;}

⌨️ 快捷键说明

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