STM32 实数FFT 极速配置

想要进行FFT操作就得配置DSP环境,操作如下
STM32 keil极速配置DSP环境
关于FFT,先上操作再讲含义

操作

添加定义

#define fftsize  256   //对256个数据进行FFT
#define ifftFlag 0

float32_t testInput_f32[256]={
    
    0};   
float32_t testOutput_f32[256]={
    
    0};			
float32_t testOutputMag_f32[256]={
    
    0};

while循环代码

  while (1)
  {
    
    
	HAL_Delay(1000);
	HAL_GPIO_WritePin(Start_GPIO_Port,Start_Pin,GPIO_PIN_RESET);
	HAL_Delay(100);
	HAL_GPIO_WritePin(Start_GPIO_Port,Start_Pin,GPIO_PIN_SET);
	HAL_SPI_Receive(&hspi1,(uint8_t *)data2,260,0xff);
//SPI接收数据


	for(int i=2;i<258;i++)
		{
    
    
			testInput_f32[i-2]=data2[i]*5.0/4096;
		}	
/*---------------------FFT----------------------------- */	

	  arm_rfft_fast_instance_f32 d;  
  	  arm_rfft_fast_init_f32(&d, fftsize); 
      arm_rfft_fast_f32(&d, testInput_f32, testOutput_f32, ifftFlag); 
	  arm_cmplx_mag_f32(testOutput_f32, testOutputMag_f32, fftsize);
	  for(int i=0;i<128;i++)
		{
    
    
		 printf("%f\r\n",testOutputMag_f32[i]);
		}	
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

含义


#define fftsize  256   //对256个数据进行FFT
//0正变换  1逆变换
#define ifftFlag 0
    //定义结构体
arm_rfft_fast_instance_f32 d;     
//初始化
arm_rfft_fast_init_f32(&d, fftsize); 
//进行快速傅里叶变换
arm_rfft_fast_f32(&d, testInput_f32, testOutput_f32, ifftFlag); 
//testInput_f32为输入的数据
// testOutput_f32 变换后生成复数域,即1实数1虚数  总数还为256

//求模值,最后生成一半的点(128)
arm_cmplx_mag_f32(testOutput_f32, testOutputMag_f32, fftsize);

对方波进行FFT得到如下图像
数据含直流分量

在这里插入图片描述
在这里插入图片描述
横坐标 => 一格/(Fs / N)

猜你喜欢

转载自blog.csdn.net/Harry_CHL/article/details/120545755
今日推荐