【问题标题】:Java: how to generate a random signal in Android Studio?Java:如何在 Android Studio 中生成随机信号?
【发布时间】:2018-11-25 19:11:18
【问题描述】:

如何使用 Java 生成随机信号?我想模拟一个传感器来对我正在开发的 Android 应用程序进行一些测试。该信号将被发送到服务器,应用程序将检索并处理它。

一张照片说出一千个字:

单独的 Android 随机类不是一个好方法。但也许使用随机类的算法?

编辑:更多信息

这个信号需要是线性的和时间相关的。想想城市中车辆的速度如何变化,类似的事情。

【问题讨论】:

  • 您有什么要求?
  • 无论您使用什么数据来创建该图片,它似乎都应该有效。为什么不直接使用它?
  • 来自 Google 图片 :)

标签: java android math signal-processing


【解决方案1】:

好的,经过深思熟虑后,我想出了一个解决方案。我使用 Sigmoid 函数来生成随机信号。这是我的最终结果:

最终结果

解决方案

Sigmoid 函数在 0 到 1 或 -1 到 1 之间变化,具体取决于您要如何使用它。在我看来,它们很酷。这是它的Wikipedia,它的样子是这样的:

在这种情况下,为了生成随机信号,我使用了双曲正切函数tanh(Sigmoid):

tanh(x) = [ e^x - e^-x ] / [ e^x + e^-x ]

首先我使用随机函数从 -2000 到 2000 中选择一个数字,然后将其除以 1000 得到从 -2 到 2 的十进制值。如果你看一下图表,双曲函数在 -2 之间变化很大和 2,因此它提供了一个分布良好的数据。我取随机值的双曲函数,乘以比例常数(控制变化率)。然后将此值添加到最后一个已知值。最后一步是取其绝对值,以防您不想要负值。

伪代码:

y0 = 10 // initial value
k = 5 // rate of change

for ( 1 thousand points: do this ) {

    random = rand(-2000, 2000) / 1000;
    x = tanh(random);
    y = k * x + y0;
    data[] = y;

    y0 = y;
}

就是这样,简单高效。

编辑:

如果有人感兴趣或者可能正在寻找一些随机信号,我从 PubNub 找到了这个Artificial Sensor Feed,它也可能是一个随机信号的解决方案。

另一个例子

x0(初始值)= 100 且变化率 = 10 的最终结果的另一个示例。

【讨论】:

  • 不确定为什么需要 sigmoid 函数;您可以尝试“随机游走”方法 - 以随机(但)量迭代地增加值
  • 是的,有很多方法可以解决这个问题。我首先开始使用 sigmoid 从起始值中获取随机百分比并从中添加/减去,这也可以工作。它只是按照它的方式工作,因为它只是为了测试一个应用程序,所以它现在可以做。
猜你喜欢
  • 2021-09-12
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 2011-04-08
  • 1970-01-01
  • 2013-05-23
相关资源
最近更新 更多