今天給大伙們帶來一款開發(fā)板,名字叫STM32F746DISCO,是云漢社區(qū)送給我評測的,我用它做了個音頻信號分析器。
其實,我在云漢還有另一個昵稱,叫做MC老徐,就是業(yè)余時間喜歡玩點freestyle,比如瞎彈或者瞎唱個調調。
當然,這些調調都是我現場即興瞎編的。比如這個螢火蟲板子的這個測試http://www.ickey.cc/e/video/detail/107.html
你會發(fā)現2分40秒時候,背景音樂竟然從《千本櫻》變成了《極樂凈土》,然后4分00秒又變成了《aLIEz》
我老婆說我唱歌雖然習慣性跑調,但是嗓音很有磁性。
我覺得老婆說得對。。。。。
但是“磁性”這個詞語太玄幻,我們應該用一個更準確的標準來定義這個“磁性”。我覺得我這種特殊的嗓音是來自喉腔管道引入的高次諧波失真。
“高次諧波失真”這個詞可能太嚴肅了,在音樂界,這種由音腔引起的諧波失真還有個更美妙的名字,叫做泛音。比如我們夸某某樂器的聲音好聽,常會夸它泛音豐富。
當然,我不能這么恬不知恥地,平白無故地自己夸自己“泛音豐富”。
作為一個有節(jié)操有底線的物理博士,我需要用科學方法來自證清白。
為了證明自己嗓音真的是“泛音豐富”,我記錄了自己用“啊”音唱小字一組C音(約260赫茲)時候的數據,然后用快速傅里葉算法分析了頻譜。
這里非常感謝數學家和物理學家傅里葉為我們提供的好工具。
我終于把信號分析器做出來了。結果表明,我的泛音確實很豐富。除了基頻260赫茲附近的根音,泛音一直延伸到了一千赫茲以上。
程序代碼是這樣的。
先定義(快速傅里葉變換)FFT時候需要用到的參數。
然后定義繪圖坐標軸的位置和顏色
接著繪制按鈕
麥克風收到的音頻信號存入sn數組變量
把sn數組畫一下,這個是波形圖
最后做快速傅里葉變換,從時域空間轉換為頻域空間,并畫個頻譜圖。
接著,我把程序編譯出一個bin文件,并燒寫到了板子上。
為了驗證這個項目在各頻段下的穩(wěn)定性,我們要找個音準好一點的設備來做測試音源。
我們打開Adobe公司的專業(yè)音頻處理軟件Audition,先新建一段空音軌。
然后填充標準440Hz正弦波,這個是模擬小字一組的A音。這個A音正是《小星星》開頭的那個“索索嘟嘟啦啦嗦”里的那個“嘟”音,唱歌時候經常會用到的。
然后讓電腦的揚聲器播放這段聲音。板子的麥克捕獲這段聲音并做FFT。
我們看看分析結果??梢詮膱D里發(fā)現440Hz那兒功率比較大。
然后,我們再生成一段1千赫茲正弦波的聲音。
同樣地,揚聲器播放這個聲音。板子的麥克風捕獲,并做FFT。下圖中的數據非常漂亮。
我們再試試更高的頻率。生成一段3千赫茲的正弦波形。
同樣的套路,電腦揚聲器播放,然后板子采集并FFT。
分析結果仍然非常漂亮。很準確地捕獲到3千赫茲那個信號。
如果聲音更復雜一些呢,比如來個和弦。
我們以1千赫茲作為根音,做個復雜的和弦。
這次要發(fā)出來的聲音復雜了。信號的波形圖和頻譜圖是這樣的。
揚聲器發(fā)聲。然后,板子麥克風采集并做FFT。下圖是數據分析結果,很準,完全符合預期。
以上測試可以驗證我們這個音頻信號分析器的性能是正常的。
另外,我那個被測出來嗓音“泛音豐富”的結果,也真實有效。
評論