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