使用dsplib的cfft和cbrev函数进行512个点的fft变换,把采样的数据放入偶地址实部信号,奇地址虚部置零,进行调用函数。调用函数前看到ad模块和复数的信号图形都是正确的,进入cbrev的信号也是没问题的,但是从cbrev出来一直到fft做完都是有问题的,程序查了半天不知道错哪儿?求指教,谢谢(第一个采样信号,第二个进入cbrev的频谱,第三个cbrev出来波形)fft波形杂乱
贴主要模块程序:
#include <math.h>
#include <TMS320.H>
#include <dsplib.h>
#include <stdio.h>
#include <csl.h>
#include <csl_pll.h>
#include "t4_SCALE.h"
Uint16 samplecount=0;
Int16 testsample1[512],testsample2[512],qq[1024],pp[1024]/*,testsample3[256],
testsample4[256],testsample5[256],testsample6[256]*/;
Uint16 ad[6];
Uint16 m=0;
float output[1024];
void main(void)
{
/* Initialize CSL library - This is REQUIRED !!! */
CSL_init();
/* PLL configuration structure used to set up PLL interface */
// 主频为300Mhz
PLL_setFreq(1, 0xF, 0, 1, 3, 3, 0);
/* Set IVPH/IVPD to start of interrupt vector table */
IRQ_setVecs((Uint32)(&VECSTART));
CHIP_RSET(XBSR,0x0001);
GPIODIR |= 0x4; // config the GPIO2 as output pin,RESET
GPIODIR |=0x10; //config the GPIO4 as output pin,COVENT
GPIODIR |= 0x1; //config the GPIO0 as input pin FE
GPIODIR |= 0xFD; //config the GPIO1 as input pin
GPIODIR |= 0x40; //config the GPIO6 as input pin BF
GPIODATA |=0x04; //GPIO2=1,RESET AD
delay1(1); //延时
GPIODATA &=0xFB; //GPIO2=0
m=GPIODATA;
m=m & 0x2;
EMIF_config( & MyEmifConfig);
while(1)
{
m=GPIODATA;
m=m & 0x2;
while(m != 0x2 )
{
m=GPIODATA;
m=m & 0x2;
}
for(samplecount=0;samplecount<512;samplecount++)
{
GPIODATA &=0xEF; //GPIO4=0
delay1(1); //延时2
asm(" nop");
GPIODATA|=0x10; //GPIO4=1,启动转换
delay1(1);
asm(" nop");
ad[0]=AD7656_basic;//读AD通道数据
ad[1]=AD7656_basic;//读AD通道数据
ad[2]=AD7656_basic;//读AD通道数据
ad[3]=AD7656_basic;//读AD通道数据
ad[4]=AD7656_basic;//读AD通道数据
ad[5]=AD7656_basic;//读AD通朗?
testsample1[samplecount]=ad[0];
// testsample2[samplecount]=ad[1];
// qq[samplecount]=testsample1[samplecount];
}
for (samplecount=0;samplecount<1024;samplecount=samplecount+2)
{
qq[samplecount]=testsample1[samplecount/2];
}
for (samplecount=1;samplecount<1024;samplecount=samplecount+2)
{
qq[samplecount]=0;
}
asm (" nop");
cbrev (qq,pp,512);
asm (" nop");
cfft (pp,512,SCALE);
/*for(samplecount=0;samplecount<1024;samplecount++)
{
output[samplecount] = pp[samplecount];
}
asm (" nop");*/
for(samplecount=0;samplecount<1024;samplecount=samplecount+2)
{
output[m] = sqrt(pp[samplecount]*pp[samplecount]+pp[samplecount+1]*pp[samplecount+1]);
m++;
}
asm(" nop");