Matlab 定点开发

Matlab 定点开发,matlab,overflow,fixed-point,truncation,Matlab,Overflow,Fixed Point,Truncation,这些天我在做一些定点编码 如果我有一堆来自ADC的16位样本,我用16位滤波器系数相乘,结果可能是一个32位的固定点数,对吗?这很好,因为我的目标是32位定点DSP。然而,如果我想用另一个16位的定点系数或者别的什么乘以它,那么我就得到了溢出,对吗?这是否意味着我需要进行中间截断?最终我还是会截断,因为我需要将结果发送到16位DAC 有没有人有在MATLAB中这样做的经验 编辑我有固定点工具箱。我不明白的是,现在如果我设置一个16位字长的数字,然后将最大乘积长度设置为16,然后再乘以另一个16位

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

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

有没有人有在MATLAB中这样做的经验

编辑我有固定点工具箱。我不明白的是,现在如果我设置一个16位字长的数字,然后将最大乘积长度设置为16,然后再乘以另一个16位字长,这会给我一个错误吗?如果我必须执行所有的截断来防止错误,那么定点工具箱到底能帮我什么忙呢?我想我正在寻找一个关于如何使用定点工具箱来确保最佳舍入/溢出条件的示例,因为我的输入是16位,并且我有32位寄存器


谢谢

正如您所指出的,16位乘法可以产生32位结果。继续,我假设你们的定点符号是16.16

为了执行第二次乘法,应首先将初始mul的结果向下移位16位。由于结果现在返回到所需的16.16格式,您可以继续第二个mul(“…如果我想用另一个16位定点系数乘以它…”)。在第二次乘法之后,将结果下移16位以恢复16.16符号

在将值输出到DAC之前,我希望您需要保留定点表示法并恢复为整数形式。为此,只需将该值下移16位。在离开定点标记之前,您可以考虑舍入结果。假设一个正的定点数,这可以通过在最终右移之前向结果添加0.5f来实现。(在16.16中,0.5f等于2^15。)

一如既往,应仔细研究顺序定点算术运算,以避免溢出左侧。操作可能会被重新排序或分解,以防止溢出。网上有很多很好的教程可以帮助你


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

Matlab有一个定点工具箱,但我猜您没有访问该工具箱的权限。这实际上取决于你自己去实现它。你也可以在Mathworks网站上搜索可能已经为这些目的编写的代码。@Phonon我有固定点工具箱。请看编辑,谢谢。