stm32f103+FFT+OLED的音乐频谱制作(只需三步即可)「建议收藏」

stm32f103+FFT+OLED的音乐频谱制作(只需三步即可)「建议收藏」效果演示:https://www.bilibili.com/video/av29366031/制作过程:1.准备材料:stm32f103核心板1块OLED12864显示屏1块(SPI接口)声音检测传感器1块(咪头+放大电路可以网上买现成的模块,也可根据后文提供的原理图自己做)2.硬件连接:(1)OLED连接:OLED_SCLK————PB7OL…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

效果演示: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倍增益可调。

这里如果考虑多一些,应当加一个低通滤波,去除高频信号的影响,防止出现频谱叠加,影响观赏效果。我们简单制作,就不考虑这个了。

下图是我自己做的咪头放大电路,原理图就是上面的。

咪头1

咪头2

(2)使用stm32的ADC去采集咪头电路输出的信号

因为我们的采样频率要固定在10KHz,所以这里使用定时器去触发ADC转换,再使用DMA搬运,最后使用stm32cubemx去配置这些硬件,生成基础代码即可。

1.adc配置

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

stm32f103+FFT+OLED的音乐频谱制作(只需三步即可)「建议收藏」
选择定时器来触发ADC转换
使能DMA传输
使能DMA传输

2.定时器配置

使能定时器时钟
使能定时器3时钟
配置定时器
配置定时器

3.系统时钟树

时钟树
时钟树

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

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

(二)信号处理

(1)移植官方DSP库

DSP库
标题

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

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

数据填充
在采集完256个点后进行FFT运算

(三)量化显示

(1)简单的GUI

GUI
ZLG_GUI方便绘图 不用GUI也可以 看自己需求

这里移植一个简单的GUI,方便绘制各种现实效果。

主界面
开机效果

(2)显示

显示

显示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的音乐频谱制作(只需三步即可)「建议收藏」
音乐频谱
stm32f103+FFT+OLED的音乐频谱制作(只需三步即可)「建议收藏」
时间显示

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179535.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 煤矿人员定位系统(福利院上班怎么样)

    每个孩子都是祖国的花朵,他们的健康成长是我们的责任.尤其是福利院的孩子,他们被遗弃,孩子的心理已经造成了创伤,此时,孩子们的心理及身体的健康,我们必须实时监控.这样我们就可以对孩子们进行实时监控,随时随地的了解孩子们的生命体征的各项数据.例如,孩子的血压,心跳等等.甚至还可以使用尿湿监测系统.对孩子的生理问题进行监测.福利院人员定位技术背景:福利院人员定位办理体系,将射频识别技术应用于孩子定位办理,别离于每个房间门口和每个楼层的出口以及每栋楼门口和公寓门口…

    2022年4月16日
    50
  • C语言实现-航空订票系统(飞机订票系统)单机版&联网版「建议收藏」

    C语言实现-航空订票系统(飞机订票系统)单机版&联网版「建议收藏」操作系统:Windows下运行。如果需要在Linux运行,则需要修改删除conio.h,自己写个头文件获取键盘输入。我已经写好了getch.h文件,需要将其导入使用。开发环境:CodeBlocks开发语言:C实现功能:登录,订票,退票数据存储:文本读写涉及文件:相关文件下载:码云:传送门GitHub:传送门相关图片(仅供参考):程序是没有涉及旅行社的ER…

    2022年6月15日
    30
  • glPushMatrix 与 glPopMatrix[通俗易懂]

    glPushMatrix 与 glPopMatrix[通俗易懂]1.原理讲解 终于明白为什么使用glPushMatrix()和glPopMatrix()的原因了。将本次需要执行的缩放、平移等操作放在glPushMatrix和glPopMatrix之间。glPushMatrix()和glPopMatrix()的配对使用可以消除上一次的变换对本次变换的影响。使本次变换是以世界坐标系的原点为参考点进行。下面对上述结论做进一步的解释:1)OpenGL中

    2025年7月7日
    2
  • serv-u搭建ftp服务器心得_U服务

    serv-u搭建ftp服务器心得_U服务1、先安装好Serv-U,并作为系统服务安装2、打开Serv-U,新建一个域3、添加用户4、解决阿里云专有网络的一个问题遇到一个情景:需要使用Serv-U进行FTP更新软件,其中使用PASV的连接方式,这种方式客户要求连接FTP的时候,Serv-U会随机产生一个端口发送给客户端,告诉客户端通过这个端口来发送文件;而阿里云专有网…

    2022年9月12日
    3
  • 计算机一级本本可以办吗,笔记本电脑卡怎么办,小编教你笔记本电脑太卡怎么解决…[通俗易懂]

    计算机一级本本可以办吗,笔记本电脑卡怎么办,小编教你笔记本电脑太卡怎么解决…[通俗易懂]电脑内的灰尘容易造成部件加快老化,导致硬件的运行迟钝,甚至导致一些因接触不良而无法正常开机。比如风扇,不及时的清理容易造成电脑的温度过高,则就容易电脑开机慢。那笔记本电脑太卡怎么解决?下面,小编给大家带来了笔记本电脑太卡的解决图文。相信很多人都有过以上的经历,其实刚买笔记本的时候,玩游戏开软件都是嗷嗷快,速度快的飞起,然而随着时间的推移,系统垃圾慢慢堆积导致系统运行缓慢。电脑在使用过程中太卡让很多…

    2022年9月11日
    3
  • 关于平面图到对偶图的转化

    关于平面图到对偶图的转化闲话哇对偶图真的是个好东西,昨天考NOI2010的时候前两道很快做完了,看着t3发呆了1个多小时,啥也想不出来.看着网格图突然想到听说bzoj1001狼抓兔子可以用对偶图求解.对偶图是啥我也不知道,听说把面看成点,连边后跑一边最短路就可以了.但是当时想到这个突然发现自己不会建对偶图,看时间还有一个多小时,于是建了8种可能的图,每一个都跑一遍spfa,发现有一个可以过样例,手

    2022年5月26日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号