residu.c

来自「君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图」· C语言 代码 · 共 123 行

C
123
字号
/***********************************************************************************      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             : residu.c*      Purpose          : Computes the LP residual.*      Description      : The LP residual is computed by filtering the input*                       : speech through the LP inverse filter A(z).**********************************************************************************//**********************************************************************************                         MODULE INCLUDE FILE AND VERSION ID*********************************************************************************/#include "residu.h"const char residu_id[] = "@(#)$Id $" residu_h;/**********************************************************************************                         INCLUDE FILES*********************************************************************************/#include "typedef.h"#include "basic_op.h"#include "count.h"#include "cnst.h"#ifdef JZ4740_MXU_OPT#include "jzmedia.h"#endif/**********************************************************************************                         LOCAL VARIABLES AND TABLES*********************************************************************************//**--------------------------------------** Constants (defined in cnst.h         **--------------------------------------**  M         : LPC order               **--------------------------------------**//**********************************************************************************                         PUBLIC PROGRAM CODE*********************************************************************************/void Residu (    Word16 a[], /* (i)     : prediction coefficients                      */    Word16 x[], /* (i)     : speech signal                                */    Word16 y[], /* (o)     : residual signal                              */    Word16 lg   /* (i)     : size of filtering                            */){    Word16 i, j;#if 0//#ifdef JZ4740_MXU_OPT#define  ADD_MASK 0xFFFFFFFC#define  REF_MASK 0x03    for(i = 0; i < lg; i++){          x[i] = 1024;    }    a[0] = 1024;    for(i = 1; i <=M; i++){          a[i] = 1024;          x[-i] = 1024;    }   Word16 *ptra, *ptrx, *ptry;   Word16  temp_y[2];   ptry = (unsigned int)(y - 2) & ADD_MASK;   D32SLL(xr12, xr0,xr0,xr11, 0);   for( i = 0; i < lg / 2; i++){      ptra = a - 2;      ptrx = x + 2 * i;      for(j = 0; j < M / 2; j++){          S32LDI(xr14, ptra, 0x04);     //load a[0], a[1];          S32LDD(xr1, ptrx,  0x00);     //x[0], x[1];          S32LDI(xr2, ptrx, -0x04);     //load x[-2],x[-1];          S32ALN(xr3, xr1, xr2, 2);     //align x[-1], x[0]               D16MAC_AA_LW(xr12, xr14,xr1,xr11);//x[1]*a[0], x[0] * a[0]          D16MAC_AA_HW(xr12, xr14,xr3,xr11);//x[0]*a[1], x[-1] * a[1]      }      S32LDI(xr14, ptra, 0x04);      S32LDI(xr1 , ptrx,-0x04);      D16MAC_AA_LW(xr12, xr14,xr1,xr11);//x[1]*a[0], x[0] * a[0]      D32SAR(xr1, xr12,xr11,xr2,12);      S32SFL(xr0, xr1, xr2, xr3,3);      S32STD(xr3, temp_y, 0x00);      y[i<<1] = temp_y[0];      y[(i<<1) + 1] = temp_y[1];      printf("y[%d] = %d\n", (i<<1),y[i<<1]);      printf("y[%d] = %d\n", (i<<1)+1,y[(i<<1) + 1]);   }    #else    Word32 s;    for (i = 0; i < lg; i++)    {        s = L_mult (x[i], a[0]);        for (j = 1; j <= M; j++)        {            s = L_mac (s, a[j], x[i - j]);        }        s = L_shl (s, 3);        y[i] = round (s);       move16 ();     //  printf("y[%d] = %d\n", i,y[i]);    }#endif    return;}

⌨️ 快捷键说明

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