matlab浮点转定点的函数,FPGA基础知识17(Matlab中滤波器的定点化 浮点运算转换为定点运算)...
需求说明:IC设计基础
内容 :浮点运算定点化处理
来自 :时间的诗
原文:http://blog.csdn.net/mccrocodile/article/details/6754929
通常在FPGA中做信号处理为达到比较高的fMax和较少的资源占用,通常使用定点化数字信号处理,虽然FPGA厂商和IP提供商提供了一些浮点IP,但是目前大多数应用还是趋向定点化处理。这里主要介绍在设计滤波器中使用工具中的定点化选项,实现滤波器的定点化,为后面一节的HDL代码生成做铺垫。
这儿还是使用前面的例子,来实施定点化。
FDAtool中定点化
如下图所示为FDATool中的定点化过程中截图,选择左侧设置量化参数(Set Quantization Parameters )按钮,在滤波器结构栏选择定点,滤波器精度有最高精度和指定精度,通常使用指定精度这样比较节约资源,最后部分为对滤波器的参数,输入数出和滤波器内部进行定点化设计。
在设置滤波器内部的参数,如乘法器,累加器的精度和整数的溢出模式。在设置精度是通常开始设置较大的精度和动态范围,满足要求后再优化。整数溢出的模式Wrap模式占用资源最少,但是如果正式部分动态范围不够会带来糟糕情况,而且不利于整体的稳定性;Staturate会占用额外的逻辑资源。
FilterBuilder中定点化
从下图可以看得出与FDATool的定点化设置是一致的。这儿就不再做介绍了。
fdesign中的定点化
(准确的应该成为使用面向对象的方式的滤波器定点化)
详细的帮助中搜索Fixed-Point Filter Design。
前面介绍的基于GUI的定点化都是一个根据经验的迭代化的优化过程,下面来详细的说下基于fdesign的定点化过程。
滤波器的定点化包含两个主要的部分:滤波器数的量化和动态范围分析。(The dynamic range analysis is a process of fine tuning the scaling of each node to ensure that the fraction lengths are set for full
input range coverage and maximum precision。)
1、首先修改滤波器对象属性为定点的:(当然这儿的滤波器对象也可以来自于fdatool等设计的导出的滤波器对象)
Hf=hd;
Hf.Arithmetic='fixed';
2、初步设置滤波器系数的字长
set(Hf, 'CoeffWordLength', 9);%设置滤波器系数的字长
fvtool(Hf)%,比较不同字长设置
屏幕剪辑的捕获时间: 2011/8/30 22:22
可以清晰的观察到定点化和浮点的幅频响应的区别,通过观察是否满足要求进一步优化滤波器系数的字长,增加字长达到更高的性能,缩减字长节约资源减小面积。如在Altera的QII中,如果乘数是固定且位宽比较小(比如小于10bit时),综合时会使用移位和加法实现乘法(有点类似于RAG算法),但当乘数比较大时则需要使用硬件乘法器。如果较小片子硬件乘法器不足就是个糟糕的事情了。
3、设置滤波器内部的位宽:累加器,乘法器,输出信号
info(Hf) %有观察到的信息可以看出位宽过宽
屏幕剪辑的捕获时间: 2011/8/30 22:32
如图所示可以看到,自动设置的位宽以及其动态范围,这些自动设置的位宽通常是首先满足精度,还需要根据硬件(DSP,FPGA)特性做修改。下面针对Altera的CIII片子给出一个设置:
set (Hf, 'InputWordLength', 10);%输入ADC位宽
set (Hf, 'FilterInternals', 'SpecifyPrecision');%设置滤波器内部参数
set (Hf, 'ProductWordLength', 18);%如Altera的CIII片子的乘法器为9的倍数,这儿选18bit
set (Hf, 'AccumWordLength', 22);%累加器的字长,通常累加器比乘法器多4比特作为保护位宽
set (Hf, 'OutputWordLength', 16);%输出数据总线
输入信号位宽通常和ADC是保持一致的,乘法器的位宽通常设置9的倍数(某些高档片子含有DSP40,那就设置为40)。诸如硬件乘法器资源,如果想要充分利用,那么你就需要参考器件的硬件特性。累加器通常要比乘法器宽4bit作为保护比特。如果设置得过宽会造成累加器的时延过大,得不到一个较大的fMax。
到这里滤波器的基本设置算是完成了,但是还是有可能在使用的使用发生溢出等错误。动态分析将进一步优化滤波器的定点化设置,以降低溢出的发生。
4、动态分析:进一步精细调整系数的比例(Scaling)。
系数最好是又能覆盖所有输入信号,同时保持最大的精度,但这是互相矛盾的。所以在动态分析过程中用于测试的输入数据的选择是非常重要的。如果设置较大的动态范围,可以覆盖输入信号的范围,但是精度会损失;如果设置较窄的动态范围,可以保持较好的精度,但是输入信号可能超出范围引起溢出。
最坏情况测试法:
1)源代码和报告如下,首先使用脉冲响应的取符号函数,设置信号最大幅度,作为信号的激励。
2)以测试激励自动调整动态范围,如果不使用这个选项观察一下3中的报告时什么样子的。
3)创建fipref对象开启记录模式,定点化滤波,观察定点化滤波过程的报告。
tx = 2*sign(fliplr(impz(Hf)));%激励
Hf2 = autoscale(Hf, tx);%自动调整动态范围
fipref('LoggingMode', 'on', 'DataTypeOverride', 'ForceOff');%创建fipref对象打开记录
y = filter(Hf2, tx);
fipref('LoggingMode', 'off');
R = qreport(Hf2)%查看报告,报告最近的顶点滤波计算报告
屏幕剪辑的捕获时间: 2011/9/5 21:29
下面是对信号分离的定点化测试:
%% 对信号分离的定点化测试
fipref('LoggingMode', 'on', 'DataTypeOverride', 'ForceOff');%创建fipref对象打开记录
y = filter(Hf2, x);
fipref('LoggingMode', 'off');
R1 = qreport(Hf2)%查看报告,报告最近的顶点滤波计算报告
figure;plot(y);title('定点化滤波信号分离测试')
屏幕剪辑的捕获时间: 2011/9/5 21:39
屏幕剪辑的捕获时间: 2011/9/5 21:39
通过上面的报告和滤波结果观察可以看出,定点化达到了效果。这就为后面HDL代码生成做好基本的准备。
总结:
通过上面的例子,可以得知使用面向对象方式实现定点化是一个更优秀的方式。根据测试的激励可以自动调整滤波器的精度以达到不同的动态范围,达到精度和动态范围(过小会引起溢出)的权衡,那么也就看出合适的测试激励的重要性。这种滤波器的定点化方法对IIR滤波器的定点化优势尤其明显。这里先不介绍,由于IIR的定点化有时比较复杂,放到后面多带带讨论。
所以建议亲自试试使用fdesign的方式。
matlab浮点转定点的函数,FPGA基础知识17(Matlab中滤波器的定点化 浮点运算转换为定点运算)...相关推荐
- 初学者必须要知道的FPGA基础知识
初学者必须要知道的FPGA基础知识 一.FPGA是什么? 在<FPGA至简设计原理与应用>一书里是这样描述的:『FPGA的全称为Field-Programmable Gate Array, ...
- FPGA基础知识|芯片设计基础知识
FPGA 基础知识 可查看原文:FPGA基础知识 1.查找表 LUT 和编程方式第一部分: 查找表 LUT FPGA 是在 PAL.GAL.EPLD.CPLD 等可编程器件的基础上进一步发展的产物.它 ...
- FPGA基础知识极简教程(4)从FIFO设计讲起之异步FIFO篇
博文目录 写在前面 正文 同步FIFO回顾 $clog2()系统函数使用 综合属性控制资源使用 异步FIFO设计 FIFO用途回顾 异步FIFO原理回顾 异步FIFO设计 异步FIFO仿真 参考资料 ...
- FPGA基础知识极简教程(10)二进制到BCD转换算法
文章目录 写在前面 正文 快速认识 实现方式一 实现方式二 写在最后 写在前面 FPGA基础知识极简教程(9)讲到了七段数码管的显示Verilog设计,我们都知道,要在数码管上显示的数字,使用BCD编 ...
- FPGA基础知识极简教程(7)详解亚稳态与跨时钟域传输
博文目录 写在前面 正文 FPGA或ASIC中的传播延迟 建立和保持时间是什么? 建立和保持时间与传播延迟和时钟频率有何关系? 如果违反建立和保持时间会发生什么? FPGA中的亚稳定是什么? 亚稳态何 ...
- SAP SD基础知识之订单中装运相关的功能 II
SAP SD基础知识之订单中装运相关的功能 II 一,计划Scheduling 当业务人员创建一张订单时,系统能够决定基于客户要求的delivery date的物料可用日期:需要交货的货物必须在该时点 ...
- SAP SD基础知识之订单中装运相关的功能 I
SAP SD基础知识之订单中装运相关的功能 I 一,装运点决定Shipping Point Determination 每个订单行项目都会决定一个shipping point:系统会自动带出一个shi ...
- SAP SD基础知识之交货中的控制元素
SAP SD基础知识之交货中的控制元素 一,交货类型Delivery Type Delivery type控制整个的交货,我们可以在delivery header中看到delivery type: D ...
- SAP SD 基础知识之定价中的条件技术(Condition Technique in Pricing)
SAP SD 基础知识之定价中的条件技术(Condition Technique in Pricing) 一,定价程序Pricing Procedure 所有定价中允许的条件类型都包含在定价程序中: ...
- [WPF 基础知识系列] —— 绑定中的数据校验Vaildation
[WPF 基础知识系列] -- 绑定中的数据校验Vaildation 原文:[WPF 基础知识系列] -- 绑定中的数据校验Vaildation 前言: 只要是有表单存在,那么就有可能有对数据的校验需 ...
最新文章
- 2022-2028年中国公路客运行业市场研究及前瞻分析报告
- MySQL计算指标连续两月金额相比_20160929
- 使用python用什么软件-Python读写Excel表格,就是这么简单粗暴又好用
- CSUOJ 1525 Algebraic Teamwork
- 中软国际入职java考核_中软国际技术人员入职试题2(Java)
- apache camel_Apache Camel简介
- tomcat:sessionId生成机制导致tomcat启动过慢问题
- 写代码的注意了,User这个单词用不得
- etag java_你知道HTTP协议的ETag是干什么的吗?
- 利用Linq对集合元素合并、去重复处理
- Java学习步骤及路线(超详细)
- Linux,IP归属地查询(nali)
- 计算机键入命令,win7系统安装软件出现命令行选项语法错误键入“ 命令/?”怎么办...
- 别让你20多岁的活法,毁掉你30岁后的人生
- 用于微信小程序的图文编辑器(富文本编辑器)
- Android Studio教学视频118集(共18.2G)
- 关于host文件、IE代理和nginx的关系
- 2021年P气瓶充装考试题及P气瓶充装最新解析
- 荣耀手环5自定义表盘设计
- spring boot spring data 整合 redis redis keys * 出现 \xac\xed\x00\x05t\x00) 编码异常