首頁 > 評測 > 每個(gè)板子都能歌唱:嵌入式系統(tǒng)與音頻處理(緣起)

每個(gè)板子都能歌唱:嵌入式系統(tǒng)與音頻處理(緣起)

  • 作者:zhanzr
  • 來源:21ic
  • [導(dǎo)讀]
  • 老司機(jī)帶你打破音頻高大上的神話

圖片1.jpg

寫在前面:

21ic打算攜手資(tu)深(ding)直男癌晚期工程師zhanzr21,來給大家講一講嵌入式系統(tǒng)與音頻處理的故事。

關(guān)于zhanzr21

曾經(jīng)混跡于兩岸三地,摸爬滾打在前端后端,搞過學(xué)術(shù)上過班,F(xiàn)在創(chuàng)業(yè)中,歡迎各種撩

點(diǎn)擊鏈接加入群【嵌入式音頻信號(hào)處理】:https://jq.qq.com/?_wv=1027&k=45wk8Ks

 

1. 本系列寫作動(dòng)機(jī)與目的

一半因?yàn)楣ぷ髟?一半因?yàn)閭(gè)人興趣,本文作者隔三岔五地要跟音頻處理打交道.音頻處理尤其是嵌入式系統(tǒng)上的音頻處理在很長一段時(shí)間曾是作者工作中最有壓力的一部分.原因在于其對于非計(jì)算機(jī)非數(shù)學(xué)專業(yè)經(jīng)歷的工程師(如作者)來講, 涉及理論知識(shí)面廣(比如壓縮算法非常繁多),而實(shí)踐中遇到問題非常難以調(diào)試. 所謂久病成醫(yī),在長期戰(zhàn)斗中作者也算是總結(jié)了一定的心得.于是想試著寫一點(diǎn)出來.寫作的動(dòng)機(jī)大致有兩個(gè): 一是為了分享自己心得,二是向高人請教. 在編輯的建議下,以系列文章的形式和大家討論一下嵌入式系統(tǒng)的音頻處理這個(gè)話題.

首先不得不提的是,這個(gè)標(biāo)題"嵌入式系統(tǒng)與音頻處理"也是折磨了我許久. 非常害怕標(biāo)題不夠準(zhǔn)確, 故此先解釋一番. 文章中的許多內(nèi)容屬于信號(hào)處理,軟件算法優(yōu)化方面,如頻譜分析,時(shí)分復(fù)用,采樣,IDCT. 但作者著重于它們在音頻信號(hào)處理領(lǐng)域的應(yīng)用. 標(biāo)題的定語是"嵌入式系統(tǒng)", 但是讀者很快就會(huì)發(fā)現(xiàn)文中將會(huì)出現(xiàn)"C++,Windows API, Python, Matlab"等不那么"嵌入式"的元素. 但這正是音頻處理的特點(diǎn), 一般來講嵌入式系統(tǒng)只是最后代碼運(yùn)行的地方, 而分析, 處理, 傳輸, 設(shè)計(jì)音頻則經(jīng)常會(huì)涉及到上位機(jī), 網(wǎng)絡(luò).

曾幾何時(shí), 數(shù)字音頻處理一度是一般嵌入式系統(tǒng)高攀不起的應(yīng)用. 但是隨著硬件成本的下降與處理能力/容量的上升, 數(shù)字音頻處理已經(jīng)漸漸地成為了嵌入式系統(tǒng)的日常任務(wù). 本文的目的是介紹與討論如何在一般的嵌入式系統(tǒng)上進(jìn)行數(shù)字音頻處理. 專業(yè)的音頻DSP,ASIC當(dāng)然還是站在發(fā)展的前沿, 但是讀完本系列的讀者將會(huì)發(fā)現(xiàn), 它們和一般嵌入式音頻處理系統(tǒng)區(qū)別并不大.

2.計(jì)劃覆蓋范圍

系列文章將采取連載的方式, 計(jì)劃至少每周寫一篇. 計(jì)劃按照理論+實(shí)踐結(jié)合的方式進(jìn)行, 盡量多一些趣味性與可操作性的內(nèi)容, 而避免純理論的長篇大論. 討論的范圍包括數(shù)字音頻信號(hào)的原理, 處理和基本的實(shí)踐(播放,錄制,壓縮,傳輸). 大多數(shù)文章覆蓋一個(gè)主題, 某些復(fù)雜一點(diǎn)的主題需要多篇文章. 文章中附帶的實(shí)驗(yàn)代碼/資源也會(huì)打包以供讀者方便地做實(shí)驗(yàn).

即使已經(jīng)加了若干限定, 嵌入式系統(tǒng)的音頻處理依舊是個(gè)很廣泛的話題, 為了防止作者和讀者被漫無邊際的頭緒所淹沒, 這里打算把討論的范圍限定一下:

§ 音頻信處理分為模擬部分和數(shù)字部分,本文除非必要,不涉及純模擬部分(如AM廣播原理,但會(huì)討論各種放大器,因?yàn)镈類放大器這種就屬于數(shù)字領(lǐng)域).

