»
(003) HAL Library FFT Dynamic Spectrum
(008) CubeIDE Implementation of USB Peripherals*
(018) C99 pointer*
(019) C99 With only value assignment*
(022) POSIX pthread multi-threads mutex*
(023) POSIX pthread multi-threads programming*
(027) C99 time and wait*
(028) High-precision calculation with GMP*
(029) Web Service Lib*
(030) International Components for Unicode (ICU)*
(031) Performance of C is higher than C++, because...*
小时候,看到过假功放的跳动频谱。它没有随着音乐的不同而变化,而是固定地、等幅度地上下跳动。也看到过随着音乐不同而跳动不同的功放面板。一直很想瞧瞧真正的动态频谱是怎么做出来的。有幸现代互联网还没有完全知识收费。虽然,知道FFT,但,没有实操过FFT。所以,找了几天的FFT算法。最后找到了一份优秀的、容易理解原理的FFT算法代码。其中的过程极其坎坷,因为,大学学过的傅里叶变换算法课忘得差不多了。代码,一份一份地尝试。最后逐渐开始理解什么是旋转函数,开始理解采样率和输出最高频率的关系,开始理解了很多科技电视上带着半径线的一个一个同心圆在那不断旋转代表的含义,并且开始尝试着修改别人的代码。
实验硬件搭配上,起初觉得一个STM32板子带模数转换了就不需要再买音频外设了,但是我错了,简单的麦克风没有音频信号的波幅放大很难起到微弱声音数据的采集作用。于是,翻动了主板的数据手册,也买了不少AD、DA的小功能板。
动图是自学和研发FFT动态频谱图时的研究成果,当前这个版本的板子程序采用的是CubeIDE开发的代码,从逻辑上分析:没有问题。其中,ADC采样中断和时钟中断都采用了CubeIDE的配置实现。板子是STM32F103C8T6外加麦克风音频放大模块(外设),性能比较低,所以采样率控制在了300Hz以内,FFT旋转函数个数控制在了128个,输出只有64个有效频点。
感慨,STM32CubeIDE+Keil——无限可能。
也许我不该贴上FFT的算法实现,但,那是高等院校大学二年级必修课中所有人都需要做的编程实验。贴上,我参考的尚未知识收费的FFT代码参考地址:https://blog.csdn.net/qq_42528769/article/details/105599043
————www.v-signon.com学习者共勉