EDA365电子论坛网

标题: 咨询一下在官方DSP库进行FFT运算的问题???请大神指导 [打印本页]

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

) y  W- k1 r+ _6 _0 S
#include "config.h"4 r! {; G* P! ]; {5 [5 C
#include "led.h"
6 z3 L2 e/ N! ?. ~% s0 }: O#include
1 S$ J" F6 _7 W#include "fft.h"
#define Fs 6400 //采样率# I0 j0 H+ y) t! n$ Y
#define PI2 6.28318530717959
long FFT_In_Array[NPT];
7 N) Y, M" }) o3 p5 ?long FFT_Out_Array[NPT];
/ A9 b2 S! |$ I( m) Junsigned long FFT_Mag_Array[NPT/2];
void fft_Init(void);
int main(void)
0 ]" @) Q+ N( ?5 o/ C% w- M{
- `1 J% W. h( D6 L" y; iu8 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数组( Z' |$ R: e8 a% c2 A
void fft_Init()) ~" f& J" A; G% M4 F1 f- W
{
4 u3 a7 g, t/ c1 Funsigned short i;
" y. j2 K1 a$ k" ?8 C3 Qfloat fx;3 h2 D5 j# m5 v
for(i=0; i<NPT; i++)% E3 S, b7 R( Q, u8 a3 m5 J3 L; J
{8 r' w6 {+ D. J/ o
fx = 1500 * sin(PI2 * i * 350.0 / Fs) +
2 t. ~+ }( @# s( R2700 * sin(PI2 * i * 8400.0 / Fs) +
6 u3 b$ F9 E* B4000 * sin(PI2 * i * 18725.0 / Fs);; G+ c) W( Y! \1 Q/ y" a% R; O% A
FFT_In_Array = ((signed short)fx) << 16;' \2 n+ O. O6 _
}
& s; O% k5 j9 Z* p$ N" L}
以下是fft.c---------------------------------------
#include "fft.h"
void GetPowerMag(long *pIn, unsigned long *pMag)
. G* N$ f& o' Z- G/ h0 k% m+ `{
" m' v/ A. j" [signed short lX,lY;
$ X8 r2 H0 K! Zfloat X,Y,Mag;
7 C" f- B6 J+ J0 Vunsigned short i;6 y& Z7 j! T% o. A" R
for(i=0; i {. E$ r4 u* a: W1 ]$ b
lX = (pIn > 16;
  G; M6 E" U0 L2 K' V0 a( xlY = (pIn >> 16);! s: K  t4 @4 B' W0 L
X = NPT * ((float)lX) / 32768;% O  g! A+ W9 K2 t" _
Y = NPT * ((float)lY) / 32768;4 U, k% s, i; o+ B( _# e* b
Mag = sqrt(X * X + Y * Y) / NPT;
5 h& H# J- n( h4 {$ ]2 ^if(i == 0)
6 }9 c! }3 P% W0 w5 p/ d2 IpMag = (unsigned long)(Mag * 32768);' _( W- H- v1 b+ N/ w7 b, K
else. i/ _8 u6 ^" t& i; a7 u9 D- U
pMag = (unsigned long)(Mag * 65536);
}
}
2 j% i1 r. z' F( \# c

( A; X2 e7 C; T( ~) P, V# V" _

0 B8 k: x* x% t, @2 e* q
作者: relchhiclty    时间: 2019-8-8 18:19
帮顶




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2