今年的电赛有很多的遗憾,和几位参赛的伙伴们一起思考了下电赛的A题。
我主要是思考程序部分,其实从第四问可以看到,这道题的意图十分明显,就是让我们对整个电路做一个频谱分析,也就是电赛这么多年,省赛的难度又绕回去了,要求做了一个低频的频谱分析仪,不过说实话,精度确实是一个难点,最后我们在实现幅度显示的时候用了分段函数校准还是会有比较大的偏差,所以现在先这样写出来,日后再看其他队伍的解决方法。
做频谱分析,主要手段是采集信号,然后对采集到的信号做傅里叶变换变换。关于stm32f429的fft变换,首先是DSP库的使用教程,这个是可以参考正点原子的f429的配套教学文档配置。然后是具体代码的编写,对于具体代码,个人觉得网上所列写的代码和正点原子的代码还不够精简,一个比较好的参考是在stm32中文网上下载的一个stm32f3系列的参考例程,里面主要用到的函数为:
arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput_f32_10khz, ifftFlag, doBitReverse);
/*信号的预处理,方便后面计算幅值*/
/* Process the data through the Complex Magnitude Module for
calculating the magnitude at each bin */
/*计算幅度(模值)*/
arm_cmplx_mag_f32(testInput_f32_10khz, testOutput, fftSize);
本人在使用fft的时候其实非常快,只要将ADC采集的数据存放在一个采集电压的数组中,然后利用下面的对应关系