音頻數字低通濾波與帶進位除法最佳化

來源:互聯網
上載者:User

16Khz採樣頻率,12Bit採樣精度,經過ADPCM壓縮解壓縮演算法後,聽到一些低噪,通過硬體排除(一聲道直接將mic經過運放後到耳放輸出,判斷進入AD的聲音OK),認為問題來之AD採樣內部雜訊。

最佳化思路:

1、ADC經過16KHz的Timer進行DMA到SampBuf[32];

2、在DMA中斷,將SampBuf每相鄰兩個資料進行一次均值濾波,那麼32個資料可以求31次,所以

===>     增加一個16bit的變數PreSamp,用於儲存SampBuf[32-1],將最後的資料儲存,用於銜接後一次DMA中斷的第一組均值的第一個資料,即PreSamp,SampBuf[0];

新增變數為靜態變數,初值設為0即可。這樣資料才會連續,不會出現每32個資料丟一個資料的bug;

3、將資料編解碼;

4、啟動DAC DMA的Timer中斷,進行資料轉送;

  5、OK

附:均值濾波演算法(計算結果儲存為整數型適用)

static uint16_t EndSampVal = 0;#if 0PsamBuff[0] = (int16_t)(((EndSampVal + SampBuff[0])/2.0)+0.5)-2040;  EndSampVal = SampBuff[BUFFSIZE-1];for(i=1;i<BUFFSIZE;i++){PsamBuff[i]=(int16_t)(((SampBuff[i-0]+SampBuff[i])/2.0)+0.5)-2040;}#elsePsamBuff[0] = (int16_t)((EndSampVal + SampBuff[0] + 1)>>1)-2040; EndSampVal = SampBuff[BUFFSIZE-1];for(i=1;i<BUFFSIZE;i++){PsamBuff[i]=(int16_t)((SampBuff[i-0]+SampBuff[i]+ 1)>>1)-2040;}#endif

上面兩種的計算結果是一致的,對於兩個資料的四捨五入的演算法最佳化,後面部分為最佳化部分,避免浮點運算的巨大計算量,提高計算效率。即兩個數的帶進位除法可以通過分子加1,再除與分母來替代。當然保留的資料位元整數型資料,非浮點數據;如果需要為浮點數據,該方法不能使用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.