当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读] 如果数字信号处理器内核没有您需要的确切功能,可使用插值查找表(ILUT)来解决这一问题。作为赛灵思的现场工程师,我常常问这样的问题:我们是否能够提供一款其功能可满足客户所有独特.

如果数字信号处理器内核没有您需要的确切功能,可使用插值查找表(ILUT)来解决这一问题。

作为赛灵思的现场工程师,我常常问这样的问题:我们是否能够提供一款其功能可满足客户所有独特设计要求的DSP内核。有时候内核会太大,太小或者不够快。有时,我们会开发一款能确切满足客户需求的内核,并迅速以CORE Generator商标推出。不过即便在这种情况下,客户仍然想要一套特定的DSP功能,而且刻不容缓。在这些情况下,我常常建议他们使用我们器件中的插值查找表来定制他们的DSP功能。

查找表(LUT)实质上是一个存储元件,能够根据任何给定的输入状态组合,“查找”输出,以确保每个输入都有确切的输出。采用LUT来实现DSP功能具有一些重大优势:

● 可用诸如MATLAB或Simulink等高抽象层编程语言改变LUT内容。

● 可以设计一项DSP功能来运行那些采用离散逻辑运算将极度困难的数学函数,比如y=log(x)、y=exp(x)、y=1/x、y=sin(x)等。

● LUT还可轻松执行在可配置逻辑块(CLB)芯片,以及嵌入式乘法单元或DSP48可编程乘法累加(MAC)单元方面可能要求过多FPGA资源的复杂数学函数。

不过,以这种方式使用LUT当然也会存在一些弊端。当您使用LUT来实现DSP功能时,您必须使用块RAM(BRAM)元件。若执行函数y=sqrt(x)(其中x表示16位输入,y表示18位输出),每个变量则需要约64个18KB BRAM单元。如果,比如说,您的目标是实现小型化Spartan器件,或者您有太多的运算需要执行,无法为每个变量省出64个BRAM单元,建议您放弃这种需要如此大量BRAM单元的方法,从系统架构的角度来看,这种方法代价太大。

插值LUT方法不仅具有LUT方法在实现DSP功能时所带来的各种优势,而且无需使用太多BRAM单元。采用这种方法,您可以使用来自容量较小的LUT(比如,1000字LUT)的连续输出,线性地对其内插,以模拟更大容量的LUT。这样,您就可以实现比1000字LUT更高的数值分辨率。此外,通过这种方法,仅需1个BRAM、1个嵌入式乘法器(或DSP48),以及少数几个CLB芯片便可实施控制逻辑,因此LUT的使用成本变得更加合理化。而且,从信噪比的角度来看,其数值精度也是非常让人满意。

当然,应用插值LUT(ILUT)方法需要一定的技巧。举例来说,采用该方法执行y=sqrt(x)函数时,可以清楚地显示ILUT在空间占用、时序和数值精度方面的性能。我们先大致看一下这个示例,然后我再讲解部分实例,说明如何使用这种方法来满足客户截然不同的需求,比如让传递函数呈非线性的传感器实现线性化,以及实施自适应有限脉冲响应(FIR)滤波器以消除合成孔径雷达(SAR)图像上的斑点噪声。

使用System Generator for DSP进行设计

为在赛灵思FPGA上实施DPS算法,我借助了采用MathWorks Simulink基于模型设计方法的System Generator for DSP设计与综合工具。 System Generator得益于赛灵思在Simulink环境中的DSP模块组,可自动调用CORE Generator为DSP构建块生成高度优化的网表。Simulink是一种双精度浮点设计工具,而System Generator则是一款定点运算工具。不管怎样,您只要将这两种工具协同使用,就可以定义每个信号的总位数以及每个信号的二进制位置,从而在定点运算中巧妙处理分数。仿真结果周期精确、位真,因此您可以方便地将它们与MATLAB脚本或Simulink模块生成的浮点参考值相比较,以检查量化误差。

图1显示了System Generator中ILUT方案的顶层结构图。为让这个方法尽可能一般化,假设nx=16位中的输入变量x的取值范围为0≤x<1,因此其格式为 “无符号16位加上二进制点右边的16位”,也称为Ufix_16_16格式。最高有效位(MSB)和最低有效位(LSB)模块分别对应输入数据 nb=10的最高位和nx-nb=6的最低位。这些信号被命名为x0和dx。y=sqrt(x)输出则以ny=17位二进制数表示,格式为:Ufix_17_17。

图2显示了1000字小容量LUT通过双端口RAM模块的部署步骤。由于该模块系只读存储器,布尔常数模块We_const强制将写入归零。信号X0和X0+1则用作ROM表上后续的两个地址。Data_const模块的零常数定义了任何ROM字的大小(即本例中的ny)。

下面的公式显示了以x0为x的最高有效位的情况下,如何在两个已知点(x0,y0)和(x1,y1)之间插入坐标为(x,y)的点:


