从浮点表示到定点表示的转换

信息处理 固定点 转换 浮点
2022-01-29 19:01:00

我已经为星座映射器编写了一个 matlab 函数,我想创建该代码的定点版本以在 FPGA 上实现。我知道 matlab 有一个用于定点转换的特定工具箱,但我想手动执行此操作。我的具体问题是:

1)代码的哪些部分需要这种转换?我的意思是所有输入、输出、临时变量都需要转换为定点格式吗?

2)我应该遵循哪些步骤来进行此转换?我读到从浮点数转换为固定点数不多,不少于缩放数字。但我不太确定我该怎么做。另外,我希望这个定点表示具有自定义长度,不一定等于 8、16、32 位等标准长度。

PS:暂时不想比较定点代码和浮点代码的性能

2个回答

我认为您需要在 MATLAB 中使用floor()orround()函数来模拟定点变量和操作。所以你必须知道定点值的范围和它的精度。范围与精度之比是动态范围,每增加一倍,您将获得 6.02 dB 和一位字宽。

如果你转换:

x_fixed = precision*round(x_float/precision);
if x_fixed > fixed_max
    x_fixed = fixed_max;
elseif x_fixed < fixed_min
    x_fixed = fixed_min;
end;

然后fixed_max - fixed_min = (2^N - 1)*precision 作为N定点字中的位数。如果您在每次数学运算后都这样做,您将模拟定点算术。

可能有x_float比我展示的更好的舍入方法。有时floor()round()并且“分数保存”是将具有更多位的中间结果舍入到您的N-bit 定点字的更好方法,但需要每个变量的错误状态。

对于每个变量,并使用它们的定点值进行算术运算,并使用上述代码将结果四舍五入为定点值。

这就是如何将浮点 MATLAB 转换为模拟定点数学。

您需要计算数据的均值和标准差。然后,您从平均值中选择 4 个标准差作为数据的可用范围。该范围之外的所有内容都会被剪裁,但如果您的数据是高斯数据,它将包含 >99% 的所有值。然后,您使用由固定点表示、平均值和标准差表示的最大范围来得出比例因子。