§ 不涉及過于前沿的內(nèi)容(事實(shí)上這也超出了作者的能力).

§ 已經(jīng)不再普遍使用的技術(shù)也不予以討論(不討論愛迪生發(fā)明的留聲機(jī)的基本原理,不討論怎樣使用電腦的主板揚(yáng)聲器播放音樂).

§ 不涉及音頻的二次處理 (比如語音識(shí)別, 語音合成, 3D虛擬音效環(huán)境).

§ 有內(nèi)置固件與算法的嵌入式芯片(如VS1003或者炬力的MP3主控之類)也不被討論,本文涉及的嵌入式系統(tǒng)將是通用的MCU或者DSP都能構(gòu)建的類型.

總而言之,本文將著重討論一些音頻處理中最基本, 必須了解的理論, 和最普遍的嵌入式系統(tǒng)的工程實(shí)踐. 因此資深的音頻發(fā)燒友有可能會(huì)覺得有點(diǎn)淺顯, 這正是作者想要達(dá)到的效果.

如上所敘, 本文將采取理論與實(shí)踐結(jié)合的方式展開描述. 這里也對要使用的工具, 平臺(tái)做一點(diǎn)限定:

§ 軟件代碼方面在上位機(jī)以python和C/C++為主, 偶爾會(huì)插一點(diǎn)別的代碼比如Matlab/Octave. 嵌入式平臺(tái)使用C/C++/ASM.

§ 硬件平臺(tái)方面以ARM Cortex M的處理器為主.板子盡量使用廠商的官方開發(fā)板(比如STM的Discovery板子).如果官方的板子不能滿足需求,將會(huì)另外采購或者自制硬件以展示.

§ 工具方面盡量使用open source的和容易獲取的,避免要另外安裝或者編譯的不常用的包.除了上述的python,C/C++編譯器工具和Matlab/Octave之外,Audacity是使用比較多的輔助工具.

§ 將給出所有實(shí)驗(yàn)的源代碼與硬件原理圖,以及相應(yīng)的工程.

[作者個(gè)人觀點(diǎn): 通用實(shí)驗(yàn)代碼為何偏向于Python? 因?yàn)镻ython代碼不需要編譯連接的環(huán)節(jié),在做需要頻繁處理數(shù)據(jù)的實(shí)驗(yàn)時(shí)比C/C++更有效. 還不熟悉Python的工程師建議邊閱讀邊打開python環(huán)境一起做實(shí)驗(yàn).你會(huì)認(rèn)可作者的觀點(diǎn). 除非用Python比較難以實(shí)現(xiàn)的功能,比如調(diào)用一些沒有標(biāo)準(zhǔn)Library的系統(tǒng)函數(shù),將會(huì)轉(zhuǎn)向C/C++.]

[作者個(gè)人觀點(diǎn): 既然如此推崇Python,何不在嵌入式系統(tǒng)上也用Python? 作者認(rèn)為Python的優(yōu)勢在于有很多可以立即使用的標(biāo)準(zhǔn)Library.嵌入式平臺(tái)受限于資源,目前沒有比較標(biāo)準(zhǔn)的Library集合. MicroPython這種目前還只停留在玩具與概念性的階段的軟件包,目前如果不能說是不切實(shí)際的話,至少是過于超前.]

[作者個(gè)人觀點(diǎn): 所謂的嵌入式系統(tǒng)指怎樣的系統(tǒng)? 本文所指的嵌入式系統(tǒng)指那種沒有外接存儲(chǔ)器或者只有很少量的外接存儲(chǔ)器,沒有MMU,沒有跟桌面系統(tǒng)類似OS的嵌入式系統(tǒng).如ST公司的Discovery開發(fā)板,Nucleo開發(fā)板子,乃至于Arduino系列開發(fā)板都是本文所指的嵌入式系統(tǒng)的范例. Rasperry Pi這種跑標(biāo)準(zhǔn)Linux/Android的系統(tǒng),如果非要被稱之為嵌入式系統(tǒng),也只能說是另一種嵌入式系統(tǒng)不在本文討論范圍之類.在這種嵌入式系統(tǒng)上進(jìn)行數(shù)字音頻處理的讀者應(yīng)該直接找一些Linux/Android系統(tǒng)上的教程來讀,因?yàn)樗鼈冎g的區(qū)別很少.]

3. 面向的讀者

文章面向的讀者是嵌入式系統(tǒng)的程序員或者其他對這個(gè)主題感興趣的人. 所需要的準(zhǔn)備知識(shí)是基本的軟件, 硬件, 數(shù)學(xué)的概念. 興趣是最好的老師,讀者如果對此方面的知識(shí)沒有興趣,將會(huì)發(fā)現(xiàn)這是一堆枯燥的文字與代碼與幾塊暗淡的電路板.

搞技術(shù)的沒有不喜歡音樂的, 即使不是每個(gè)人都每天聽歌, 現(xiàn)代人每天都要使用大量的程序員在音頻處理方面的工作成果(手機(jī), 電腦, 廣播, 公交車報(bào)站....). 所以作者相信這是一個(gè)有意思, 值得深入一點(diǎn)學(xué)習(xí)的話題. 當(dāng)然作者水平有限,懇請大家多多包涵與反饋.

