我们如何编写带符号浮点输入的定点表示?

时间:2015-12-05 19:45:02

标签: 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 floatValue = (double)fixedValue/Scale;

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

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

使用简单的2点插值。

class Object
  def id
    'bar'
  end
  def foo
  end
end
describe '' do
  it '' do
    allow_any_instance_of(Object).to receive(:foo) { |o| "hello #{o.id}" }
    puts Object.new.foo
  end
end
OP报告“仅支持定点操作的微控制器”。但似乎正在使用(或想要使用)#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