经过多天的调试,终于调通了,为了方便大家少走弯路,带来痛苦,提高效率,下面将我的感受和源程序
写出来,供大家学习!!希望大家共同交流!这个我已经运行了,通过了,大家做的时候先用 matlab 验
证一下 sin 的频率!然后看计算结果对不!
2005.04.7 号上午八点 40 程序纪录,这个程序运算完全正确,和前一个程序不同
之处在 sin 值得大小,由于 2812 时定点运算,sin 值得大小不能太小!否则计算
结果为零!2812 的 fft 的错误在于 fft.init1(),fft.init2()这两个函数没有这函数库里
面定义,而是该用 fft.init(&fft),而且由于是定点运算,输入的 sin 值不能太小,要
不然计算结果为零!
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
#include "fft.h"
#include
#define BUF_SIZE 128
#pragma DATA_SECTION(ipcb, "FFTipcb");
#pragma DATA_SECTION(mag, "FFTmag");
// Prototype statements for functions found within this file.
// Global variables used in this example:
Uint16 LoopCount;
Uint16 ConversionCount;
Uint16 fftflag=0;//FFT 转换启动标志:0 不启动;1:启动
Uint16 i;
long Voltage1[BUF_SIZE];
long Voltage2[BUF_SIZE];
long ipcb[BUF_SIZE];
RFFT32 fft=RFFT32_128P_DEFAULTS;
//CFFT32 fft=CFFT32_128P_DEFAULTS;
long mag[BUF_SIZE/2+1];
const long win[BUF_SIZE/2]=HANNING128;
int x1;
long k=0;
double j=0.12345;
main()
{
Uint16 i;
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP281x_SysCtrl.c file.
InitSysCtrl();
// For this example, set HSPCLK to SYSCLKOUT / 6 (25Mhz assuming 150Mhz SYSCLKOUT)
EALLOW;
SysCtrlRegs.HISPCP.all = 0x3; // HSPCLK = SYSCLKOUT/6
EDIS;