IDTC 2015-07-07 06:00 采纳率: 0%
浏览 4629

STM32官方DSP库进行FFT运算的问题

使用STM32官方的DSP库进行FFT运算,然后求每一个频率点的幅值,并把幅值用printf在串口打印出来,问题是我把计算幅值的函数放到main.c文件中,结果是正确的,但把它放到其他文件中,在main函数中调用,结果就不正确了,哪位大神知道问什么?

这是main函数,作用就是计算FFT后每一点的幅值,其中GetPowerMag(FFT_Out_Array, FFT_Mag_Array);函数是在fft.c中定义的,但结果不对,如果拿到main.c中就正确了

#include "config.h"
#include "led.h"
#include
#include "fft.h"

#define Fs 6400 //采样率
#define PI2 6.28318530717959

long FFT_In_Array[NPT];
long FFT_Out_Array[NPT];
unsigned long FFT_Mag_Array[NPT/2];

void fft_Init(void);

int main(void)
{
u8 i;

RCC_Configuration();
GPIO_Configuration();
NVIC_Configuration();
USART1_Configuration();

//ADC_Configuration();


//DMA_Configuration();

// initLED();

fft_Init();

//FFT运算
cr4_fft_256_stm32(FFT_Out_Array, FFT_In_Array, NPT);

//计算幅值
GetPowerMag(FFT_Out_Array, FFT_Mag_Array);

//打印每一点的幅值
for(i=0;i<NPT/2;i++)
{       
    printf("%d=%ld\n", i, FFT_Mag_Array[i]);
}

while (1)
{                           


} 

return 0;

}

//用指定频率的波形,初始化FFT数组
void fft_Init()
{
unsigned short i;
float fx;
for(i=0; i<NPT; i++)
{
fx = 1500 * sin(PI2 * i * 350.0 / Fs) +
2700 * sin(PI2 * i * 8400.0 / Fs) +
4000 * sin(PI2 * i * 18725.0 / Fs);
FFT_In_Array[i] = ((signed short)fx) << 16;
}
}

以下是fft.c---------------------------------------

#include "fft.h"

void GetPowerMag(long *pIn, unsigned long *pMag)
{
signed short lX,lY;
float X,Y,Mag;
unsigned short i;
for(i=0; i {
lX = (pIn[i] > 16;
lY = (pIn[i] >> 16);
X = NPT * ((float)lX) / 32768;
Y = NPT * ((float)lY) / 32768;
Mag = sqrt(X * X + Y * Y) / NPT;
if(i == 0)
pMag[i] = (unsigned long)(Mag * 32768);
else
pMag[i] = (unsigned long)(Mag * 65536);

}

}

  • 写回答

1条回答

  • 91program 博客专家认证 2015-07-07 06:17
    关注

    从源代码的管理上来说,应该不存在你所描述的问题。
    像你这样出现的问题,可能是变量或其它未同步引起的。确认一下两种传入参数与各全局变量是否相同吧!

    评论

报告相同问题?

悬赏问题

  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致