DataScope虚拟示波器与复利叶变换(FTT),STM32如何识别声音频谱

2020-2-26 20:44 2641 57

不知道大家有没有自己动手做过MP3,阿圆以前用STC,VS1003模块,SD及1602液晶现示屏做了一个能播放歌词的简易MP3播放器,当时有个遗憾就是播放音乐没有能显示频谱,后来也不了了之,现在突然想起来,就想,如果是STM32的话应该如何识别出声音的频谱呢?这就要说到今天的主角CMSIS DSP这个库,当然,阿圆今天也是来安利一下一个好用的软件虚拟示波器DataScope,嘿嘿嘿。

今天的代码会很简单,但是背后的数学原理却很复杂,不过只是为了拿到声音的频谱到并不是很复杂的事,阿圆也会借助这个机会向大家展示虚拟示波器的使用(非常好用)

[1]首先下载虚拟示波器

DataScope 串口虚拟示波器v1_0.zip(大家自行百度搜索下载啦或者发私信给阿圆也是可以的)

[2]使用STM32CubeMx新建一个带USART的FFTTest工程,并用Keil打开

[3]要使用虚拟示波器需要在工程中添加虚拟示波器下位机代码,这个代码可以在刚才下载的压缩包里找到,将DataScope_DP.CDataScope_DP.h添加到工程即可

「话说嵌入式」虚拟示波器与复利叶变换(FTT)浅谈

[4]要测试虚拟示波器,需要将开发板的USART接到PC,并用管理员权限打开Data_Scope.exe,这里阿圆有点不明白为什么一定需要管理员权限?

「话说嵌入式」虚拟示波器与复利叶变换(FTT)浅谈

可以看到虚拟示波器右侧最多可以支持10个通道数据的显示,足够用了

「话说嵌入式」虚拟示波器与复利叶变换(FTT)浅谈

[5]在Keil工程合适的位置添加下面的函数就可以将数据通过USART打到PC的虚拟示波器上了,

「话说嵌入式」虚拟示波器与复利叶变换(FTT)浅谈

DataScope_Data_Generate的2就是通道数,for循环就是通过串口发送数据,很简单。

到这里虚拟示波器就可以工作了(前提当然是要配置好串口了)

现在来添加复利叶变换(FFT)函数

[1]要使用CMSIS DSP需要使用KEIL5的Pack管理安装CMSIS DSP的函数库

「话说嵌入式」虚拟示波器与复利叶变换(FTT)浅谈

没有得话,自己去下载一下~

[2]将DSP库-arm_cortexM4lf_math.lib添加到我们一开始创建的USART工程当中

「话说嵌入式」虚拟示波器与复利叶变换(FTT)浅谈

阿圆用的是STM32F437ZGT6,所以使用的是M4的math库,如果是其它平台,如STM32F103就要用M3的库。

正常来说库的路径为

C:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.11.0\Drivers\CMSIS\Lib\ARM

其它M4b和M4bf分别代表M4内核,大端模式不带FPU和带FPU两种模式

M4l和M4lf分别代表M4内核,小端模式不带FPU和带FPU两种模式

当然CMSIS DSP的功能并不只是用来作复利叶变得而已,它支持

  • 基本数学函数

  • 快速数学函数

  • 复杂数学函数

  • 滤波器

  • 矩阵运算函数

  • 变换函数

  • 电机控制函数

  • 统计函数

等等

[3]那现在就可以开始码代码,添加好所需要的头文件

「话说嵌入式」虚拟示波器与复利叶变换(FTT)浅谈

定义好我们的需要用到一些变量

「话说嵌入式」虚拟示波器与复利叶变换(FTT)浅谈

现在来生成采样频率为50Hz的正弦波

「话说嵌入式」虚拟示波器与复利叶变换(FTT)浅谈

使用CMSIS DSP库进行FFT变换,并通过虚拟示波器打印出来

「话说嵌入式」虚拟示波器与复利叶变换(FTT)浅谈

核心函数就是arm_rfft_fast_f32arm_cmplx_mag_f32对时域的数据转换频域

其中arm_max_f32可以直接从生成的频谱中取出频率响应最高的一个频率。

要问阿圆为什么这么变化,阿圆的数学也不是很好,哈哈~大写的尴尬!

[4]现在让我们运行看一看效果

「话说嵌入式」虚拟示波器与复利叶变换(FTT)浅谈

红线曲线是我们手动手成的正弦波,而白色曲线就是得到的频谱。那为什么刚好是在20那儿达到最大值呢,20又代表什么?

在生成正弦波时我们的采样周期是50Hz,而正弦波的周期是1KHz,所以就很好理解了,20的单位正是50HZ,即50Hz*20=1KHz

好啦,今天呢简单熟悉了CMSIS DSP的使用,确实很强大,同时也安利了一个调试曲线的利器DataScope,觉得有帮助的同学可以点赞关注收藏啦~ 今天阿圆的分享就到这里~

推荐阅读
图神经网络概念及数据方法入门 2020-02-28 13:43
物联网气体传感器有何不同,气体传感器集成到空气质量监测 2020-07-21 12:02
ai强化学习的公平性 2019-11-12 11:30
工业自动化中LED照明技术特征、对比、散射率等 2019-12-04 18:04
FPGA! SignalTap II 软件调试-新建工程图解 2019-11-13 14:59