/* Sin/Cos function generated automatically by gen_sincos_table.pl */ #include "xparameters.h" #include "stdio.h" short sintab[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}; short costab[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}; short GetSin(index) int index; { index = 0x01FF & index; return sintab[index]; } short GetCos(index) int index; { index = 0x01FF & index; return costab[index]; } int main (void) { int i, j, num_pts, y_data[512]; int real[256], imag[256]; /* Read the stream of 8 bit integers from the serial port from LABVIEW. */ scanf("%d", &num_pts); for ( i = 0; i < num_pts; i++ ) scanf("%d", &y_data[i]); /* Compute the discrete fourier transform -- see lab description for details */ /* number of freqs 1/2 num time domain pts */ for ( j = 0; j < num_pts/2; j++ ) { real[j] = 0; imag[j] = 0; for ( i = 0; i < num_pts; i++ ) { real[j] += y_data[i]*GetCos(i*j); imag[j] += y_data[i]*GetSin(i*j); } } /* Write the real and imag parts back to labview for conversion to floating point * and then to mag and phase */ printf("%d\n", num_pts); for ( i = 0; i < num_pts/2; i++ ) printf("%d\n", real[i]); for ( i = 0; i < num_pts/2; i++ ) printf("%d\n", imag[i]); return(0); }