啊,平滑滤波其实就是把相邻的几点加权加起来,求加权平均。我采用的是五点平滑,效果不错。(海宁波平滑试过,效果不如5点平滑的好。。)
function Slick(var x:FilterArray):smallint;//五点平滑滤波器
var
y:smallint;
n:integer;
begin
n:=4;
y:=x[n]+x[n-1]+x[n-2]+x[n-3]+x[n-4];
y:=y div 5;
result:=y;
end;
一阶求导,在这里由于处理的是数字信号,只能用差分方程近似逼近(我列出这个在20Hz附近近似于理想滤波器,基本能满足要求),由于我所做的要求实时处理,所以,只能采用前项差分的方法。
function derivative(var x:FilterArray):smallint;//五点差分函数的定义部分
var //局部范围的定义区
y:smallint;
n:integer;
begin
n:=4;
//y=1/8[2x+x(n-1)-x(n-3)-2x(n-4) 五点前项差分
begin
y:=(2*x[n]+x[n-1]-x[n-3]-2*x[n-4]);
end;
y:=y div 8; //五点差分方程
result:=y;
end;