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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fft_ifft.c

?? 源程序是dsp關于混合基的算法的c語言的實現
?? C
?? 第 1 頁 / 共 2 頁
字號:


#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
#include <malloc.h>

#define  maxIndex  10000L

/************************************************************************
  fft(int n, double xRe[], double xIm[], double yRe[], double yIm[])
 ------------------------------------------------------------------------
  Input/output:
      int n          transformation length.
      double xRe[]   real part of input sequence.
      double xIm[]   imaginary part of input sequence.
      double yRe[]   real part of output sequence.
      double yIm[]   imaginary part of output sequence.
 ------------------------------------------------------------------------
  Function:
      The procedure performs a fast discrete Fourier transform (FFT) of
      a complex sequence, x, of an arbitrary length, n. The output, y,
      is also a complex sequence of length n.

      y[k] = sum(x[m]*exp(-i*2*pi*k*m/n), m=0..(n-1)), k=0,...,(n-1)

      The largest prime factor of n must be less than or equal to the
      constant maxPrimeFactor defined below.
 ------------------------------------------------------------------------
  Implementation notes:
      The general idea is to factor the length of the DFT, n, into
      factors(2,3,4,5) that are efficiently handled by the routines.

      A number of short DFT's are implemented with a minimum of
      arithmetical operations and using (almost) straight line code
      resulting in very fast execution when the factors of n belong
      to this set. Especially the butterfly-unit of radix-3 and 5 is optimized.

      Any other factors, that are not in the set of {2,3,4,5} will result in error!
 ------------------------------------------------------------------------
  The following procedures are used :
      factorize       :  factor the transformation length.
      transTableSetup :  setup table with sofar-, actual-
	                     remainRadix- and Table_twiddle.
      permute         :  permutation allows in-place calculations.
      twiddleTransf   :  twiddle multiplications and DFT's for one stage.
      fft_4           :  length 4 DFT, a la Nussbaumer.
      fft_5           :  length 5 DFT, a la Nussbaumer.
*************************************************************************/

#define  maxPrimeFactor        5
#define  maxFactorCount        20

/* cos(2*pi/3)-1 not cos(2*pi/3) in order to utilize formal-seat operation */
static double  c3_1 = -1.5000000000000E+00;  /*  c3_1 = cos(2*pi/3)-1;          */
static double  c3_2 =  8.6602540378444E-01;  /*  c3_2 = sin(2*pi/3);            */
                                          
static double  u5   =  1.2566370614359E+00;  /*  u5   = 2*pi/5;                 */

/* (cos(u5)+cos(2*u5))/2-1 not (cos(u5)+cos(2*u5))/2 in order to utilize formal-seat operation*/
static double  c5_1 = -1.2500000000000E+00;  /*  c5_1 = (cos(u5)+cos(2*u5))/2-1;*/
static double  c5_2 =  5.5901699437495E-01;  /*  c5_2 = (cos(u5)-cos(2*u5))/2;  */
static double  c5_3 = -9.5105651629515E-01;  /*  c5_3 = -sin(u5);               */
static double  c5_4 = -1.5388417685876E+00;  /*  c5_4 = -(sin(u5)+sin(2*u5));   */
static double  c5_5 =  3.6327126400268E-01;  /*  c5_5 = (sin(u5)-sin(2*u5));    */

static double   pi;
static int      groupOffset,dataOffset,blockOffset,adr;
static int      groupNo,dataNo,blockNo,twNo;
static double   omega, tw_re,tw_im;
static double  cosw, sinw;
static double   twiddleRe[maxPrimeFactor], twiddleIm[maxPrimeFactor],
                zRe[maxPrimeFactor], zIm[maxPrimeFactor];

 
FILE *fp;
/*factor the transformation length
  Note : this part is just for simulate, it's not cotained in the hardware, 
  all the factors are parameters acquired from outside
 */
