diff options
Diffstat (limited to 'romunit.pas')
-rw-r--r-- | romunit.pas | 44 |
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. |