亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cpds.cpp

?? CP detector (CPD) only reports the onset and removal of a tone. The analysis of timing (if required)
?? CPP
字號(hào):
/*-------------------------------------------------------------------------*
*                                                                         *
*   THIS IS AN UNPUBLISHED WORK CONTAINING CONFIDENTIAL AND PROPRIETARY   *
*   INFORMATION.  IF PUBLICATION OCCURS, THE FOLLOWING NOTICE APPLIES:    *
*      "COPYRIGHT 2001 MIKET DSP SOLUTIONS, ALL RIGHTS RESERVED"          *
*                                                                         *
*-------------------------------------------------------------------------*/
#if ! defined (_dsp)
#include <stdlib.h> // abs()
#endif

#include "stddefs.h"
#include "cpdi.h"

/*--------------------- local defs ----------------------------------------*/

/*--------------------- public vars ---------------------------------------*/
#if defined (_dsp)
extern const S16 CPD_aBpI[];
extern const S16 CPD_aBpQ[];
extern const S16 CPD_aPg[];
extern const S16 CPD_aPhase[];
#else
#include "cpd_tab.c"
#endif

/*--------------------- local vars ----------------------------------------*/
/*--------------------- local functions -----------------------------------*/
/*-------------------------------------------------------------------------*/
S16                  cpd_en2logC
/*-------------------------------------------------------------------------*/
(
S32 ac0,    /* but it is positive */
S16 sCorr
)
{
    S16 t0 = 0;

    ac0 += 1; // min val -13952
    // mant aco :: nexp ac0, t0
    for (;;)
    {
        if (ac0 &0x40000000L)
            break;
        ac0 <<= 1;
        t0--;
    }
    ac0 >>= 21;
    ac0 += 0x780;
    ac0 += t0*512;
    return (S16)(ac0 + sCorr); 
}

/*-------------------------------------------------------------------------*/
void 					cpd_move_data_inC
/*-------------------------------------------------------------------------*/
(
CPD_tDb *pDb,
CPD_tSc *pSc,
S16 *psIn
)
{
	S16 k;
    S16 sShift = pDb->pCfg->sNormShift;
	
    /* input data buffer: for bandpass filter */
    for (k = 0; k < CPD_BP_SSZ; k++)
    {
        pSc->asBpData[k] = pDb->asBpDataSav[k];
    }

    for (k = 0; k < ICPD_FR_SZ; k++)
    {
        S16 x = psIn[k];
        if (sShift > 0) 
        {
            x <<= sShift;
        }
        else
        {
            x >>= (-sShift);
        }
        pSc->asBpData[k+CPD_BP_SSZ] = x;
    }

    /* bandpass data buffer - for periodogram filters */

    for (k = 0; k < CPD_PG_SSZ; k++)
    {
        pSc->asPgIData[k] = pDb->asPgIDataSav[k];
        pSc->asPgQData[k] = pDb->asPgQDataSav[k];
    }
}

/*-------------------------------------------------------------------------*/
void 					cpd_filter_bpC
/*-------------------------------------------------------------------------*/
(
CPD_tSc *pSc
)
{
    S16 *psOutI  = &pSc->asPgIData[CPD_PG_SSZ];
    S16 *psOutQ  = &pSc->asPgQData[CPD_PG_SSZ];
    S16 *psCDP  = pSc->asBpData;
    const S16 *psIflt = CPD_aBpI;
    const S16 *psQflt = CPD_aBpQ;
    S32 ac0;
    S32 ac1;
    S32 ac2;
	S16 sSample;
    S16 k;
	
	
    ac0 = 0;

    for (sSample = 0; sSample < ICPD_FR_SZ/CPD_BP_DR; sSample++)
    {
        ac1 = 0;
        ac2 = 0;
        for (k = 0; k < CPD_BP_FSZ; k++)
        {
            ac1 += *psCDP * (S32) *psIflt;
            ac2 += *psCDP * (S32) *psQflt;
            psCDP++;
            psIflt++;
            psQflt++;
        }

        ac1 += 0x8000L;
        ac2 += 0x8000L;

        ac1 >>= 16;
        ac2 >>= 16;
        *psOutI++ = (S16)(ac1);
        *psOutQ++ = (S16)(ac2);
        ac0 += (ac1)*(ac1);
        ac0 += (ac2)*(ac2);
        psCDP  -= CPD_BP_FSZ - CPD_BP_DR; 

        psIflt -= CPD_BP_FSZ; /* circular ? */
        psQflt -= CPD_BP_FSZ; /* circular ? */
    }
    pSc->slBpEn = ac0;
    pSc->sBpEn = cpd_en2logC(pSc->slBpEn, CPD_EN_BP);
}

