一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 539|回复: 2
收起左侧

点阵显示频谱的AD数据问题

[复制链接]
发表于 2022-5-20 11:33 | 显示全部楼层 |阅读模式
下载了2个本论坛的双色LED频谱显示程序,稍有区别A程序                                      B程序
64点的FFT                          128点的FFT

AD转换中断触发AD              定时器触发

关键是AD完成中断,数据的处理有一点不解

截图202205201113392784.png

高8位 *3  再  <<2    扩大 12倍?  加上   低2位  的4倍?

截图202205201117055227.png

如果是采样点偏置+Vcc/2(音频电压负半周提升到0v以上) ,
ADC结果左对齐
截图202205201124588411.png

那也应该    (int)(ADC_RES<<2)+ADC_RESL ,   在此基础再做处理
如取9位     (int)(ADC_RES<<1)+(ADC_RESL>>1)

上面程序 用到   *3   和   *2     的处理,不知何解?就算*2,最好也是 <<1
望高手或作者指点,感谢!  

发表于 2022-5-20 19:43 | 显示全部楼层
我觉得,第一个截图里面,*3和*2有一个打错了,应该都是*3,即把ADC结果变为3倍。
图中错写*2的程序,计算结果非常接近3倍,所以不影响实际频谱显示效果。
第二个截图就离谱了。
个人认为最合理的应该是
  1. (((int)ADC_RES<<2)+ADC_RESL)*3
复制代码
最后纠正一个误区,写a*2和a<<1是一样的,编译器都会编译成RLC指令。
写*2还是<<1只取决于程序意义,可读性是唯一考虑。这里是数值计算(而非位运算),写成*2比较好。
同理,a*3和(a<<1)+a、a*254和(a<<8)-(a<<1)也是一样的。


 楼主| 发表于 2022-5-23 10:22 | 显示全部楼层
低2位的权值比较小,就算不加,取8位估计也不影响效果,
不同类型的数据,移位和乘法 编译器的操作有所不同。
有的做加法,有的低八位加法,高八位移位。奇妙!
截图202205231018451079.png

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-25 17:32 , Processed in 0.071002 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表