拉普拉斯变换并获得陀螺仪的频繁值

Laplace Transform And Getting The Frequent Value For Gyro

我正在从陀螺仪传感器获取 x,y,z 值。每个变量每秒发送 10 个值。在 3 秒内我有;

 x=[30values] 
 y=[30values] 
 z=[30values]

一些值与其他值差异太大,导致出现噪音。使用拉普拉斯变换,我需要从我的数组中获取最频繁的值。

我需要用拉普拉斯变换方程过滤数组。我需要在 C# 中构建方程式。如何用等式实现数组?

由于这种过滤器 (Laplace) 非常专门用于 Engineering 的某些领域,并且需要对编程语言(在本例中为 C#)和过滤器本身都有很好理解的人,我建议您使用这样的 source,而不是自己编写过滤器代码。

这是源代码的片段:

class Laplace 
{ 
    const int DefaultStehfest = 14; 
    public delegate double FunctionDelegate(double t); 
    static double[] V; // Stehfest coefficients 
    static double ln2; // log of 2

    public static void InitStehfest(int N) 
    { 
        ln2 = Math.Log(2.0); 
        int N2 = N / 2; 
        int NV = 2 * N2; 
        V = new double[NV]; 
        int sign = 1; 
        if ((N2 % 2) != 0) 
            sign = -1; 
        for (int i = 0; i < NV; i++) 
        { 
            int kmin = (i + 2) / 2; 
            int kmax = i + 1; 
            if (kmax > N2) 
                kmax = N2; 
            V[i] = 0; 
            sign = -sign; 
            for (int k = kmin; k <= kmax; k++) 
            { 
                V[i] = V[i] + (Math.Pow(k, N2) / Factorial(k)) * (Factorial(2 * k) 
                     / Factorial(2 * k - i - 1)) / Factorial(N2 - k) 
                     / Factorial(k - 1) / Factorial(i + 1 - k); 
            } 
            V[i] = sign * V[i]; 
        } 
    }

    public static double InverseTransform(FunctionDelegate f, double t) 
    { 
        double ln2t = ln2 / t; 
        double x = 0; 
        double y = 0; 
        for (int i = 0; i < V.Length; i++) 
        { 
            x += ln2t; 
            y += V[i] * f(x); 
        } 
        return ln2t * y; 
    } 

    public static double Factorial(int N) 
    { 
        double x = 1; 
        if (N > 1) 
        { 
            for (int i = 2; i <= N; i++) 
                x = i * x; 
        } 
        return x; 
    } 
}

由 Walt Fair Jr. 先生在 CodeProject 中编码。