c30ffftp.c

来自「GENERIC PROGRAM FOR A FAST LOOPED-CODE R」· C语言 代码 · 共 71 行

C
71
字号
/*************************************************************************

  C30SERP.C : Partitioned serial real FFT implementation

  Requirements: 64<= Q <= 2048 (minimum: because of real FFT limitations
                                maximum: because of on-chip RAM limitations)
  Version : 1.0

**************************************************************************
 VERSION        DATE            COMMENT
   1.0          4/93            Adaptation from R.M. Piedra program for
                                complex FFT.
                                Daniel Mazzocco  (TI Nice)
**************************************************************************/
#include "values.h"
#include "math.h"
#define    N          (2048*2)             /* FFT size (n)               */
#define    P           2                   /* P = N/Q                    */
#define    D           1                   /* LOG2 P                     */
#define    Q           2048                /* FFT size executed in RAM   */

volatile float *sine = (volatile float *)0x800000;
volatile float *ram = (volatile float *)0x809800;
volatile float *FFTin = (volatile float *)0xf00000;
volatile float *source= (volatile float *)0xf00000;
float       theta ;

unsigned int i,j,k,
	     delta	= P,
	     ngroup	= 2,
	     incr_group = N,
             n          = N,
             n2         = N/2,
	     p2 	= 2*P,
	     Wkpointer	= 0,
	     q		= Q,
	     q2 	= Q/2;

/*************************************************************************/
main()
{
asm(" or 1800h,st");

theta = 2*PI/n;
for (i=0;i<n2;i++)   /* fill sin table in memory */
   sine[i]=sin(i*theta);



start:
/**********************************
  P size-q FFT's                  *
**********************************/

for (j=0;j<P;j++,FFTin +=q) {
    rmove(FFTin,ram,q);         /* q elements are transfered to
					     on-chip RAM for execution	  */
    ffft_rl(q,11,ram,sine,D);
                     /* q-point FFT                  */
    rmove(ram,FFTin,q);         /* FFT results are transfered back
					     to off-chip memory 	  */
    }
fend(N,source,sine,D);           /* perform last D stages */

for (i=0;i<n;i++)        /* zero small values for easier check */
    { if (source[i] < 0.001)
     source[i]=0.0;}
} /*main*/


⌨️ 快捷键说明

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