STM32实验及结果 —— (003)HAL库FFT动态频谱
»
    小时候,看到过假功放的跳动频谱。它没有随着音乐的不同而变化,而是固定地、等幅度地上下跳动。也看到过随着音乐不同而跳动不同的功放面板。一直很想瞧瞧真正的动态频谱是怎么做出来的。有幸现代互联网还没有完全知识收费。虽然,知道FFT,但,没有实操过FFT。所以,找了几天的FFT算法。最后找到了一份优秀的、容易理解原理的FFT算法代码。其中的过程及其坎坷,因为,大学学过的傅里叶变换算法课忘得差不多了。代码,一份一份地尝试。最后逐渐开始理解什么是旋转函数,开始理解采样率和输出最高频率的关系,开始理解了很多科技电视上带着半径线的一个一个同心圆在那不断旋转代表的含义,并且开始尝试着修改别人的代码。
    实验硬件搭配上,起初觉得一个STM32板子带模数转换了就不需要再买音频外设了,但是我错了,简单的麦克风没有音频信号的波幅放大很难起到微弱声音数据的采集作用。于是,翻动了主板的数据手册,也买了不少AD、DA的小功能板。慢慢地也接近了还在学习中的主板设计的主方向。
    学习或者复习的STM32Keil开发技能在工作中也起到了作用,在纯自学研究的情况下完成了一个简单板子的硬件功能开发,经过了同事的测评,最终的版本白盒测试考虑周到、功能完整、性能稳定。
    ——算是陈奕迅的那位孤勇者了吧,再难的技术问题也要靠自己和同事一起拿下。
    对于自己的FFT显示程序,看完江协的视频教程,发现我对手动开发DMA的理解是错误的。正确的理解是:DMA转运一次一个通道只能是一条数据而不是一系列连续的输出数据(因为只有buffer大小的设置而没有采样次数的设置)。所以,以前运行结果无误的程序的DMA部分的逻辑思路是错的,运气好但又学海无涯苦作舟 ~ ~ ~ 
    动图是自学和研发FFT动态频谱图时的研究成果,当前这个版本的板子程序采用的是CubeIDE开发的代码,从逻辑上分析:没有问题。其中,ADC采样中断和时钟中断都采用了CubeIDE的配置实现。板子是STM32F103C8T6外加麦克风音频放大模块(外设),性能比较低,所以采样率控制在了300Hz以内,FFT旋转函数个数控制在了128个,输出只有64个有效频点。
    感慨,STM32CubeIDE+Keil——无限可能。
    ————www.v-signon.com学习者共勉
                        
«
——张人杰·www.v-signon.com学习者共勉
返回上一页
工业和信息化部备案管理系统网站 京ICP备19038994号-2
个人作品网站:www.up-task.com 主办单位:个人 English