void factorize(int n, int *nFact, int fact[])
{
    int i,j;
    int nRadix;
	int radices[5];
    int factors[maxFactorCount];

    nRadix    =  4;  
    radices[1]=  2;
    radices[2]=  3;
    radices[3]=  4;
    radices[4]=  5;

	//factorizing process the sequence is falling order
    if (n==1)
    {
        j=1;
        factors[1]=1;
    }
    else j=0;
    i=nRadix;
    while ((n>1) && (i>0))
    {
      if ((n % radices[i]) == 0)
      {
        n=n / radices[i];
        j=j+1;
        factors[j]=radices[i];
      }
      else  i=i-1;
    }
    
	//change the sequence into the rising order
    for (i=1; i<=j; i++)         
    {
      fact[i] = factors[j-i+1];
    }
    *nFact=j;
}   /* factorize */

/****************************************************************************
  After N is factored the parameters that control the stages are generated.
  For each stage we have:
    sofar   : the product of the radices so far.
    actual  : the radix handled in this stage.
    remain  : the product of the remaining radices.

	for example : when the N= 3*3*5*5= 225
	then    actual,  sofar(the number of groups),              remain (No. of members in each group)
	          3        1 (only one group in the first stage)    3*5*5  (but 75 butterfly-units in each group with radix=3)   
			  3        3 (3 groups in the second stage)         5*5  (but 25 butterfly-units in each group with radix=3)
			  5        3*3 (9 groups in the third stage)        5   (but 5 butterfly-units in each group with radix=5)
			  5        3*3*5 (45  groups in the fouth stage)    1  (but only one butterfly-unit in each group with radix=5)

    Table_twiddleRe : real part of the twiddle factors
    Table_twiddleIm : image part of the twiddle factors
 ****************************************************************************/

/* this table also input from outside before caculate
 */
void transTableSetup(int sofar[], int actual[], int remain[],
                     int *nFact,
                     int *nPoints)
{
    int i;

    factorize(*nPoints, nFact, actual);
    if (actual[1] > maxPrimeFactor)
    {
        printf("\nPrime factor of FFT length too large : %6d",actual[1]);
        printf("\nPlease modify the value of maxPrimeFactor in mixfft.c");
        exit(1);
    }
    remain[0]=*nPoints;
    sofar[1]=1;
    remain[1]=*nPoints / actual[1];
    for (i=2; i<=*nFact; i++)
    {
        sofar[i]=sofar[i-1]*actual[i-1];
        remain[i]=remain[i-1] / actual[i];
    }
 
}   /* transTableSetup */

/****************************************************************************
  The sequence y is the permuted input sequence x so that the following
  transformations can be performed in-place, and the final result is the
  normal order. This process is sensitive to all the factors.
  Example:
  x[](normal order) -> permute(x[]) (arbitrary order)-> fft() -> y[](normal order)
 ****************************************************************************/

void permute(int nPoint, int nFact,
             int fact[], int remain[],
             double xRe[], double xIm[],
             double yRe[], double yIm[])

{
    int i,j,k;
    int count[maxFactorCount]; 


    for (i=1; i<=nFact; i++) count[i]=0;
    k=0;

    for (i=0; i<=nPoint-2; i++)
    {
        yRe[i] = xRe[k];
        yIm[i] = xIm[k];
        j=1;
        k=k+remain[1];

        count[1] = count[1]+1;
        while (count[j] >= fact[j])
        {
            count[j]=0;
            k=k-remain[j-1]+remain[j+1];
            j=j+1;
            count[j]=count[j]+1;
        }
    }
    yRe[nPoint-1]=xRe[nPoint-1];
    yIm[nPoint-1]=xIm[nPoint-1];
}   /* permute */


/****************************************************************************
  Twiddle factor multiplications and transformations are performed on a
  group of data. The number of multiplications with 1 are reduced by skipping
  the twiddle multiplication of the first stage and of the first group of the
  following stages.
 ***************************************************************************/
