|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
音頻壓縮 |
| 作者:hanyafeng 欄目:單片機(jī) |
可能搞過的人都知道:音頻壓縮無外乎G.721等等標(biāo)準(zhǔn),好像沒有什么簡單方法。對于希望用單片機(jī)就實現(xiàn)語音的數(shù)字化實現(xiàn)標(biāo)準(zhǔn)壓縮有困難。 研究過AVR提供的資料,關(guān)于音頻壓縮的文章。我得出一下結(jié)論:使用AD實現(xiàn)語音級(4K赫茲范圍內(nèi)的)壓縮是可行的。 |
| 2樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/5 13:33:00 發(fā)布:
繼續(xù) 首先,必須將語音的電壓動態(tài)范圍規(guī)定在一定范圍內(nèi)--標(biāo)準(zhǔn)1Vpp。對應(yīng)于8位采樣、5V范圍來講,相當(dāng)于1/5 * 256 = 52個變化量。如果將語音放在3.3V范圍內(nèi)數(shù)據(jù)量會更大。 |
|
| 3樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/5 13:39:00 發(fā)布:
繼續(xù) 以下的內(nèi)容是我想出來的。 首先,我將音頻信號經(jīng)過電容濾波然后置于2.5V的中心電平位置,然后用3.3V的AD口轉(zhuǎn)換。你會發(fā)現(xiàn)2.5V對應(yīng)數(shù)字量是0xC0到C2之間(2.5/3.3 * 256 = 194),而到3.3V滿量程0.7V的余量。我們發(fā)現(xiàn)已經(jīng)滿足1Vpp的要求。 |
|
| 4樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/5 13:48:00 發(fā)布:
繼續(xù) 在這種情況下,你得到了一個非常好的結(jié)果: 0x80 -- 0xC2 -- 0xFF的語音動態(tài)范圍。 對應(yīng)二進(jìn)制就是: 10000000 11000010 11111111 如果我們將頭一位去掉:0000000 1000010 1111111 如果我們再去掉后三位:0000 1000 1111 結(jié)果就是將8位的音頻壓縮為4位,損失了3位的精度。對應(yīng)于電平值呢,就是在8 / 256 * 3.3V = 0.1V 內(nèi),ADC失去了辨別電平差異的能力。 |
|
| 5樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/5 13:51:00 發(fā)布:
繼續(xù) 在1.4V的范圍內(nèi)不能量化0.1V,相當(dāng)于1 / 14 = 0.07的量程。個人認(rèn)為是可以接受的。 |
|
| 6樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/5 13:53:00 發(fā)布:
繼續(xù) 輸出的時候,只需將4位數(shù)據(jù)左移4位: 0000變成00000000,1000變成10000000,1111變成11110000就可以滿足你輸出變量程的要求了。 |
|
| 7樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/5 13:56:00 發(fā)布:
繼續(xù) 采樣頻率推薦16K,這樣可以滿足4KHz的語音信號的要求。就是16 * 8 = 128Kbit/s 變成了 64Kbit/s = 8 Kbyte /s了。 |
|
| 8樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/5 13:58:00 發(fā)布:
繼續(xù) 我想每秒8000個字符的傳輸應(yīng)該很容易了。當(dāng)然,如果你想將數(shù)據(jù)壓縮為2,3位也是可以的。 |
|
| 9樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/5 14:01:00 發(fā)布:
歡迎拍磚 這個方法很像g.711的壓縮方法,不采用使用音頻編解碼芯片而實現(xiàn)g.xxx編解碼好像比較困難。 |
|
| 10樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/5 14:04:00 發(fā)布:
繼續(xù) 因為量化pcm值可能用到浮點運算或者是多次移位和相加,很是費MIPS。使用我想的方法就沒有這么多的麻煩了。 |
|
| 11樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/5 14:07:00 發(fā)布:
咳! 因為實在沒法在實際工程中使用上,只好提供給大家觀賞了。上面的代碼實現(xiàn)在AVR的系列芯片中都可以實現(xiàn),我已經(jīng)試驗過了。 |
|
| 12樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/5 14:21:00 發(fā)布:
繼續(xù) 稍微粗化pcm值可以減少靜噪的數(shù)據(jù)量,減少數(shù)據(jù)傳輸量。 |
|
| 13樓: | >>參與討論 |
| 作者: tg.liu 于 2006/4/5 19:46:00 發(fā)布:
用ADPCM不好嗎? 再簡單點就用DPCM,只要采樣率提高一些,音質(zhì)還是可以接受的。 ADC的輸入信號當(dāng)然是盡量達(dá)到滿幅為好,這樣量化精度就會最高。 |
|
| 14樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/6 9:01:00 發(fā)布:
為了處理簡單節(jié)省代碼流量 ADPCM好但是比較浪費代碼流量,DPCM采樣率提高后內(nèi)嵌的ADC單元轉(zhuǎn)換就不準(zhǔn)了。語音多數(shù)情況都是靜噪,如果不用專門的CODEC我真不知道如何簡單處理,可能沒有想到吧! |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |