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

📄 fft.c

📁 2407C文件夹包括第8~16章的C语言代码及使用说明。有如下子文件夹: &#61548 第8章数字输入输出8路开关量输入输出(8IOIN+8IOOUT); &#61548 第8章数字输入输出
💻 C
字号:
//TMS320LF2407上实现快速傅里叶变换(FFT)

//FFT的程序代码
//(1)主程序
#include   		"f2407_c.h"
#include   		"math.h"
#define     	N	    32 		//    FFT变换的点数  
extern   		void   fft(void);       
extern   		void   resave(void);  
interrupt  		void  phantom(void);  
void    		sysinit(void);
extern  		int input[2*N];   	//    输入数据的存储数组 
int    		indati[N]={0};         
//    -----------------------------------------------------------------------------------
//    128 点 FFT所需的数据
//    采样函数:x=1/4+1/4cos(3*2*pi*f*t)+1/4cos(6*2*pi*f*t)+1/4cos(9*2*pi*f*t);
//    f=50Hz
//    -----------------------------------------------------------------------------------
/*    int indatr[N]={16394,15871,14425,12398,10276    ,8584   ,7767   ,8088    ,9557  , 
                     11913   , 14660    ,17155 ,   18724  ,  18802  ,  17044 ,   13411   , 8197 ,  1995 ,
                     -4389   ,-10071,   -14231  , -16255   ,-15844,   -13057   ,-8309 ,  -2296,   4125  ,
                     10079,    14819,    17843  ,  18969,    18342 ,   16394   ,13739 ,   11055   , 8950  
                     7848,   7921  ,  9070 ,   10961,    13110  ,  14992 ,   16159 ,   16334   ,547,
                     13792   , 11675  ,  9640 ,   8197  ,  7741,    8457,    10264  ,  12815  ,  15554 ,   
                     17812   ,18939  ,  18429  ,  16034  ,  11825 ,   6203  , -156,   -6405,   -11662  ,
                     -15165  , -16394 ,  -15165   ,-11662  , -6405  , -156  ,  6203 ,   11825  ,  16034,
                     18429,    18939  ,  17812  ,  15554 ,   12815   ,10264  ,  8457  ,  7741  , 8197,
                     9640 ,   11675,    13792,    15479 ,   16334 ,   16159,    14992  ,13110  ,  10961  ,
                     9070   ,7921 ,   7848  ,  8950 ,   11055 ,   13739  ,  16393  ,  18342 ,   18969   ,
                     17843  ,  14819  ,  10079   ,4125 ,  -2296 ,  -8309 ,  -13057  , -15844  , -16255  ,
                     -14231 ,  -10071   ,-4389  ,  1995 ,   8197   , 13411 ,   17044 ,   18802 ,   18724  ,
                     17155  ,  14660  ,  11913 ,   9557   ,8088  ,  7767,    8584   , 10276 ,   12398 ,
                     14425  ,  15871             ,
                     };*/
//   -----------------------------------------------------------------------------------
//   32点FFT所需的数据 
//   采样函数:x=1/4+1/4cos(3*2*pi*f*t)+1/4cos(6*2*pi*f*t)+1/4cos(9*2*pi*f*t);
//   f=50Hz ;pi=π;
//   -----------------------------------------------------------------------------------
/*  int indatr[N]={16384, 10270,9551 ,18713 , 8192 ,-14222,-8304,14810,16384,7843,13102 ,15469,8192,12807,
                   18418,-0156,-16384,-0156,-16384, -0156,18418,12807,8192,15469,13102,7843,16383,14810,
                   -8304,-14222,8192,18713,9551,10270,
};*/

int indatr[N]={0x07ff, 0x07ff,0x07ff,0x07ff,0x07ff,0x07ff,0x07ff,0x07ff,
               0x07ff,0x07ff,0x07ff,0x07ff,0x07ff,0x07ff,0x07ff,0x07ff,0x0F801,
               0x0F801,0x0F801,0x0F801,0x0F801,0x0F801,0x0F801,0x0F801,
               0x0F801,0x0F801,0x0F801,0x0F801,0x0F801,0x0F801,0x0F801,
               0x0F801,
};	

//   -----------------------------------------------------------------------------------                              