4.計(jì)劃的目錄

如前所述, 這個(gè)系列將以連載形式進(jìn)行. 所以目錄只是個(gè)大致的提綱, 標(biāo)明一下整個(gè)系列所要包括的主題. 作者可能會(huì)根據(jù)各種情況(如讀者反饋), 對某些章節(jié)進(jìn)行一些順序調(diào)整與擴(kuò)展/縮減.

1. 聲音的基本原理,數(shù)字音頻處理系統(tǒng)的基本組成,并展示本系列主要使用的某些工具.本節(jié)實(shí)驗(yàn): 用代碼生成原始的音頻數(shù)據(jù),觀察它們的形狀,用工具播放他們,發(fā)揮你們的想象力進(jìn)行調(diào)整.

2. 嵌入式系統(tǒng)的音頻硬件基本配置,錄制,播放,壓縮. 本節(jié)實(shí)驗(yàn)以STM32F769Discovery開發(fā)版為例, 播放代碼生成的原始音頻與錄制聲音.

3. WAVE以及相似格式簡析.生成Wav,解碼Wav.本節(jié)實(shí)驗(yàn):使用Windows API/Python播放wav文件.將電腦上已有wav傳至開發(fā)板子進(jìn)行播放.

4. 音頻帶寬,壓縮,ITU的標(biāo)準(zhǔn)系列介紹,最流行的標(biāo)準(zhǔn)MP3介紹及理論.本節(jié)實(shí)驗(yàn):開發(fā)板移植解碼庫并且播放MP3文件.

5. G711標(biāo)準(zhǔn)(A-Law,uLaw)介紹及其理論分析.本節(jié)實(shí)驗(yàn):開發(fā)板上完成錄制->A-Law存儲(chǔ)->轉(zhuǎn)u-Law->解碼播放.中間文件可導(dǎo)出.

6. G726標(biāo)準(zhǔn)(ADPCM)介紹及其理論分析.本節(jié)實(shí)驗(yàn):開發(fā)板上完成錄制->ADPCM存儲(chǔ)->解碼播放. 中間文件可導(dǎo)出.

7. Speex/Vorbix介紹及其理論分析.本節(jié)實(shí)驗(yàn):開發(fā)板上完成錄制->Speex存儲(chǔ)->解碼播放. 中間文件可導(dǎo)出.

8. 數(shù)字濾波器的介紹及其理論分析,在Matlab的輔助下在開發(fā)板子上設(shè)計(jì)高通/低通濾波器.本節(jié)實(shí)驗(yàn):錄制一段音頻,分別加上高通低通濾波器觀察效果.

9. FFT變換與其用途簡介.本節(jié)實(shí)驗(yàn):做一個(gè)頻譜同步顯示功能.

10. BIQUAD濾波器與其用途簡介.本節(jié)實(shí)驗(yàn):做一個(gè)頻譜效果調(diào)整器(Graphic Equalizer).

11. MP3簡介與分析.本節(jié)實(shí)驗(yàn):MP3解碼的過程分析.

12. 擴(kuò)展內(nèi)容,USB音頻傳輸簡介.本節(jié)實(shí)驗(yàn):用開發(fā)板做一個(gè)USB聲卡.

13. 擴(kuò)展內(nèi)容,利用PC聲卡制作信號(hào)發(fā)生器

14. 擴(kuò)展內(nèi)容,利用PC聲卡制作示波器

15. 擴(kuò)展內(nèi)容,SPDIF標(biāo)準(zhǔn)及其簡介.本節(jié)實(shí)驗(yàn):做一個(gè)SPDIF音頻傳輸Demo.

16. 擴(kuò)展內(nèi)容,廣播音頻簡介以及DAB.本節(jié)實(shí)驗(yàn):分析拆解DAB收音機(jī).

17. 擴(kuò)展內(nèi)容,Shoutcast網(wǎng)絡(luò)音頻協(xié)議介紹以及實(shí)現(xiàn).本節(jié)實(shí)驗(yàn):開發(fā)板播放Shoutcast電臺(tái).

18. 擴(kuò)展內(nèi)容,最低成本的音頻播放與錄制硬件制作(Cortex M控制器 + MiC + PWM+可充電池+顯示器+Flash).本節(jié)實(shí)驗(yàn):音頻播放錄制硬件制作.

19. 擴(kuò)展內(nèi)容,情懷篇之一:PC音頻硬件小史, 本節(jié)實(shí)驗(yàn): 程序控制PC系統(tǒng)中的揚(yáng)聲器.

20. 擴(kuò)展內(nèi)容,情懷篇之二:NES系統(tǒng)音頻硬件簡介, 本節(jié)實(shí)驗(yàn): 分析/Hack NES的APU模擬代碼.

  • 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!

網(wǎng)友評論

  • 聯(lián)系人:巧克力娃娃
  • 郵箱:board@21ic.com
  • 我要投稿
  • 歡迎入駐,開放投稿

熱門標(biāo)簽
項(xiàng)目外包 more+