私は、慣性センサからC#アプリケーションにデータをストリーミングしています。データは少しノイズが多いので、フィルタを追加してそれを滑らかにする必要があります。私は、配列を与えられたときにうまくいくカルマンフィルタの実装を持っていますが、定数のデータストリームでどのように使用するかについて頭を悩ますことはできません。ノイズを減らすためのストリーミングデータのフィルタリング、カルマンフィルタ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]);
}
}
は、どのように私は、ダブル配列の代わりに、中に二重のストリーミング、および(フィルタリング)を返すことができますか?
ありがとうございます。
ダブルは8バイトです。データをストリームするには、バイト配列が必要です。したがって、Bit.Converterクラスを使用してください。 – jdweng
こんにちは、お返事ありがとうございます。私はあなたが何を意味するのか理解していません。私は変数(ダブル)を常に更新しています。私はそれを現在double []で動作するフィルタ関数に送る必要があります。 – anti
@antiこれを解決しましたか? – Chris