void scin_table (int sofar_mul_Radix)
{
	/* 72 different probabilities*/
     switch(sofar_mul_Radix) {
         case     3 : cosw= -0.500000; break;
         case    12 : cosw= 0.866025; break;
         case    60 : cosw= 0.994522; break;
         case   300 : cosw= 0.999781; break;
         case  1500 : cosw= 0.999991; break;
         case     9 : cosw= 0.766044; break;
         case    36 : cosw= 0.984808; break;
         case   180 : cosw= 0.999391; break;
         case   900 : cosw= 0.999976; break;
         case    27 : cosw= 0.973045; break;
         case   108 : cosw= 0.998308; break;
         case   540 : cosw= 0.999932; break;
         case  2700 : cosw= 0.999997; break;
         case    81 : cosw= 0.996993; break;
         case   324 : cosw= 0.999812; break;
         case  1620 : cosw= 0.999992; break;
         case   243 : cosw= 0.999666; break;
         case   972 : cosw= 0.999979; break;
         case   729 : cosw= 0.999963; break;
         case  2916 : cosw= 0.999998; break;
         case     2 : cosw= -1.000000; break;
         case     6 : cosw= 0.500000; break;
         case    24 : cosw= 0.965926; break;
         case   120 : cosw= 0.998630; break;
         case   600 : cosw= 0.999945; break;
         case  3000 : cosw= 0.999998; break;
         case    18 : cosw= 0.939693; break;
         case    72 : cosw= 0.996195; break;
         case   360 : cosw= 0.999848; break;
         case  1800 : cosw= 0.999994; break;
         case    54 : cosw= 0.993238; break;
         case   216 : cosw= 0.999577; break;
         case  1080 : cosw= 0.999983; break;
         case   162 : cosw= 0.999248; break;
         case   648 : cosw= 0.999953; break;
         case   486 : cosw= 0.999916; break;
         case  1944 : cosw= 0.999995; break;
         case    48 : cosw= 0.991445; break;
         case   240 : cosw= 0.999657; break;
         case  1200 : cosw= 0.999986; break;
         case   144 : cosw= 0.999048; break;
         case   720 : cosw= 0.999962; break;
         case   432 : cosw= 0.999894; break;
         case  2160 : cosw= 0.999996; break;
         case  1296 : cosw= 0.999988; break;
         case    96 : cosw= 0.997859; break;
         case   480 : cosw= 0.999914; break;
         case  2400 : cosw= 0.999997; break;
         case   288 : cosw= 0.999762; break;
         case  1440 : cosw= 0.999990; break;
         case   864 : cosw= 0.999974; break;
         case  2592 : cosw= 0.999997; break;
         case   192 : cosw= 0.999465; break;
         case   960 : cosw= 0.999979; break;
         case   576 : cosw= 0.999941; break;
         case  2880 : cosw= 0.999998; break;
         case  1728 : cosw= 0.999993; break;
         case   384 : cosw= 0.999866; break;
         case  1920 : cosw= 0.999995; break;
         case  1152 : cosw= 0.999985; break;
         case   768 : cosw= 0.999967; break;
         case  2304 : cosw= 0.999996; break;
         case  1536 : cosw= 0.999992; break;
         case  3072 : cosw= 0.999998; break;
         case     8 : cosw= 0.707107; break;
         case    32 : cosw= 0.980785; break;
         case   128 : cosw= 0.998795; break;
         case     4 : cosw= 0.000000; break;
         case    16 : cosw= 0.923880; break;
         case    64 : cosw= 0.995185; break;
         case   256 : cosw= 0.999699; break;
         case   512 : cosw= 0.999925; break;
         case  1024 : cosw= 0.999981; break;	   
         default : cosw= 0; break;
	 }
	 /* 72 different probabilities*/
     switch(sofar_mul_Radix) {
         case     3 : sinw= -0.866025; break;
         case    12 : sinw= -0.500000; break;
         case    60 : sinw= -0.104528; break;
         case   300 : sinw= -0.020942; break;
         case  1500 : sinw= -0.004189; break;
         case     9 : sinw= -0.642788; break;
         case    36 : sinw= -0.173648; break;
         case   180 : sinw= -0.034899; break;
         case   900 : sinw= -0.006981; break;
         case    27 : sinw= -0.230616; break;
         case   108 : sinw= -0.058145; break;
         case   540 : sinw= -0.011635; break;
         case  2700 : sinw= -0.002327; break;
         case    81 : sinw= -0.077492; break;
         case   324 : sinw= -0.019391; break;
         case  1620 : sinw= -0.003878; break;
         case   243 : sinw= -0.025854; break;
         case   972 : sinw= -0.006464; break;
         case   729 : sinw= -0.008619; break;
         case  2916 : sinw= -0.002155; break;
         case     2 : sinw= -0.000000; break;
         case     6 : sinw= -0.866025; break;
         case    24 : sinw= -0.258819; break;
         case   120 : sinw= -0.052336; break;
         case   600 : sinw= -0.010472; break;
         case  3000 : sinw= -0.002094; break;
         case    18 : sinw= -0.342020; break;
         case    72 : sinw= -0.087156; break;
         case   360 : sinw= -0.017452; break;
         case  1800 : sinw= -0.003491; break;
         case    54 : sinw= -0.116093; break;
         case   216 : sinw= -0.029085; break;
         case  1080 : sinw= -0.005818; break;
         case   162 : sinw= -0.038775; break;
         case   648 : sinw= -0.009696; break;
         case   486 : sinw= -0.012928; break;
         case  1944 : sinw= -0.003232; break;
         case    48 : sinw= -0.130526; break;
         case   240 : sinw= -0.026177; break;
         case  1200 : sinw= -0.005236; break;
         case   144 : sinw= -0.043619; break;
         case   720 : sinw= -0.008727; break;
         case   432 : sinw= -0.014544; break;
         case  2160 : sinw= -0.002909; break;
         case  1296 : sinw= -0.004848; break;
         case    96 : sinw= -0.065403; break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91在线精品一区二区| 欧美tk—视频vk| 欧美一级片在线| 亚洲欧美自拍偷拍| 麻豆精品国产传媒mv男同| 91视视频在线观看入口直接观看www | 欧美自拍偷拍一区| 久久久久久免费| 老汉av免费一区二区三区| 欧美三级电影精品| 依依成人综合视频| 91视频.com| 国产精品日日摸夜夜摸av| 国产一区二区在线视频| 日韩一区二区三区免费看 | 91老师国产黑色丝袜在线| 26uuu精品一区二区三区四区在线| 亚洲国产wwwccc36天堂| 色哟哟国产精品| 亚洲人123区| 9色porny自拍视频一区二区| 精品国产伦一区二区三区观看体验| 亚洲国产人成综合网站| 色拍拍在线精品视频8848| 亚洲少妇30p| 91亚洲资源网| 亚洲美女免费在线| 欧美中文字幕不卡| 亚洲一级在线观看| 欧美日韩一区二区欧美激情| 亚洲午夜久久久久中文字幕久| 99re这里只有精品6| 亚洲日本免费电影| 色丁香久综合在线久综合在线观看| 国产精品成人免费在线| 91免费看片在线观看| 一区二区三区免费观看| 精品视频一区二区三区免费| 天堂va蜜桃一区二区三区漫画版| 91精品欧美综合在线观看最新| 三级久久三级久久| 欧美精品一区二区三区蜜臀| 国产一区二区电影| 18欧美亚洲精品| 欧美在线观看视频一区二区三区| 亚洲va韩国va欧美va| 91精品免费观看| 黄色资源网久久资源365| 久久久91精品国产一区二区精品| 成人免费黄色在线| 亚洲一卡二卡三卡四卡五卡| 欧美一区二区三区日韩| 国产很黄免费观看久久| 亚洲欧美日韩国产综合在线| 欧美日韩情趣电影| 国产自产视频一区二区三区| 日韩美女精品在线| 911精品国产一区二区在线| 麻豆精品在线视频| 国产精品第一页第二页第三页| 91免费看视频| 久国产精品韩国三级视频| 国产精品国产三级国产aⅴ入口| 欧美日韩一区二区三区高清 | 91在线播放网址| 三级成人在线视频| 中文字幕在线免费不卡| 欧美人成免费网站| 懂色av一区二区在线播放| 亚洲高清一区二区三区| 久久久久久久精| 欧美日韩一区二区三区不卡| 国产一区二区精品久久99| 亚洲综合久久av| 国产视频视频一区| 欧美裸体一区二区三区| 国产69精品久久99不卡| 天天射综合影视| 中文字幕中文字幕中文字幕亚洲无线| 欧美精品欧美精品系列| 成人在线视频首页| 欧美aaaaaa午夜精品| 亚洲精品日产精品乱码不卡| 久久综合九色综合久久久精品综合| 欧美亚洲国产一区二区三区| 国产suv精品一区二区6| 久久精品国产99久久6| 亚洲午夜精品一区二区三区他趣| 精品久久久久香蕉网| 欧美精品乱人伦久久久久久| 一本久道中文字幕精品亚洲嫩| 国产一区二区三区国产| 免费一区二区视频| 婷婷综合另类小说色区| 亚洲欧美激情视频在线观看一区二区三区 | 丁香婷婷综合色啪| 午夜一区二区三区视频| 中文字幕在线播放不卡一区| xnxx国产精品| 日韩一区二区三区精品视频| 欧美在线影院一区二区| 92国产精品观看| 成人自拍视频在线| 成人网页在线观看| 国产成人在线视频播放| 国产一区二区三区av电影| 免费欧美日韩国产三级电影| 亚洲成人www| 午夜国产精品一区| 五月天激情小说综合| 亚洲aaa精品| 午夜久久电影网| 伊人色综合久久天天人手人婷| 亚洲色图清纯唯美| 亚洲精品欧美激情| 国产成人精品1024| 99视频精品在线| 久久99久久久欧美国产| 免费成人在线影院| 久久国产综合精品| 国产资源在线一区| 国产精品一区二区在线播放 | 成人精品视频.| 国产成人午夜精品5599| 国产a级毛片一区| aaa亚洲精品一二三区| 在线观看91精品国产入口| 欧美日韩电影一区| 日韩精品一区二区三区在线| 精品国产不卡一区二区三区| 久久久久久久电影| 亚洲男人的天堂一区二区| 亚洲综合免费观看高清完整版| 视频一区中文字幕国产| 国产在线精品一区二区夜色| 国产高清久久久久| 色婷婷综合激情| 综合在线观看色| 亚洲色欲色欲www| 亚洲va欧美va国产va天堂影院| 蜜臀久久99精品久久久久宅男| 国产在线不卡一区| 91啦中文在线观看| 91精品国产一区二区人妖| 国产人成亚洲第一网站在线播放| 亚洲婷婷综合久久一本伊一区| 视频一区二区三区中文字幕| 狠狠狠色丁香婷婷综合激情 | 国产成人精品亚洲日本在线桃色| 99视频在线观看一区三区| 69堂成人精品免费视频| 欧美激情在线看| 婷婷丁香久久五月婷婷| 国产99久久久精品| 欧美精品三级在线观看| 欧美激情一区二区三区在线| 午夜私人影院久久久久| 国产乱理伦片在线观看夜一区 | 不卡的av在线播放| 这里只有精品99re| 亚洲四区在线观看| 九九精品视频在线看| 91久久精品网| 欧美狂野另类xxxxoooo| 欧美大胆人体bbbb| 亚洲综合成人在线| 丁香婷婷综合网| www久久久久| 日韩激情一区二区| 在线国产亚洲欧美| 亚洲国产成人私人影院tom| 蜜桃av一区二区在线观看| 色婷婷综合久久久久中文一区二区| xf在线a精品一区二区视频网站| 午夜精品在线视频一区| 色婷婷综合久久久中文一区二区| 欧美国产1区2区| 久久国内精品视频| 欧美一区永久视频免费观看| 一区二区三区电影在线播| 成人免费观看男女羞羞视频| 久久这里只有精品视频网| 日本欧美久久久久免费播放网| 在线观看一区不卡| 亚洲欧美日韩国产综合| 91丝袜高跟美女视频| 国产片一区二区三区| 国产综合成人久久大片91| 日韩欧美第一区| 久久国产精品免费| 日韩网站在线看片你懂的| 婷婷综合五月天| 欧美日韩久久一区| 一区二区三区在线影院| 97se亚洲国产综合自在线| 国产精品久久久久aaaa| 一二三区精品视频| 国产日韩欧美电影| 久久成人免费网站| 欧美草草影院在线视频|