JC钜 发表于 2025-5-20 17:22:52

AI8051通过ADC计算特定频率幅值时出现了准确率低的问题

最近看到一个音频均衡器的模块,输入音频然后输出特定频点的幅值。比如这IC数据表上的63HZ,160HZ,400HZ,1000HZ,2500HZ,6250HZ以及16000HZ
现在手头上有AI8051U的实验箱,想要在实验箱上复刻这个IC的效果
第一版的程序我使用采样率50kHZ,采样点数为2048,然后对样本进行IIR滤波后输入到Goertzel算法当中,分别计算以上7个频点的幅值,并打印最大幅值及对应的频点频率。
测试的输入源用波形发生器产生频点对应频率的正弦波,直接输出到ADC3的引脚上,并没有通过运放等电路。
结果发现除了63HZ,160HZ以及400HZ的准确率达到90%以外,其他频点的正确率只有30%~50%。

请问一下有没有做过类似的频点分析,可以让我参考一下对样本的滤波是怎么处理的。
或者其他算法的案例有的话,可以发我参考一下嘛?
感激不尽。



DebugLab 发表于 2025-5-20 23:20:50

FFT例程:
https://www.stcaimcu.com/thread-10324-1-1.html

cnos 发表于 2025-5-21 09:04:29

信号发生器输出默认应该是双极性波形也就是有正半周和负半周,你要在信号发生器设置一个二分之一的单片机电源电压的偏置,使得整个波形都在ADC的量程范围之内。
否则应该就是负半周削波了,FFT出来的数据应该看到很多谐波。

fjstcmcu 发表于 2025-5-21 09:50:36

怎么感觉跟频率高低有关,准的都在低段,调试下高的,让ADC一次性采集一段数值,然后比较下跟实际电压的差别{:4_165:}

JC钜 发表于 2025-5-21 12:10:06

cnos 发表于 2025-5-21 09:04
信号发生器输出默认应该是双极性波形也就是有正半周和负半周,你要在信号发生器设置一个二分之一的单片机电 ...

我也考虑到负半周期的问题,所以信号发生器是已经增加了正偏置,并且用示波器验证过波形都在正半轴上。

JC钜 发表于 2025-5-21 12:12:05

fjstcmcu 发表于 2025-5-21 09:50
怎么感觉跟频率高低有关,准的都在低段,调试下高的,让ADC一次性采集一段数值,然后比较下跟实际电压的差 ...

采样点从2048提高一个等级之后,准确率更低了。我怀疑是我用的数字滤波代码有误

fjstcmcu 发表于 2025-5-22 16:30:25

JC钜 发表于 2025-5-21 12:12
采样点从2048提高一个等级之后,准确率更低了。我怀疑是我用的数字滤波代码有误 ...

我不是说采样点我是说,频率高后什么原因ADC的输出跟实际值不一致
页: [1]
查看完整版本: AI8051通过ADC计算特定频率幅值时出现了准确率低的问题