Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:如何在Android Studio中生成随机信号?_Java_Android_Math_Signal Processing - Fatal编程技术网

Java:如何在Android Studio中生成随机信号?

Java:如何在Android Studio中生成随机信号?,java,android,math,signal-processing,Java,Android,Math,Signal Processing,如何使用Java生成随机信号?我想模拟一个传感器,在我正在开发的Android应用程序上做一些测试。该信号将被发送到服务器,应用程序将检索并处理该信号 一张照片能说出千言万语: 单独使用Android随机类并不是一个好方法。但是也许有一个使用随机类的算法 编辑:更多信息 该信号需要是线性和时间相关的。想想城市里车辆的速度是如何变化的,诸如此类 好吧,经过思考,我想出了一个解决办法。我使用了一个Sigmoid函数来生成一个随机信号。以下是我的最终结果: 最终结果 解决方案 Sigmoid函数的

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

一张照片能说出千言万语:

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

编辑:更多信息


该信号需要是线性和时间相关的。想想城市里车辆的速度是如何变化的,诸如此类

好吧,经过思考,我想出了一个解决办法。我使用了一个Sigmoid函数来生成一个随机信号。以下是我的最终结果:

最终结果

解决方案

Sigmoid函数的范围为0到1,或-1到1,具体取决于您希望如何使用它。在我看来,他们很酷。这是它的,这是它的样子:

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

首先,我使用一个随机函数从-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找到了这个,它也可能是一个随机信号的解决方案

另一个例子

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


您的要求是什么?无论您使用什么数据来创建该图片,它似乎都应该起作用。为什么不直接使用它呢?这是来自谷歌图片:)不确定为什么需要使用sigmoid函数;你可以尝试一种“随机游走”的方法——以一个随机(但很小)的数量迭代增加值。有很多方法可以做到这一点。我首先开始使用sigmoid从起始值中获取一个随机百分比,然后对其进行加/减,这也可以。它只是按照它原来的方式工作,而且由于它只是为了测试一个应用程序,所以现在就可以了。
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;
}