diff options
author | Erich Eckner <git@eckner.net> | 2019-09-24 11:53:54 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2019-09-24 11:53:54 +0200 |
commit | 113e717bef143c649b3c51c865ad93df8d13467f (patch) | |
tree | 6145aad889749593b73d3c138d48d3bd675588d4 | |
parent | 7fadc64c93807d547481dbbf7e2b6f7a3d1ca36e (diff) | |
download | epost-113e717bef143c649b3c51c865ad93df8d13467f.tar.xz |
Autokorrelation2d neu
-rw-r--r-- | epost.lpr | 11 | ||||
-rw-r--r-- | epost.lps | 115 | ||||
-rw-r--r-- | epostunit.pas | 107 |
3 files changed, 177 insertions, 56 deletions
@@ -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 @@ -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; |