本期教程將會(huì)通過(guò)使用一塊帶有外置數(shù)字麥克風(fēng)和 TFT LCD 顯示屏的樹(shù)莓派 Pico 開(kāi)發(fā)板制作一個(gè)實(shí)時(shí)音頻光譜圖可視化器。有了它,你就可以將你周?chē)h(huán)境的實(shí)時(shí)聲音可視化表現(xiàn)出來(lái)!下圖是該工具運(yùn)行時(shí)的預(yù)覽圖。
這里使用到了 Adafruit PDM MENS 擴(kuò)展板(使用方法) 。我們還會(huì)使用一些常見(jiàn)的數(shù)字信號(hào)處理(DSP)技術(shù),直接在樹(shù)莓派 Pico 上處理數(shù)字音頻數(shù)據(jù)而不僅通過(guò) USB 線(xiàn)將數(shù)字音頻數(shù)據(jù)傳輸?shù)?PC 端。通過(guò)使用 DSP 技術(shù),將轉(zhuǎn)換后的音頻信號(hào)在帶有 Micro SD 卡擴(kuò)展板的 Adafruit 2.0 的 320×240 彩色 IPS TFT 顯示屏上實(shí)時(shí)顯示。
組件清單
樹(shù)莓派 Pico × 1
Adafruit PDM MEMS 麥克風(fēng)擴(kuò)展板 × 1
帶有 micro SD 卡擴(kuò)展板的 320×240 彩色 IPS TFT 顯示屏 × 1
全尺寸無(wú)焊面包板 × 1
公對(duì)公跳線(xiàn) × 20
烙鐵 × 1
焊絲 × 若干
什么是音頻頻譜圖?
音頻頻譜圖被用于將由振幅表示的實(shí)時(shí)音頻信號(hào)可視化為實(shí)時(shí)音頻信號(hào)的頻率的格式。
在下圖中,左側(cè)顯示的是原始音頻信號(hào),右側(cè)顯示的則是音頻信號(hào)的頻譜圖。
通過(guò)頻譜圖中的顏色強(qiáng)度,你可以看出音頻信號(hào)的振幅與其頻率之間是存在直接關(guān)聯(lián)性的。
有關(guān)用于創(chuàng)建音頻頻譜圖的 DSP 技術(shù)的更詳細(xì)概述,可查閱 Fixed-point DSP for Data Scientists 。
頻譜圖也用于基于機(jī)器學(xué)習(xí)(ML)的音頻系統(tǒng)中,將音頻信號(hào)轉(zhuǎn)換為一張頻譜圖,以便使用計(jì)算機(jī)視覺(jué)技術(shù)對(duì)音頻信號(hào)中的 2D“圖像表示”進(jìn)行界定。這在現(xiàn)實(shí)生活中例子有音頻或語(yǔ)音識(shí)別、關(guān)鍵詞識(shí)別。
示意圖
代碼
代碼文件在這里可以下載:
https://make.quwj.com/project/471
制作途徑
若想創(chuàng)建頻譜圖并將其實(shí)時(shí)在 LCD 屏幕上顯示,請(qǐng)按照下面的步驟操作。
1、使用數(shù)字麥克風(fēng)收集 N 個(gè)音頻樣本。
2、將漢寧窗 (Hanning window)應(yīng)用在收集到的音頻樣本中。
3、使用上一步的輸入運(yùn)行快速傅里葉變換 (RFFT)。
4、計(jì)算 RFFT 的幅度。
5、將每個(gè) RFFT 幅度映射一個(gè)顏色值以顯示在 LCD 顯示器上。
6、在 LCD 上顯示新行。
7、滾動(dòng)到新行并重復(fù)。
如果我們選擇 256 的 RFFT 大小,我們將有 128 個(gè)可用的幅度輸出并顯示在屏幕上,因?yàn)檫@小于顯示器每行的 240像素,所以我們可以顯示每行兩次,以最大化這塊屏幕的視覺(jué)可視性。
為了實(shí)現(xiàn)更快的視覺(jué)響應(yīng),我們可以一次從麥克風(fēng)中采集 64 個(gè)新的音頻樣本(而不是等待那 256 個(gè)新音頻樣本),并將它們與先前最新的 192 個(gè)(256-64)樣本在每個(gè)循環(huán)中相結(jié)合。在 16 kHz的采樣率下,我們將有 64/16000秒來(lái)執(zhí)行所有計(jì)算并更新顯示。這樣一來(lái),每一次迭代就只需4毫秒了。
我們將使用 Pico 專(zhuān)屬麥克風(fēng)庫(kù) microphone-library-for-pico ,從數(shù)字麥克風(fēng)捕獲數(shù)據(jù)。
Arm 的 CMSIS-DSP 庫(kù),將被用于實(shí)時(shí)處理音頻數(shù)據(jù)。
CMSIS-DSP 針對(duì) Arm Cortex-M 處理器進(jìn)行了優(yōu)化,包括基于 Raspberry Pi Pico 的RP2040 微控制器(MCU)的 Arm Cortex-M0+。Pico 的 ST7789 庫(kù)將用于驅(qū)動(dòng) ST7789 TFT 顯示器的輸出。
硬件設(shè)置
將公頭焊接在你的樹(shù)莓派 Pico 板,Adafruit PDM MEMS 麥克風(fēng)擴(kuò)展板和帶有 micro SD 卡擴(kuò)展板的 2 英寸320×240 彩色 IPS TFT 顯示器上,以便將它們插入面包板中。有關(guān)將 GPIO 引腳焊接至樹(shù)莓派 Pico。
待兩者被焊接好后,請(qǐng)將它們放置在試驗(yàn)板上,并按下圖所示設(shè)置接線(xiàn)。
布線(xiàn)設(shè)置的表格圖
完成后,你的面包板應(yīng)該是這樣的。
設(shè)置 Pico SDK 開(kāi)發(fā)環(huán)境
首先需要使用 Raspberry Pi 的 Pico SDK 和所需的工具鏈設(shè)置你的電腦。參考:
https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf
本指南的第 2.1 節(jié)可以被用于所有的操作系統(tǒng)。下面是各系統(tǒng)的專(zhuān)屬操作章節(jié)。
– Linux:2.2章節(jié)
– macOS:9.1章節(jié)
– Windows:9.2章節(jié)
獲取和編譯 Pico-audio-spectrogram 應(yīng)用
確保 PICO SDK 環(huán)境變量已設(shè)置。
export PICO_SDK_PATH=/path/to/pico-sdk
在終端窗口中克隆git存儲(chǔ)庫(kù)并更改目錄
cd ~/ git clone --recurse-submodules https://github.com/ArmDeveloperEcosystem/audio-spectrogram-example-for-pico.git cd audio-spectrogram-example-for-pico
創(chuàng)建生成目錄并將目錄更改為:
mkdir build cd build
運(yùn)行camake和make并進(jìn)行編譯:
cmake .. -DPICO_BOARD=pico make
按住主板上的 BOOTSEL 按鈕,同時(shí)使用 USB 電纜將主板插入你的電腦中。
將 audio_spectrogram.uf2 文件復(fù)制到已安裝的樹(shù)莓派 Pico 引導(dǎo)的 ROM 磁盤(pán):
cp -a audio_spectrogram.uf2 /Volumes/RPI-RP2/.
測(cè)試一下
你現(xiàn)在可以試著發(fā)出一些聲音,比如說(shuō)幾個(gè)不同的單詞,并在頻譜圖上看看會(huì)顯示出什么。
以下是發(fā)出“yes”一詞在顯示屏上的顯示的樣式。
同樣的,這是發(fā)出“no”一詞在顯示屏上顯示的樣式
“ESC-50:環(huán)境聲音分類(lèi)數(shù)據(jù)集”中的各種聲音示例如下圖所示:
總結(jié)
本指南介紹了如何使用一個(gè)帶有外部數(shù)字麥克風(fēng)和帶 TFT LCD 的 Raspberry Pi Pico 板制作實(shí)時(shí)音頻頻譜圖可視化工具。開(kāi)始時(shí),本項(xiàng)目使用了 Pico 專(zhuān)屬麥克風(fēng)庫(kù)使麥克風(fēng)一次捕獲64個(gè)音頻樣本,之后又使用 Arm 的 CMSIS-DSP 庫(kù)將音頻樣本轉(zhuǎn)換為頻譜圖。
最后使用 Pico 的 ST7789 庫(kù)一次一行的顯示在 TFT LCD顯示屏上。
-
mcu
+關(guān)注
關(guān)注
146文章
16796瀏覽量
349324 -
lcd
+關(guān)注
關(guān)注
34文章
4384瀏覽量
166673 -
顯示屏
+關(guān)注
關(guān)注
28文章
4421瀏覽量
73947 -
TFT
+關(guān)注
關(guān)注
10文章
381瀏覽量
110803 -
樹(shù)莓派
+關(guān)注
關(guān)注
116文章
1683瀏覽量
105388
原文標(biāo)題:樹(shù)莓派 Pico 實(shí)時(shí)聲音可視化顯示屏
文章出處:【微信號(hào):趣無(wú)盡,微信公眾號(hào):趣無(wú)盡】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論