/*-------------------------------------------------------------------------*/
void 					cpd_sum_subC
/*-------------------------------------------------------------------------*/
(
CPD_tSc *pSc
)
{
    S16 k;
    /* negative increments, from N-1 to N/2 */
    S16 *psFromP = &pSc->asPgIData[0];
    S16 *psFromN = &pSc->asPgIData[CPD_PG_FSZ-1];
    S16 *psToSum = &pSc->asPgISum[0];
    S16 *psToDif = &pSc->asPgIDif[0];

    for (k = 0; k < CPD_PG_HSZ; k++)
    {
        S16 tx = *psFromN--;

        S16 acHi = *psFromP + tx;
        S16 acLo = *psFromP - tx;
        psFromP++;

        *psToSum++ = acHi;
        *psToDif++ = acLo;
    }

    psFromP = &pSc->asPgQData[0];
    psFromN = &pSc->asPgQData[CPD_PG_FSZ-1];
    psToSum = &pSc->asPgQSum[0];
    psToDif = &pSc->asPgQDif[0];

    for (k = 0; k < CPD_PG_HSZ; k++)
    {
        S16 tx = *psFromN--;

        S16 acHi = *psFromP + tx;
        S16 acLo = *psFromP - tx;
        psFromP++;

        *psToSum++ = acHi;
        *psToDif++ = acLo;
    }
}

/*-------------------------------------------------------------------------*/
void 							cpd_filter_pgC
/*-------------------------------------------------------------------------*/
(
CPD_tSc *pSc
)
{
    S32 ac0;
    S32 ac1;
    const S16 *psCDP = CPD_aPg;
    S16 *psI = pSc->asPgISum;
    S16 *psQ = pSc->asPgQSum;
    CPD_tOut *pOut = pSc->aOut;
    S16 sFilterNo;
    S16 k;

    

    for (sFilterNo = 0; sFilterNo < CPD_FREQS; sFilterNo++)
    {
        psI = pSc->asPgISum;
        psQ = pSc->asPgQSum;
        ac0 = 0;
        ac1 = 0;
        /* psCDP points to Cos coeffs */
        for (k = 0; k < CPD_PG_HSZ; k++)
        {
            ac0 += *psCDP * (S32) *psI; /* ac+ * fc */
            ac1 += *psCDP * (S32) *psQ; /* as+ * fc */
            psI ++;
            psQ ++;
            psCDP++;
        }
        /* psCDP now points to Sin coeffs */
        psI = pSc->asPgIDif;
        psQ = pSc->asPgQDif;

        for (k = 0; k < CPD_PG_HSZ; k++)
        {
            ac0 -= *psCDP * (S32) *psQ; /* as- * fs */
            ac1 += *psCDP * (S32) *psI; /* ac- * fs */

            psI ++;
            psQ ++;
            psCDP++;
        }

        /* psCDP points to Cos coeffs of the next filter */
        /* ac0 = I * c - Q * s;
           ac1 = I * s + Q * c;
         */
        ac0 += 0x8000L;
        ac1 += 0x8000L;

        ac0 >>= 16;
        ac1 >>= 16;

        pOut->sC = (S16)(ac0); 
        pOut->sS = (S16)(ac1);
        ac0  = ac0 * ac0;
        ac0 += ac1 * ac1;
        pOut->slEn = ac0;
        pOut++;
    }
}