注意X1和X0是这个小容量LUT的相邻地址,它们之间只隔了一个最低有效位。由于这个小容量LUT的地址空间为nb位,那么该LSB的值为 2-nb。内插步骤见图3。“Reinterpret”模块在不改变二进制表示法的情况下,可改变dx=x-x0信号。其重置了二进制小数点(从 UFix_6_0到UFix_6_6格式),并输出nx-nb位二进制数的一个分数,从而计算出(x-x0)/2-nb的值。


从硬件角度来看,这些模块什么都不占用。总的来说(且根据我们通过ILUT方法应用的函数类型),如果y1=0且y0=0,我们可以强制y1- y0=1,这样我们就可以得到1/2-nb而不是0。我们采用Mux、Rational、Constant和Constant1模块来执行这项工作。剩下的Mult、Add和Sub模块则执行线性内插公式。在本例中,我强制Mult模块的输出信号为17位分辨率,而非理论上要求的23位,因为总体数值精度对本试验来说已经足够。此外,由于y=sqrt(x)函数呈单调递增,因此所有结果都无符号。换句话说,不同的函数需要对数据类型进行不同的精心调整,但不会与图3所示的原理相去甚远。

线性化非线性传感器

目前许多企业在工业控制系统中使用“智能传感器”,以满足低占用空间、低功耗、高性能、最低成本以及最短开发时间等要求。通用智能传感器可视为一个由传感器及其信号控制线路、模数转换器(ADC)、带或不带嵌入式处理器的相关DSP子系统组成的功能组件,所有这些功能块都集成在的同一器件上,如图4所示。


智能传感器的目的是将物理量(如电机中的电流)转化为数字电路能够处理的数字信号。构建这类传感器所采用的技术及组件的某些特性通常会导致诸如失调、增益和非线性等误差,进而导致总体传递函数呈非线性。

一般来说,客户会校正他们产品中运行的DSP子系统所出现的上述误差。如果y=f(x)是来自传感器和ADC级联的数字输出信号,那么DSP必须执行其反函数 g(y)=f-1(y)来补偿非线性函数,这样总体输出z即为:

这是直线方程,其斜率为m,纵截距为b。

最简单的线性化方法是LUT法,采用存储在ROM中的传感器校准点。不过,对16位的ADC来说,ROM显得过大了,且需要64个BRAM单元。而内插LUT则不然,是一个良好的解决方案。

举例来说,我们假定非线性传递函数是一条抛物线。下一MATLAB分段码说明了如何生成最终直线的m和b参数,以及如何计算g(y)(即 f(x)的反函数)。图5用三种颜色显示了三条不同曲线。请注意在计算f(x)的反函数g(y)过程中会丢失一些值。这是因为有几个y值相同的点对应着不同的x点。因此,需要对g(y)进行平滑化,填补所有缺失的点。为精确起见,我没有把这部分运算包括在MATLAB分段码中,见代码清单。

我采用非常类似于图3的设计,在SystemGeneratorforDSP中运行基于定点周期的仿真,在非线性传感器的总体输出范围内得到了92.48dB的信噪比。

斑点噪声消除

跟踪高速运动系统的目标物体(比如导弹)是一项极富挑战性的工作,需要非常复杂的DSP算法以及诸如合成孔径雷达(SAR)等各种不同类型的探测介质。作为典型的相干电磁源(如激光),SAR成像器件也受斑点噪声的影响。因此,任何基于SAR的DSP链的第一级都是二维(2D)自适应FIR滤波器,用以降低这种噪声(但不可能完全消除)。

斑点噪声是一种倍增噪声,呈指数分布,完全由其方差值σ决定。因此,广泛使用的抗斑点噪声的方法就是Frost滤波器(由发明者 V.S.Frost的名字命名而来)。在一个3x3的矩阵中,可以用下列公式进行建模:

其中xij和yij分别代表Frost滤波器的输入和输出采样。K是控制滤波强度的增益系数(为方便起见,下面假定K=1),m1和s分别是 2D内核的平均值和方差值,Tij是中心输出像素(系数ij=22)及所有周边像素的距离矩阵。下面的等式说明实施这个滤波器的关键因素是R1,即3×3 矩阵中的一阶m1和二阶m2之间的比值:

R1的取值范围在0和1之间。根据实验发现要取得良好的数值精度,R1可以使用16位至20位二进制数来表示。

我在system Generator for DSP中设计R1计算步骤后,我决定通过内插LUT来实施滤波系数的归一化。LUT的内容以下列MATLAB代码表示:

图6显示的是归一化后的系数沿R1输入信号分布的曲线。这里只有三条曲线,因为Tij矩阵在系数ij=22的中心像素周围呈对称分布。根据曲线,与纯浮点参考模型相比,数值结果显示信噪比介于81.28至83.38dB之间。

简言之,这些例子说明插值查找表是实施赛灵思FPGA的DSP功能的简便而强大的方法。插值查找表可帮助您在保持空间占用相对较低的情况下实现极高数值精度(SNR)和高数据速率。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