Filter data with a moving average filter.
Applies moving average filter to Data from DataIndex to DataIndex+Len. Set Len to -1 to use the full Data length. MaskSize defines the length of the filter in samples. This MovingAverageFilter routine can be used to filter a block of data (not for streaming).
Example 1
Moving average filter applied to a sine signal.
uses MtxExpr, Math387, MtxVec, SignalUtils, MtxVecTee, MtxVecEdit,OptimalFir;
procedure TForm1.Button1Click(Sender: TObject);
var b,c: Vector;
begin
Tone(b,300,5/300,0,1);
c.Copy(b);
MovingAverageFilter(b,20);
DrawIt([c,b],['Unfiltered','Filtered']);
end;
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
Vector b,c;
Tone(b,300,5.0/300,0,1);
c->Copy(b);
MovingAverageFilter(b,20);
DrawIt(OPENARRAY(TVec*,(c,b)),OPENARRAY(AnsiString,("Unfiltered","Filtered")));
}
using Dew.Math;
using Dew.Math.Editors;
using Dew.Math.Units;
using Dew.Signal;
using Dew.Signal.Units;
using Dew.Math.Tee;
using Dew.Signal.Tee;
private void button1_Click(object sender, EventArgs e)
{
Vector b = new Vector(0);
Vector c = new Vector(0);
b.Size(300);
SignalUtils.Tone(b, 300, 5.0 / 300, 0, 1, false);
c.Copy(b);
SignalUtils.MovingAverageFilter(b, 20, 0, Math387.MtxVecEOA); //from Index 0 to EndOfArray
TeeChart.DrawIt(new TVec[2] { c, b }, new string[2] { "Unfiltered", "Filtered" }, "Moving average filter", false);
}