我使用MDK3.22,首先已按照lut1lut的帖子修改了汇编代码。数据源参考了圈圈的“FFT结果的物理意义”中的数据,我把圈圈的256个数据*1024然后作的四舍五入取整。结果与圈圈文章中分析的基本一致,第0点、50点、75点数据比较大,此三点数据为(模值15.96878、11.99178、6.007833)其余数据基本等于0(<0.06),最终的模值我已作了除以NPT或NPT/2的处理(NPT为点数),但没有做前面放大的那个1024倍处理,因为无所谓,咱们要的只是一个相对值。有如下问题:
1、按照圈圈的文章我在直流点做了模值除以NPT,其余点做了模值除以NPT/2的处理,但大家看最后的结果,直流点处的值为15.96878,如果这个值再除以2,那么这三点的结果恰好是7.98439:11.99178:6.007833=8:12:6与圈圈文章中的结果2:3:1.5完全一致,此处的直流出了什么问题?怎么解释?
2、附件代码中的那几个数组只能定义成全局变量,如果定义成局部变量,不是编译有警告(变量定义但没有使用)就是运行结果不对,或者是在仿真运行过程中报错。这又是什么原因?怎么解决?我想可能是以下原因,首先是不是调汇编代码只能使用全局变量?(猜的)第二,附件代码中是一个纯粹的软仿真256点的fft,我没有作任何对硬件部分的初始化,但我把代码移植到一个带有初始化代码的项目中,这个全局变量的问题依然没有解决。公司一个搞软件的分析说还有可能是汇编中还有bug没完全找到,他说堆栈可能有覆盖。
其实分析到这里我觉得这个fft的库已经非常不错了,可以用了,直流需要再除以一个2,那咱就再除以一个2就是了,并且一般情况下直流对咱们也没什么用;只能定义成全局变量,那咱就定义成全局变量得了呗。
附件中是我做试验的代码以及圈圈的文章。
请圈圈、lut1lut、香版主以及其他高手不吝赐教,对stm32我是初学,连开发板还没买呢。
相关链接:
https://bbs.eeworld.com.cn/upfiles/img/20093/200933122611368.rar