赞
踩
双精度
```c
USE_HAL_DRIVER,STM32F769xx,ARM_MATH_CM7,__CC_ARM,__FPU_PRESENT,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING
添加
#include "arm_math.h"
#include "arm_common_tables.h"
#include "arm_const_structs.h"
HAL_ADC_Start(&hadc1); HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_ConvertedValue1,2048);//开始ADC1的DMA传输 HAL_TIM_Base_Start_IT(&htim2); HAL_Delay(5000); HAL_TIM_Base_Stop_IT(&htim2); for(int i = 0;i<2048;i++) { ADC_Value1[i] = ADC_ConvertedValue1[i]*3.3/4095; } for(int a = 0;a<2048;a++) { printf("%3.2f\n",ADC_Value1[a]); } for(int i=0;i<2048;i++) { temp0=ADC_ConvertedValue1[i]; v0=(double)temp0/4095.0*3.3; //printf("%0.3f\n",v0); //处理ADC采样的数组 fft_inputbuf0[2*i]=v0;//将ADC数据存入输入数组 fft_inputbuf0[2*i+1]=0;//虚部全部为0 } arm_cfft_f32(&arm_cfft_sR_f32_len2048,fft_inputbuf0, 0, 1);//数据经过这个函数处理每两个数据代表一个复数,一个数据是实数,一个是虚数 arm_cmplx_mag_f32(fft_inputbuf0,fft_outputbuf0,2048); //运算结果求模得幅值 printf("处理后的数值\n"); for( i=0;i<2048;i++) { printf("%d %0.3f \n",i,fft_outputbuf0[i]/(2048/2));//打印出fft_outputbuf0 MagBufArray[i]=fft_outputbuf0[i]/(2048/2); } for(i=1;i<1024;i++) { if(MagBufArray[i]>Max_Val) { Max_Val=MagBufArray[i]; Row=i; } } printf ("%f\n",Row); printf("当前的频率值\n"); printf ("F=%0.2fHZ\n",Row*10);//10 = 20K(采样率)/2048(采样点数)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。