色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于AVR單片機(jī)的數(shù)字濾波器濾除工頻干擾的快速算法

          基于AVR單片機(jī)的數(shù)字濾波器濾除工頻干擾的快速算法

          作者: 時間:2013-12-09 來源:網(wǎng)絡(luò) 收藏

          2 定點小數(shù)表達(dá)方式

          為了精確構(gòu)造,經(jīng)常要用到浮點數(shù)據(jù)和系數(shù)。在進(jìn)行浮點數(shù)乘法運算時,針對AVR 單片機(jī)設(shè)計的C編譯器例如AVR-GCC,需要加入額外的數(shù)學(xué)庫函數(shù)進(jìn)行編譯。而這會使編譯后程序的代碼量增加、處理時間加長、處理器的開銷也隨之增加。為了更大限度地降低系統(tǒng)開銷,提高程序效率,采用定點小數(shù)表示形式進(jìn)行乘法運算是最佳選擇。

          AVR 單片機(jī)是一種8位精簡指令集(RISC)單片機(jī)。其中megaAVR 系列內(nèi)部都帶有一個硬件乘法器,計算一次8位乘8位的定點乘法只需2個時鐘周期。因此采用8位定點采樣數(shù)據(jù)乘以8位系數(shù)的定點乘法方式完成濾波算法是最高效的。

          低通濾波處理涉及的運算形式為一個純小數(shù)系數(shù)和一個已知數(shù)據(jù)相乘再相加。因此將系數(shù)采用定點小數(shù)的表示形式,對于提高算法速度是至關(guān)重要的,可以定義一種8 位定點小數(shù)表示形式--Q8 數(shù),其各位權(quán)系數(shù)如下:基于AVR單片機(jī)的數(shù)字濾波器濾除工頻干擾的快速算法

          Q8 數(shù)的表示范圍從0到1-2-8=0.99609375,每兩個數(shù)之間的間隔是2-8(0.00390625),其所能表達(dá)的純小數(shù)共有28=256個。例如11011000就表示2-1+2-2+2-4+2-5=0.84375,而11011001 就是表示2-1+2-2+2-4+2-5+2-8=0.84765625 ,因此0.84375 和0.84765625 之間的純小數(shù)只能用這兩個數(shù)中的一個近似表示了。這對于乘法計算的精度有一定的影響,但是由于濾波公式(3)中的系數(shù)a和(1-a)都是常數(shù),在整體性能穩(wěn)定的情況下,系數(shù)微小的不確定性對濾波器整體性能并沒有太大的影響。

          3 分配系數(shù)法原理

          從(3)式可知,濾波算法可以用迭代計算實現(xiàn),為保證每個新的輸出值都可以作為下次計算的輸入值,必須使輸出值和輸入值的位寬度一致。 內(nèi)部硬件乘法器的輸出結(jié)果為16 位,兩次乘法運算的結(jié)果還要進(jìn)行加法運算,其結(jié)果很有可能超過16 位寬度。如果要進(jìn)行迭代計算,就要將乘加運算的結(jié)果轉(zhuǎn)化成8 位表示方式。一種解決方法是用查表法實現(xiàn)乘法計算,這樣運算結(jié)果就直接表達(dá)成8 位定點數(shù)形式,不用進(jìn)行表示方式的轉(zhuǎn)化,但是這種方案要占用額外的硬件存儲空間構(gòu)造一張查找表。

          可以從逆向進(jìn)行思考:由(3)式可知,每個新的輸出值y(k)都與上一次的輸出值y(k-1)和新的輸入值x(k)有關(guān)。 y(k-1)和x(k)都是8 位的,因此最大值為0xFF。為了使a×y(k-1)+(1-a)×x(k)不超過0xFFFF,兩個系數(shù)a和(1-a)的和不能超過0xFFFF/0xFF=0x101 。實際上,a+(1-a)等于“1” ,因此這里的0x101 就可以看作“1” 。如果取a=0.9,那么對應(yīng)地將0x101 平均分成10份,取其中的9 份,即0x101×0.9 近似等于0xE7 ,相應(yīng)地0.1 就等于0x101-0xE7=0x1A。這里的0xE7 可以近似被認(rèn)為是0.9 的一種定點Q8 數(shù)表示形式,而0.1 的定點Q8 數(shù)表示形式就是0x1A。由于濾波器系數(shù)a和(1-a)采用了Q8 數(shù)的表示形式,這種將16 位乘加運算結(jié)果轉(zhuǎn)化為8 位定點數(shù)表示形式的工作就變得簡單了,只需通過移位運算,取y(k)的高8 位即可,對應(yīng)的C語言代碼為:

          y(k)=(char)(y(k)>>8)

          在C語言編程處理中,并不需要建立一個數(shù)組來儲存y(k)的值,而只需定義兩個unsigned char型的變量分別儲存y(k-1)和x(k) 。當(dāng)乘加計算a×y(k-1)+(1-a)×x(k),將結(jié)果轉(zhuǎn)化成8 位定點數(shù)形式,再將其賦值給y(k-1)所對應(yīng)的變量即可。因此采用迭代方式進(jìn)行乘加運算后,整個運算過程只需要兩個變量和兩個常數(shù)參加即可。

          通過這種處理,y(k)就可以作為計算下一次輸出值y(k+1)的一個已知量,并繼續(xù)與Q8 數(shù)形式的濾波器系數(shù)相乘,得到新的輸出值。這種處理方式簡化了乘加運算的完成過程,節(jié)省了系統(tǒng)硬件資源,并降低了處理器開銷。

          4 采樣時間的控制

          采用單片機(jī)進(jìn)行數(shù)字信號處理,一種有效而準(zhǔn)確的數(shù)據(jù)采集方式就是通過計數(shù)器中斷服務(wù)程序(ISR)控制AD對輸入信號進(jìn)行精確采樣。但是(圖2)中斷服務(wù)程序(ISR)的開銷影響了AD采樣時間間隔的精確度,同時如果中斷服務(wù)程序(ISR)的開銷過大,必然導(dǎo)致AD的最高采樣頻率的降低。因此,要想獲得精確的采樣頻率,就必須在盡量減少中斷服務(wù)程序開銷的前提下,適當(dāng)調(diào)整計數(shù)器中斷的時間間隔。這可以通過調(diào)整OCRO的預(yù)置數(shù)來完成。基于AVR單片機(jī)的數(shù)字濾波器濾除工頻干擾的快速算法

          5 算法流程圖

          濾波算法是通過中斷服務(wù)程序(ISR)來完成的,整個應(yīng)用程序的主函數(shù)main()主要負(fù)責(zé)初始化計數(shù)器中斷,并處理其它應(yīng)用。整個程序的流程圖如圖3 所示。基于AVR單片機(jī)的數(shù)字濾波器濾除工頻干擾的快速算法

          濾波器相關(guān)文章:濾波器原理


          濾波器相關(guān)文章:濾波器原理


          低通濾波器相關(guān)文章:低通濾波器原理


          電源濾波器相關(guān)文章:電源濾波器原理


          數(shù)字濾波器相關(guān)文章:數(shù)字濾波器原理


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