DSP Master VCL
|
Copy data from circular buffer.
procedure ReadFromCircularBuffer(Buffer: TVec; Dst: TVec; var State: TCircularBufferState; ForwardStep: Integer = -1); overload;
Copies Dst.Length samples from Buffer to Dst. If there is not Dst.Length samples available, the BufferUnderflow flag will be set in the State variable. The routine advances ReadPosition of the buffer to the position where the next data is to be read from. ForwardStep defines the number of samples to advance the read cursor. If the ForwardStep is -1, the read cursor is advanced Dst.Length samples.
Circular buffer test.
uses MtxExpr, Math387, MtxVec, SignalUtils, MtxVecTee, MtxVecEdit; procedure TForm1.Button1Click(Sender: TObject); var h1,h,c,b: Vector; i,n: integer; State: TCircularBufferState; begin h1 := Ramp(30, mvDouble, 0,1); c.Size(h1); c.SetZero; h.Size(h1); h.SetZero; n := 6; InitCircularBuffer(11,2,State); for i := 0 to (h1.Length div n) - 1 do begin h1.SetSubRange(i*n,n); h.SetSubRange(i*n,n); c.SetSubRange(i*n,n); WriteToCircularBuffer(b,h1,State); n := PeekCircularBuffer(State); MonitorCircularBuffer(b,h,State); ReadFromCircularBuffer(b,c,State); end; h1.SetFullRange; h.SetFullRange; c.SetFullRange; DrawIt([h1,h,c],['Original','Monitored','Read']); //must be all equal, if right end;
#include "MtxExpr.hpp" #include "MtxVecEdit.hpp" #include "MtxVecTee.hpp" #include "SignalUtils.hpp" void __fastcall TForm1::BitBtn1Click(TObject *Sender) { sVector h1,h,c,b; int n,i,k; TCircularBufferState State; h1 = Ramp(30, mvDouble, 0,1); c.Size(h1); c.SetZero(); h.Size(h1); h.SetZero(); n = 6; InitCircularBuffer(11,2,State); k = h1.Length/n; for (i = 0; i < k; i++) //must use k here, otherwise h1.Length is evaluated for every iteration { h1.SetSubRange(i*n,n); h.SetSubRange(i*n,n); c.SetSubRange(i*n,n); WriteToCircularBuffer(b,h1,State); PeekCircularBuffer(State); MonitorCircularBuffer(b,h,State); ReadFromCircularBuffer(b,c,State); } h1.SetFullRange(); h.SetFullRange(); c.SetFullRange(); DrawIt(OPENARRAY(TVec*,(h1,h,c)),OPENARRAY(AnsiString,("Original","Monitored","Read"))); //must be all equal, if right }
Copyright (c) 1999-2025 by Dew Research. All rights reserved.
|
What do you think about this topic? Send feedback!
|