/*-------------------------------------------------------------------------*/
void 					cpd_sort_freqsC
/*-------------------------------------------------------------------------*/
(
CPD_tSc *pSc
)
/* order frequencies ... we need 2 dominant freqs and the next 
 * after them, to test that the spectrum is clean
 */
{
    S32 *pslEn = &pSc->aslEnSort[0];
    S16 sMaxIdx = 0;
    S32 slMax;
    S16 k;

    for (k = 0; k < CPD_FREQS; k++)
    {
        pslEn[k] = pSc->aOut[k].slEn;
    }

    /* find max */    
    slMax = 0;
    for (k = 0; k < CPD_FREQS; k++)
    {
        if (pslEn[k] > slMax)
        {
            slMax = pslEn[k];
            sMaxIdx = k;
        }
    }
    pSc->sMaxIdx = sMaxIdx;
    pSc->sMaxEn = cpd_en2logC(slMax, CPD_EN_PG);

    /* find next */
    pslEn[sMaxIdx] = 0;
    slMax = 0;
    for (k = 0; k < CPD_FREQS; k++)
    {
        if (pslEn[k] > slMax)
        {
            slMax = pslEn[k];
            sMaxIdx = k;
        }
    }
    pSc->sNextIdx = sMaxIdx;
    pSc->sNextEn = cpd_en2logC(slMax, CPD_EN_PG);
    
    /* find next ... after next = the rest */
    pslEn[sMaxIdx] = 0;
    slMax = 0;
    for (k = 0; k < CPD_FREQS; k++)
    {
        if (pslEn[k] > slMax)
        {
            slMax = pslEn[k];
            sMaxIdx = k;
        }
    }
    pSc->sRestIdx = sMaxIdx;
    pSc->sRestEn = cpd_en2logC(slMax, CPD_EN_PG);
}

/*-------------------------------------------------------------------------*/
S16 					_get_err
/*-------------------------------------------------------------------------*/
(
S32 slEn,
S32 slErr
)
{
    S16 t0;
    S16 sign = 1;
    
    if (slErr < 0)
    {
    	slErr = -slErr;
    	sign = -1;
    }
    
    if (slErr < slEn)
    {
	    slEn += 1;
	    // mant aco :: nexp ac0, t0
	    for (t0 = 0;;)
	    {
	        if (slEn &0x40000000L)
	            break;
	        slEn <<= 1;
	        t0++;
	    }
	    slErr <<= (t0-1);
	//    slErr >>= 1;
	    slErr &= 0xffff8000;
	    slEn >>= 16;
	    slErr = slErr / slEn;
	    
	    slErr *= (-5450);
	    slErr >>= 15;
    }
    else
    {
    	slErr = -5450;
    }
    
    if (sign < 0) 
    {
    	slErr = -slErr;
    }

    return (S16)(slErr);
}

/*-------------------------------------------------------------------------*/
void                        cpd_get_elem_dataC
/*-------------------------------------------------------------------------*/
(
CPD_tDb *pDb, 
CPD_tSc *pSc,
CPD_tElem *pElem,
S16 sIdx
)
{
    S32 ac2; 
    S32 ac3; 
    const S16 *psCDP = &CPD_aPhase[sIdx * 2];
    CPD_tOut *pOut = &pSc->aOut[sIdx];
    CPD_tOutSav *pOutSav = &pDb->aOutSav[sIdx];

    ac2 = pOutSav->sC * (S32) *psCDP;
    ac3 = pOutSav->sS * (S32) *psCDP;
    psCDP++;

    ac2 += pOutSav->sS * (S32) *psCDP;
    ac3 -= pOutSav->sC * (S32) *psCDP;
//    psCDP++;
    ac2 += 0x4000; ac2 >>= 15;
    ac3 += 0x4000; ac3 >>= 15;

    pElem->sCpred = (S16)ac2;
    pElem->sSpred = (S16)ac3;

    /* calculate (ac3=) square distance between prediction 
       and the actual point */
    ac2 = (pElem->sCpred - pOut->sC);
    ac3 = ac2 * ac2;
    ac2 = (pElem->sSpred - pOut->sS);
    ac3 += ac2 * ac2;

    pElem->sDist = cpd_en2logC(ac3, CPD_EN_PG);

    /* calculate projection of error onto positive
        phase advanced vector.
        p=error = [C1 - Cpred, S1 - Spred];
        e=positive phase vector is [-Spred, Cpred];
        p'*e=Cpred*s1-Spred*c1;
     */
    ac3 = pOut->sS * (S32) pElem->sCpred;
    ac3 = ac3 - pOut->sC * (S32) pElem->sSpred;
    
    pElem->sErr = _get_err(pOut->slEn, ac3);
}

