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

📄 pitch_ol.c

📁 君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图片解码,浏览,电子书,录音,想学ucos,识货的人就下吧 russblock fmradio explore set
💻 C
📖 第 1 页 / 共 2 页
字号:
{    Word16 i, j;    Word16 max1, max2, max3;    Word16 p_max1, p_max2, p_max3;    Word16 scal_flag = 0;    Word32 t0;#ifdef VAD2    Word32  r01, r02, r03;    Word32  rmax1, rmax2, rmax3;#else    Word16 corr_hp_max;#endif    Word32 corr[PIT_MAX+1], *corr_ptr;        /* Scaled signal */    Word16 scaled_signal[L_FRAME + PIT_MAX];    Word16 *scal_sig, scal_fac;#ifndef VAD2    if (dtx)    {  /* no test() call since this if is only in simulation env */       /* update tone detection */       ////////////////test(); test();       if ((sub(mode, MR475) == 0) || (sub(mode, MR515) == 0))       {          vad_tone_detection_update (vadSt, 1);       }       else       {          vad_tone_detection_update (vadSt, 0);       }    }#endif        scal_sig = &scaled_signal[pit_max];// move16 ();     t0 = 0L;                           // move32 (); //add for jzmedia accerative instruction sets#ifdef JZ4740_MXU_OPT#define  ADD_MASK 0xFFFFFFFC#define  REF_MASK 0x03    Word16 *ptr1, *ptr2;    Word32 ref1, ref2;    ptr1 = (unsigned int)(signal -pit_max) & ADD_MASK;    ref1 = 4 - (unsigned int)(signal - pit_max) & REF_MASK;    S32LDD(xr10, ptr1, 0x00);    Q16SLL(xr11, xr0,xr0,xr12,0);    for (i = 0; i < (L_frame + pit_max) / 2; i++)    {       S32LDI(xr1, ptr1, 0x04);       S32ALN(xr2, xr10, xr1, ref1);       Q16SLL(xr10, xr1, xr0, xr0, 0);        D16MAC_AA_WW(xr11, xr2, xr2, xr12);    }    D32SLL(xr3, xr11, xr12, xr4,1);    D32ADD_AA(xr1,xr3,xr4,xr2);    t0 = S32M2I(xr1);    if( pit_max % 2){      t0 = L_mac(t0, signal[L_frame-1],signal[L_frame-1]);    }#else    for (i = -pit_max; i < L_frame; i++)    {        t0 = L_mac (t0, signal[i], signal[i]);    }   #endif    /*--------------------------------------------------------*     * Scaling of input signal.                               *     *                                                        *     *   if Overflow        -> scal_sig[i] = signal[i]>>3     *     *   else if t0 < 1^20  -> scal_sig[i] = signal[i]<<3     *     *   else               -> scal_sig[i] = signal[i]        *     *--------------------------------------------------------*/    /*--------------------------------------------------------*     *  Verification for risk of overflow.                    *     *--------------------------------------------------------*/    //test ();    if (L_sub (t0, MAX_32) == 0L)               /* Test for overflow */    {        for (i = -pit_max; i < L_frame; i++)        {            scal_sig[i] = shr (signal[i], 3);   //move16 ();         }        scal_fac = 3;                           //move16 ();     }    else if (L_sub (t0, (Word32) 1048576L) < (Word32) 0)        /* if (t0 < 2^20) */    {		//test ();         for (i = -pit_max; i < L_frame; i++)        {            scal_sig[i] = shl (signal[i], 3);   //move16 ();         }        scal_fac = -3;                          //move16 ();     }    else    {		//test ();         for (i = -pit_max; i < L_frame; i++)        {            scal_sig[i] = signal[i];            //move16 ();         }        scal_fac = 0;                           //move16 ();     }    /* calculate all coreelations of scal_sig, from pit_min to pit_max */    corr_ptr = &corr[pit_max];                  //move32 ();    comp_corr (scal_sig, L_frame, pit_max, pit_min, corr_ptr);         /*--------------------------------------------------------------------*     *  The pitch lag search is divided in three sections.                *     *  Each section cannot have a pitch multiple.                        *     *  We find a maximum for each section.                               *     *  We compare the maximum of each section by favoring small lags.    *     *                                                                    *     *  First section:  lag delay = pit_max     downto 4*pit_min          *     *  Second section: lag delay = 4*pit_min-1 downto 2*pit_min          *     *  Third section:  lag delay = 2*pit_min-1 downto pit_min            *     *--------------------------------------------------------------------*/    /* mode dependent scaling in Lag_max */    //test ();     if (sub(mode, MR122) == 0)    {       scal_flag = 1;                           //move16 ();     }    else    {       scal_flag = 0;                           //move16 ();        }     #ifdef VAD2    j = shl (pit_min, 2);    p_max1 = Lag_max (corr_ptr, scal_sig, scal_fac, scal_flag, L_frame,                      pit_max, j, &max1, &rmax1, &r01, dtx);                      //move16 (); /* function result */    i = sub (j, 1);    j = shl (pit_min, 1);    p_max2 = Lag_max (corr_ptr, scal_sig, scal_fac, scal_flag, L_frame,                      i, j, &max2, &rmax2, &r02, dtx);                      //move16 (); /* function result */    i = sub (j, 1);    p_max3 = Lag_max (corr_ptr, scal_sig, scal_fac, scal_flag, L_frame,                      i, pit_min, &max3, &rmax3, &r03, dtx);                      //move16 (); /* function result */#else    j = shl (pit_min, 2);    p_max1 = Lag_max (vadSt, corr_ptr, scal_sig, scal_fac, scal_flag, L_frame,                      pit_max, j, &max1, dtx);  //move16 (); /* function result */    i = sub (j, 1);    j = shl (pit_min, 1);    p_max2 = Lag_max (vadSt, corr_ptr, scal_sig, scal_fac, scal_flag, L_frame,                      i, j, &max2, dtx);        //move16 (); /* function result */    i = sub (j, 1);    p_max3 = Lag_max (vadSt, corr_ptr, scal_sig, scal_fac, scal_flag, L_frame,                      i, pit_min, &max3, dtx);  //move16 (); /* function result */    if (dtx)    {  /* no test() call since this if is only in simulation env */       //test ();       if (sub(idx, 1) == 0)       {          /* calculate max high-passed filtered correlation of all lags */          hp_max (corr_ptr, scal_sig, L_frame, pit_max, pit_min, &corr_hp_max);                     /* update complex background detector */          vad_complex_detection_update(vadSt, corr_hp_max);        }    }#endif        /*--------------------------------------------------------------------*     * Compare the 3 sections maximum, and favor small lag.               *     *--------------------------------------------------------------------*/        //test ();     if (sub (mult (max1, THRESHOLD), max2) < 0)    {        max1 = max2;                       //move16 ();         p_max1 = p_max2;                   //move16 (); #ifdef VAD2        if (dtx)        {            rmax1 = rmax2;                 //move32 ();            r01 = r02;                     //move32 ();        }#endif    }    //test ();     if (sub (mult (max1, THRESHOLD), max3) < 0)    {        p_max1 = p_max3;                   //move16 (); #ifdef VAD2        if (dtx)        {            rmax1 = rmax3;                 //move32 ();            r01 = r03;                     //move32 ();        }#endif    }#ifdef VAD2    if (dtx)    {        vadSt->L_Rmax = L_add(vadSt->L_Rmax, rmax1);   /* Save max correlation */        vadSt->L_R0 =   L_add(vadSt->L_R0, r01);        /* Save max energy */    }#endif    return (p_max1);}

⌨️ 快捷键说明

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