如何在MATLAB中映射值范围

时间:2013-07-12 22:48:57

标签: matlab map arduino

我希望有一个类似于这个Arduino函数的MATLAB函数: http://arduino.cc/en/Reference/map

基本上我有一个基于时间的变量,有67个数据点,范围从0到1.15,我想将它从0到100%映射(所以,101个数据点)。在Arduino中看起来像:

map(value, fromLow, fromHigh, toLow, toHigh)

我可以在MATLAB中使用interp1来获取101个数据点,但我只得到0到1.15之间的101个数据点。我知道我可以将每个值乘以100 / 1.15,但这是不准确的。在MATLAB中有一种更优雅的方式可以忽略它吗?

(这篇文章看起来很有希望,但这不是我想要的: Map function in MATLAB?

由于

3 个答案:

答案 0 :(得分:1)

您可以使用linspace,例如

linspace(0,1.15,101)

将在0和1.15的限制之间统一传播101点。

答案 1 :(得分:0)

如果您有神经网络工具箱,那么您可以尝试mapminmax功能。默认情况下,函数映射到[-1 1],并从数据中获取输入边界。但我相信,使用您的值填充settings结构,然后调用mapminmax应该会有所帮助。

答案 2 :(得分:0)

FEX提交maptorange可以做到这一点。它采用初始值,其起源范围以及应将其映射到的范围,并返回映射后的值。在您的示例中,应该是:

maptorange(values, [0 1.15], [0 100]);

(这是线性映射。脚本也可以沿指数函数映射。)

要从67到101的值,您确实需要插值。这可以在映射之前或之后完成。