stm32f103+FFT+OLED的音乐频谱制作(只需三步即可) |
您所在的位置:网站首页 › stm32f103核心板项目 › stm32f103+FFT+OLED的音乐频谱制作(只需三步即可) |
效果演示:FFT音乐频谱DIY STM32+OLED_哔哩哔哩_bilibili 制作过程: 1.准备材料:stm32f103核心板 1块 OLED12864显示屏 1块(SPI接口) 声音检测传感器 1块 (咪头+放大电路 可以网上买现成的模块,也可根据后文提供的原理图自己做) 2.硬件连接:(1)OLED连接: OLED_SCLK ———— PB7 OLED_SDIN ———— PB6 OLED_RST ———— PB5 OLED_RS ———— PB4 (2)声音检测传感器连接: 直接将模块的输出接到单片机的PA0即可。 OK硬件连接完成!就这么简单! 3.程序下载接下来将程序下载到单片机即可,音乐频谱就完成了!(别告诉我你连下载程序都不会 滑稽) 程序烧录文件(20220425更新)链接:https://pan.baidu.com/s/1EjKPvBFbTmYzzh6fSn0U5A 密码:o6uu 链接:https://pan.baidu.com/s/1SLYsAwYoKf0Wz6DgeLImYw 提取码:pbz3 程序源码:stm32f103+OLED12864+FFT音乐频谱(多种显示效果提供原理图)_fft音乐频谱-C文档类资源-CSDN下载 ps:以上就是简单的音乐频谱制作过程,下面是较为详细的制作过程,提供源码和原理图,有兴趣的同志们可以看看。 /************************分***********************************割***************************************线********************************/ 整体思路:1.使用ADC采集音频信号 2.使用官方提供的FFT函数对采集到的信号进行处理 3.量化显示 前言: 在人耳能听到的频率范围(20-20KHz)中,各类乐器和人声的频率大部分在5KHz以下。主要是在0-5KHz这段频率的频谱变化明显一些,所以观赏性更好。故我们设置采样频率为10KHz(根据采样定理,采样频率要大于信号最大频率的两倍,才能保证不失真)来采集这0-5KHz的音频信号。显示是使用的OLED12864屏,分辨率为128*64,在x轴方向上最多显示128个点,所以我们把采样点数设置为256个点,因为FFT计算出来的数据是对称的,我们只取一半,128个点刚刚好。 采样频率:Fs = 10KHz 样本数量:NPT = 256 这两个参数是FFT计算时候要用到的。 深入研究FFT可参考这位大大的博客(强烈推荐): http://www.opticsjournal.net/Mobile/postdetails/PT160728000122iOlRn?code=3&from=singlemessage&isappinstalled=0 如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧 - 知乎 (一)音频信号的采集(1)信号来源于咪头采集的声音信号,以下是原理图: 电路使用LM358搭建而成,采用单电源5V直流供电。由于单片机的ADC不能采集到负值,所以我们需要把信号加上了1/2Vcc的直流偏置,50倍增益可调。 这里如果考虑多一些,应当加一个低通滤波,去除高频信号的影响,防止出现频谱叠加,影响观赏效果。我们简单制作,就不考虑这个了。 下图是我自己做的咪头放大电路,原理图就是上面的。 (2)使用stm32的ADC去采集咪头电路输出的信号 因为我们的采样频率要固定在10KHz,所以这里使用定时器去触发ADC转换,再使用DMA搬运,最后使用stm32cubemx去配置这些硬件,生成基础代码即可。 1.adc配置 2.定时器配置 3.系统时钟树 到此基础配置完成,生成代码即可。这里简单的说一下流程,这里配置的定时器触发ADC转换是硬件自动触发,不会进入中断,ADC转换完直接由DMA传输到内存,只有等256点全部传输完才会进入到DMA的中断,这样保证了每个采样点的间隔时间都是一致的。 关于stm32cubemx这个工具,作为开发来说十分便捷,大大缩短开发周期,但是想学习32的朋友来说,这个就不太理想了,学习还是建议使用标注库和寄存器。这软件配置生成的代码是用的hal库,具体使用教程可以参考学习“硬石科技”的相关教程。 (二)信号处理(1)移植官方DSP库 可参考这位大大的博客:【玩转单片机系列002】 如何使用STM32提供的DSP库进行FFT - 依旧淡然 - 博客园 (2)填充数据和计算幅值 (1)简单的GUI 这里移植一个简单的GUI,方便绘制各种现实效果。 (2)显示 显示过程,就是把我们FFT计算出来的幅值量化显示到我们屏幕上。比如我们在填充数据的时候是填充的ADC采集到的电压对应的数字量,FFT计算出来后经过取模,得到一个该频率点对应幅值的一个数字量。我们只需要对这个数字量进行处理即可,这里处理方式每个人方法都有所不同,这里我提供的可供参考。 至此基于stm32f103的FFT音乐频谱制作流程就分享到这里,小弟才疏学浅内容中有问题的地方还望斧正。欢迎转载,请注明出处,谢谢大家。 // 2019/8/7 感谢支持,这里是两个版本的源码和资料,提供给大家学习使用! 链接:https://pan.baidu.com/s/1fP08HS4ZzPXqJA-OjOVSzA 提取码:t0y4 另外一个重制的OLED265*64版本,适合有一定动手能力和编程基础的朋友。 连接如下:STM32F103+FFT+OLED25664的音乐频谱制作分享(继续干货)_mc_li的博客-CSDN博客_oled 频谱 效果图 ![]() ![]() |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |