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

📄 main.c

📁 本源代码是在这款TMS320LF2407的DSP上的FFT算法程序
💻 C
字号:
#include "LF2407regs.h"
#include "math.h"
#define	N	32                  //FFT变换的点数  
extern void fft(void);
extern void resave(void);
void interrupt nothing(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,  5479, 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, 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, 11049,  7843,  9064,
 13102, 16149, 15469, 11668,  8192,  8452, 12807, 17801, 18418, 11818,
 -0156,-11655,-16384,-11655, -0156, 11818, 18418, 17801, 12807,  8452,
  8192, 11668, 15469, 16149, 13102,  9064,  7843, 11049, 16383, 18957,
 14810,  4123, -8304,-15834,-14222, -4387,  8192, 17034, 18713, 14651,
  9551,  7762, 10270, 14416,
};*/
//   ---------------------------------------------------------------
//    128 点 FFT的sin 和 cos值存储表
//   ---------------------------------------------------------------
/*const int sintab[N]=
{
    	0x07fff,0x00000,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 nothing(void)
{        
    return;
}                

void sysinit(void)
{        
    *SCSR1=0x81FE;
    *WDCR=0x0E8;
    *IFR=0x0FF;
    *IMR=0x0;
    WSGR=0;
    *MCRB=0;
    *PCDATDIR=0x100;
}

⌨️ 快捷键说明

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