SignalUtils.SampleAndHoldFilter Method

procedure SampleAndHoldFilter(Data: TVec; var State: TSampleAndHoldState; Hold: Integer);

Filter data with a sample-and-hold filter.

#NameTypeDescription
1DataTVecsource TVec
2StateTSampleAndHoldState
3HoldInteger

Result: stored in self (calling object)

Remarks:

Filter Data with a non-linear sample-and-hold filter. The current value is held until a bigger is found or time-out occurs. Time out is defined in samples with Hold parameter. The filter features streaming support via the State variable. Data can be real or complex. The State variable has to be initialized with zeros before it is passed to the routine for the first time.

Examples
uses MtxExpr, Math387, MtxVec, SignalUtils, MtxVecTee, MtxVecEdit;

procedure TForm1.Button1Click(Sender: TObject);
var b,c: Vector;
n,i: integer;
State: TSampleAndHoldState;
begin
    Tone(b,300,5.0/300,0,1);
    c.Copy(b);
    n := 10;
    for i := 0 to b.Length div n-1 do
begin
    b.SetSubRange(i*n,n);
    SampleAndHoldFilter(b,State,7);
end;
b.SetFullRange;
DrawIt([c,b],['Unfiltered','Filtered']);
end;
See Also: SignalUtils.SampleAndDecayFilter, SignalUtils.MedianFilter, SignalUtils.MovingAverageFilter, SignalUtils.ExpAverageFilter