24小(xiǎo)时联系電(diàn)话:18217114652、13661815404

中文(wén)

您当前的位置:
首页>
電(diàn)子资讯>
公司新(xīn)闻>
嵌入式微控制器的数字...

公司新(xīn)闻

嵌入式微控制器的数字滤波


处理(lǐ)随时间推移或在时域中收集的数据样本时,最基本的操作之一是过滤数据。重要的是要理(lǐ)解可(kě)以数字方式过滤数据以达到最佳结果并释放CPU来执行其他(tā)任務(wù)的通用(yòng)方法,尤其是在涉及嵌入式微控制器时。 

在本文(wén)中,了解时域中用(yòng)于过滤和处理(lǐ)数据样本的广泛使用(yòng)的方法。另外,请仔细研究LPC55S69 MCUPowerQuad单元的Dual Biquad IIR引擎-一种在许多(duō)滤波用(yòng)例中有(yǒu)用(yòng)的通用(yòng)DSP构建块。 

连续采样数据的通用(yòng)过滤器

在时域中采样数据时,将以已知的固定速率连续收集数据。时域滤波器接受此数据作為(wèi)输入,并输出以某种方式修改的新(xīn)信号。滤波器的输出只是另一个时域信号,可(kě)以对其进行进一步处理(lǐ)或传输到数模转换器(DAC)。

我们通常根据滤波器对正弦波的响应方式来对其进行处理(lǐ)。如果我们将输入信号视為(wèi)简单的正弦波,则滤波器可(kě)以调整输入的幅度以及调整其相位。将复杂信号施加到滤波器时,它将调整信号正弦分(fēn)量的幅度和相位。滤波器在频率范围内的行為(wèi)方式称為(wèi)频率响应。

时域中的标准操作由所谓的有(yǒu)限冲激响应(FIR)过滤器执行,该过滤器将最新(xīn)的数据样本与以前收集的元素混合在一起以获得下一个输出样本。

1.使用(yòng)输入的历史记录进行逐样本过滤处理(lǐ)。  

实现这种过滤器的一种方法是将先前的样本存储在数组中,并使用(yòng)一个简单的方程式将它们合并:

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]

这个特定的伪代码段将最新(xīn)的样本与之前的两个数据样本结合在一起。它将每个数据样本与单独的常量系数相乘,然后对结果求和以获得下一个输出样本。总之,这表示简单的乘法和累加运算,其中常数系数和历史记录的長(cháng)度控制滤波器的频率响应。

通过為(wèi)系数选择适当的值,可(kě)以构造各种类型的滤波器。如果滤波器衰减高频,则它充当低通滤波器。通过衰减低频,所得滤波器将充当高通滤波器。也可(kě)以将两种方法结合使用(yòng),这将导致带通滤波器。

FIR滤波器在概念上很(hěn)简单,但是可(kě)能(néng)需要大量先前的数据样本才能(néng)对其频率响应进行精确控制。尽管此过滤器易于理(lǐ)解和实现,但在常规CPU上执行它可(kě)能(néng)很(hěn)麻烦,尤其是在具有(yǒu)中等大小(xiǎo)的历史记录的情况下。这是因為(wèi)每个样本都需要许多(duō)乘法和加法运算才能(néng)确定输出。     

减少所需历史量的一种方法是在计算下一个输出样本时使用(yòng)先前确定的滤波器输出。这是另一类称為(wèi)无限脉冲响应滤波器(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滤波器的一种特殊情况,称為(wèi)双二阶滤波器-一种常见的构建模块,可(kě)以级联以构造更大的滤波器。与FIR滤波器相比,此方法需要较少的系数才能(néng)实现所需的频率响应。使用(yòng)这种方法时,需要特别权衡。如果未正确选择系数,则使用(yòng)反馈会导致滤波器振荡。  

2.自动生成系数的众多(duō)工具之一。 

使用(yòng)PowerQuad IIR Biquad引擎

LPC55S69 PowerQuad单元集成了用(yòng)于计算IIR双二阶滤波器的专用(yòng)硬件。使用(yòng)PowerQuad过滤收集的数据样本将使CPU有(yǒu)空余时间来执行其他(tā)任務(wù)。 

如上所述,过滤器算法的实现并不复杂,但是它们会占用(yòng)大量CPU时间。LPC55S69 MCUPowerQuad单元包含针对许多(duō)滤波和复杂数學(xué)运算进行了优化的专用(yòng)硬件。它通过AHB总線(xiàn)和Arm®Cortex®-M33协处理(lǐ)器接口连接。

LPC55S69的标准开发环境是免费的基于EclipseIDE MCUXpressoLPC55S69 SDK包含许多(duō)有(yǒu)用(yòng)的示例,其中一些是PowerQuad示例应用(yòng)程序。

3.选择PowerQuad数字滤波器示例。

“ powerquad_filter”示例项目包含一些不同过滤器配置的示例。“ powerquad_filter.c”文(wén)件具有(yǒu)几个函数,这些函数演示了基本的过滤器设置。

早先,本文(wén)讨论了使用(yòng)直接格式I”的过滤器,这是最直接的实现。但是,PowerQuad重新(xīn)安排了乘法和加法运算的流程,而不改变结果,从而导致直接格式II”,这不需要存储输入和输出的历史记录。而是存储中间历史记录v [n],也称為(wèi)过滤器状态。

AHB总線(xiàn)上的少数寄存器用(yòng)于存储状态和系数,以设置用(yòng)于IIR滤波器操作的PowerQuad。在SDK示例中,过滤器的状态在PQ_BiquadRestoreInternalState函数中初始化。

完成后,过滤器即可(kě)处理(lǐ)数据样本。这是在fsl_powerquad_filter.c中的PQ_VectorBiquadDf2F32函数中完成的:

4.矢量化IIR滤波器实现

此功能(néng)旨在处理(lǐ)输入样本的块(為(wèi)八的倍数)。可(kě)以借助MCR指令将数据从LPC55S69的主处理(lǐ)内核的寄存器传输到连接的协处理(lǐ)器(在这种情况下為(wèi)PowerQuad)。 

然后,PowerQuad会执行过滤工作,这是执行LLP55S69Cortex-M33内核所采用(yòng)的多(duō)种乘法和加法运算的一种更為(wèi)有(yǒu)效的方式。一旦完成PowerQuad,就可(kě)以使用(yòng)MCR指令访问结果,该指令将数据从协处理(lǐ)器移回内部CPU寄存器。

用(yòng)于数字滤波的双Biquad IIR引擎

LPC55S69 MCU带有(yǒu)PowerQuad单元(其中包含两个独立的biquad引擎),可(kě)以帮助加速过滤和复杂的数學(xué)运算。AHB总線(xiàn)寄存器用(yòng)于配置PowerQuad IIR功能(néng),并且通过协处理(lǐ)器接口在PowerQuadCortex-M33内核之间交换数据。 

MCUXpresso中的LPC55S69 SDK是一个很(hěn)好的起点。但是,该代码并未经过优化,因為(wèi)它易于理(lǐ)解。请记住,尽管PowerQuad可(kě)以大大加快过滤应用(yòng)程序的速度,但是CPU仍必须在PowerQuad协处理(lǐ)器之间来回传输数据。 

请输入搜索关键字

确定