首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用插值查找表实现FPGA的DSP功能(2)

用插值查找表实现FPGA的DSP功能(2)

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

  图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分段码中)
  

  

  

  图5.黑色抛物线表示非线性传感器传递函数f(x) 的曲线;绿色直线表示线性化DSP子系统获得的最终线性传感器传递函数曲线;蓝色抛物线则表示反函数g(y) 的曲线。
  我采用非常类似于图1-3的设计,在System Generator for DSP中运行基于定点周期的仿真,在非线性传感器的总体输出范围内得到了92.48dB的信噪比。
继承事业,薪火相传
返回列表