2673|2

256

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

NUCLEO-G431RB测评 使用库做FFT [复制链接]

本帖最后由 viphotman 于 2019-10-10 16:24 编辑

NUCLEO-G431RB测评 FFT
一 文件位置

在STM32CubeG4_V1.1.0\STM32Cube_FW_G4_V1.0.0\Drivers\CMSIS\Lib\ARM 里有ARM 公司的库文件;

arm_cortexM4lf_math.lib 是小端模式的有浮点运算的M4的lib;

还要下面的.h文件;

二 FFT的函数

arm_cfft_f32 函数

  void arm_cfft_f32(
  const arm_cfft_instance_f32 * S,
  float32_t * p1,
  uint8_t ifftFlag,
  uint8_t bitReverseFlag);

S 参数是是一个结构体指针是一个结构体指针,当一个常量用,和旋转因子有关,不同点的FFT选不同的参数;

p1 参数是输入数组,长度应该是运算点数的两倍,计算完输出的数据也放这里;

S 参数是FFT正反变换,=0是正变换,1是反变换

bitReverseFlag 参数是倒位序

 


三 工程修改

 加入宏ARM_MATH_CM4;

 

加入头文件地址

 

加入lib

加入代码

/* Includes ------------------------------------------------------------------*/
#include "main.h"

#include "arm_math.h"
#include "arm_const_structs.h"

 加入变量

#define NPT 2048//4096
uint32_t fftSize = NPT/2; //NPT/2
uint32_t ifftFlag = 0;
uint32_t doBitReverse = 1;

float32_t fft_input[NPT];
float32_t fft_output[NPT]; //NPT/2

加入fft测试code ,再在main中调用这个函数;

 

void fft_test()
{
   int i = 0;
	// 
	for(i=0;i<NPT/2 ;i++)
	{
		// 100Hz sin, 1000 sample
		fft_input[2*i] = 1.2f*arm_sin_f32(2*3.1415926f*55*i/1000)+1;
		fft_input[2*i+1] = 0;
	}
	  /* Ö´ÐÐFFTÔËË㣬½á¹û´æ·ÅÔÚÊäÈëÊý×é */
	 
  arm_cfft_f32(&arm_cfft_sR_f32_len1024, fft_input, ifftFlag, doBitReverse);  //´Ë´¦Ê¹ÓÃarm_cfft_sR_f32_len1024Òò×Ó£¬Êý¾Ý±ØÐëÊÇ2048 ÊÇ*SX2Åà¹Øϵ
  //arm_cfft_f32(&arm_cfft_sR_f32_len2048, fft_input, ifftFlag, doBitReverse);
	//arm_cfft_f32(&arm_cfft_sR_f32_len4096, fft_input, ifftFlag, doBitReverse); 
	/* È¡¸÷¼ÆËã½á¹ûµÄ¾ø¶ÔÖµÀ´µÃµ½ÆµÂÊÇ¿¶È(·ùÖµ) */                                 //FFTµãÊýΪ&arm_cfft_sR_f32_len32/2(³ýÒÔ2)²ÅÊÇFFTµÄµãÊý
  arm_cmplx_mag_f32(fft_input, fft_output, fftSize);
  /* È¡×î´óÖµ¼°ÆäÖ÷ƵλÖà */
  //arm_max_f32(fft_output, fftSize, &maxValue, &testIndex);
		//printf("maxValue=%f\r\n", maxValue);

	 for(i=0; i<fftSize; i++)
	 {
			 printf("fft %d = %f\r\n",i, fft_output);
	 }
}

修改下面code

fft_input[2*i] = 1.2f*arm_sin_f32(2*3.1415926f*55*i/1000)+1; // 55Hz 的sin波 1000Hz采样率

打结果如下,索引56是最大值,计算现在信号的频率 = 1000/1024 *56 = 54.68Hz

fft_input[2*i] = 1.2f*arm_sin_f32(2*3.1415926f*100*i/1000)+1; // 100Hz 的sin波 1000Hz采样率

打结果如下,索引102是最大值,计算现在信号的频率 = 1000/1024 *102 =99.609Hz

 


此内容由EEWORLD论坛网友viphotman原创,如需转载或用于商业用途需征得作者同意并注明出处

此帖出自stm32/stm8论坛

最新回复

感谢分享,楼主后续还有持续测评吗   详情 回复 发表于 2019-10-15 14:49
点赞 关注(1)
 

回复
举报

1120

帖子

0

TA的资源

版主

沙发
 

感谢分享,楼主后续还有持续测评吗

此帖出自stm32/stm8论坛

点评

还要加入ADC的,要等下;  详情 回复 发表于 2019-10-15 15:09
 
 

回复

256

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
ohahaha 发表于 2019-10-15 14:49 感谢分享,楼主后续还有持续测评吗

还要加入ADC的,要等下;

此帖出自stm32/stm8论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表