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

📄 fftcx512(ryh).c

📁 这是个512点
💻 C
字号:
#include <math.h>
/*
   512 Points FFTi
   整数FFT
   By Redroof
   2004,7月18
   1.00版
*/
static const int uuTable[512]=
{
 0, 256, 128, 384, 64, 320, 192, 448, 32, 288, 160, 416, 96, 352, 224, 480, 
 16, 272, 144, 400, 80, 336, 208, 464, 48, 304, 176, 432, 112, 368, 240, 496, 
 8, 264, 136, 392, 72, 328, 200, 456, 40, 296, 168, 424, 104, 360, 232, 488, 
 24, 280, 152, 408, 88, 344, 216, 472, 56, 312, 184, 440, 120, 376, 248, 504, 
 4, 260, 132, 388, 68, 324, 196, 452, 36, 292, 164, 420, 100, 356, 228, 484, 
 20, 276, 148, 404, 84, 340, 212, 468, 52, 308, 180, 436, 116, 372, 244, 500, 
 12, 268, 140, 396, 76, 332, 204, 460, 44, 300, 172, 428, 108, 364, 236, 492, 
 28, 284, 156, 412, 92, 348, 220, 476, 60, 316, 188, 444, 124, 380, 252, 508, 
 2, 258, 130, 386, 66, 322, 194, 450, 34, 290, 162, 418, 98, 354, 226, 482, 
 18, 274, 146, 402, 82, 338, 210, 466, 50, 306, 178, 434, 114, 370, 242, 498, 
 10, 266, 138, 394, 74, 330, 202, 458, 42, 298, 170, 426, 106, 362, 234, 490, 
 26, 282, 154, 410, 90, 346, 218, 474, 58, 314, 186, 442, 122, 378, 250, 506, 
 6, 262, 134, 390, 70, 326, 198, 454, 38, 294, 166, 422, 102, 358, 230, 486, 
 22, 278, 150, 406, 86, 342, 214, 470, 54, 310, 182, 438, 118, 374, 246, 502, 
 14, 270, 142, 398, 78, 334, 206, 462, 46, 302, 174, 430, 110, 366, 238, 494, 
 30, 286, 158, 414, 94, 350, 222, 478, 62, 318, 190, 446, 126, 382, 254, 510, 
 1, 257, 129, 385, 65, 321, 193, 449, 33, 289, 161, 417, 97, 353, 225, 481, 
 17, 273, 145, 401, 81, 337, 209, 465, 49, 305, 177, 433, 113, 369, 241, 497, 
 9, 265, 137, 393, 73, 329, 201, 457, 41, 297, 169, 425, 105, 361, 233, 489, 
 25, 281, 153, 409, 89, 345, 217, 473, 57, 313, 185, 441, 121, 377, 249, 505, 
 5, 261, 133, 389, 69, 325, 197, 453, 37, 293, 165, 421, 101, 357, 229, 485, 
 21, 277, 149, 405, 85, 341, 213, 469, 53, 309, 181, 437, 117, 373, 245, 501, 
 13, 269, 141, 397, 77, 333, 205, 461, 45, 301, 173, 429, 109, 365, 237, 493, 
 29, 285, 157, 413, 93, 349, 221, 477, 61, 317, 189, 445, 125, 381, 253, 509, 
 3, 259, 131, 387, 67, 323, 195, 451, 35, 291, 163, 419, 99, 355, 227, 483, 
 19, 275, 147, 403, 83, 339, 211, 467, 51, 307, 179, 435, 115, 371, 243, 499, 
 11, 267, 139, 395, 75, 331, 203, 459, 43, 299, 171, 427, 107, 363, 235, 491, 
 27, 283, 155, 411, 91, 347, 219, 475, 59, 315, 187, 443, 123, 379, 251, 507, 
 7, 263, 135, 391, 71, 327, 199, 455, 39, 295, 167, 423, 103, 359, 231, 487, 
 23, 279, 151, 407, 87, 343, 215, 471, 55, 311, 183, 439, 119, 375, 247, 503, 
 15, 271, 143, 399, 79, 335, 207, 463, 47, 303, 175, 431, 111, 367, 239, 495, 
 31, 287, 159, 415, 95, 351, 223, 479, 63, 319, 191, 447, 127, 383, 255, 511
};
static const int cos_tab[512]=
{  
 4096, 4095, 4094, 4093, 4091, 4088, 4084, 4080, 4076, 4071, 4065, 4058, 4051, 4043, 4035, 4026, 
 4017, 4007, 3996, 3985, 3973, 3960, 3947, 3933, 3919, 3904, 3889, 3873, 3856, 3839, 3821, 3803, 
 3784, 3764, 3744, 3723, 3702, 3680, 3658, 3635, 3612, 3588, 3563, 3538, 3513, 3487, 3460, 3433, 
 3405, 3377, 3348, 3319, 3289, 3259, 3229, 3197, 3166, 3134, 3101, 3068, 3034, 3000, 2966, 2931, 
 2896, 2860, 2824, 2787, 2750, 2713, 2675, 2637, 2598, 2559, 2519, 2480, 2439, 2399, 2358, 2317, 
 2275, 2233, 2191, 2148, 2105, 2062, 2018, 1975, 1930, 1886, 1841, 1796, 1751, 1705, 1659, 1613, 
 1567, 1520, 1474, 1427, 1379, 1332, 1284, 1237, 1189, 1140, 1092, 1043, 995, 946, 897, 848, 
 799, 749, 700, 650, 601, 551, 501, 451, 401, 351, 301, 251, 200, 150, 100, 50, 
 0, -50, -100, -150, -200, -251, -301, -351, -401, -451, -501, -551, -601, -650, -700, -749, 
 -799, -848, -897, -946, -995, -1043, -1092, -1140, -1189, -1237, -1284, -1332, -1379, -1427, -1474, -1520, 
 -1567, -1613, -1659, -1705, -1751, -1796, -1841, -1886, -1930, -1975, -2018, -2062, -2105, -2148, -2191, -2233, 
 -2275, -2317, -2358, -2399, -2439, -2480, -2519, -2559, -2598, -2637, -2675, -2713, -2750, -2787, -2824, -2860, 
 -2896, -2931, -2966, -3000, -3034, -3068, -3101, -3134, -3166, -3197, -3229, -3259, -3289, -3319, -3348, -3377, 
 -3405, -3433, -3460, -3487, -3513, -3538, -3563, -3588, -3612, -3635, -3658, -3680, -3702, -3723, -3744, -3764, 
 -3784, -3803, -3821, -3839, -3856, -3873, -3889, -3904, -3919, -3933, -3947, -3960, -3973, -3985, -3996, -4007, 
 -4017, -4026, -4035, -4043, -4051, -4058, -4065, -4071, -4076, -4080, -4084, -4088, -4091, -4093, -4094, -4095, 
 -4096, -4095, -4094, -4093, -4091, -4088, -4084, -4080, -4076, -4071, -4065, -4058, -4051, -4043, -4035, -4026, 
 -4017, -4007, -3996, -3985, -3973, -3960, -3947, -3933, -3919, -3904, -3889, -3873, -3856, -3839, -3821, -3803, 
 -3784, -3764, -3744, -3723, -3702, -3680, -3658, -3635, -3612, -3588, -3563, -3538, -3513, -3487, -3460, -3433, 
 -3405, -3377, -3348, -3319, -3289, -3259, -3229, -3197, -3166, -3134, -3101, -3068, -3034, -3000, -2966, -2931, 
 -2896, -2860, -2824, -2787, -2750, -2713, -2675, -2637, -2598, -2559, -2519, -2480, -2439, -2399, -2358, -2317, 
 -2275, -2233, -2191, -2148, -2105, -2062, -2018, -1975, -1930, -1886, -1841, -1796, -1751, -1705, -1659, -1613, 
 -1567, -1520, -1474, -1427, -1379, -1332, -1284, -1237, -1189, -1140, -1092, -1043, -995, -946, -897, -848, 
 -799, -749, -700, -650, -601, -551, -501, -451, -401, -351, -301, -251, -200, -150, -100, -50, 
 0, 50, 100, 150, 200, 251, 301, 351, 401, 451, 501, 551, 601, 650, 700, 749, 
 799, 848, 897, 946, 995, 1043, 1092, 1140, 1189, 1237, 1284, 1332, 1379, 1427, 1474, 1520, 
 1567, 1613, 1659, 1705, 1751, 1796, 1841, 1886, 1930, 1975, 2018, 2062, 2105, 2148, 2191, 2233, 
 2275, 2317, 2358, 2399, 2439, 2480, 2519, 2559, 2598, 2637, 2675, 2713, 2750, 2787, 2824, 2860, 
 2896, 2931, 2966, 3000, 3034, 3068, 3101, 3134, 3166, 3197, 3229, 3259, 3289, 3319, 3348, 3377, 
 3405, 3433, 3460, 3487, 3513, 3538, 3563, 3588, 3612, 3635, 3658, 3680, 3702, 3723, 3744, 3764, 
 3784, 3803, 3821, 3839, 3856, 3873, 3889, 3904, 3919, 3933, 3947, 3960, 3973, 3985, 3996, 4007, 
 4017, 4026, 4035, 4043, 4051, 4058, 4065, 4071, 4076, 4080, 4084, 4088, 4091, 4093, 4094, 4095 


};
static const int sin_tab[512]=
{
0, 50, 100, 150, 200, 251, 301, 351, 401, 451, 501, 551, 601, 650, 700, 749, 
 799, 848, 897, 946, 995, 1043, 1092, 1140, 1189, 1237, 1284, 1332, 1379, 1427, 1474, 1520, 
 1567, 1613, 1659, 1705, 1751, 1796, 1841, 1886, 1930, 1975, 2018, 2062, 2105, 2148, 2191, 2233, 
 2275, 2317, 2358, 2399, 2439, 2480, 2519, 2559, 2598, 2637, 2675, 2713, 2750, 2787, 2824, 2860, 
 2896, 2931, 2966, 3000, 3034, 3068, 3101, 3134, 3166, 3197, 3229, 3259, 3289, 3319, 3348, 3377, 
 3405, 3433, 3460, 3487, 3513, 3538, 3563, 3588, 3612, 3635, 3658, 3680, 3702, 3723, 3744, 3764, 
 3784, 3803, 3821, 3839, 3856, 3873, 3889, 3904, 3919, 3933, 3947, 3960, 3973, 3985, 3996, 4007, 
 4017, 4026, 4035, 4043, 4051, 4058, 4065, 4071, 4076, 4080, 4084, 4088, 4091, 4093, 4094, 4095, 
 4096, 4095, 4094, 4093, 4091, 4088, 4084, 4080, 4076, 4071, 4065, 4058, 4051, 4043, 4035, 4026, 
 4017, 4007, 3996, 3985, 3973, 3960, 3947, 3933, 3919, 3904, 3889, 3873, 3856, 3839, 3821, 3803, 
 3784, 3764, 3744, 3723, 3702, 3680, 3658, 3635, 3612, 3588, 3563, 3538, 3513, 3487, 3460, 3433, 
 3405, 3377, 3348, 3319, 3289, 3259, 3229, 3197, 3166, 3134, 3101, 3068, 3034, 3000, 2966, 2931, 
 2896, 2860, 2824, 2787, 2750, 2713, 2675, 2637, 2598, 2559, 2519, 2480, 2439, 2399, 2358, 2317, 
 2275, 2233, 2191, 2148, 2105, 2062, 2018, 1975, 1930, 1886, 1841, 1796, 1751, 1705, 1659, 1613, 
 1567, 1520, 1474, 1427, 1379, 1332, 1284, 1237, 1189, 1140, 1092, 1043, 995, 946, 897, 848, 
 799, 749, 700, 650, 601, 551, 501, 451, 401, 351, 301, 251, 200, 150, 100, 50, 
 0, -50, -100, -150, -200, -251, -301, -351, -401, -451, -501, -551, -601, -650, -700, -749, 
 -799, -848, -897, -946, -995, -1043, -1092, -1140, -1189, -1237, -1284, -1332, -1379, -1427, -1474, -1520, 
 -1567, -1613, -1659, -1705, -1751, -1796, -1841, -1886, -1930, -1975, -2018, -2062, -2105, -2148, -2191, -2233, 
 -2275, -2317, -2358, -2399, -2439, -2480, -2519, -2559, -2598, -2637, -2675, -2713, -2750, -2787, -2824, -2860, 
 -2896, -2931, -2966, -3000, -3034, -3068, -3101, -3134, -3166, -3197, -3229, -3259, -3289, -3319, -3348, -3377, 
 -3405, -3433, -3460, -3487, -3513, -3538, -3563, -3588, -3612, -3635, -3658, -3680, -3702, -3723, -3744, -3764, 
 -3784, -3803, -3821, -3839, -3856, -3873, -3889, -3904, -3919, -3933, -3947, -3960, -3973, -3985, -3996, -4007, 
 -4017, -4026, -4035, -4043, -4051, -4058, -4065, -4071, -4076, -4080, -4084, -4088, -4091, -4093, -4094, -4095, 
 -4096, -4095, -4094, -4093, -4091, -4088, -4084, -4080, -4076, -4071, -4065, -4058, -4051, -4043, -4035, -4026, 
 -4017, -4007, -3996, -3985, -3973, -3960, -3947, -3933, -3919, -3904, -3889, -3873, -3856, -3839, -3821, -3803, 
 -3784, -3764, -3744, -3723, -3702, -3680, -3658, -3635, -3612, -3588, -3563, -3538, -3513, -3487, -3460, -3433, 
 -3405, -3377, -3348, -3319, -3289, -3259, -3229, -3197, -3166, -3134, -3101, -3068, -3034, -3000, -2966, -2931, 
 -2896, -2860, -2824, -2787, -2750, -2713, -2675, -2637, -2598, -2559, -2519, -2480, -2439, -2399, -2358, -2317, 
 -2275, -2233, -2191, -2148, -2105, -2062, -2018, -1975, -1930, -1886, -1841, -1796, -1751, -1705, -1659, -1613, 
 -1567, -1520, -1474, -1427, -1379, -1332, -1284, -1237, -1189, -1140, -1092, -1043, -995, -946, -897, -848, 
 -799, -749, -700, -650, -601, -551, -501, -451, -401, -351, -301, -251, -200, -150, -100, -50

};

