怎么编程实现将从串口不断读入的数据进行IIR滤波
如何编程实现将从串口不断读入的数据进行IIR滤波
如何编程实现将从串口不断读入的数据进行IIR滤波,每次从串口读入一个数据量X(1),该数据量经AD转换器得到的,因为是不断的读取这样数据,如何实现滤波程序,最好用c#。别想一个数据输入就得到一个输出,因为还与之前的输出有关。
------解决方案--------------------
c#怎么跑来这里呀
自己建个容器罗,收一个丢进去一个。全部收完再整理容器内的数据,从而输出
------解决方案--------------------
我刚好做的也是这个 。。 给你参考一下
float lvbo(float data)
{
static int filterBegin=5;
static float y[5]; //y[2]为y[n-2] ,y[1]为y[n-1],y[0]为y[n]
static float x[5];
for(int i=4;i>0;i--)
{
y[i]=y[i-1]; //来一个新数据,每一个数据 往后退
x[i]=x[i-1];
}
x[0]=data;
if(filterBegin>0)
{
filterBegin- -;
y[0] = data;
return data;
}
y[0]=0.000416599204407*x[0]+0.001666396817626*x[1]+0.002499595226439*x[2]+0.001666396817627*x[3]+0.000416599204406*x[4]-(-3.180638548874718*y[1]+ 3.861194348994212*y[2]-2.112155355110968*y[3]+0.438265142261980*y[4]);
return y[0];
}
大致是这个思路。
如何编程实现将从串口不断读入的数据进行IIR滤波,每次从串口读入一个数据量X(1),该数据量经AD转换器得到的,因为是不断的读取这样数据,如何实现滤波程序,最好用c#。别想一个数据输入就得到一个输出,因为还与之前的输出有关。
------解决方案--------------------
c#怎么跑来这里呀
自己建个容器罗,收一个丢进去一个。全部收完再整理容器内的数据,从而输出
------解决方案--------------------
我刚好做的也是这个 。。 给你参考一下
float lvbo(float data)
{
static int filterBegin=5;
static float y[5]; //y[2]为y[n-2] ,y[1]为y[n-1],y[0]为y[n]
static float x[5];
for(int i=4;i>0;i--)
{
y[i]=y[i-1]; //来一个新数据,每一个数据 往后退
x[i]=x[i-1];
}
x[0]=data;
if(filterBegin>0)
{
filterBegin- -;
y[0] = data;
return data;
}
y[0]=0.000416599204407*x[0]+0.001666396817626*x[1]+0.002499595226439*x[2]+0.001666396817627*x[3]+0.000416599204406*x[4]-(-3.180638548874718*y[1]+ 3.861194348994212*y[2]-2.112155355110968*y[3]+0.438265142261980*y[4]);
return y[0];
}
大致是这个思路。