作者:Sandeep Mistry
发布于2021年9月15日 © Apache-2.0
使用树莓派Pico、数字麦克风和LCD显示器创建实时音频频谱图可视化仪。
本项目中使用的东西
硬件组件
手工工具和设备
故事
本指南是代表Arm软件开发团队创建的,请在Twitter上关注我们:@ArmSoftwareDev(https://twitter.com/armsoftwaredev)和YouTube:Arm软件开发人员(https://www.youtube.com/channel/UCHUAckhCfRom2EHDGxwhfOg) 以获取更多资源!
介绍
本指南将介绍如何使用带有外部数字麦克风和TFT LCD显示器的树莓派Pico卡来创建实时音频频谱图可视化仪。它将允许您看到周围音频环境的实时视觉表示!您可以在下面看到正在运行的项目的预览。
我们将使用相同的Adafruit PDM MEMS转接板,如《用树莓派Pico制作USB麦克风》指南中所用。但是,我们将使用一些常用的数字信号处理(DSP)技术在树莓派Pico上直接处理数字音频数据,而不是通过USB将数字音频数据发送到PC。音频信号将被转换成可以在Adafruit 2.0“320x240彩色IPS TFT显示屏上显示的内容,并使用DSP技术实时显示microSD卡插接。
什么是音频频谱图?
音频频谱图用于将随时间变化的振幅表示的音频信号可视化为显示信号中包含的频率如何随时间变化的格式。
在下图中,左侧显示原始音频信号,右侧显示音频信号的音频频谱图表示。
通过频谱图中的颜色强度,您可以看到音频信号的振幅与该信号中的相关频率之间的直接相关性。
有关用于创建音频频谱图的DSP技术的更详细概述,请查阅“面向数据科学家的定点DSP”数据科学深入指南。
频谱图也用于基于机器学习(ML)的音频系统,将音频信号转换为频谱图,以便使用计算机视觉技术对音频信号的2D“图像表示”进行分类。现实世界中的例子包括音频或语音识别,以及关键词识别。
处理管道
要创建光谱图并将其实时显示在LCD显示屏上,需要执行以下步骤:
1.从数字麦克风采集N个音频样本。
2.对采集的音频样本应用汉宁窗口。
3.使用上一步的输入运行真正的快速傅立叶变换(RFFT)。
4.计算RFFT的大小。
5.将每个RFFT幅值映射到要在LCD显示屏上显示的颜色值。
6.在LCD上显示新行。
7.滚动到新行并重复。
如果我们选择256的RFFT大小,我们将有128个可用的大小输出显示在屏幕上,因为这小于显示器每行的240像素,我们可以显示每行两次,以最大化显示器的视觉真实性。
为了更快的视觉响应时间,我们可以一次从麦克风中采集64个新的音频样本(而不是等待256个新样本),并将它们与每个周期以前的最新192个(256-64)样本相结合。如果采样率为16 kHz,我们将有64/16000秒来执行所有计算并更新显示。这将导致每次迭代4毫秒。
我们将使用Pico的麦克风库从数字麦克风捕获数据。Arm的CMSIS-DSP库将用于实时处理音频数据。CMSIS-DSP针对Arm Cortex-M处理器进行了优化,包括树莓派Pico的RP2040微控制器(MCU)所基于的Arm Cortex-M0+。用于Pico的ST7789库将用于驱动ST7789 TFT显示器的输出。
硬件设置
将公头焊接到树莓派 Pico板、Adafruit PDM MEMS麦克风转接板(https://www.adafruit.com/product/3492)和带有microSD卡转接板的2“320x240彩色IPS TFT显示屏上(https://www.adafruit.com/product/4311),以便插入转接板。请参阅MagPi的“如何将GPIO引脚头焊接到树莓派Pico上”(https://magpi.raspberrypi.org/articles/how-to-solder-gpio-pin-headers-to-raspberry-pi-pico)更多关于将引脚头焊接到树莓派 Pico板的详细信息指南。
两个项目焊接完成后,将其放置在试验板上,并按如下方式设置接线:
表格格式的布线设置:
之后,您的试验板应如下所示:
设置Pico SDK开发环境
您首先需要使用树莓派Pico SDK和所需的工具链来设置计算机。
有关更多信息,请参阅“树莓派Pico入门”(https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf)。
本指南第2.1节可用于所有操作系统,然后是操作特定章节:
- Linux:第2.2节
- MacOS:第9.1节
- Windows:第9.2节
获取和编译pico-audio-spectrogram应用程序
确保设置了PICO_SDK环境变量。
export PICO_SDK_PATH=/path/to/pico-sdk
在终端窗口中,克隆git 代码库并更改目录:
cd ~/
git clone --recurse-submodules https://github.com/ArmDeveloperEcosystem/audio-spectrogram-example-for-pico.git
cd audio-spectrogram-example-for-pico
创建生成目录并将目录更改为:
mkdir build
cd build
运行cmake和make进行编译:
cmake .. -DPICO_BOARD=pico
make
按住主板上的BOOTSEL按钮,同时使用USB电缆将主板插入计算机。
将audio_spectrogram.uf2文件复制到安装的树莓派Pico引导ROM磁盘:
cp -a audio_spectrogram.uf2 /Volumes/RPI-RP2/.
测试它
您现在可以尝试各种声音,包括说不同的单词,以查看它们在光谱图上的实时外观。
下面是一个在屏幕上说出“Yes”一词的示例:
类似地,这就是在显示屏上说出“No”一词时的样子:
“ESC-50:环境声音分类数据集”(https://github.com/karolpiczak/ESC-50)中的各种声音示例如下:
结论
本指南介绍了如何使用带有外部数字麦克风和TFT LCD的树莓派Pico板创建实时音频频谱图可视化工具。该项目使用Pico的麦克风库从麦克风一次捕获64个音频样本,然后使用Arm的CMSIS-DSP库将音频样本转换为频谱图,然后使用Pico的ST7789库在TFT LCD显示屏上一次显示一行。
您可以在以下GitHub存储库中看到该项目的代码:https://github.com/ArmDevelop...
了解更多
在即将到来的Arm DevSummit(10月19日至21日为期3天的虚拟活动)上,提高技能并使用tinyML获得实践经验。该活动包括tinyML计算机视觉真实世界嵌入式设备研讨会,以及使用基于Arm Cortex-M的MCU构建大词汇量语音控制。我们希望在那里见到你!
附加树莓派RP2040资源
有关使用树莓派RP2040的更多教程,请查看以下项目:
用树莓派Pico制作USB话筒(https://www.hackster.io/sande...)
如何将LoRaWAN加入树莓派(https://www.raspberrypi.org/b...)
使用LoRaWAN将您的Adafruit Feather RP2040连接到Things Network V3(https://www.hackster.io/sande...)
在树莓派Pico上启用以太网连接(https://github.com/sandeepmis...)
低功耗物联网入侵者探测器,基于树莓派4和Pico(https://www.hackster.io/grisa...)
原理图
试验板图
https://hacksterio.s3.amazona...
代码
Audio Spectrogram Example for Pico - GitHub repository