<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 一種基于A(yíng)VR單片機的工頻干擾濾除快速算法

一種基于A(yíng)VR單片機的工頻干擾濾除快速算法

作者: 時(shí)間:2010-05-20 來(lái)源:網(wǎng)絡(luò ) 收藏

  2 定點(diǎn)小數表達方式

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

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

  低通濾波處理涉及的運算形式為一個(gè)純小數系數和一個(gè)已知數據相乘再相加。因此將系數采用定點(diǎn)小數的表示形式,對于提高速度是至關(guān)重要的。

  可以定義一種8位定點(diǎn)小數表示形成――Q8,其各位權系數如下:

種基于A(yíng)VR單片機的工頻干擾濾除快速算法

  Q8數的表示范圍從0到1-2 -8=0.99609375,每?jì)蓚€(gè)數之間的間隔是2 -8(0.00390625),其所能表示的純小數共有2 8=256個(gè)。例如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之間的純小數只能用這兩個(gè)數中的一個(gè)近似表示了。這對于乘法計算的精度有一定的影響,但是由于濾波公式(3)中的系數a和(1-a)都是常數,在整體性能穩定的情況下,系數微小的不確定性對濾波器整體性能并沒(méi)有太大的影響。

  3 分配系數法原理

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

種基于A(yíng)VR單片機的工頻干擾濾除快速算法

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

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

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

種基于A(yíng)VR單片機的工頻干擾濾除快速算法

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

  4 采樣時(shí)間的控制

  采用單片機進(jìn)行數字信號處理,一種有效而準確的數據采集方式就是通過(guò)計數器中斷服務(wù)程序(ISR)控制AD對輸入信號進(jìn)行精確采樣。但是(圖2)中斷服務(wù)程序(ISR)的開(kāi)銷(xiāo)影響了AD采樣時(shí)間間隔的精確度,同時(shí)如果中斷服務(wù)程序(ISR)的開(kāi)銷(xiāo)過(guò)大,必然導致AD的最高采樣頻率的降低。因此,要想獲得精確的采樣頻率,就必須在盡量減少中斷服務(wù)程序開(kāi)銷(xiāo)的前提下,適當調整計數器中斷的時(shí)間間隔。這可以通過(guò)調整OCR0的預置數來(lái)完成。

  5 算法流程圖

  濾波算法是通過(guò)中斷服務(wù)程序(ISR)來(lái)完成的,整個(gè)應用程序的主函數main()主要負責初始化計數器中斷,并處理其它應用。整個(gè)程序的流程圖如圖3所示。

  本算法的C語(yǔ)言代碼(附錄A)經(jīng)過(guò)AVR-GCC編譯器的編譯后,“.text”段只有310個(gè)字節,大大節省了單片機的flash空間。

種基于A(yíng)VR單片機的工頻干擾濾除快速算法

電能表相關(guān)文章:電能表原理


關(guān)鍵詞: 快速 算法 干擾 單片機 AVR 基于

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>