matlab fi工具箱使用

news/2024/12/28 1:24:28/文章来源:https://www.cnblogs.com/jiaotaiyang/p/18636973

先定义两个运算属性,这两个运算没有饱和和四舍五入,可以直接进行截位操作。

F0 = fimath('OverflowAction','Wrap','RoundingMethod','Floor');
F1 = fimath('OverflowAction','Saturate','RoundingMethod','Floor');

fi的语法为

fi(value,signed,word_length,fraction_length,F)

然后定义定点数a

a=fi(1.3256,1,6,4,'OverflowAction','Wrap','RoundingMethod','Floor')

运行结果为:

a = 1.3125DataTypeMode: Fixed-point: binary point scalingSignedness: SignedWordLength: 6FractionLength: 4RoundingMethod: FloorOverflowAction: WrapProductMode: FullPrecisionSumMode: FullPrecision

查看a的二进制保存形式:

>> bin(a)ans ='010101'

对a进行截位,只保留高四位,丢掉低两位,结果保存到b中:

>> b=fi(a,1,4,2,'OverflowAction','Wrap','RoundingMethod','Floor')b = 1.2500DataTypeMode: Fixed-point: binary point scalingSignedness: SignedWordLength: 4FractionLength: 2RoundingMethod: FloorOverflowAction: WrapProductMode: FullPrecisionSumMode: FullPrecision
>> bin(b)ans ='0101'

对应到verilog语法可以如此表示:

wire [5:0] a = 6'b010101;
wire [3:0] b = a[5:2];

对于乘积和加法,可以自定义运算后保留的位宽。具体可参考fimath ProductMode and SumMode
分别有全精度,保留LSB/MSB,自定义精度三种模式。

ProductMode = 'FullPrecision';
SumMode = 'FullPrecision';
ProductMode = 'KeepLSB';
ProductWordLength = 12;
SumMode = 'KeepLSB';
SumWordLength = 12;
F.ProductMode = 'SpecifyPrecision';
F.ProductWordLength = 8;
F.ProductFractionLength = 7;
F.SumMode = 'SpecifyPrecision';
F.SumWordLength = 8;
F.SumFractionLength = 7;

当设置ProductModeKeepLSBKeepMSB时,需要指定ProductWordLength,分别代表保留低位和保留高位的位宽;当设定为SpecifyPrecision时,需要指定ProductWordLengthProductFractionLength;当设定为FullPrecision时,字长属性无效。
举个例子,如果\(a\)\(s(6,4)\),\(b\)\(s(7,4)\),则\(a*b=s(6+7,4+4)=s(13,8)\).
对其进行截位得到\(c\),只保留两位整数位,保留5位小数位,截位方式不进行多余的饱和处理,结果为\(s(7,5)\).对应\(verilog\)代码为

wire [5:0] a;
wire [6:0] b;
wire [6:0] c;
wire [12:0] a_times_b;
assign a_times_b = $signed(a)*$signed(b);//full precision
assign c = a_times_b[9:3];//SpecifyPrecision

对于matlab模拟以上操作,下面是截位运算。

a=fi(1.23,1,6,4,'OverflowAction','Wrap','RoundingMethod','Floor','ProductMode','SpecifyPrecision','ProductWordLength',7,'ProductFractionLength',5);
b=fi(2.54,1,7,4,'OverflowAction','Wrap','RoundingMethod','Floor','ProductMode','SpecifyPrecision','ProductWordLength',7,'ProductFractionLength',5);
c=a*b;
disp(c)

运行结果为

   -1.0312DataTypeMode: Fixed-point: binary point scalingSignedness: SignedWordLength: 7FractionLength: 5RoundingMethod: FloorOverflowAction: WrapProductMode: SpecifyPrecisionProductWordLength: 7ProductFractionLength: 5SumMode: FullPrecision

查看\(a,b,c\)的二进制值:

>> bin(a)ans ='010011'>> bin(b)ans ='0101000'>> bin(c)ans ='1011111'

进行全精度运算:

a.ProductMode='FullPrecision';
b.ProductMode='FullPrecision';
c=a*b;
disp(c)
bin(c)

结果为

    2.9688DataTypeMode: Fixed-point: binary point scalingSignedness: SignedWordLength: 13FractionLength: 8RoundingMethod: FloorOverflowAction: WrapProductMode: FullPrecisionSumMode: FullPrecisionans ='0001011111000'