/*-------------------------------------------------------------------------*/
void                        cpd_move_data_outC
/*-------------------------------------------------------------------------*/
(
CPD_tDb *pDb, 
CPD_tSc *pSc
)
{
    S16 k;

    for (k = 0; k < CPD_BP_SSZ; k++)
    {
        pDb->asBpDataSav[k] = pSc->asBpData[k+(CPD_BP_ASZ-CPD_BP_SSZ)];
    }
    for (k = 0; k < CPD_PG_SSZ; k++)
    {
        pDb->asPgIDataSav[k] = pSc->asPgIData[k+(CPD_PG_ASZ-CPD_PG_SSZ)];
        pDb->asPgQDataSav[k] = pSc->asPgQData[k+(CPD_PG_ASZ-CPD_PG_SSZ)];
    }

    for (k = 0; k < CPD_FREQS; k++)
    {
        pDb->aOutSav[k].sC = pSc->aOut[k].sC;
        pDb->aOutSav[k].sS = pSc->aOut[k].sS;
    }

    /* required for next frame */
//    pDb->v.sPrevFrEn = pDb->v.sLastFrEn;
//    pDb->v.sLastFrEn = pSc->sBpEn;

    for (k = CPD_EN_SZ-1; k > 0; k--)
    {
        pDb->v.asSumEn[k] = pDb->v.asSumEn[k-1];
    }
    pDb->v.asSumEn[0] = pSc->sSumEn;
}

/*--------------------- public  functions ---------------------------------*/

/*-------------------------------------------------------------------------*/
void                    cpd_filter_testC
/*-------------------------------------------------------------------------*/
(
CPD_tDb *pDb,
CPD_tSc *pSc,
S16 *psIn
)
{

	cpd_move_data_in(pDb, pSc, psIn);

    cpd_filter_bp(pSc);
    cpd_sum_sub(pSc);
	cpd_filter_pg(pSc);

    cpd_sort_freqs(pSc);
    cpd_get_lohi(pDb, pSc);

    cpd_get_elem_data(pDb, pSc, &pSc->Lo, pSc->sLoIdx);
    cpd_get_elem_data(pDb, pSc, &pSc->Hi, pSc->sHiIdx);

	cpd_test(pDb, pSc);
    cpd_move_data_out (pDb, pSc);
}

/* ------------------------------------------------------------------------ */
void		                    cpd_avrgC
/* ------------------------------------------------------------------------ */
(
S16 *psVal, 
S16 sNew,
S16 sCoeff
)
/* Vk+1 = Vk + (y - Vk) * coeff/32768; */
{
    S32 acc;

    acc = (sNew - *psVal);
    acc *= sCoeff;
    acc += ((S32)(*psVal))<<15;
    acc += 0x4000;
    acc >>= 15;
    *psVal = (S16)acc;
}

