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

C 我们如何用定点表示法为有符号浮点输入编码?,c,signal-processing,fixed-point,digital-filter,C,Signal Processing,Fixed Point,Digital Filter,我必须实现数字滤波器的微控制器不支持浮点运算 给定以100 Hz的给定速率采样的模拟输入信号(可以接受-1.65 V到1.65 V的值),我只能执行定点操作。所以我猜我必须先把输入转换成定点。还指出,ADC的输出被量化为无符号10位值 我的问题是 我知道固定点有一个Qm.n格式,其中包括一个符号位。在线引用中没有一个包含从有符号输入浮点到无符号定点的转换 我发现了这个代码: int fixedValue = (int)Math.Round(floatValue*Scale); double f

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

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

我的问题是

我知道固定点有一个Qm.n格式,其中包括一个符号位。在线引用中没有一个包含从有符号输入浮点到无符号定点的转换

我发现了这个代码:

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

double floatValue = (double)fixedValue/Scale;
问题: 1.如何选择比例因子? 2.它是否取决于输入值的范围和用于定点表示的位数? 3.Qm.n格式使用有符号位。定点表示是否可以无符号

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


提前感谢。

使用简单的两点插值

#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报告“仅支持定点操作的微控制器”。但似乎正在使用(或想要使用)
int fixedValue=(int)Math.Round(floatValue*Scale)。因此,这可能适用于OP

这不清楚-这里的浮点在哪里?我将编辑我的问题sir@OliverCharlesworth如果您知道如何将“无符号双浮点数”转换为定点,并且测试/将负浮点数转换为正浮点数非常简单,请参见我上面问题中的更改,把负数转换成正数,把它们映射到0到511,把正数转换到512到1023。这是一个X-Y问题吗?如果需要定点表示,可以使用ADC转换器提供的
int
(甚至
unsigned
)值,然后缩放输出。@chux感谢您的回答!所以我不再需要在代码中使用比例因子了?
Scale
的定义不清楚。事实上,我希望嵌入式处理器从模拟到数字转换器提供10位的值,这样就不需要整个转换。IAC,两点映射可以在两个方向上工作-基础学校数学。从技术上讲,
Value\u MIN
也应该用括号括起来,因为
-
是一个运算符。这不太可能导致问题,但在这方面不做异常是一个好习惯,宏已经足够棘手了;-)@好朋友,谢谢!如何将其转换回双精度?:)@user2569770您的问题中添加了“不支持浮点运算”,所以您仍然不清楚想要什么。