可以看到,对全精度运算结果从最高的第四位开始截位到最低的第四位,结果是一样的。
最后强调一下,对于乘法运算,两个操作数的'ProductMode','ProductWordLength','ProductFractionLength'属性值需要一样;
对于加法运算,两个操作数的加法属性也需要一样,否则会报错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/860159.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动端滑动,better-scroll使用

背景 为博客园做移动端适配,有一个控件需要固定大小,但是里面的内容是动态的,很有可能放不下,因此需要滑动。 设置了滑动后,我发现划不动,原来原生的滑动是不管你什么移动端的,于是找移动端适配的滑动。 Better-Scroll 名声很大,坑不少。 划不动 官方文档写的快速开始实…

JAVA-第三次大作业blog

一.前言 在深入探索Java编程的征途中,我迎来了第七、八次PTA题目集的挑战。这两次作业不仅是对我学习成果的检验,更是深化我对Java核心概念——继承理解的宝贵契机。通过亲身实践,我不仅巩固了继承在Java中的应用技巧,还跨越性地深化了对子类与父类关系的洞察。每一次编码,…

Unity音频管理方案

AudioManager类的创建可以序列化,就可以在外面看到然后在Awake里面初始化一下AudioManager类的完善 写个单例:这样就可以直接在外面AudioManager.去调用比较方便 使用AudioMixer对音频进行分组使用unity自带的AudioMixer使用unity自带的AudioMixer进行音量统一处理在UI框架里…

没有xml configuration file

点击new菜单发现没有看到XML Configuration File选项。1、正确导入spring jar包,spring5.6 maven坐标<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>6.2.1</versi…

PostgreSQL 数据库的启动与停止管理

title: PostgreSQL 数据库的启动与停止管理 date: 2024/12/28 updated: 2024/12/28 author: cmdragon excerpt: 作为一个强大的开源关系数据库管理系统,PostgreSQL在众多应用场景中发挥着关键作用。在实际使用过程中,对于数据库的启动和停止操作至关重要。这不仅关系到数据…

人工智能Agent提示工程的六个关键要素

一个构造良好的提示封装了所有必要的信息,确保AI Agent生成准确的响应并有效地执行任务。 通过系统地组合特定组件,提示符为LLM提供了一个全面的框架,以实现最佳功能。 六个关键要素如下: 1.用户请求:这是用户提供的原始任务描述,概述了目标和期望的结果。它作为代理行为…

一个Java实现的OCR系统

一个Java实现的OCR系统 利用java17实现的一套OCR推理系统,兼容paddleocr。如下图,目前功能如下,https://github.com/jiangnanboy/JiaJiaOCR:

staticfile cdn崩了,boot cdn崩了。

背景 一天之内碰到两个cdn同时炸。 staticfile cdnboot cdn我没截图,他主站是没炸的,但是js文件访问不了,过了一段时间又好了。 后面恢复了,下面是bootcdn的速度测试,有点慢说实话。其他bootcdn太慢了,换一家用用。npmmirror 全国最nb的镜像站,无需多言。 格式如下 http…

《计算机组成及汇编语言原理》阅读笔记:p121-p122

《计算机组成及汇编语言原理》学习第 8 天,p121-p122 总结,总计 2 页。 一、技术总结 1.memory优化 (1)cache memory remove blank from "Most computers support two different kinds (levels) of cache: level one (L1) cache is built into the CPU chip itself and…

【电商系统】使用多种设计模式重构电商系统登录业务场景

一、介绍 在做业务功能开发的时候,每个程序员接触过最多的应该就是登录功能了,而一个登录功能有很多种登录交互的体现,当我们开始写登录代码的时候,前期能满足登录就行了,渐渐的系统中加入了不同业务需求的代码,以及每个登录需要特殊处理的参数,基本上我们要开发不同的接…

Android 当鸟动漫(原樱花动漫) 1.5.5.8去广告版

当鸟动漫(原樱花动漫)是许多二次元用户喜欢用的免费动漫平台,网罗了各种动漫番剧资源,新番、日漫、国漫、美漫、电影等其他内容一网打尽,应有尽有,同步更新,智能精选推荐,高清播放,自由筛选观看阅读,还支持收藏、下载、分享、反馈,好用又实用!Android 当鸟动漫:下载…