欢迎光临散文网 会员登陆 & 注册

第六章合集代码2:chatGPT生成的数字信号处理算法代码及在stm32中的整合

2023-02-17 16:36 作者:西邮严老师  | 我要投稿

ARM_MATH_CM4

#include "arm_math.h"

#include "arm_const_structs.h"

#define FFT_SIZE 512

#define FFT_LEN FFT_SIZE 

#define SAMPLING_FREQUENCY 2400000

float32_t inputSignal[FFT_SIZE*2];

float32_t signal[FFT_SIZE*2];

float32_t fftOutput[FFT_SIZE];


/*通过计算fft来得到周期性信号的频率值的函数,来源于chatGPT*/

float32_t fftCalculate(void)

{

    arm_cfft_f32(&arm_cfft_sR_f32_len512, inputSignal, 0, 1);

    arm_cmplx_mag_f32(inputSignal, fftOutput, FFT_LEN);

  uint32_t maxValueIndex = 0;

  float32_t maxValue = 0;

    arm_max_f32(&fftOutput[1], FFT_LEN, &maxValue, &maxValueIndex);

    float32_t frequency =(float32_t) (maxValueIndex+1) * (float32_t)SAMPLING_FREQUENCY / (float32_t)FFT_SIZE;

return frequency ;

}


/*计算信号最大值的函数,来源于chatGPT*/

float32_t get_signal_max(void)

{

    float32_t max_value = 0.0f;

    arm_max_f32(signal, FFT_SIZE, &max_value, NULL);

    return max_value;

}

/*计算信号最小值的函数,来源于chatGPT*/

float32_t get_signal_min(void)

{

    float32_t min_value = 0.0f;

    arm_min_f32(signal, FFT_SIZE, &min_value, NULL);

    return min_value;

}


/*计算信号峰-峰值的函数,来源于chatGPT*/

float32_t get_signal_peak_to_peak(void)

{

    float32_t min_value = 0.0f;

    float32_t max_value = 0.0f;

    arm_min_f32(signal, FFT_SIZE, &min_value, NULL);

    arm_max_f32(signal, FFT_SIZE, &max_value, NULL);

    return (max_value - min_value);

}


/*计算信号有效值的函数,来源于chatGPT*/

float32_t get_signal_rms(void)

{

    float32_t rms_value = 0.0f;          

for(int k=0;k<FFT_SIZE;k++)//采样数据转换为0-3.3伏

signal[k]=signal[k]-get_signal_peak_to_peak()/2;

    arm_rms_f32(signal, FFT_SIZE, &rms_value);

    return rms_value;

}


for(int j=0;j<FFT_SIZE;j++)//采样数据转换为0-3.3伏

{

signal[j]=(AdcConvertedValue[j]&0xfff)*3.3f/4095.0f;//signal是用来计算有效值的数组

inputSignal[j*2]=(AdcConvertedValue[j]&0xfff)*3.3f/4095.0f;//inputSignal是用来计算复数fft的数组

inputSignal[j*2+1]=0;//交替插零,添加数据的虚部,以便使用复数傅里叶变换计算信号频率

}


/*使用chatGPT提供的算法计算信号最大值、最小值。峰峰值、有效值、频率*/

Unicode::snprintfFloat(textMaxValueBuffer, 10, "%2.3f", get_signal_max());

textMaxValue.invalidate();//更新最大值显示内容


Unicode::snprintfFloat(textMinValueBuffer, 10, "%2.3f", get_signal_min());

textMinValue.invalidate();//更新最小值显示内容


Unicode::snprintfFloat(textPPValueBuffer, 10, "%2.3f", get_signal_peak_to_peak());

textPPValue.invalidate();//更新峰-峰值显示内容


Unicode::snprintfFloat(textFreBuffer, 10, "%5.0f", fftCalculate());

textFre.invalidate();//更新频率显示内容


Unicode::snprintfFloat(textRMSValueBuffer, 10, "%2.3f", get_signal_rms());

textRMSValue.invalidate();//更新有效值显示内容


第六章合集代码2:chatGPT生成的数字信号处理算法代码及在stm32中的整合的评论 (共 条)

分享到微博请遵守国家法律