我们如何为有符号浮点输入编码定点表示?

How can we code in fixed-point representation for signed floating point input?

我必须实现数字滤波器的微控制器不支持浮点运算。

给定以 100 Hz 的给定速率采样的模拟输入信号(可以取 -1.65 V 到 1.65 V 的值),我只能执行定点运算。所以我猜我必须先将我的输入转换为定点。还指出,ADC 的输出被量化为无符号的 10 位值。

我的问题是。

我知道定点有一种 Qm.n 格式,其中包含一个符号位。 none 的在线参考包括从有符号输入浮点数到无符号定点数的转换

我找到了这段代码:

int fixedValue = (int)Math.Round(floatValue*Scale);

double floatValue = (double)fixedValue/Scale;

问题: 1. 如何选择我的比例因子? 2. 它取决于我输入值的范围和用于定点表示的位数吗? 3. Qm.n 格式使用有符号位。定点表示可以是无符号的吗?

这一切都归结为选择比例因子和从有符号输入到无符号 10 位定点的映射(这将用于求解差分方程的进一步计算,然后在输出中将其转换回双精度)

提前致谢。

使用简单的 2 点插值。

#define Value_MAX  1.65
#define Value_MIN  (-1.65)
#define value10bit_MAX  1023
#define value10bit_MIN  0
#define slope ((value10bit_MAX - value10bit_MIN)/(Value_MAX - Value_MIN))

int value10bit = (int)Math.Round((floatValue - Value_MIN)*slope + value10bit_MIN);

OP 报告 "microcontroller that only support fixed-point operations." 似乎正在使用(或想要使用)int fixedValue = (int)Math.Round(floatValue*Scale);。所以也许这适用于 OP