calc_cor.c

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

C
112
字号
/***********************************************************************************      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             : calc_cor.c*      Purpose          : Calculate all correlations for prior the OL LTP **********************************************************************************//**********************************************************************************                         MODULE INCLUDE FILE AND VERSION ID*********************************************************************************/#include "calc_cor.h"const char calc_cor_id[] = "@(#)$Id $" calc_cor_h;/**********************************************************************************                         INCLUDE FILES*********************************************************************************/#include <uclib.h>#include <uclib.h>#include "typedef.h"#include "basic_op.h"#include "oper_32b.h"#include "count.h"#include "cnst.h"//add for jzmedia accerative instruction sets#ifdef JZ4740_MXU_OPT#include "jzmedia.h"#endif/**********************************************************************************                         PUBLIC PROGRAM CODE*********************************************************************************//************************************************************************* * *  FUNCTION: comp_corr  * *  PURPOSE: Calculate all correlations of scal_sig[] in a given delay *           range. * *  DESCRIPTION: *      The correlation is given by *           cor[t] = <scal_sig[n],scal_sig[n-t]>,  t=lag_min,...,lag_max *      The functions outputs the all correlations  * *************************************************************************/void comp_corr (     Word16 scal_sig[],  /* i   : scaled signal.                          */    Word16 L_frame,     /* i   : length of frame to compute pitch        */    Word16 lag_max,     /* i   : maximum lag                             */    Word16 lag_min,     /* i   : minimum lag                             */    Word32 corr[])      /* o   : correlation of selected lag             */{    Word16 i, j;    Word16 *p, *p1;    Word32 t0;        for (i = lag_max; i >= lag_min; i--)    {       t0 = 0;                 //move32 (); #ifdef JZ4740_MXU_OPT#define  ADD_MASK 0xFFFFFFFC#define  REF_MASK 0x03    Word32 ref1, ref2;       p = (unsigned int) scal_sig & ADD_MASK;       ref1 = 4 - (unsigned int) scal_sig & REF_MASK;       p1 = (unsigned int) (scal_sig - i)& ADD_MASK;       ref2 = 4 - (unsigned int) (scal_sig- i) & REF_MASK;       S32LDD(xr10, p, 0x00);       S32LDD(xr11, p1, 0x00);       Q16SLL(xr12, xr0,xr0,xr13,0);  // t0 = 0;       for(j = 0; j < L_frame / 2; j++){          S32LDI(xr1, p, 0x04);          S32ALN(xr2, xr10, xr1, ref1);          Q16SLL(xr10,xr1,xr0,xr0,0);          S32LDI(xr1, p1, 0x04);          S32ALN(xr3, xr11, xr1, ref2);          Q16SLL(xr11, xr1,xr0,xr0,0);          D16MAC_AA_WW(xr12,xr2,xr3,xr13);        }        Q16SLL(xr1, xr12,xr13,xr2,1);        D32ADD_AA(xr3,xr1,xr2,xr0);        t0 = S32M2I(xr3);       #else              p = scal_sig;           //move16 ();        p1 = &scal_sig[-i];     //move16 ();        for (j = 0; j < L_frame; j++, p++, p1++)       {          t0 = L_mac (t0, *p, *p1);                    }#endif       corr[-i] = t0;          //move32 ();    }    return;}

⌨️ 快捷键说明

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