24小時(shí)聯(lián)系電話(huà):18217114652、13661815404
中文
公司新聞
嵌入式微控制器的數字濾波
處理隨時(shí)間推移或在時(shí)域中收集的數據樣本時(shí),最基本的操作之一是“過(guò)濾”數據。重要的是要理解可以數字方式過(guò)濾數據以達到最佳結果并釋放CPU來(lái)執行其他任務(wù)的通用方法,尤其是在涉及嵌入式微控制器時(shí)。
在本文中,了解時(shí)域中用于過(guò)濾和處理數據樣本的廣泛使用的方法。另外,請仔細研究LPC55S69 MCU中PowerQuad單元的Dual Biquad IIR引擎-一種在許多濾波用例中有用的通用DSP構建塊。
連續采樣數據的通用過(guò)濾器
在時(shí)域中采樣數據時(shí),將以已知的固定速率連續收集數據。時(shí)域濾波器接受此數據作為輸入,并輸出以某種方式修改的新信號。濾波器的輸出只是另一個(gè)時(shí)域信號,可以對其進(jìn)行進(jìn)一步處理或傳輸到數模轉換器(DAC)。
我們通常根據濾波器對正弦波的響應方式來(lái)對其進(jìn)行處理。如果我們將輸入信號視為簡(jiǎn)單的正弦波,則濾波器可以調整輸入的幅度以及調整其相位。將復雜信號施加到濾波器時(shí),它將調整信號正弦分量的幅度和相位。濾波器在頻率范圍內的行為方式稱(chēng)為頻率響應。
時(shí)域中的標準操作由所謂的有限沖激響應(FIR)過(guò)濾器執行,該過(guò)濾器將最新的數據樣本與以前收集的元素混合在一起以獲得下一個(gè)輸出樣本。
圖1.使用輸入的歷史記錄進(jìn)行逐樣本過(guò)濾處理。
實(shí)現這種過(guò)濾器的一種方法是將先前的樣本存儲在數組中,并使用一個(gè)簡(jiǎn)單的方程式將它們合并:
x[n] // The most recent input?<br /> x[n-1], x[n-2] // The two previous input samples?<br /> y[n] // The next output sample??<br /> <br /> y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2]
這個(gè)特定的偽代碼段將最新的樣本與之前的兩個(gè)數據樣本結合在一起。它將每個(gè)數據樣本與單獨的常量系數相乘,然后對結果求和以獲得下一個(gè)輸出樣本??傊?,這表示簡(jiǎn)單的乘法和累加運算,其中常數系數和歷史記錄的長(cháng)度控制濾波器的頻率響應。
通過(guò)為系數選擇適當的值,可以構造各種類(lèi)型的濾波器。如果濾波器衰減高頻,則它充當低通濾波器。通過(guò)衰減低頻,所得濾波器將充當高通濾波器。也可以將兩種方法結合使用,這將導致帶通濾波器。
FIR濾波器在概念上很簡(jiǎn)單,但是可能需要大量先前的數據樣本才能對其頻率響應進(jìn)行精確控制。盡管此過(guò)濾器易于理解和實(shí)現,但在常規CPU上執行它可能很麻煩,尤其是在具有中等大小的歷史記錄的情況下。這是因為每個(gè)樣本都需要許多乘法和加法運算才能確定輸出。
減少所需歷史量的一種方法是在計算下一個(gè)輸出樣本時(shí)使用先前確定的濾波器輸出。這是另一類(lèi)稱(chēng)為無(wú)限脈沖響應濾波器(IIR)的數字濾波器的基礎:
// This examples uses the previously established naming conventions<br /> y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a1 * y[n-2]
上面的示例是IIR濾波器的一種特殊情況,稱(chēng)為雙二階濾波器-一種常見(jiàn)的構建模塊,可以級聯(lián)以構造更大的濾波器。與FIR濾波器相比,此方法需要較少的系數才能實(shí)現所需的頻率響應。使用這種方法時(shí),需要特別權衡。如果未正確選擇系數,則使用反饋會(huì )導致濾波器振蕩。
圖2.自動(dòng)生成系數的眾多工具之一。
使用PowerQuad IIR Biquad引擎
LPC55S69 PowerQuad單元集成了用于計算IIR雙二階濾波器的專(zhuān)用硬件。使用PowerQuad過(guò)濾收集的數據樣本將使CPU有空余時(shí)間來(lái)執行其他任務(wù)。
如上所述,過(guò)濾器算法的實(shí)現并不復雜,但是它們會(huì )占用大量CPU時(shí)間。LPC55S69 MCU的PowerQuad單元包含針對許多濾波和復雜數學(xué)運算進(jìn)行了優(yōu)化的專(zhuān)用硬件。它通過(guò)AHB總線(xiàn)和Arm?Cortex?-M33協(xié)處理器接口連接。
LPC55S69的標準開(kāi)發(fā)環(huán)境是免費的基于Eclipse的IDE MCUXpresso。LPC55S69 SDK包含許多有用的示例,其中一些是PowerQuad示例應用程序。
圖3.選擇PowerQuad數字濾波器示例。
“ powerquad_filter”示例項目包含一些不同過(guò)濾器配置的示例。“ powerquad_filter.c”文件具有幾個(gè)函數,這些函數演示了基本的過(guò)濾器設置。
早先,本文討論了使用“直接格式I”的過(guò)濾器,這是最直接的實(shí)現。但是,PowerQuad重新安排了乘法和加法運算的流程,而不改變結果,從而導致“直接格式II”,這不需要存儲輸入和輸出的歷史記錄。而是存儲中間歷史記錄v [n],也稱(chēng)為過(guò)濾器狀態(tài)。
AHB總線(xiàn)上的少數寄存器用于存儲狀態(tài)和系數,以設置用于IIR濾波器操作的PowerQuad。在SDK示例中,過(guò)濾器的狀態(tài)在PQ_BiquadRestoreInternalState函數中初始化。
完成后,過(guò)濾器即可處理數據樣本。這是在fsl_powerquad_filter.c中的PQ_VectorBiquadDf2F32函數中完成的:
圖4.矢量化IIR濾波器實(shí)現
此功能旨在處理輸入樣本的塊(為八的倍數)??梢越柚?span>MCR指令將數據從LPC55S69的主處理內核的寄存器傳輸到連接的協(xié)處理器(在這種情況下為PowerQuad)。
然后,PowerQuad會(huì )執行過(guò)濾工作,這是執行LLP55S69的Cortex-M33內核所采用的多種乘法和加法運算的一種更為有效的方式。一旦完成PowerQuad,就可以使用MCR指令訪(fǎng)問(wèn)結果,該指令將數據從協(xié)處理器移回內部CPU寄存器。
用于數字濾波的雙Biquad IIR引擎
LPC55S69 MCU帶有PowerQuad單元(其中包含兩個(gè)獨立的biquad引擎),可以幫助加速過(guò)濾和復雜的數學(xué)運算。AHB總線(xiàn)寄存器用于配置PowerQuad IIR功能,并且通過(guò)協(xié)處理器接口在PowerQuad和Cortex-M33內核之間交換數據。
MCUXpresso中的LPC55S69 SDK是一個(gè)很好的起點(diǎn)。但是,該代碼并未經(jīng)過(guò)優(yōu)化,因為它易于理解。請記住,盡管PowerQuad可以大大加快過(guò)濾應用程序的速度,但是CPU仍必須在PowerQuad協(xié)處理器之間來(lái)回傳輸數據。