找回密码
 注册
关于网站域名变更的通知
查看: 357|回复: 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中就正确了

# U) b8 Z6 w9 ?5 y$ D- q$ ?+ x- y
#include "config.h"
2 K8 }8 Z" }0 L) \$ c, A#include "led.h". k3 Z5 y* O# b0 ]% x% A) m
#include
5 @" `: l( l; M+ D#include "fft.h"
#define Fs 6400 //采样率
; m8 x4 r) L4 e3 q4 F: a7 B! k% ~#define PI2 6.28318530717959
long FFT_In_Array[NPT];
" Z5 b1 V( w, c/ Z/ x7 Klong FFT_Out_Array[NPT];
/ a4 X" _, C$ ?6 Z3 bunsigned long FFT_Mag_Array[NPT/2];
void fft_Init(void);
int main(void)
8 @& j& R4 i8 j. G. {7 y$ [. v{
) |8 y6 E- [' o9 ^4 W. L* Hu8 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数组
. }, D9 i& f0 Dvoid fft_Init()
! M# x1 l0 T  l: `{& _8 T" m. v6 _& j$ H6 S
unsigned short i;
0 H0 E7 A- o1 a! ^2 T7 Mfloat fx;
9 J" w$ F# g) O; K+ G5 ?3 pfor(i=0; i<NPT; i++)
, r1 I: j) {% a1 V' D{
/ p3 H) S7 u& L5 p' _fx = 1500 * sin(PI2 * i * 350.0 / Fs) +
/ ?* o4 w9 [1 ^# t- w2700 * sin(PI2 * i * 8400.0 / Fs) +2 r5 Q) h' A+ P$ C! J! z
4000 * sin(PI2 * i * 18725.0 / Fs);
- H+ b) z6 T( r+ T0 iFFT_In_Array = ((signed short)fx) << 16;
5 Y0 `" j4 j5 U  @4 H* @, B}7 W9 ?1 B- d+ _5 f8 M' `$ d
}
以下是fft.c---------------------------------------
#include "fft.h"
void GetPowerMag(long *pIn, unsigned long *pMag)
- f5 |8 X: Q* s/ ]* F) u{
7 d0 I: v( w$ p5 o: zsigned short lX,lY;
; k  d) O: [1 ?float X,Y,Mag;
7 g. L$ Y+ r, o- r$ h# \3 J- }unsigned short i;
6 P" V9 d! q5 l$ wfor(i=0; i {. J+ v: z1 }: F$ ~) W
lX = (pIn > 16;
5 K% c; D: [( c$ d' p/ Z4 LlY = (pIn >> 16);
& ?9 |% [6 A) R! p6 t7 XX = NPT * ((float)lX) / 32768;5 U7 ?0 \& n: L, b# _( r' v2 O7 r  P
Y = NPT * ((float)lY) / 32768;
1 G# T8 ^3 W+ F. h0 U, G( iMag = sqrt(X * X + Y * Y) / NPT;; Y, ^$ z8 ?- C& C+ a1 S
if(i == 0)
" p, U! Q% W# C1 W+ R1 w7 ~' @/ JpMag = (unsigned long)(Mag * 32768);8 f: Q+ v" z) q* V  B0 D
else# H8 M( \1 g& ]- m* r* a* C" U
pMag = (unsigned long)(Mag * 65536);
}
}

# B4 x! C/ k4 f& w) b7 G" b) O- u

$ M3 [4 }$ y3 `5 A, p+ l/ Z) l. r- p

: Y) b! i& @1 Q! P' w0 t
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 20:48 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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