main(){
int dat[512]={0};
int aa[128]={10};
fft(cos_tab[512],dat[512],aa[128]);
}
fft(int dataR[512],int dataI[512],int freq[128])
{
/*    //dataR,dataI数据的实部和虚部 ,freq:最终的结果,频谱    */
    int x0,x1,x2,x3,x4,x5,x6;
    int L,j,k,b,p;
    int i,xx;
    int TR,TI,temp;
    float fx1,fx2;
/*//--------------------------------------------   */
    for(i=0;i<512;i++)
    {   
        dataI[i]=dataR[uuTable[i]]>>2;
    }
    for(i=0;i<512;i++)
    { 
        dataR[i]=dataI[i]; 
        dataI[i]=0; 
    }
 /*   //上面是码位倒读
    //下面是FFT          */
    for(L=1;L<=9;L++) 
    { 
        /* for(1) */
        b=1; i=L-1;
        while(i>0) 
        {
            b=b*2; 
            i--;
        } /* b= 2^(L-1) */
        for(j=0;j<=b-1;j++) /* for (2) */
        { 
            p=1;
            i=9-L;
            while(i>0) /* p=pow(2,7-L)*j; */
            {
                p=p*2; 
                i--;
            }
            p=p*j;
            for(k=j;k<512;k=k+2*b) /* for (3) */
            { 
                TR=dataR[k]; 
                TI=dataI[k]; 
                temp=dataR[k+b];    
                dataR[k]=dataR[k]+(((long int)dataR[k+b]*(long int)cos_tab[p])>>12)+(((long int)dataI[k+b]*(long int)sin_tab[p])>>12);
                dataI[k]=dataI[k]-((long int)(dataR[k+b]*(long int)sin_tab[p])>>12)+(((long int)dataI[k+b]*(long int)cos_tab[p])>>12);
                dataR[k+b]=TR-(((long int)dataR[k+b]*(long int)cos_tab[p])>>12)-(((long int)dataI[k+b]*(long int)sin_tab[p])>>12);
                dataI[k+b]=TI+(((long int)temp*(long int)sin_tab[p])>>12)-(((long int)dataI[k+b]*(long int)cos_tab[p])>>12);
            } /* END for (3) */
            k++;
            k--;
        } /* END for (2) */
    } /* END for (1) */
    for(i=0;i<128;i++)
    { /* 对64次以下的谐波进行分析 */
        fx1=(long int)((float)(dataR[i]>>4)*(float)(dataR[i]>>4)+(float)(dataI[i]>>4)*(float)(dataI[i]>>4));
        freq[i]=(int)sqrt(fx1);
        printf("%d, ",freq[i]);
  /*  //  freq[i]=freq[i]>>2;  */
    }
    freq[0]=freq[0]>>2;
    getch();
}; /* END FFT */ 

⌨️ 快捷键说明

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