MATLAB中fi函数的WordLength和FractionLength

在使用MATLAB coder做定点化的时候,发现有时候的索引会变成0,比如如下的代码中的k

fm = get_fimath();

idx = fi(1,0,1,0,fm);
a = (idx+fi(2,0,2,0,fm))*fi(1/3,0,16,17,fm);
k = fi(a,0,17,0,fm)

function fm = get_fimath()
	fm = fimath('RoundingMethod', 'floor',...
	     'OverflowAction', 'Wrap',...
	     'ProductMode','FullPrecision',...
	     'MaxProductWordLength', 128,...
	     'SumMode','FullPrecision',...
	     'MaxSumWordLength', 128);
end

        后来发现错误的地方在于RoundingMethod设置为了floor,导致a是一个无限趋近于1但小于1的数,所以k在定点的时候会变成0。

        之后在寻找错误的原因,感觉是对WordLength和FractionLength的理解上产生了偏差。

        WordLength:代表了用于表示整数部分需要的bit数,而非定点数据总长度

        FractionLength:代表了以2为底的幂数,也就是二进制中小数部分的长度。

例如上式中fi(1/3,0,16,17,fm),表示了这会被定点为一个小于0.5的数(0.33333)。

以上的内容均可以参考这篇回答

https://www.mathworks.com/matlabcentral/answers/868528-why-do-the-data-become-zero-when-using-the-function-fi?s_tid=prof_contriblnk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值