C# 拉普拉斯变换与陀螺频率值的求取

C# 拉普拉斯变换与陀螺频率值的求取,c#,frequency,noise,differential-equations,coordinate-transformation,C#,Frequency,Noise,Differential Equations,Coordinate Transformation,我从陀螺仪传感器中获得x,y,z值。每个变量每秒发送10个值。在3秒钟内我有 x=[30values] y=[30values] z=[30values] 某些值与其他值相差太大,这是造成噪声的原因。使用拉普拉斯变换,我需要从数组中获取最频繁的值 我需要用拉普拉斯变换方程对数组进行滤波。我需要用C#来建立方程。如何用等式实现数组?由于这种滤波器(拉普拉斯)非常专门用于工程的特定领域,需要一个对编程语言(在本例中为C#)和滤波器本身都有很好理解的人,我建议您使用这种滤波器,而不是自己

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

 x=[30values] 
 y=[30values] 
 z=[30values]
某些值与其他值相差太大,这是造成噪声的原因。使用拉普拉斯变换,我需要从数组中获取最频繁的值

我需要用拉普拉斯变换方程对数组进行滤波。我需要用C#来建立方程。如何用等式实现数组?

由于这种滤波器(拉普拉斯)非常专门用于
工程的特定领域,需要一个对编程语言(在本例中为C#)和滤波器本身都有很好理解的人,我建议您使用这种滤波器,而不是自己编写过滤器

以下是源代码片段:

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; 
    } 
}
class拉普拉斯
{ 
const int DefaultStehfest=14;
公共代表双功能代表(双t);
静态双[]V;//Stehfest系数
静态双精度ln2;//2的日志
公共静态void InitStehfest(int N)
{ 
ln2=数学日志(2.0);
int N2=N/2;
int NV=2*N2;
V=新双精度[NV];
int符号=1;
如果((N2%2)!=0)
符号=-1;
对于(int i=0;iN2)
kmax=N2;
V[i]=0;
符号=-符号;
对于(整数k=kmin;k1)
{ 
对于(int i=2;i由于这种过滤器(Laplace)非常专门用于
工程的特定领域,并且需要一个对编程语言(在本例中为C#)和过滤器本身都有很好理解的人,我建议您使用这种过滤器,而不是自己编写过滤器

以下是源代码片段:

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; 
    } 
}
class拉普拉斯
{ 
const int DefaultStehfest=14;
公共代表双功能代表(双t);
静态双[]V;//Stehfest系数
静态双精度ln2;//2的日志
公共静态void InitStehfest(int N)
{ 
ln2=数学日志(2.0);
int N2=N/2;
int NV=2*N2;
V=新双精度[NV];
int符号=1;
如果((N2%2)!=0)
符号=-1;
对于(int i=0;iN2)
kmax=N2;
V[i]=0;
符号=-符号;
对于(整数k=kmin;k1)
{ 

对于(int i=2;i这看起来像控制/DSP问题…“从我的数组中获取最频繁的值”也许您可以通过给出示例输入-预期输出对来阐明这意味着什么。这样,更容易理解问题或提出解决方案。例如,x=[30个值]的值是什么预期的输出是什么例如:x=[30130230601305512308301302616306…]我需要使用拉普拉斯变换来获得x坐标的频率值,以防理解301-308值是最精确的数字。但是我如何用方程实现数组呢?哦,哦,不在这里…你可以更新问题..如果你不要求滤波器是拉普拉斯的,但是y过滤器(如中值/平均值)…是的,你完全正确,但我需要使用拉普拉斯变换:/而且我没有任何想法…这看起来像控制/DSP问题…“从我的数组中获取最频繁的值”也许您可以通过给出示例输入-预期输出对来阐明这意味着什么。这样,更容易理解问题或提出解决方案。例如,x=[30个值]的值是什么,预期输出是什么例如:x=[301030630105512308301302616306…]我需要使用拉普拉斯变换来获得x坐标的频率值,以防理解301-308值是最精确的数字。但是我如何用方程实现数组呢?哦,哦,不在这里…你可以更新问题..如果你不要求滤波器是拉普拉斯的,但是y过滤器(如中值/平均值)…是的,你完全正确,但我需要使用拉普拉斯变换:/而且我没有任何想法…谢谢你的回答。我会看看。不客气。这里的想法不是要创造你自己买不起的东西…因为在非常专业的领域,如
控制/DSP工程
,很容易制造薄雾加入编码,要么因为我们不熟悉该语言,要么因为我们不熟悉
工程
概念。因此,除非您非常确定或者没有其他人做这样的事情,否则我建议您首先在外部寻找更好的解决方案……好的。再次感谢您的回答和指导!谢谢您的回答。我会的好的。不客气。这里的想法不是创造你自己买不起的东西……因为在像
控制/DSP工程
这样的非常专业的领域,编码很容易出错,因为我们不熟悉这种语言或
工程
概念。因此,除非你非常确定r没有其他人会做这样的事情,我建议你首先在外面寻找更好的解决方案……好的。再次感谢你的回答和指导!