1. 程式人生 > >stm32f103+FFT+OLED的音樂頻譜製作(乾貨 只需三步即可)

stm32f103+FFT+OLED的音樂頻譜製作(乾貨 只需三步即可)

製作過程:

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.程式下載

接下來將程式下載到微控制器即可,音樂頻譜就完成了!(別告訴我你連下載程式都不會 滑稽)

程式燒錄檔案 連結:https://pan.baidu.com/s/1EjKPvBFbTmYzzh6fSn0U5A 密碼:o6uu

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可參考這位大大的部落格(強烈推薦):

(一)音訊訊號的採集

(1)訊號來源於咪頭採集的聲音訊號,以下是原理圖:

咪頭放大電路

電路使用LM358搭建而成,採用單電源5V直流供電。由於微控制器的ADC不能採集到負值,所以我們需要把訊號加上了1/2Vcc的直流偏置,50倍增益可調。

這裡如果考慮多一些,應當加一個低通濾波,去除高頻訊號的影響,防止出現頻譜疊加,影響觀賞效果。我們簡單製作,就不考慮這個了。

下圖是我自己做的咪頭放大電路,原理圖就是上面的。

咪頭1

咪頭2

(2)使用stm32的ADC去採集咪頭電路輸出的訊號

因為我們的取樣頻率要固定在10KHz,所以這裡使用定時器去觸發ADC轉換,再使用DMA搬運,最後使用stm32cubemx去配置這些硬體,生成基礎程式碼即可。

1.adc配置

勾選通道

勾選ADC1的通道0 對應PA0引腳

選擇定時器來觸發ADC轉換

使能DMA傳輸

使能DMA傳輸

2.定時器配置

使能定時器時鐘

使能定時器3時鐘

配置定時器

配置定時器

3.系統時鐘樹

時鐘樹

時鐘樹

到此基礎配置完成,生成程式碼即可。這裡簡單的說一下流程,這裡配置的定時器觸發ADC轉換是硬體自動觸發,不會進入中斷,ADC轉換完直接由DMA傳輸到記憶體,只有等256點全部傳輸完才會進入到DMA的中斷,這樣保證了每個取樣點的間隔時間都是一致的。

關於stm32cubemx這個工具,作為開發來說十分便捷,大大縮短開發週期,但是想學習32的朋友來說,這個就不太理想了,學習還是建議使用標註庫和暫存器。這軟體配置生成的程式碼是用的hal庫,具體使用教程可以參考學習“硬石科技”的相關教程。

(二)訊號處理

(1)移植官方DSP庫

DSP庫

標題

(2)填充資料和計算幅值

資料填充

在採集完256個點後進行FFT運算

(三)量化顯示

(1)簡單的GUI

GUI

ZLG_GUI方便繪圖 不用GUI也可以 看自己需求

這裡移植一個簡單的GUI,方便繪製各種現實效果。

主介面

開機效果

(2)顯示

顯示

顯示2

顯示過程,就是把我們FFT計算出來的幅值量化顯示到我們螢幕上。比如我們在填充資料的時候是填充的ADC採集到的電壓對應的數字量,FFT計算出來後經過取模,得到一個該頻率點對應幅值的一個數字量。我們只需要對這個數字量進行處理即可,這裡處理方式每個人方法都有所不同,這裡我提供的可供參考。

至此基於stm32f103的FFT音樂頻譜製作流程就分享到這裡,小弟才疏學淺內容中有問題的地方還望斧正。歡迎轉載,請註明出處,謝謝大家。