首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定点发展

定点发展
EN

Stack Overflow用户
提问于 2011-06-22 14:29:10
回答 1查看 1.4K关注 0票数 2

这些天我在做一些定点编码。

如果我有一堆来自ADC的16位样本,然后用16位滤波器系数进行乘法,结果可能是一个32位不动点数,对吗?这很好,因为我的目标是32位定点DSP。但是,如果我想再乘以16位不动点系数或者什么的话,我就会得到溢出,对吗?这是否意味着我需要做中间截断?最终,我还是会被截断,因为我需要将结果发送到一个16位DAC。

有人在MATLAB中有这样做的经验吗?

编辑我确实有定点工具箱。我不明白的是,现在如果我设置一个16位字长的数字,然后将最大乘积长度设为16,然后再乘以16位字,它会给我一个错误?如果我必须执行所有的截断来防止一个错误,那么不动点工具箱对我有什么帮助呢?我想我正在寻找一个例子,说明如何使用不动点工具箱来确保最佳的四舍五入/溢出条件,因为我的输入是16位,我有32位寄存器。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2011-06-22 15:52:22

正如您注意到的,16位乘积会导致32位的结果.在继续,我假设你是定点表示法是16.16。

为了执行第二次乘法,您应该首先将初始mul的结果向下移16位。由于结果现在返回到所需的16.16格式,您可以继续使用第二个mul ("...if i希望再乘以16位不动点系数.“)。在第二次乘法之后,将结果向下移动16位,以恢复16.16符号。

在输出DAC值之前,我希望您需要保留不动点表示法,然后恢复为整数形式。要做到这一点,只需将值向下移动16位。在保留不动点表示法之前,可以考虑舍入结果.假设一个正的不动点数,这可以通过在最后的右移之前向结果添加0.5f来实现。( 16.16,0.5f为2^15。)

像往常一样,应该仔细研究顺序定点运算,以避免左手边溢出。可以重新排序或考虑操作以防止溢出。在网络上有许多好的教程可以帮助教程

至于在matlab中执行定点数学,位移位函数是非常容易使用的:参考文献。当然,定点工具箱使这一切变得更加容易。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6441586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档