summaryrefslogtreecommitdiff
path: root/romunit.pas
diff options
context:
space:
mode:
Diffstat (limited to 'romunit.pas')
-rw-r--r--romunit.pas44
1 files changed, 44 insertions, 0 deletions
diff --git a/romunit.pas b/romunit.pas
index 41fa0c3..28e0df5 100644
--- a/romunit.pas
+++ b/romunit.pas
@@ -32,6 +32,7 @@ procedure fft(var dat: tExtPointArray; out datArg: tExtPointArray);
procedure interpoliere(var dat: tExtPointArray);
procedure normiere(var dat: tExtPointArray);
procedure berechneRefPuls(inPuls,surTraj: tExtPointArray; betaGlaette: longint; betaBound: extended; out cRefPuls: tExtPointArray);
+procedure fenstern(var dat: tExtPointArray; breite: extended; alteMitte: boolean = false);
type
tSortThread = class(tThread)
@@ -1055,5 +1056,48 @@ begin
fertig:=true;
end;
+var
+ fensterMitte: longint;
+
+procedure fenstern(var dat: tExtPointArray; breite: extended; alteMitte: boolean = false);
+var
+ i,j,len: longint;
+ extrema: tLongintArray;
+ pp,mpp: extended;
+begin
+ if not alteMitte then begin
+ setlength(extrema,0);
+ len:=0;
+ for i:=1 to length(dat)-2 do
+ if (dat[i]['y']>dat[i-1]['y']) xor
+ (dat[i+1]['y']>dat[i]['y']) then begin
+ if length(extrema)<=len then
+ setlength(extrema,len+65536);
+ extrema[len]:=i;
+ inc(len);
+ end;
+ setlength(extrema,len);
+ fensterMitte:=-1;
+ mpp:=-1;
+ for i:=0 to length(extrema)-1 do begin
+ pp:=-1;
+ for j:=0 to length(extrema)-1 do
+ if (abs(dat[extrema[j]]['x']-dat[extrema[i]]['x'])<2) and
+ (abs(dat[extrema[j]]['y']-dat[extrema[i]]['y'])>pp) then
+ pp:=abs(dat[extrema[j]]['y']-dat[extrema[i]]['y']);
+ if pp>mpp then begin
+ mpp:=pp;
+ fensterMitte:=extrema[i];
+ end;
+ end;
+ end;
+
+ for i:=0 to length(dat)-1 do
+ if abs(dat[i]['x']-dat[fensterMitte]['x']) >= breite then
+ dat[i]['y']:=0
+ else
+ dat[i]['y']:=dat[i]['y'] * (1+cos((dat[i]['x']-dat[fensterMitte]['x'])/breite*pi))/2;
+end;
+
end.