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没有其他人会做这样的事情,我建议你首先在外面寻找更好的解决方案……好的。再次感谢你的回答和指导!