#if !defined (_dsp)
S16  cpd_en2log(S32 ac0, S16 sCorr)
{
    return cpd_en2logC(ac0, sCorr);
}
void cpd_move_data_in(CPD_tDb *pDb,CPD_tSc *pSc,S16 *psIn)
{
    cpd_move_data_inC(pDb, pSc, psIn);
}
void cpd_filter_bp(CPD_tSc *pSc)
{
    cpd_filter_bpC(pSc);
}
void cpd_sum_sub(CPD_tSc *pSc)
{
    cpd_sum_subC(pSc);
}
void cpd_filter_pg(CPD_tSc *pSc)
{
    cpd_filter_pgC(pSc);
}
void cpd_sort_freqs(CPD_tSc *pSc)
{
    cpd_sort_freqsC(pSc);
}
void cpd_move_data_out(CPD_tDb *pDb, CPD_tSc *pSc)
{
    cpd_move_data_outC(pDb, pSc);
}
void cpd_get_elem_data(CPD_tDb *pDb, CPD_tSc *pSc,CPD_tElem *pElem,S16 sIdx)
{
    cpd_get_elem_dataC(pDb, pSc, pElem, sIdx);
}
void cpd_avrg(S16 *psVal, S16 sNew,S16 sCoeff)
{
    cpd_avrgC(psVal, sNew, sCoeff);
}
#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩中文另类| 国产日韩欧美麻豆| 91国在线观看| 色综合久久中文字幕| 成人av在线一区二区| 国产91色综合久久免费分享| 韩国理伦片一区二区三区在线播放| 琪琪一区二区三区| 欧美aaaaa成人免费观看视频| 美国十次综合导航| 精品亚洲porn| 久久国产乱子精品免费女| 久久激五月天综合精品| 国内精品久久久久影院薰衣草| 国产一区二区三区免费看 | 蜜桃av一区二区三区| 三级在线观看一区二区 | 91精品中文字幕一区二区三区| 欧美日韩一级黄| 91麻豆精品国产自产在线观看一区 | 亚洲女性喷水在线观看一区| 亚洲制服丝袜在线| 香蕉乱码成人久久天堂爱免费| 日日摸夜夜添夜夜添国产精品| 九九国产精品视频| 国产乱码精品一区二区三| 成人午夜在线视频| 91免费国产视频网站| 欧美日韩精品免费| 精品三级av在线| 国产欧美精品一区aⅴ影院| ...av二区三区久久精品| 亚洲午夜成aⅴ人片| 久久超碰97中文字幕| 成人久久视频在线观看| 91久久精品国产91性色tv| 欧美另类变人与禽xxxxx| 精品乱码亚洲一区二区不卡| 国产精品美女www爽爽爽| 亚洲亚洲精品在线观看| 加勒比av一区二区| 91女厕偷拍女厕偷拍高清| 欧美一级午夜免费电影| 中日韩av电影| 丝袜a∨在线一区二区三区不卡| 国产成人亚洲综合a∨婷婷 | 中文字幕日本乱码精品影院| 性感美女久久精品| 在线日韩国产精品| 精品国产髙清在线看国产毛片 | 99精品热视频| 欧美一区二区三区四区久久| 欧美国产精品一区| 亚洲.国产.中文慕字在线| 国产一区二区91| 欧美日韩成人激情| 在线免费观看视频一区| 一区二区三区四区精品在线视频| 午夜激情一区二区三区| 国产激情91久久精品导航| 91福利国产成人精品照片| 久久影院午夜论| 亚洲主播在线播放| 国产成人精品一区二区三区四区| 欧美猛男男办公室激情| 国产精品久久久久久久久动漫| 美女视频黄免费的久久| 91伊人久久大香线蕉| 精品国产欧美一区二区| 亚洲日本青草视频在线怡红院| 狠狠色丁香久久婷婷综| 欧洲人成人精品| 国产精品国产三级国产aⅴ原创| 国内一区二区视频| 欧美日韩成人激情| 亚洲男同1069视频| 粉嫩一区二区三区性色av| 制服丝袜av成人在线看| 亚洲一区二区三区自拍| 国产一区二区中文字幕| 欧美成人乱码一区二区三区| 日韩欧美国产一区在线观看| 精品综合免费视频观看| 92精品国产成人观看免费| 亚洲精品在线观| 水蜜桃久久夜色精品一区的特点| 97久久人人超碰| 久久精品日产第一区二区三区高清版| 婷婷综合久久一区二区三区| 色一情一乱一乱一91av| 中文字幕在线观看不卡视频| 国产精品一区二区三区乱码| 欧美成人欧美edvon| 五月天久久比比资源色| 欧美性xxxxx极品少妇| 最新欧美精品一区二区三区| 成人h精品动漫一区二区三区| 久久精品亚洲乱码伦伦中文 | 免费看黄色91| 91精品国产91久久久久久最新毛片 | 欧美电影一区二区三区| 亚洲资源在线观看| 在线免费观看一区| 一区二区三区四区五区视频在线观看| 91丨porny丨中文| 国产精品免费人成网站| 成人在线视频一区| 国产精品美女一区二区| 成人黄色大片在线观看| 国产精品久久久久aaaa樱花| 99re这里只有精品首页| 综合欧美亚洲日本| 91无套直看片红桃| 亚洲码国产岛国毛片在线| 91麻豆福利精品推荐| 亚洲精品免费在线| 欧洲日韩一区二区三区| 亚洲高清不卡在线| 欧美美女一区二区三区| 五月天激情综合| 日韩欧美一区在线| 韩国精品免费视频| 国产精品动漫网站| 在线观看一区二区视频| 天天做天天摸天天爽国产一区| 日韩欧美国产1| 国产精品资源网| 中文字幕在线不卡一区| 日本成人超碰在线观看| 亚洲视频免费在线观看| 色欲综合视频天天天| 亚洲成a人v欧美综合天堂| 91精品国产全国免费观看| 久久99国内精品| 中文字幕 久热精品 视频在线| 日本韩国一区二区三区视频| 日日夜夜一区二区| 久久精品视频免费| 91色视频在线| 青青国产91久久久久久| 欧美激情在线一区二区| 91蝌蚪porny| 免费观看成人av| 国产欧美精品一区二区色综合朱莉| 日本韩国欧美一区二区三区| 天堂影院一区二区| 国产免费久久精品| 欧美日韩国产高清一区二区三区 | 欧美性猛交xxxx乱大交退制版| 午夜精品爽啪视频| 久久久另类综合| 欧美色网站导航| 国产毛片精品一区| 亚洲一区二区三区在线| 26uuu亚洲综合色| 国产精品久久久久影院老司| 欧美日韩一区精品| 精品在线免费观看| 亚洲精选在线视频| www一区二区| 亚洲综合网站在线观看| 欧美日韩国产在线播放网站| 粉嫩高潮美女一区二区三区| 香蕉影视欧美成人| 国产精品免费aⅴ片在线观看| 7777精品久久久大香线蕉| 成人一区二区三区中文字幕| 日日噜噜夜夜狠狠视频欧美人| 国产精品久久久久久久裸模| 日韩视频一区在线观看| 在线观看免费视频综合| 高清不卡在线观看| 琪琪久久久久日韩精品| 亚洲精品自拍动漫在线| 久久精品亚洲精品国产欧美kt∨| 91精品国产综合久久久蜜臀粉嫩| av在线不卡观看免费观看| 久久超碰97人人做人人爱| 亚洲国产成人tv| 国产精品福利在线播放| 久久综合九色综合欧美亚洲| 欧美日韩亚洲丝袜制服| 色嗨嗨av一区二区三区| 丰满少妇在线播放bd日韩电影| 久久se这里有精品| 午夜久久久久久久久久一区二区| 亚洲欧洲日本在线| 国产亚洲一二三区| 精品免费99久久| 欧美肥妇free| 欧美日韩亚洲高清一区二区| 99久久综合精品| 国产大片一区二区| 国产老女人精品毛片久久| 久久不见久久见免费视频7| 免费高清成人在线| 青娱乐精品视频| 日韩中文字幕1| 午夜精品影院在线观看| 亚洲国产精品久久一线不卡|