【发布时间】:2016-09-04 10:12:24
【问题描述】:
我正在从惯性传感器将数据流式传输到 C# 应用程序中。数据有点嘈杂,所以我需要添加一个过滤器来平滑它。我有一个卡尔曼滤波器实现,在给定数组时效果很好,但我无法理解如何在恒定数据流上使用它。
我有:
double sensorData; //the noisy value, constantly updating from another class.
过滤器:
public static double[] noisySine = new double[20] { 40, 41, 38, 40, 45, 42, 43, 44, 40, 38, 44, 45, 40, 39, 37, 41, 42, 70, 44, 42 };
public static double[] clean = new double[20];
public static void KalmanFilter(double[] noisy)
{
double A = double.Parse("1"); //factor of real value to previous real value
// double B = 0; //factor of real value to real control signal
double H = double.Parse("1");
double P = double.Parse("0.1");
double Q = double.Parse("0.125"); //Process noise.
double R = double.Parse("1"); //assumed environment noise.
double K;
double z;
double x;
//assign to first measured value
x = noisy[0];
for (int i = 0; i < noisy.Length; i++)
{
//get current measured value
z = noisy[i];
//time update - prediction
x = A * x;
P = A * P * A + Q;
//measurement update - correction
K = P * H / (H * P * H + R);
x = x + K * (z - H * x);
P = (1 - K * H) * P;
//estimated value
clean[i] = x;
Console.WriteLine(noisy[i] + " " + clean[i]);
}
}
如何将双精度流而不是数组输入并返回(过滤的)双精度?
谢谢。
【问题讨论】:
-
一个 double 是八个字节。要流式传输数据,您需要一个字节数组。所以使用 Bit.Converter 类。
-
您好,感谢您的回复。我不明白你的意思。我有一个变量(双)不断更新。我需要将它发送到当前与 double[] 一起使用的过滤器函数中。
-
@anti 你解决过这个问题吗?
-
这个实现中有一个错误:当这个代码迭代时,P 很快变成接近 R/100000 的值并且与噪声无关(在他的计算中没有参考噪声或稳定读数)
标签: c# streaming kalman-filter