FFTr2.c
上传用户:jnrean
上传日期:2022-07-07
资源大小:23k
文件大小:2k
源码类别:

DSP编程

开发平台:

C/C++

  1. //FFTr2.c FFT using TI's optimized FFT function and real-time input
  2. #include "dsk6713_aic23.h"
  3. Uint32 fs=DSK6713_AIC23_FREQ_8KHZ; //set sampling rate
  4. #include <math.h>
  5. #define N 256      //number of FFT points 
  6. //#define SQRT_N 16 //SQRT_N >= SQRT(N) 
  7. #define RADIX 2      //radix or base  
  8. #define DELTA (2*PI)/N     //argument for sine/cosine 
  9. #define PI 3.14159265358979
  10. short i = 0;
  11. short iTwid[N/2]; //index for twiddle constants W 
  12. short iData[N]; //index for bitrev X 
  13. float Xmag[N]; //magnitude spectrum of x
  14. typedef struct Complex_tag {float re,im;}Complex;  
  15. Complex W[N/RADIX];      //array for twiddle constants
  16. Complex x[N];       //N complex data values 
  17. #pragma DATA_ALIGN(W,sizeof(Complex))   //align W on boundary 
  18. #pragma DATA_ALIGN(x,sizeof(Complex)) //align input x on boundary
  19. void main() 
  20. {
  21.  for( i = 0 ; i < N/RADIX ; i++ ) 
  22.   {
  23.    W[i].re = cos(DELTA*i); //real component of W
  24.    W[i].im = sin(DELTA*i); //neg imag component
  25.   }      //see cfftr2_dit
  26.  digitrev_index(iTwid, N/RADIX, RADIX);//produces index for bitrev() W 
  27.  bitrev(W, iTwid, N/RADIX);        //bit reverse W 
  28.  
  29.  comm_poll();      //init DSK,codec,McBSP
  30.  for(i=0; i<N; i++)
  31.   Xmag[i] = 0; //init output magnitude
  32.  while (1)  //infinite loop
  33.  {                
  34.   output_sample(32000); //negative spike for reference
  35.   for( i = 0 ; i < N ; i++ ) 
  36.    {
  37.     x[i].re = (float)((short)input_sample()); //external input
  38.     x[i].im = 0.0 ;     //zero imaginary part                  
  39.     if(i>0) output_sample((short)Xmag[i]); //output magnitude
  40.    } 
  41.   
  42.   cfftr2_dit(x, W, N ) ;      //TI floating-pt complex FFT 
  43.   digitrev_index(iData, N, RADIX); //produces index for bitrev() X 
  44.   bitrev(x, iData, N);      //freq scrambled->bit-reverse x
  45.   for (i =0; i<N; i++)
  46.     Xmag[i] = sqrt(x[i].re*x[i].re+x[i].im*x[i].im)/32; //magnitude of X
  47.  }
  48. }