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 + -
显示快捷键?