找回密码
 注册
关于网站域名变更的通知
查看: 358|回复: 1
打印 上一主题 下一主题

咨询一下在官方DSP库进行FFT运算的问题???请大神指导

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-8-8 15:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
在官方的DSP库进行FFT运算,然后求每一个频率点的幅值,并把幅值用printf在串口打印出来,问题是把计算幅值的函数放到main.c文件中,结果是正确的,但把它放到其他文件中,在main函数中调用,结果就不正确了,哪位大神知道问什么?
这是main函数,作用就是计算FFT后每一点的幅值,其中GetPowerMag(FFT_Out_Array, FFT_Mag_Array);函数是在fft.c中定义的,但结果不对,如果拿到main.c中就正确了

$ s9 N: n* k4 N$ M  ~( M0 Q% J; u
#include "config.h". c2 j$ a4 k, I5 N
#include "led.h"
8 p" b: Q. E: K4 B: W7 ?( r#include
, D3 v# [% y" }$ |# {9 [% C- v) \, a#include "fft.h"
#define Fs 6400 //采样率  H: s. C9 E7 W. {
#define PI2 6.28318530717959
long FFT_In_Array[NPT];* x, j. q. X  J0 k
long FFT_Out_Array[NPT];% a& b0 H) ]" B, S+ q0 n" V3 ^
unsigned long FFT_Mag_Array[NPT/2];
void fft_Init(void);
int main(void)1 _. G1 S$ c4 z5 q
{
7 U- l5 o1 h( m  ou8 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);}while (1){                           } return 0;
}
//用指定频率的波形,初始化FFT数组
* [/ c" O; f3 }, D  J* Nvoid fft_Init()- b+ h: n7 S& I
{
/ N% R$ I% u  T! p/ p" sunsigned short i;
9 w* l" r2 D- h5 I+ j; vfloat fx;
$ q% J3 p+ V& l& Kfor(i=0; i<NPT; i++)! ~' ^% u" R5 h6 z' h% h
{. J2 S6 d9 ?; i  ]) U  C& m
fx = 1500 * sin(PI2 * i * 350.0 / Fs) +
  D2 I+ D" o: c2700 * sin(PI2 * i * 8400.0 / Fs) +
4 C% G+ t  B/ h) D4000 * sin(PI2 * i * 18725.0 / Fs);) N4 ^$ z. l( d* k/ z" f+ \
FFT_In_Array = ((signed short)fx) << 16;
- b. S9 F$ m0 [9 h+ q- M! G( ^( c}
! F; y; q" ?0 h0 F' ^% x" `! d}
以下是fft.c---------------------------------------
#include "fft.h"
void GetPowerMag(long *pIn, unsigned long *pMag)
! P- y7 g$ J8 ~  I0 U, ?6 v/ `+ I) C9 w{
$ v  S8 W$ O: l9 c  ?3 {3 x; Ssigned short lX,lY;  O1 a7 V6 s! P+ g
float X,Y,Mag;
# m6 Z) w" f, R6 [4 funsigned short i;
+ K! W8 n! q7 ~) efor(i=0; i {. O& W% I: Q/ ^. i6 x6 o. d2 K# g
lX = (pIn > 16;9 @9 i! N7 u& V+ e2 e, n# p
lY = (pIn >> 16);
/ h+ l$ `5 @4 p& B  K* m! o5 ?X = NPT * ((float)lX) / 32768;
' ]: K  x9 E- Z$ R' bY = NPT * ((float)lY) / 32768;
- g" J/ E% M" OMag = sqrt(X * X + Y * Y) / NPT;
0 y6 @' E6 J3 d& ]! `' ~if(i == 0)5 K* X; g8 B; N2 {! W
pMag = (unsigned long)(Mag * 32768);
) ~* K$ j" F5 Y; Q' _9 uelse
6 A& {4 _, {" p+ t/ PpMag = (unsigned long)(Mag * 65536);
}
}

6 i% x8 C# `/ e7 h# l0 d) c

1 G1 w2 A  i" s: L: c5 g
$ k& ~6 S) M  w" R* s. [4 K7 C
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 01:08 , Processed in 0.171875 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表