验证库是否正常
添加头文件
#include "arm_math.h"
1
编译,可以通过!
编写用户函数
#define FFT_LENGTH 1024 //FFT长度,默认是1024点FFT
/*添加的头文件*/
#include "arm_math.h"
#include "stdio.h"
/*printf重定向*/
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
return ch;
}
/*全局变量,在main之前定义*/
arm_cfft_radix4_instance_f32 scfft;//定义scfft结构体
float FFT_InputBuf[FFT_LENGTH*2]; //FFT输入数组
float FFT_OutputBuf[FFT_LENGTH]; //FFT输出数组
uint16_t ADC_1_Value_DMA[1024] = {0};//存放ADC的值
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start(&htim3);//开启TIM3
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)ADC_1_Value_DMA, FFT_LENGTH);//开启ADC
arm_cfft_radix4_init_f32(&scfft,FFT_LENGTH,0,1);//初始化scfft结构体,设定FFT参数
/* USER CODE END 2 */
/*while(1)中*/
for(int i=0; i < FFT_LENGTH; i++)
{
FFT_InputBuf[2*i]=ADC_1_Value_DMA[i]; //实部
FFT_InputBuf[2*i+1]=0; //虚部
}
arm_cfft_radix4_f32(&scfft,FFT_InputBuf); //FFT计算(基4)
arm_cmplx_mag_f32(FFT_InputBuf,FFT_OutputBuf,FFT_LENGTH); //取模得幅值
之后可以用vofa+软件方便地查看频谱图。
可以动手实现的小项目
外接一个mic采集、oled实现音乐频谱等
|