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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? kiss_fft.c

?? AD系列fft變換
?? C
字號(hào):
/*Copyright (c) 2003-2004, Mark BorgerdingAll rights reserved.Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/#include "_kiss_fft_guts.h"/* The guts header contains all the multiplication and addition macros that are defined for fixed or floating point complex numbers.  It also delares the kf_ internal functions. */static kiss_fft_cpx *scratchbuf=NULL;static size_t nscratchbuf=0;static kiss_fft_cpx *tmpbuf=NULL;static size_t ntmpbuf=0;#define CHECKBUF(buf,nbuf,n) \    do { \        if ( nbuf < (size_t)(n) ) {\            buf = (kiss_fft_cpx*)realloc(buf,sizeof(kiss_fft_cpx)*(n)); \            nbuf = (size_t)(n); \        } \   }while(0)static void kf_bfly2(        kiss_fft_cpx * Fout,        const size_t fstride,        const kiss_fft_cfg st,        int m        ){    kiss_fft_cpx * Fout2;    kiss_fft_cpx * tw1 = st->twiddles;    kiss_fft_cpx t;    Fout2 = Fout + m;    do{        C_FIXDIV(*Fout,2); C_FIXDIV(*Fout2,2);        C_MUL (t,  *Fout2 , *tw1);        tw1 += fstride;        C_SUB( *Fout2 ,  *Fout , t );        C_ADDTO( *Fout ,  t );        ++Fout2;        ++Fout;    }while (--m);}static void kf_bfly4(        kiss_fft_cpx * Fout,        const size_t fstride,        const kiss_fft_cfg st,        const size_t m        ){    kiss_fft_cpx *tw1,*tw2,*tw3;    kiss_fft_cpx scratch[6];    size_t k=m;    const size_t m2=2*m;    const size_t m3=3*m;    tw3 = tw2 = tw1 = st->twiddles;    do {        C_FIXDIV(*Fout,4); C_FIXDIV(Fout[m],4); C_FIXDIV(Fout[m2],4); C_FIXDIV(Fout[m3],4);        C_MUL(scratch[0],Fout[m] , *tw1 );        C_MUL(scratch[1],Fout[m2] , *tw2 );        C_MUL(scratch[2],Fout[m3] , *tw3 );        C_SUB( scratch[5] , *Fout, scratch[1] );        C_ADDTO(*Fout, scratch[1]);        C_ADD( scratch[3] , scratch[0] , scratch[2] );        C_SUB( scratch[4] , scratch[0] , scratch[2] );        C_SUB( Fout[m2], *Fout, scratch[3] );        tw1 += fstride;        tw2 += fstride*2;        tw3 += fstride*3;        C_ADDTO( *Fout , scratch[3] );        if(st->inverse) {            Fout[m].r = scratch[5].r - scratch[4].i;            Fout[m].i = scratch[5].i + scratch[4].r;            Fout[m3].r = scratch[5].r + scratch[4].i;            Fout[m3].i = scratch[5].i - scratch[4].r;        }else{            Fout[m].r = scratch[5].r + scratch[4].i;            Fout[m].i = scratch[5].i - scratch[4].r;            Fout[m3].r = scratch[5].r - scratch[4].i;            Fout[m3].i = scratch[5].i + scratch[4].r;        }        ++Fout;    }while(--k);}static void kf_bfly3(         kiss_fft_cpx * Fout,         const size_t fstride,         const kiss_fft_cfg st,         size_t m         ){     size_t k=m;     const size_t m2 = 2*m;     kiss_fft_cpx *tw1,*tw2;     kiss_fft_cpx scratch[5];     kiss_fft_cpx epi3;     epi3 = st->twiddles[fstride*m];     tw1=tw2=st->twiddles;     do{         C_FIXDIV(*Fout,3); C_FIXDIV(Fout[m],3); C_FIXDIV(Fout[m2],3);         C_MUL(scratch[1],Fout[m] , *tw1);         C_MUL(scratch[2],Fout[m2] , *tw2);         C_ADD(scratch[3],scratch[1],scratch[2]);         C_SUB(scratch[0],scratch[1],scratch[2]);         tw1 += fstride;         tw2 += fstride*2;         Fout[m].r = Fout->r - scratch[3].r/2;         Fout[m].i = Fout->i - scratch[3].i/2;         C_MULBYSCALAR( scratch[0] , epi3.i );         C_ADDTO(*Fout,scratch[3]);         Fout[m2].r = Fout[m].r + scratch[0].i;         Fout[m2].i = Fout[m].i - scratch[0].r;         Fout[m].r -= scratch[0].i;         Fout[m].i += scratch[0].r;         ++Fout;     }while(--k);}static void kf_bfly5(        kiss_fft_cpx * Fout,        const size_t fstride,        const kiss_fft_cfg st,        int m        ){    kiss_fft_cpx *Fout0,*Fout1,*Fout2,*Fout3,*Fout4;    int u;    kiss_fft_cpx scratch[13];    kiss_fft_cpx * twiddles = st->twiddles;    kiss_fft_cpx *tw;    kiss_fft_cpx ya,yb;    ya = twiddles[fstride*m];    yb = twiddles[fstride*2*m];    Fout0=Fout;    Fout1=Fout0+m;    Fout2=Fout0+2*m;    Fout3=Fout0+3*m;    Fout4=Fout0+4*m;    tw=st->twiddles;    for ( u=0; u<m; ++u ) {        C_FIXDIV( *Fout0,5); C_FIXDIV( *Fout1,5); C_FIXDIV( *Fout2,5); C_FIXDIV( *Fout3,5); C_FIXDIV( *Fout4,5);        scratch[0] = *Fout0;        C_MUL(scratch[1] ,*Fout1, tw[u*fstride]);        C_MUL(scratch[2] ,*Fout2, tw[2*u*fstride]);        C_MUL(scratch[3] ,*Fout3, tw[3*u*fstride]);        C_MUL(scratch[4] ,*Fout4, tw[4*u*fstride]);        C_ADD( scratch[7],scratch[1],scratch[4]);        C_SUB( scratch[10],scratch[1],scratch[4]);        C_ADD( scratch[8],scratch[2],scratch[3]);        C_SUB( scratch[9],scratch[2],scratch[3]);        Fout0->r += scratch[7].r + scratch[8].r;        Fout0->i += scratch[7].i + scratch[8].i;        scratch[5].r = scratch[0].r + S_MUL(scratch[7].r,ya.r) + S_MUL(scratch[8].r,yb.r);        scratch[5].i = scratch[0].i + S_MUL(scratch[7].i,ya.r) + S_MUL(scratch[8].i,yb.r);        scratch[6].r =  S_MUL(scratch[10].i,ya.i) + S_MUL(scratch[9].i,yb.i);        scratch[6].i = -S_MUL(scratch[10].r,ya.i) - S_MUL(scratch[9].r,yb.i);        C_SUB(*Fout1,scratch[5],scratch[6]);        C_ADD(*Fout4,scratch[5],scratch[6]);        scratch[11].r = scratch[0].r + S_MUL(scratch[7].r,yb.r) + S_MUL(scratch[8].r,ya.r);        scratch[11].i = scratch[0].i + S_MUL(scratch[7].i,yb.r) + S_MUL(scratch[8].i,ya.r);        scratch[12].r = - S_MUL(scratch[10].i,yb.i) + S_MUL(scratch[9].i,ya.i);        scratch[12].i = S_MUL(scratch[10].r,yb.i) - S_MUL(scratch[9].r,ya.i);        C_ADD(*Fout2,scratch[11],scratch[12]);        C_SUB(*Fout3,scratch[11],scratch[12]);        ++Fout0;++Fout1;++Fout2;++Fout3;++Fout4;    }}/* perform the butterfly for one stage of a mixed radix FFT */static void kf_bfly_generic(        kiss_fft_cpx * Fout,        const size_t fstride,        const kiss_fft_cfg st,        int m,        int p        ){    int u,k,q1,q;    kiss_fft_cpx * twiddles = st->twiddles;    kiss_fft_cpx t;    int Norig = st->nfft;    CHECKBUF(scratchbuf,nscratchbuf,p);    for ( u=0; u<m; ++u ) {        k=u;        for ( q1=0 ; q1<p ; ++q1 ) {            scratchbuf[q1] = Fout[ k  ];            C_FIXDIV(scratchbuf[q1],p);            k += m;        }        k=u;        for ( q1=0 ; q1<p ; ++q1 ) {            int twidx=0;            Fout[ k ] = scratchbuf[0];            for (q=1;q<p;++q ) {                twidx += fstride * k;                if (twidx>=Norig) twidx-=Norig;                C_MUL(t,scratchbuf[q] , twiddles[twidx] );                C_ADDTO( Fout[ k ] ,t);            }            k += m;        }    }}staticvoid kf_work(        kiss_fft_cpx * Fout,        const kiss_fft_cpx * f,        const size_t fstride,        int in_stride,        int * factors,        const kiss_fft_cfg st        ){    kiss_fft_cpx * Fout_beg=Fout;    const int p=*factors++; /* the radix  */    const int m=*factors++; /* stage's fft length/p */    const kiss_fft_cpx * Fout_end = Fout + p*m;    if (m==1) {        do{            *Fout = *f;            f += fstride*in_stride;        }while(++Fout != Fout_end );    }else{        do{            kf_work( Fout , f, fstride*p, in_stride, factors,st);            f += fstride*in_stride;        }while( (Fout += m) != Fout_end );    }    Fout=Fout_beg;    switch (p) {        case 2: kf_bfly2(Fout,fstride,st,m); break;        case 3: kf_bfly3(Fout,fstride,st,m); break;         case 4: kf_bfly4(Fout,fstride,st,m); break;        case 5: kf_bfly5(Fout,fstride,st,m); break;         default: kf_bfly_generic(Fout,fstride,st,m,p); break;    }}/*  facbuf is populated by p1,m1,p2,m2, ...    where     p[i] * m[i] = m[i-1]    m0 = n                  */static void kf_factor(int n,int * facbuf){    int p=4;    double floor_sqrt;    floor_sqrt = floor( sqrt((double)n) );    /*factor out powers of 4, powers of 2, then any remaining primes */    do {        while (n % p) {            switch (p) {                case 4: p = 2; break;                case 2: p = 3; break;                default: p += 2; break;            }            if (p > floor_sqrt)                p = n;          /* no more factors, skip to end */        }        n /= p;        *facbuf++ = p;        *facbuf++ = n;    } while (n > 1);}/* * * User-callable function to allocate all necessary storage space for the fft. * * The return value is a contiguous block of memory, allocated with malloc.  As such, * It can be freed with free(), rather than a kiss_fft-specific function. * */kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem ){    kiss_fft_cfg st=NULL;    size_t memneeded = sizeof(struct kiss_fft_state)        + sizeof(kiss_fft_cpx)*(nfft-1); /* twiddle factors*/    if ( lenmem==NULL ) {        st = ( kiss_fft_cfg)malloc( memneeded );    }else{        if (*lenmem >= memneeded)            st = (kiss_fft_cfg)mem;        *lenmem = memneeded;    }    if (st) {        int i;        st->nfft=nfft;        st->inverse = inverse_fft;        for (i=0;i<nfft;++i) {            const double pi=3.14159265358979323846264338327;            double phase = ( -2*pi /nfft ) * i;            if (st->inverse)                phase *= -1;            kf_cexp(st->twiddles+i, phase );        }        kf_factor(nfft,st->factors);    }    return st;}    void kiss_fft_stride(kiss_fft_cfg st,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int in_stride){    if (fin == fout) {        CHECKBUF(tmpbuf,ntmpbuf,st->nfft);        kf_work(tmpbuf,fin,1,in_stride, st->factors,st);        memcpy(fout,tmpbuf,sizeof(kiss_fft_cpx)*st->nfft);    }else{        kf_work( fout, fin, 1,in_stride, st->factors,st );    }}void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout){    kiss_fft_stride(cfg,fin,fout,1);}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产做a爰片久久毛片| 69精品人人人人| 欧美一区二区私人影院日本| 欧美tk—视频vk| 亚洲线精品一区二区三区| 国产高清在线观看免费不卡| 欧美日韩亚洲综合| 亚洲乱码国产乱码精品精98午夜| 久久99精品国产麻豆不卡| 色呦呦网站一区| 国产日韩欧美不卡在线| 日本成人中文字幕| 欧美另类变人与禽xxxxx| 最近中文字幕一区二区三区| 国产伦精品一区二区三区免费| 911精品国产一区二区在线| 中文字幕一区二区不卡| 国产一区不卡视频| 精品国产免费一区二区三区香蕉| 图片区小说区国产精品视频| 成人v精品蜜桃久久一区| 久久嫩草精品久久久精品一| 蜜桃精品视频在线| 在线综合亚洲欧美在线视频| 一区二区国产盗摄色噜噜| www.亚洲激情.com| 欧美高清在线一区| 丁香六月综合激情| 中文字幕中文字幕在线一区| 国产一区二区三区av电影| 精品毛片乱码1区2区3区| 视频一区二区中文字幕| 欧美写真视频网站| 亚洲成人av一区二区三区| 欧美午夜影院一区| 丝袜亚洲另类丝袜在线| 欧美一区二区三区在线电影| 日本不卡在线视频| 精品国产麻豆免费人成网站| 秋霞午夜av一区二区三区| 欧美一二三区精品| 国产精品一区二区无线| 亚洲国产精品国自产拍av| 粉嫩欧美一区二区三区高清影视 | 国产精品美女久久久久久2018| 国产99久久久国产精品潘金 | 国产成人日日夜夜| 国产精品女上位| 色婷婷香蕉在线一区二区| 一区二区三区自拍| 欧美精品1区2区| 精品在线播放免费| 国产精品美日韩| 在线亚洲人成电影网站色www| 亚洲成人免费视频| 久久夜色精品国产欧美乱极品| 国产成人高清视频| 亚洲一区二区三区视频在线播放| 69p69国产精品| 国产a精品视频| 香蕉成人啪国产精品视频综合网| 日韩三级在线免费观看| 处破女av一区二区| 亚洲成人综合网站| 久久精品网站免费观看| 色婷婷精品大视频在线蜜桃视频| 偷窥少妇高潮呻吟av久久免费 | 欧美一区三区二区| 国产99久久精品| 丝袜a∨在线一区二区三区不卡| 精品国产乱码久久久久久夜甘婷婷 | 精品视频一区二区不卡| 男人的天堂久久精品| 国产午夜精品美女毛片视频| 欧美无人高清视频在线观看| 精品一区二区三区久久久| 亚洲免费在线视频一区 二区| 欧美一区二区久久久| 成人午夜视频福利| 紧缚捆绑精品一区二区| 一区二区三区成人| 中文字幕第一区第二区| 欧美日韩高清一区| 成人97人人超碰人人99| 视频在线在亚洲| 亚洲欧美一区二区三区孕妇| 欧美成人猛片aaaaaaa| 在线观看免费视频综合| 国产成人精品免费视频网站| 日韩av中文字幕一区二区三区| 国产精品你懂的| 精品久久久网站| 欧美精品乱码久久久久久| 91亚洲男人天堂| 国产99久久精品| 国产伦理精品不卡| 美女久久久精品| 免费黄网站欧美| 亚洲成人自拍网| 亚洲成人免费在线观看| 亚洲在线一区二区三区| 亚洲人成小说网站色在线| 欧美国产欧美亚州国产日韩mv天天看完整| 日韩欧美一区电影| 日韩一区二区麻豆国产| 欧美日韩aaaaaa| 51精品视频一区二区三区| 欧美色精品在线视频| 色婷婷激情一区二区三区| 91欧美一区二区| 97久久超碰精品国产| 91年精品国产| 色婷婷av一区二区三区gif | 一区二区三区日韩精品视频| 中文字幕色av一区二区三区| 1区2区3区精品视频| 国产精品久久久久久久裸模| 国产女同性恋一区二区| 国产精品午夜在线观看| 国产精品久久久久久久久免费丝袜 | 欧美视频一区二区三区四区 | 久久伊人中文字幕| 久久综合色婷婷| 久久蜜桃一区二区| 久久精品欧美一区二区三区麻豆| 久久亚洲影视婷婷| 国产精品国产自产拍高清av| 亚洲欧美视频在线观看视频| 亚洲自拍偷拍九九九| 亚洲1区2区3区视频| 免费在线观看日韩欧美| 国产综合色精品一区二区三区| 国产一区二区三区免费播放| 国产成人午夜片在线观看高清观看| 成人性生交大片免费看中文网站| 99久久精品国产一区| 欧洲av一区二区嗯嗯嗯啊| 欧美高清你懂得| 精品国产99国产精品| 国产欧美日产一区| 亚洲黄色片在线观看| 视频一区视频二区中文| 国产一区二区免费在线| 97久久精品人人做人人爽| 欧美色爱综合网| 久久一区二区三区四区| |精品福利一区二区三区| 亚洲成人av资源| 国产盗摄一区二区| 色噜噜狠狠一区二区三区果冻| 欧美一区二区三区在线看| 中文av字幕一区| 日日夜夜精品视频天天综合网| 国产不卡视频在线观看| 欧美日韩免费观看一区二区三区 | 日韩欧美中文字幕制服| 国产精品色呦呦| 丝袜亚洲另类丝袜在线| 不卡视频在线看| 欧美不卡一区二区三区四区| 亚洲人成网站精品片在线观看| 久久精品国产亚洲一区二区三区| 99久久免费国产| 精品奇米国产一区二区三区| 亚洲人一二三区| 国产mv日韩mv欧美| 欧美一级片免费看| 亚洲精品精品亚洲| 粉嫩aⅴ一区二区三区四区| 777午夜精品免费视频| 日韩伦理免费电影| 国产白丝精品91爽爽久久| 7777精品伊人久久久大香线蕉经典版下载 | 一区二区高清免费观看影视大全| 韩国三级在线一区| 制服丝袜亚洲网站| 亚洲永久精品大片| 91视频一区二区三区| 中文字幕不卡在线观看| 久久国产精品免费| 欧美日韩成人在线| 亚洲综合丁香婷婷六月香| 91在线精品一区二区三区| 久久久精品日韩欧美| 激情六月婷婷综合| 日韩色视频在线观看| 日韩精品一二三| 欧美丰满少妇xxxxx高潮对白| 伊人婷婷欧美激情| 日本精品一区二区三区高清| 国产精品久久精品日日| 国产精品一区二区久久精品爱涩| 精品奇米国产一区二区三区| 免费黄网站欧美| 日韩久久精品一区| 蜜桃精品视频在线观看| 精品少妇一区二区三区视频免付费| 青青草97国产精品免费观看无弹窗版| 欧美性videosxxxxx| 性欧美大战久久久久久久久|