summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epost.lpr11
-rw-r--r--epost.lps115
-rw-r--r--epostunit.pas107
3 files changed, 177 insertions, 56 deletions
diff --git a/epost.lpr b/epost.lpr
index 031095f..e0cefcb 100644
--- a/epost.lpr
+++ b/epost.lpr
@@ -330,6 +330,17 @@ begin
aufraeumen;
halt(1);
end;
+ if istDasBefehl('Autokorrelation2d',s,bekannteBefehle,true) then begin
+ i:=findeWerte(s,inf,@wertes,@konturen,true);
+ if i<0 then begin
+ aufraeumen;
+ halt(1);
+ end;
+ if wertes[i].berechneAutokorrelation2d(syntaxTest,inf,maxThreads,Warnstufe) then
+ continue;
+ aufraeumen;
+ halt(1);
+ end;
if istDasBefehl('FFT2d',s,bekannteBefehle,true) then begin
i:=findeWerte(s,inf,@wertes,@konturen,true);
if i<0 then begin
diff --git a/epost.lps b/epost.lps
index e9e8cf6..547058e 100644
--- a/epost.lps
+++ b/epost.lps
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectSession>
- <Version Value="10"/>
+ <Version Value="11"/>
<BuildModes Active="Default"/>
<Units Count="27">
<Unit0>
<Filename Value="epost.lpr"/>
<IsPartOfProject Value="True"/>
- <TopLine Value="27"/>
- <CursorPos X="16" Y="56"/>
+ <TopLine Value="321"/>
+ <CursorPos X="22" Y="339"/>
<UsageCount Value="202"/>
<Loaded Value="True"/>
</Unit0>
@@ -24,8 +24,8 @@
<IsPartOfProject Value="True"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="2"/>
- <TopLine Value="4026"/>
- <CursorPos X="40" Y="4040"/>
+ <TopLine Value="5925"/>
+ <CursorPos Y="5956"/>
<UsageCount Value="201"/>
<Loaded Value="True"/>
</Unit2>
@@ -210,123 +210,126 @@
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
- <Filename Value="epostunit.pas"/>
- <Caret Line="2349" Column="21" TopLine="2292"/>
+ <Filename Value="epost.lpr"/>
+ <Caret Line="360" Column="69" TopLine="348"/>
</Position1>
<Position2>
- <Filename Value="epostunit.pas"/>
- <Caret Line="4089" Column="24" TopLine="4078"/>
+ <Filename Value="epost.lpr"/>
</Position2>
<Position3>
- <Filename Value="epostunit.pas"/>
- <Caret Line="5817" Column="10" TopLine="5789"/>
+ <Filename Value="epost.lpr"/>
</Position3>
<Position4>
- <Filename Value="epostunit.pas"/>
- <Caret Line="169" Column="26" TopLine="153"/>
+ <Filename Value="epost.lpr"/>
+ <Caret Line="698" Column="6" TopLine="666"/>
</Position4>
<Position5>
<Filename Value="epost.lpr"/>
- <Caret Line="360" Column="69" TopLine="348"/>
+ <Caret Line="38" Column="21" TopLine="35"/>
</Position5>
<Position6>
- <Filename Value="epost.lpr"/>
+ <Filename Value="../units/lowlevelunit.pas"/>
+ <Caret Line="112" Column="17" TopLine="94"/>
</Position6>
<Position7>
- <Filename Value="epost.lpr"/>
+ <Filename Value="../units/lowlevelunit.pas"/>
+ <Caret Line="720" Column="66" TopLine="701"/>
</Position7>
<Position8>
- <Filename Value="epost.lpr"/>
- <Caret Line="698" Column="6" TopLine="666"/>
+ <Filename Value="../units/lowlevelunit.pas"/>
+ <Caret Line="860" Column="15" TopLine="832"/>
</Position8>
<Position9>
- <Filename Value="epost.lpr"/>
- <Caret Line="38" Column="21" TopLine="35"/>
+ <Filename Value="../units/lowlevelunit.pas"/>
+ <Caret Line="124" Column="22" TopLine="106"/>
</Position9>
<Position10>
<Filename Value="../units/lowlevelunit.pas"/>
- <Caret Line="112" Column="17" TopLine="94"/>
+ <Caret Line="860" Column="22" TopLine="831"/>
</Position10>
<Position11>
<Filename Value="../units/lowlevelunit.pas"/>
- <Caret Line="720" Column="66" TopLine="701"/>
+ <Caret Line="125" Column="17" TopLine="106"/>
</Position11>
<Position12>
- <Filename Value="../units/lowlevelunit.pas"/>
- <Caret Line="860" Column="15" TopLine="832"/>
+ <Filename Value="epost.lpr"/>
+ <Caret Line="47" Column="22" TopLine="41"/>
</Position12>
<Position13>
- <Filename Value="../units/lowlevelunit.pas"/>
- <Caret Line="124" Column="22" TopLine="106"/>
+ <Filename Value="epost.lpr"/>
+ <Caret Line="53" Column="59" TopLine="31"/>
</Position13>
<Position14>
- <Filename Value="../units/lowlevelunit.pas"/>
- <Caret Line="860" Column="22" TopLine="831"/>
+ <Filename Value="epost.lpr"/>
+ <Caret Line="57" TopLine="28"/>
</Position14>
<Position15>
- <Filename Value="../units/lowlevelunit.pas"/>
- <Caret Line="125" Column="17" TopLine="106"/>
+ <Filename Value="epost.lpr"/>
+ <Caret Line="702" Column="15" TopLine="669"/>
</Position15>
<Position16>
<Filename Value="epost.lpr"/>
- <Caret Line="47" Column="22" TopLine="41"/>
</Position16>
<Position17>
- <Filename Value="epost.lpr"/>
- <Caret Line="53" Column="59" TopLine="31"/>
+ <Filename Value="werteunit.pas"/>
+ <Caret Line="1471" Column="70" TopLine="1439"/>
</Position17>
<Position18>
- <Filename Value="epost.lpr"/>
- <Caret Line="57" TopLine="28"/>
+ <Filename Value="werteunit.pas"/>
+ <Caret Line="80" Column="19" TopLine="65"/>
</Position18>
<Position19>
- <Filename Value="epost.lpr"/>
- <Caret Line="702" Column="15" TopLine="669"/>
+ <Filename Value="werteunit.pas"/>
+ <Caret Line="1505" Column="62" TopLine="1455"/>
</Position19>
<Position20>
- <Filename Value="epost.lpr"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="4096" Column="49" TopLine="4075"/>
</Position20>
<Position21>
- <Filename Value="werteunit.pas"/>
- <Caret Line="1471" Column="70" TopLine="1439"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="4107" Column="20" TopLine="4090"/>
</Position21>
<Position22>
- <Filename Value="werteunit.pas"/>
- <Caret Line="80" Column="19" TopLine="65"/>
+ <Filename Value="../units/lowlevelunit.pas"/>
+ <Caret Line="138" Column="11" TopLine="121"/>
</Position22>
<Position23>
- <Filename Value="werteunit.pas"/>
- <Caret Line="1505" Column="62" TopLine="1455"/>
+ <Filename Value="../units/lowlevelunit.pas"/>
+ <Caret Line="1029" Column="28" TopLine="1003"/>
</Position23>
<Position24>
<Filename Value="epostunit.pas"/>
- <Caret Line="4096" Column="49" TopLine="4075"/>
+ <Caret Line="4077" Column="41" TopLine="4066"/>
</Position24>
<Position25>
- <Filename Value="epostunit.pas"/>
- <Caret Line="4107" Column="20" TopLine="4090"/>
+ <Filename Value="../units/matheunit.pas"/>
+ <Caret Line="70" Column="12" TopLine="53"/>
</Position25>
<Position26>
- <Filename Value="../units/lowlevelunit.pas"/>
- <Caret Line="138" Column="11" TopLine="121"/>
+ <Filename Value="../units/matheunit.pas"/>
+ <Caret Line="1224" Column="45" TopLine="1194"/>
</Position26>
<Position27>
- <Filename Value="../units/lowlevelunit.pas"/>
- <Caret Line="1029" Column="28" TopLine="1003"/>
+ <Filename Value="epost.lpr"/>
+ <Caret Line="56" Column="16" TopLine="126"/>
</Position27>
<Position28>
<Filename Value="epostunit.pas"/>
- <Caret Line="4077" Column="41" TopLine="4066"/>
+ <Caret Line="4040" Column="40" TopLine="4026"/>
</Position28>
<Position29>
- <Filename Value="../units/matheunit.pas"/>
- <Caret Line="70" Column="12" TopLine="53"/>
+ <Filename Value="epostunit.pas"/>
</Position29>
<Position30>
- <Filename Value="../units/matheunit.pas"/>
- <Caret Line="1224" Column="45" TopLine="1194"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="183" Column="39" TopLine="154"/>
</Position30>
</JumpHistory>
+ <RunParams>
+ <FormatVersion Value="2"/>
+ <Modes Count="0" ActiveMode="default"/>
+ </RunParams>
</ProjectSession>
<Debugging>
<Watches Count="1">
diff --git a/epostunit.pas b/epostunit.pas
index 5965bdf..766fdb2 100644
--- a/epostunit.pas
+++ b/epostunit.pas
@@ -180,6 +180,7 @@ type
function berechneIntegral(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean;
function berechneFFT(sT: boolean; f: tMyStringList; threads: longint; warn: tWarnStufe): boolean;
function berechneFFT2d(sT: boolean; f: tMyStringList; threads: longint; warn: tWarnStufe): boolean;
+ function berechneAutokorrelation2d(sT: boolean; f: tMyStringList; threads: longint; warn: tWarnStufe): boolean;
function berechneRadonTransformation(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean;
function erzeugeLinearesBild(sT: boolean; var f: tMyStringList; threads: longint): boolean;
function erzeugeAscii(sT: boolean; f: tMyStringList): boolean;
@@ -5851,6 +5852,112 @@ begin
result:=true;
end;
+function tWerte.berechneAutokorrelation2d(sT: boolean; f: tMyStringList; threads: longint; warn: tWarnStufe): boolean;
+var
+ Zeit,pvFehler: extended;
+ fensters: array[boolean] of tSin2Fenster;
+ s: string;
+ b: boolean;
+ bekannteBefehle: tMyStringList;
+begin
+ result:=false;
+ warteAufBeendigungDesLeseThreads;
+ Zeit:=now;
+ if istKomplex then begin
+ gibAus('Eine 2d-Autokorrelation braucht (momentan) reelle Werte!',3);
+ exit;
+ end;
+ for b:=false to true do
+ fensters[b]:=tSin2Fenster.create;
+ bekannteBefehle:=tMyStringList.create;
+ repeat
+ if not f.metaReadln(s,true) then begin
+ gibAus('Unerwartetes Dateiende!',3);
+ for b:=false to true do
+ fensters[b].free;
+ bekannteBefehle.free;
+ exit;
+ end;
+ bekannteBefehle.clear;
+ if istDasBefehl('Ende',s,bekannteBefehle,false) then break;
+ bekannteBefehle.add('''x-Fenster: ...''');
+ bekannteBefehle.add('''t-Fenster: ...''');
+ if (pos('-Fenster:',s)=2) and (s[1] in ['x','t']) then begin
+ b:=s[1]='t';
+ erstesArgument(s,':');
+ if b then fensters[b].rand:=round(kont2diskFak('t',exprToFloat(sT,s)))
+ else fensters[b].rand:=round(kont2diskFak('x',exprToFloat(sT,s)));
+ fensters[b].aktiv:=true;
+ continue;
+ end;
+ bekannteBefehle.sort;
+ gibAus('Verstehe Option '''+s+''' nicht bei Erstellung einer zweidimensionalen Autokorrelation!'#10'Ich kenne:'#10+bekannteBefehle.text,3);
+ for b:=false to true do
+ fensters[b].free;
+ bekannteBefehle.free;
+ exit;
+ until false;
+ bekannteBefehle.free;
+ fensters[true].breite:=_tSiz-fensters[true].breite;
+ fensters[false].breite:=_xSteps-fensters[false].breite;
+
+ if odd(_tSiz) then begin
+ gibAus('Eine 2d-Autokorrelation braucht eine gerade Anzahl an Werten, '+intToStr(_tSiz)+' ist aber ungerade (man könnte das aber auch noch implementieren)!',3);
+ for b:=false to true do
+ fensters[b].free;
+ exit;
+ end;
+ if odd(_xSteps) then begin
+ gibAus('Eine 2d-Autokorrelation braucht eine gerade Anzahl an Werten, '+intToStr(_xSteps)+' ist aber ungerade (man könnte das aber auch noch implementieren)!',3);
+ for b:=false to true do
+ fensters[b].free;
+ exit;
+ end;
+
+ if sT then begin
+ result:=true;
+ for b:=false to true do
+ fensters[b].free;
+ exit;
+ end;
+
+ transformationen:=tFFTTransformation.create(transformationen,true,true,false);
+ gibAus('berechne t-FFT ...',3);
+ if not fft(threads,true,false,doRes,doResSmi,fensters[true],nil,pvFehler,warn) then begin
+ gibAus('Es traten Fehler auf!',3);
+ exit;
+ end;
+ gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3);
+ gibAus('... fertig! '+timetostr(now-Zeit),3);
+ gibAus('berechne x-FFT ...',3);
+ if not fft(threads,false,false,doRes,doResSmi,fensters[false],nil,pvFehler,warn) then begin
+ gibAus('Es traten Fehler auf!',3);
+ exit;
+ end;
+ gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3);
+ gibAus('... fertig! '+timetostr(now-Zeit),3);
+ gibAus('Quadrieren ...',3);
+ fft2dNachbearbeitung(threads,doBetrQdr,false);
+ gibAus('... fertig! '+timetostr(now-Zeit),3);
+ gibAus('berechne inverse x-FFT ...',3);
+ if not fft(threads,false,true,doRes,doRes,nil,nil,pvFehler,warn) then begin
+ gibAus('Es traten Fehler auf!',3);
+ exit;
+ end;
+ gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3);
+ gibAus('... fertig! '+timetostr(now-Zeit),3);
+ gibAus('berechne inverse t-FFT ...',3);
+ if not fft(threads,true,true,doRes,doRes,nil,nil,pvFehler,warn) then begin
+ gibAus('Es traten Fehler auf!',3);
+ exit;
+ end;
+ gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3);
+ gibAus('... fertig! '+timetostr(now-Zeit),3);
+ for b:=false to true do
+ fensters[b].free;
+ result:=true;
+end;
+
function tWerte.berechneRadonTransformation(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean;
var
Zeit: extended;