本帖最后由 yjmwxwx 于 2019-6-24 13:13 编辑
去年学了点数字信号处理,我数学一点看不懂,库也不会用,没办法当时写了个FFT的函数,想用ADC采样用FFT计算但是失败了,当时写的那个256点的溢出了,加上第一次接触这东西不会搞,最近一些日子又重新捡起来这阑尾工程,调试了几天终于成功了。
做了简单电路,两个STM32F030F4P6,一个产生正弦波另一个ADC采样256点用FFT计算得到这个正弦波的幅度。
0x20000000-0x20000400是实部 0x20000400-0x20000800是虚部, 取出第22个数据的实部和虚部计算出幅度用数码管显示。 由于是Q15定点数,每次保存右移了1位,结果需要乘64, 数码管显示位数有限没乘64,结果只显示了后4位没显示全。
电路图
实物图
下图上把单片机数据输入到电脑上软件计算的,用来和单片机计算的比对,第22个实部是-156265.198,虚部是-157711.28
单片机计算的实部,第22个是0XFFFFF675,十进制2443乘64=156352。地址是0X20000058
单片机计算的虚部,第22个是0XFFFFF65F十进制是2465乘64=157760。 地址是0X20000458
结果和电脑上的差不太多,电脑上软件可能是浮点数,我这个是Q15定点数的。
ADC采集的波形,采样率1M 。
示波器波形
SPWM单片机程序
dingshiqispwm.tar.gz
(5.99 KB)
|