请问arm_cfft_radix4_f32()做FFT后数据对但在数组位置不对是怎么回事啊?

2019-07-14 17:21发布

我用STM32F3 的DSP库   ARM_cfft_radix4_f32()做FFT后数据对,但是在数组位置不对是怎么回事啊???
求指点啊,谢谢啦
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
击鼓巍山
1楼-- · 2019-07-14 19:12
回复第 2 楼 于2013-11-01 14:11:02发表:
请问一下数据是有错误还是高低字节不对?
 
是数据在数组的顺序不对
 
击鼓巍山
2楼-- · 2019-07-14 21:08
 精彩回答 2  元偷偷看……
击鼓巍山
3楼-- · 2019-07-15 00:26
回复第 2 楼 于2013-11-01 14:11:02发表:
请问一下数据是有错误还是高低字节不对?
 

 
TOPCB
4楼-- · 2019-07-15 02:47
是否可以看一下你的相关代码?
击鼓巍山
5楼-- · 2019-07-15 05:06
<div style="padding:5px;border:1px dashed #ccc;">回复第 6 楼 于2013-11-01 15:30:29发表:
是否可以看一下你的相关代码?

 
//#define fftSize 64        //FFT²ÉÑùµãÊý£¬Èç¹ûÓÃDSP¿â½øÐÐFFTÔò´ÎÊýΪ16¡¢64¡¢256¡¢1024
#define TEST_LENGTH_SAMPLES 128
#define NUM_TAPS 32 //Â˲¨Æ÷µÄÂ˲¨ÏµÊýµÄÄ¿Êý£¬Â˲¨Æ÷³¤¶È
#define BLOCK_SIZE 32//Â˲¨Æ÷ ͬһʱ¼ä´¦ÀíµÄÑù±¾Êý
 
float32_t testfftInput[TEST_LENGTH_SAMPLES];
static float32_t testfftOutput[TEST_LENGTH_SAMPLES/2];/
uint32_t fftSize = 64;
uint8_t ifftFlag = 0;
uint8_t doBitReverse = 1;
 
float32_t spidata[64];
 
int w[MAXSIZE];
int m[3];
 
float32_t testOutput[NumberMAX]; 
float32_t firStateF32[BLOCK_SIZE+NUM_TAPS-1];
float32_t SpiBuffer[NumberMAX];
float Value[NumberMAX];
u8 SamplingEnd;
u8 SamplingCount;
 
int next_data_handle(int addr)     
{     
    return (addr) == MAXSIZE ? 0addr) ;     

int main(void)
{
        u8 i=0;
        u32 j;
        u8 k;
        arm_fir_instance_f32 S;
        arm_cfft_radix4_instance_f32 S1;
        float32_t maxValue;
        arm_status status;
        float32_t *inputF32,*outputF32;
        float32_t threshold;//Ææ´Îг²¨°Ù·Ö±È
        int flag = 0;
        int warn = 0;//±¨¾¯±êÖ¾
        //int middle = 0;
        int addr1 = 0;
  float32_t sum1 = 0;
        float32_t sum2 = 0;
        float32_t sum3 = 0;
       
        SystemInit();//ϵͳʱÖÓ³õʼ»¯Îª72M          
        GPIO_Configuration();//¶Ë¿Ú³õʼ»¯
        NVIC_Configuration();//ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
        SPI_Configuration();
        Init_SPI();
        USART_Configuration(9600);
        TIM_Configuration();
        delay_init(72);        //ÑÓʱº¯Êý³õʼ»¯
        EXTIX_Init();
 
        status = ARM_MATH_SUCCESS;
        status = arm_cfft_radix4_init_f32(&S1,fftSize,ifftFlag,doBitReverse);
        while(1)
        {
                if(SamplingEnd==true)//²É¼¯Íê64¸öµã
                {

                        for(i=0;i
击鼓巍山
6楼-- · 2019-07-15 05:55
回复第 6 楼 于2013-11-01 15:30:29发表:
是否可以看一下你的相关代码?
 
还有就是我把arm_common_tables.h 里的
        extern const uint16_t armBitRevTable[1024];和extern const float32_t twiddleCoef[6144];
改成extern uint16_t armBitRevTable[1024]和extern const float32_t twiddleCoef[4096*2];了,
在arm_cfft_radix4_init_f32.c里加了句uint16_t armBitRevTable[1024];否则编译错误
对了我用的是STM32F3的固件库
 
 

一周热门 更多>