|
楼主 |
发表于 2021-10-26 19:19:10
|
显示全部楼层
- void fft_get_maxvalue()
- {
- int k,i;
- HAL_Delay(50);
- if(fft_complete_flag == 1)
- {
- arm_cfft_f32(&arm_cfft_sR_f32_len64,MidBuffer,ifftFlag,doBitReverse); //对输入数组进行FFT变换,变换结果将存放在输入数组中
-
- arm_cmplx_mag_f32(MidBuffer,OutPutBuffer,fftSize); //对经过FFT变换的数组进行取模运算,运算结果将存放在OutPutBuffer数组中
-
- arm_max_f32(OutPutBuffer,fftSize,&maxvalue,&Index); //输出数组中频域最大的数值和其所在数组中的位置
-
- for(k=0;k<fftSize/2;k++)
- {
- FreqBuffer[k] = OutPutBuffer[k+1]; //取输出结果的一半,并且去除直流分量
- }
-
- arm_max_f32(FreqBuffer,fftSize/2,&Freq_maxvalue,&Freq_Index); //去除直流分量后输出数组中频域最大的数值和其所在数组中的位置
-
- Freq = (Freq_Index+1)*sample_freq; //频率 = (N-1)*Fs/FFTSize 单位Hz
-
- DC_Component = (OutPutBuffer[0]/fftSize); //直流分量 = value/FFTSize
-
- Amplitude = ((Freq_maxvalue/((float)fftSize/2))); //频率幅度 = value/FFTSize/2*10 单位V
-
- Virtual_value = Amplitude/1.4142135; //有效值
- // res = ((Virtual_value-8)/43.3)/(4-((Virtual_value-8)/43.3))*2000;
- // printf("Fmaxvalue = %f \r\n Amplitude = %f \r\n DC_Component = %f \r\n Virtual_value = %f \r\n Res = %f \r\n ",Freq,Amplitude,DC_Component,Virtual_value,res);
- printf("Fmaxvalue = %f \r\n Amplitude = %f \r\n DC_Component = %f \r\n Virtual_value = %f \r\n ",Freq,Amplitude,DC_Component,Virtual_value);
- fft_complete_flag = 0;
- HAL_ADC_Start_DMA(&hadc1,(uint32_t*)InPutBuffer,fftSize); //标志位置0,表示转换完成
- }
- }
复制代码 |
|