//    64点 FFT所需的数据
//   采样函数:x=1/4+1/4cos(3*2*pi*f*t)+1/4cos(6*2*pi*f*t)+1/4cos(9*2*pi*f*t);
//   f=50Hz
//   -----------------------------------------------------------------------------------
/*    int indatr[N]={16384 ,  14416,   10270,   7762,   9551 ,  14651 ,  18713,   17034,   8192 , -4387  ,-14222,-15834  ,-8304   ,4123  , 14810   ,18957 ,  16384  , 1
//   ---------------------------------------------------------------
//    128 点 FFT的sin 和 cos值存储表
//   ---------------------------------------------------------------
/*    const int sintab[N]={0x07fff,0x0,0x07fd9,0x0f9b9,0x07f62,0x0f375,0x07e9d,0x0ed38,
		0x07d8a,0x0e708,0x07c2a,0x0e0e7,0x07a7d,0x0dad8,0x07885,0x0d4e1,
		0x07642,0x0cf05,0x073b6,0x0c946,0x070e3,0x0c3aa,0x06dca,0x0be32,
		0x06A6C,0x0B8E4,0x066CE,0x0B3C1,0x062F1,0x0AECD,0x05ED6,0x0AA0C,
		0x05A81,0x0A57F,0x055F4,0x0A12A,0x05133,0x09D0F,0x04C3F,0x09932,
		0x0471C,0x09594,0x041CD,0x09237,0x03C56,0x08F1F,0x036B9,0x08C4B,
		0x030FB,0x089C0,0x02B1E,0x0877D,0x02527,0x08584,0x01F19,0x083D7,
		0x018F8,0x08277,0x012C7,0x08164,0x00C8B,0x0809F,0x00647,0x08029,
		0x00000,0x08001,0x0F9B9,0x08029,0x0F375,0x0809F,0x0ED39,0x08164,
		0x0E708,0x08277,0x0E0E7,0x083D7,0x0DAD9,0x08584,0x0D4E2,0x0877D,
		0x0CF05,0x089C0,0x0C947,0x08C4B,0x0C3AA,0x08F1F,0x0BE33,0x09237,
		0x0B8E4,0x09594,0x0B3C1,0x09932,0x0AECD,0x09D0F,0x0AA0C,0x0A12A,
		0x0A57F,0x0A57F,0x0A12A,0x0AA0C,0x09D0F,0x0AECD,0x09932,0x0B3C1,
		0x09594,0x0B8E4,0x09237,0x0BE33,0x08F1F,0x0C3AA,0x08C4B,0x0C947,
		0x089C0,0x0CF05,0x0877D,0x0D4E2,0x08584,0x0DAD9,0x083D7,0x0E0E7,
		0x08277,0x0E708,0x08164,0x0ED39,0x0809F,0x0F375,0x08029,0x0F9B9
};*/
//   ---------------------------------------------------------------
//   64点 FFT的sin 和 cos值存储表
//   ---------------------------------------------------------------			
/*    const int sintab[N]={	0x7FFF,0x0000,0x7F61 ,0xF375,0x7D89 ,0xE708 ,0x7A7C ,0xDAD9,0x7640,0xCF05 ,0x70E1 ,0xC3AA ,0x6A6C ,0xB8E4 ,0x62F1 ,0xAECD ,
0x5A81,0xA57F,0x5133,0x9D0F,0x471C ,0x9594, 0x3C56, 0x8F1F,
0x30FB,0x89C0 ,0x2527,0x8584 ,0x18F8 ,0x8277 ,0x0C8B ,0x809F,
0x0000 ,0x8001,0xF375,0x809F,0xE708 ,0x8277 ,0xDAD9 ,0x8584,
0xCF05 ,0x89C0 ,0xC3AA,0x8F1F,0xB8E4 ,0x9594 ,0xAECD ,0x9D0F,
0xA57F,0xA57F,0x9D0F,0xAECD,0x9594 ,0xB8E4 ,0x8F1F ,0xC3AA,
0x89C0,0xCF05,0x8584 ,0xDAD9 ,0x8277 ,0xE708 ,0x809F ,0xF375,};*/
//   ---------------------------------------------------------------
//   32 点 FFT的sin 和 cos值存储表
//   ---------------------------------------------------------------
const int sintab[N]={
			0x7FFF,0x0000,0x7D89,0xE708,0x7640,0xCF05,0x6A6C,0xB8E4,
			0x5A81,0xA57F,0x471C,0x9594,0x30FB,0x89C0,0x18F8,0x8277,
			0x0000,0x8001,0xE708,0x8277,0xCF05,0x89C0,0xB8E4,0x9594,
			0xA57F,0xA57F,0x9594,0xB8E4,0x89C0,0xCF05,0x8277,0xE708,
};
extern int table128[];
extern int nom;						//   当nom=1时,FFT 需要归一化处理
main()
{	int i;   
	double x=0,y;
	nom=1;              		 	//   需要归一化处理	
	sysinit();
	for(i=0;i<=255;i++)   input[i]=0;  	//   清除输入数据
    resave();                 		//    把原始的输入数据反序排列                  
	*PCDATDIR=(*PCDATDIR&0x0FF00)|0x01;
	fft( );                     		//    进行FFT运算  
	*PCDATDIR=*PCDATDIR&0x0FF00;
}
void  interrupt  phantom(void)
{	
return;
}		
void sysinit(void)
{	
    *SCSR1=0x81FE;
	*WDCR=0x0E8;
	*IFR=0x0FF;
	*IMR=0x0; 
	WSGR=0;
	*MCRB=0;
	*PCDATDIR=0x100;
}



void interrupt nothing()
{
   return;
}

⌨️ 快捷键说明

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