效果演示: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配置

勾选ADC1的通道0 对应PA0引脚

选择定时器来触发ADC转换

使能DMA传输

2.定时器配置

使能定时器3时钟

配置定时器

3.系统时钟树

时钟树

到此基础配置完成,生成代码即可。这里简单的说一下流程,这里配置的定时器触发ADC转换是硬件自动触发,不会进入中断,ADC转换完直接由DMA传输到内存,只有等256点全部传输完才会进入到DMA的中断,这样保证了每个采样点的间隔时间都是一致的。

关于stm32cubemx这个工具,作为开发来说十分便捷,大大缩短开发周期,但是想学习32的朋友来说,这个就不太理想了,学习还是建议使用标注库和寄存器。这软件配置生成的代码是用的hal库,具体使用教程可以参考学习“硬石科技”的相关教程。

(二)信号处理

(1)移植官方DSP库

标题

可参考这位大大的博客:【玩转单片机系列002】 如何使用STM32提供的DSP库进行FFT - 依旧淡然 - 博客园

(2)填充数据和计算幅值

在采集完256个点后进行FFT运算

(三)量化显示

(1)简单的GUI

ZLG_GUI方便绘图 不用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 频谱

效果图

音乐频谱

时间显示

stm32f103+FFT+OLED的音乐频谱制作(只需三步即可)相关推荐

  1. STM32F103+FFT+OLED25664的音乐频谱制作分享(继续干货)

    前言:之前,笔者设计并制作了一个简单的FFT音乐频谱,并且分享了制作过程.本文是在原来的基础上做了一些修改. 效果演示:https://www.bilibili.com/video/av4791553 ...

  2. python发音机器人_只需三步,菜鸟也能用Python做一个简易版Siri

    原标题:只需三步,菜鸟也能用Python做一个简易版Siri 当下,各个手机厂商都陆续的推出了属于自己的智能手机机器人,像是苹果的Siri,小米的小爱,还有等等.这些智能机器人不仅仅方便了我们对于手机 ...

  3. 只需三步,完成图片批量分割

    我们在网络上浏览图片时,若加载一个大的图像,所需要的时间一般会很长.比如我们制作了一张大图或者长图,上传到网上,图片太大,加载时间过长,影响观感.普通的解决办法就是压缩图片,但是压缩图片会使图像质量受 ...

  4. iphone看python文件_Python实战 | 只需 ”三步“ 爬取二手iphone手机信息(转发送源码)...

    原标题:Python实战 | 只需 "三步" 爬取二手iphone手机信息(转发送源码) 本次实战是爬取二手苹果手机的信息,共爬取了300部手机信息,效果如下: 开发环境 环境:M ...

  5. 电视出现服务器无响应是怎么回事儿,电视运行卡顿无响应死机怎么办,只需三步让电视焕然一新!...

    原标题:电视运行卡顿无响应死机怎么办,只需三步让电视焕然一新! 智能电视运行时间过久,经常会发生卡顿无响应死机的情况,许多用户会觉得这是电视的问题,其实并不然.智能电视与手机电脑一样,平时需要使用者多 ...

  6. 简明教程:只需三步成功“硬刷”BIOS为SLIC 2.1完美激活Windows 7 / Vista / XP三大系统

    简明教程:只需三步成功"硬刷"BIOS为SLIC 2.1完美激活Windows 7 / Vista / XP三大系统 关于"硬刷"BIOS为SLIC 2.1,我 ...

  7. 计算机内存4g如何,电脑内存4G升到8G,只需三步,让你轻松搞定笔记本内存升级...

    今日看点:电脑内存4G升到8G,只需三步,让你轻松搞定笔记本内存升级 大家好,这期小编给大家讲讲怎么给笔记本升级电脑内存,小编现在用的是朋友的笔记本,小编发现朋友的笔记本的内存只有4GB.小编每次用p ...

  8. 【DB宝4】只需2步即可拥有Oracle19c的ASM+DB环境

    [DB宝4]只需2步即可拥有Oracle19c的ASM+DB环境 文章目录 目录 一.从Docker Hub下载小麦苗上传的镜像 二.创建容器 三.尽情使用吧 3.1 数据库使用示例: 3.2 在外部 ...

  9. 只需三步,不用下载Axure RP Extension for Chrome插件,即可看原型文件

    [本文参考]https://www.cnblogs.com/woods1815/p/9780683.html https://www.cnblogs.com/donglt-5211/p/9649768 ...

最新文章

  1. HDU1827(强连通分量)
  2. 【数据结构】回顾散列表
  3. Siverlight去掉ToolTip的白色边框
  4. CRI-O将如何把Kubernetes推上容器生态系统的中心位置
  5. c 结构体 不允许使用不完整的类型_.NET Core 基础类型介绍
  6. Bootstrap3 栅格系统-栅格参数
  7. 如果reporting server出现“无法安装打印控件”的处理方法。
  8. php 实时监测网站是否异常_网站跳转劫持解决,网站跳转劫持解决方法只有3步...
  9. Exchange server 2007启用 设置pop3
  10. http性能测试点滴
  11. 关于struts2 获取页面表单信息的个人做法
  12. Halo2 Map Editor Error
  13. 系统故障模拟及修复实验
  14. Java5线程并发库之同步集合
  15. 浪涌保护器ant120_菲尼克斯浪涌保护器
  16. 城市按首字母分类,各城市对应的县和区
  17. 如何使用python 给PDF生成目录
  18. Intel(R) Ethernet connection (2) I219-LM 设置抓取VLAN tag报文
  19. B树中的M阶是什么含义?
  20. excel 文件中新建的无法打开

热门文章

  1. 矩阵的特征值和特征向量的性质
  2. 读《摄影手册 玛格南成员大卫 赫恩谈艺录》
  3. 二叉树层序遍历(c语言,非递归)
  4. 开着v/p/n但pycharm导入第三方库报错问题
  5. 误删除了Adobe虚拟打印,如何恢复?
  6. 良心安利情人节插画素材网站
  7. c语言大作业书店图书管理系统,C语言课程设计书店管理系统.pdf
  8. HMI-62-【多媒体】空调部分 3
  9. python辅助开发模块(非官方)如pil,mysqldb,openpyxl,xlrd,xlwd
  10. OpenGL学习-高级OpenGL-ComputeShader