新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于AVR的數字濾波器濾除工頻干擾的快速算法實現

        基于AVR的數字濾波器濾除工頻干擾的快速算法實現

        作者: 時間:2013-03-29 來源:網絡 收藏

        3 分配系數法原理

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

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

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

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

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

        4 采樣時間的控制

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

        5 流程圖

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

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

        6 VMLAB的濾波系統仿真

        VMLAB的全稱為:Visual Micro Lab。它針對系列單片機和ST62系列單片機設計,是一個單片機的虛擬原型框架,可以提供給用戶一個真正意義上的虛擬微控制器(MCU)設計實驗室。它具有強大的多窗口、多文件的編輯器,微控制器的集成開發環境,擁有一系列的集成開發工具,圖形界面的調試器,混合模式的模擬-電路仿真器,代碼質量檢查器等。MCU,它可以仿真出包括模擬元器件在內的更多外圍設備,并具有交互式器件模擬仿真功能。

        假設有用信號是2V大小的直流信號,工頻是峰峰值為1V,頻率為50Hz的正弦波,建立單片機AD的輸入信號表示形式如下:

        2+0.5 sin(2π×50×t)

        VMLAB通過工程文件來管理和控制各種仿真信息、硬件連接以及顯示I/O電壓波形等。根據本算法的特點,采用Atmega16作為目標單片機,時鐘選為8MHz,建立工程文件。恰當設置OCR0寄存器,使計數器比較匹配中斷的時間間隔約為2ms,這樣AD的采樣頻率Fs近似認為等于500Hz。經過仿真,對比結果如表3。

        從表3可以看出:隨著a的增大,算法收斂的時間變長,同時50Hz對應的衰減幅度增加,衰減的幅度值和理論推導基本一致。另外,當a=0.95時,DA輸出的均值變小。這主要是進行循環迭代運算時,需要將16位的變量轉化為8位表示形式所導致的。在有用信號失真較小的情況下,為使達到降低工頻的最佳效果,必須恰當選擇a值。經過以上的仿真試驗可以發現,當a=0.9時,衰減幅度、DA輸出均值和算法收斂時間表現比較均衡,可以作為一般情況下的選擇值。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 苏州市| 手游| 安国市| 额济纳旗| 金门县| 景泰县| 定陶县| 罗定市| 眉山市| 会泽县| 个旧市| 鄢陵县| 休宁县| 黄骅市| 股票| 白玉县| 乳山市| 长子县| 油尖旺区| 雷山县| 福州市| 曲松县| 牙克石市| 留坝县| 大安市| 大足县| 麦盖提县| 沧州市| 莒南县| 叙永县| 静乐县| 溧水县| 桂平市| 翁牛特旗| 新郑市| 古蔺县| 合山市| 堆龙德庆县| 普兰店市| 五常市| 黎城县|