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