#include #include #include #include #include "uart.h" #include // UART file descriptor // putchar and getchar are in uart.c FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW); //I like these definitions #define begin { #define end } #define int2fix(a) (((int)(a))<<8) #define float2fix(a) ((int)((a)*256.0)) #define fix2float(a) ((float)(a)/256.0) #define N_WAVE 16 /* size of FFT */ #define LOG2_N_WAVE 4 /* log2(N_WAVE) */ int Sinewave[N_WAVE]; // a table of sines for the FFT //======================================================== void FFTfix(int fr[], int fi[], int m) //Adapted from code by: //Tom Roberts 11/8/89 and Malcolm Slaney 12/15/94 malcolm@interval.com //fr[n],fi[n] are real,imaginary arrays, INPUT AND RESULT. //size of data = 2**m // This routine does foward transform only begin int mr,nn,i,j,L,k,istep, n; int qr,qi,tr,ti,wr,wi; mr = 0; n = 1<>= 1; while(mr+L > nn); mr = (mr & (L-1)) + L; if(mr <= m) continue; tr = fr[m]; fr[m] = fr[mr]; fr[mr] = tr; //ti = fi[m]; //for real inputs, don't need this //fi[m] = fi[mr]; //fi[mr] = ti; end L = 1; k = LOG2_N_WAVE-1; while(L < n) begin istep = L << 1; for(m=0; m>= 1; wi >>= 1; for(i=m; i> 1; qi = fi[i] >> 1; fr[j] = qr - tr; fi[j] = qi - ti; fr[i] = qr + tr; fi[i] = qi + ti; end end --k; L = istep; end end //======================================================== unsigned char i; int fr[N_WAVE], fi[N_WAVE]; // sin[N_WAVE], cos[N_WAVE]; int main(void) begin //init the UART -- uart_init() is in uart.c uart_init(); stdout = stdin = stderr = &uart_str; fprintf(stdout,"Starting...\n\r"); // one cycle sine table // required for FFT for (i=0; i