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

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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。