diff options
-rw-r--r-- | epost.lps | 167 | ||||
-rw-r--r-- | epostunit.pas | 191 | ||||
-rw-r--r-- | werteunit.pas | 18 |
3 files changed, 208 insertions, 168 deletions
@@ -7,8 +7,8 @@ <Unit0> <Filename Value="epost.lpr"/> <IsPartOfProject Value="True"/> - <TopLine Value="158"/> - <CursorPos X="60" Y="173"/> + <TopLine Value="376"/> + <CursorPos Y="398"/> <UsageCount Value="202"/> <Loaded Value="True"/> </Unit0> @@ -22,9 +22,10 @@ <Unit2> <Filename Value="epostunit.pas"/> <IsPartOfProject Value="True"/> + <IsVisibleTab Value="True"/> <EditorIndex Value="1"/> - <TopLine Value="6934"/> - <CursorPos Y="6947"/> + <TopLine Value="3928"/> + <CursorPos Y="3957"/> <UsageCount Value="201"/> <Loaded Value="True"/> </Unit2> @@ -39,8 +40,8 @@ <Filename Value="werteunit.pas"/> <IsPartOfProject Value="True"/> <EditorIndex Value="7"/> - <TopLine Value="1424"/> - <CursorPos X="21" Y="1439"/> + <TopLine Value="2005"/> + <CursorPos Y="2022"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit4> @@ -48,7 +49,8 @@ <Filename Value="typenunit.pas"/> <IsPartOfProject Value="True"/> <EditorIndex Value="9"/> - <CursorPos X="44" Y="17"/> + <TopLine Value="1232"/> + <CursorPos X="32" Y="1250"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit5> @@ -56,8 +58,8 @@ <Filename Value="../units/fftunit.pas"/> <IsPartOfProject Value="True"/> <EditorIndex Value="3"/> - <CursorPos X="3" Y="13"/> - <UsageCount Value="199"/> + <CursorPos X="100" Y="13"/> + <UsageCount Value="201"/> <Loaded Value="True"/> </Unit6> <Unit7> @@ -66,7 +68,7 @@ <EditorIndex Value="4"/> <TopLine Value="162"/> <CursorPos X="12" Y="191"/> - <UsageCount Value="196"/> + <UsageCount Value="202"/> <Loaded Value="True"/> </Unit7> <Unit8> @@ -74,7 +76,7 @@ <IsPartOfProject Value="True"/> <EditorIndex Value="8"/> <CursorPos X="35" Y="10"/> - <UsageCount Value="102"/> + <UsageCount Value="109"/> <Loaded Value="True"/> </Unit8> <Unit9> @@ -82,42 +84,42 @@ <EditorIndex Value="-1"/> <TopLine Value="1612"/> <CursorPos X="2" Y="1675"/> - <UsageCount Value="6"/> + <UsageCount Value="5"/> </Unit9> <Unit10> <Filename Value="../units/mystringlistunit.pas"/> <EditorIndex Value="-1"/> <TopLine Value="638"/> <CursorPos X="58" Y="660"/> - <UsageCount Value="8"/> + <UsageCount Value="7"/> </Unit10> <Unit11> <Filename Value="../units/lowlevelunit.pas"/> <EditorIndex Value="6"/> - <TopLine Value="10"/> - <UsageCount Value="81"/> + <TopLine Value="580"/> + <CursorPos X="18" Y="615"/> + <UsageCount Value="84"/> <Loaded Value="True"/> </Unit11> <Unit12> <Filename Value="../units/randomunit.pas"/> <EditorIndex Value="-1"/> - <UsageCount Value="6"/> + <UsageCount Value="5"/> </Unit12> <Unit13> <Filename Value="../units/matheunit.pas"/> <EditorIndex Value="5"/> - <TopLine Value="789"/> - <CursorPos Y="800"/> - <UsageCount Value="55"/> + <TopLine Value="47"/> + <CursorPos X="26" Y="75"/> + <UsageCount Value="58"/> <Loaded Value="True"/> </Unit13> <Unit14> <Filename Value="../units/systemunit.pas"/> - <IsVisibleTab Value="True"/> <EditorIndex Value="2"/> - <TopLine Value="198"/> - <CursorPos X="11" Y="226"/> - <UsageCount Value="10"/> + <TopLine Value="126"/> + <CursorPos X="7" Y="147"/> + <UsageCount Value="13"/> <Loaded Value="True"/> </Unit14> <Unit15> @@ -125,41 +127,41 @@ <EditorIndex Value="-1"/> <TopLine Value="182"/> <CursorPos X="21" Y="202"/> - <UsageCount Value="9"/> + <UsageCount Value="8"/> </Unit15> <Unit16> <Filename Value="/usr/lib/fpc/src/rtl/unix/bunxovlh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="61"/> <CursorPos X="10" Y="99"/> - <UsageCount Value="7"/> + <UsageCount Value="6"/> </Unit16> <Unit17> <Filename Value="/usr/lib/fpc/src/rtl/unix/baseunix.pp"/> <UnitName Value="BaseUnix"/> <EditorIndex Value="-1"/> <TopLine Value="61"/> - <UsageCount Value="7"/> + <UsageCount Value="6"/> </Unit17> <Unit18> <Filename Value="/usr/lib/fpc/src/rtl/unix/bunxovl.inc"/> <EditorIndex Value="-1"/> <TopLine Value="414"/> <CursorPos X="20" Y="434"/> - <UsageCount Value="7"/> + <UsageCount Value="6"/> </Unit18> <Unit19> <Filename Value="/usr/lib/fpc/src/rtl/linux/bunxsysc.inc"/> <EditorIndex Value="-1"/> <TopLine Value="16"/> - <UsageCount Value="7"/> + <UsageCount Value="6"/> </Unit19> <Unit20> <Filename Value="/usr/lib/fpc/src/rtl/unix/bunxh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="74"/> <CursorPos X="15" Y="102"/> - <UsageCount Value="7"/> + <UsageCount Value="6"/> </Unit20> <Unit21> <Filename Value="/usr/lib/fpc/src/packages/fcl-image/src/fpimage.pp"/> @@ -167,168 +169,169 @@ <EditorIndex Value="-1"/> <TopLine Value="10"/> <CursorPos X="3" Y="30"/> - <UsageCount Value="7"/> + <UsageCount Value="6"/> </Unit21> <Unit22> <Filename Value="../fpGUI/src/corelib/render/software/agg_basics.pas"/> <EditorIndex Value="-1"/> <TopLine Value="327"/> <CursorPos X="12" Y="347"/> - <UsageCount Value="10"/> + <UsageCount Value="9"/> </Unit22> <Unit23> <Filename Value="/usr/lib/fpc/src/rtl/objpas/classes/classesh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="673"/> <CursorPos X="42" Y="705"/> - <UsageCount Value="10"/> + <UsageCount Value="9"/> </Unit23> <Unit24> <Filename Value="/usr/lib/fpc/src/rtl/objpas/math.pp"/> <EditorIndex Value="-1"/> <TopLine Value="166"/> <CursorPos X="10" Y="183"/> - <UsageCount Value="8"/> + <UsageCount Value="7"/> </Unit24> <Unit25> <Filename Value="GTIWebServerTestAggActionHandlerUnit.pas"/> <EditorIndex Value="-1"/> <TopLine Value="53"/> <CursorPos X="49" Y="82"/> - <UsageCount Value="8"/> + <UsageCount Value="7"/> </Unit25> <Unit26> <Filename Value="/usr/lib/fpc/src/rtl/objpas/sysutils/sysstrh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="204"/> <CursorPos X="18" Y="222"/> - <UsageCount Value="10"/> + <UsageCount Value="9"/> </Unit26> <Unit27> <Filename Value="/usr/lib/fpc/src/rtl/objpas/sysutils/osutilsh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="9"/> <CursorPos X="10" Y="26"/> - <UsageCount Value="10"/> + <UsageCount Value="9"/> </Unit27> </Units> - <JumpHistory Count="29" HistoryIndex="28"> + <JumpHistory Count="30" HistoryIndex="29"> <Position1> <Filename Value="epostunit.pas"/> - <Caret Line="422" Column="24" TopLine="404"/> + <Caret Line="4185" Column="16" TopLine="4156"/> </Position1> <Position2> <Filename Value="epostunit.pas"/> - <Caret Line="7833" Column="12" TopLine="7824"/> </Position2> <Position3> <Filename Value="epostunit.pas"/> - <Caret Line="338" Column="16" TopLine="320"/> + <Caret Line="194" Column="24" TopLine="166"/> </Position3> <Position4> <Filename Value="epostunit.pas"/> - <Caret Line="429" Column="41" TopLine="400"/> + <Caret Line="257" Column="15" TopLine="228"/> </Position4> <Position5> <Filename Value="epostunit.pas"/> - <Caret Line="5342" Column="29" TopLine="5313"/> + <Caret Line="955" Column="39" TopLine="926"/> </Position5> <Position6> <Filename Value="epostunit.pas"/> - <Caret Line="5343" Column="41" TopLine="5314"/> + <Caret Line="957" Column="39" TopLine="928"/> </Position6> <Position7> <Filename Value="epostunit.pas"/> - <Caret Line="5344" Column="41" TopLine="5315"/> + <Caret Line="959" Column="39" TopLine="930"/> </Position7> <Position8> <Filename Value="epostunit.pas"/> - <Caret Line="5345" Column="43" TopLine="5334"/> + <Caret Line="965" Column="24" TopLine="936"/> </Position8> <Position9> <Filename Value="epostunit.pas"/> - <Caret Line="5346" Column="46" TopLine="5334"/> + <Caret Line="973" Column="31" TopLine="944"/> </Position9> <Position10> <Filename Value="epostunit.pas"/> - <Caret Line="6946" Column="21" TopLine="6926"/> + <Caret Line="975" Column="31" TopLine="946"/> </Position10> <Position11> <Filename Value="epostunit.pas"/> - <Caret Line="6947" Column="17" TopLine="6934"/> + <Caret Line="977" Column="31" TopLine="948"/> </Position11> <Position12> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="18" Column="11"/> + <Filename Value="epostunit.pas"/> + <Caret Line="3877" Column="20" TopLine="3848"/> </Position12> <Position13> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="16" Column="21"/> + <Filename Value="epostunit.pas"/> + <Caret Line="3989" Column="16" TopLine="3960"/> </Position13> <Position14> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="17" Column="22"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4022" Column="13" TopLine="3994"/> </Position14> <Position15> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="18" Column="22"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4254" Column="16" TopLine="4225"/> </Position15> <Position16> <Filename Value="epostunit.pas"/> - <Caret Line="6947" Column="17" TopLine="6934"/> + <Caret Line="4301" Column="16" TopLine="4273"/> </Position16> <Position17> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="18" Column="22"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4306" Column="16" TopLine="4278"/> </Position17> <Position18> <Filename Value="epostunit.pas"/> - <Caret Line="6947" TopLine="6934"/> + <Caret Line="4523" Column="20" TopLine="4495"/> </Position18> <Position19> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="16" Column="21"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4649" Column="46" TopLine="4621"/> </Position19> <Position20> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="17" Column="22"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5152" Column="94" TopLine="5123"/> </Position20> <Position21> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="18" Column="22"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5227" Column="16" TopLine="5198"/> </Position21> <Position22> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="132" Column="21" TopLine="103"/> + <Filename Value="werteunit.pas"/> + <Caret Line="2010" TopLine="1988"/> </Position22> <Position23> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="137" Column="14" TopLine="108"/> + <Filename Value="werteunit.pas"/> + <Caret Line="58" Column="42" TopLine="36"/> </Position23> <Position24> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="145" Column="22" TopLine="116"/> + <Filename Value="werteunit.pas"/> + <Caret Line="1398" Column="96" TopLine="1375"/> </Position24> <Position25> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="150" Column="14" TopLine="121"/> + <Filename Value="werteunit.pas"/> + <Caret Line="1211" Column="82" TopLine="1190"/> </Position25> <Position26> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="128" Column="43" TopLine="241"/> + <Filename Value="werteunit.pas"/> </Position26> <Position27> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="228" Column="7" TopLine="208"/> + <Filename Value="werteunit.pas"/> + <Caret Line="74" Column="27" TopLine="46"/> </Position27> <Position28> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="226" Column="11" TopLine="208"/> + <Filename Value="werteunit.pas"/> + <Caret Line="75" Column="27" TopLine="47"/> </Position28> <Position29> - <Filename Value="../units/systemunit.pas"/> - <Caret Line="128" Column="16" TopLine="110"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5251" Column="23" TopLine="5227"/> </Position29> + <Position30> + <Filename Value="epostunit.pas"/> + </Position30> </JumpHistory> </ProjectSession> <Debugging> diff --git a/epostunit.pas b/epostunit.pas index a01d135..c629128 100644 --- a/epostunit.pas +++ b/epostunit.pas @@ -118,7 +118,8 @@ type procedure wMinW(miW: extended); function rMaxW: extended; procedure wMaxW(maW: extended); - function istKomplex: boolean; + function rIstKomplex: boolean; + procedure wIstKomplex(komplex: boolean); function xScale: extended; function tScale: extended; function dichtenParameterErkannt(sT: boolean; s: string; var bekannteBefehle: tMyStringList; threads,xMin,xMax,tMin,tMax: longint): boolean; @@ -190,6 +191,7 @@ type property _beta: extended read rBeta write wBeta; property _minW: extended read rMinW write wMinW; property _maxW: extended read rMaxW write wMaxW; + property istKomplex: boolean read rIstKomplex write wIstKomplex; end; tAchse = record lage: tLage; @@ -946,7 +948,7 @@ begin end{of case}; end; -function tWerte.istKomplex: boolean; +function tWerte.rIstKomplex: boolean; begin case genauigkeit of gSingle: @@ -958,6 +960,24 @@ begin end{of case}; end; +procedure tWerte.wIstKomplex(komplex: boolean); +begin + if komplex=istKomplex then + exit; + if komplex then + _tSiz:=2*_tSiz + else + _tSiz:=_tSiz div 2; + case genauigkeit of + gSingle: + sWerte.params.istKomplex:=komplex; + gDouble: + dWerte.params.istKomplex:=komplex; + gExtended: + eWerte.params.istKomplex:=komplex; + end{of case}; +end; + function tWerte.findeAlleDateien(nam: string; var dat: tGenerischeInputDateiInfoArray; vorlage: tGenerischeInputDateiInfo): boolean; var err: longint; @@ -3840,13 +3860,13 @@ end; function tWerte.extrahierePhase(sT: boolean; f: tMyStringList; threads: longint; Warn: tWarnstufe): boolean; var - Zeit,pvFehler,hintergrund,xFak,yFak: extended; - fensters: array[boolean] of tSin2Fenster; - s: string; - b,hintergrundAbziehen: boolean; - bekannteBefehle: tMyStringList; - maxPos: tIntPoint; - betraege: tWerte; + Zeit,pvFehler,xFak,yFak: extended; + fensters: array[boolean] of tSin2Fenster; + s: string; + b: boolean; + bekannteBefehle: tMyStringList; + maxPos: tIntPoint; + betraege: tWerte; begin result:=false; Zeit:=now; @@ -3854,8 +3874,10 @@ begin gibAus('Phase extrahieren ...',3); for b:=false to true do fensters[b]:=tSin2Fenster.create; - hintergrundAbziehen:=false; - hintergrund:=0; + if not istKomplex then begin + gibAus('Ich kann nur aus komplexen Werten die Phase ermitteln!',3); + exit; + end; xFak:=1; yFak:=1; bekannteBefehle:=tMyStringList.create; @@ -3879,10 +3901,6 @@ begin fensters[b].aktiv:=true; continue; end; - if istDasBefehl('Hintergrund abziehen',s,bekannteBefehle,false) then begin - hintergrundAbziehen:=true; - continue; - end; if istDasBefehl('Abstandsmetrik',s,bekannteBefehle,true) then begin xFak:=round(kont2diskFak('x',exprToFloat(sT,erstesArgument(s)))); yFak:=round(kont2diskFak('t',exprToFloat(sT,s))); @@ -3903,24 +3921,14 @@ begin exit; end; - if hintergrundAbziehen then - case genauigkeit of - gSingle: - hintergrund:=sWerte.ermittleHintergrund; - gDouble: - hintergrund:=dWerte.ermittleHintergrund; - gExtended: - hintergrund:=eWerte.ermittleHintergrund; - end{of case}; - gibAus('berechne t-FFT ...',3); - if not fft(threads,true,false,doRes,doResSmi,fensters[true],hintergrund,pvFehler,Warn) then begin + if not fft(threads,true,false,doAlleResIms,doAlleResIms,fensters[true],0,pvFehler,Warn) then begin gibAus('Es traten Fehler auf!',3); exit; end; gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3); gibAus('berechne x-FFT ...',3); - if not fft(threads,false,false,doRes,doResSmi,fensters[false],0,pvFehler,Warn) then begin + if not fft(threads,false,false,doAlleResIms,doAlleResIms,fensters[false],0,pvFehler,Warn) then begin gibAus('Es traten Fehler auf!',3); exit; end; @@ -3932,8 +3940,6 @@ begin betraege:=tWerte.create(self,0,_xSteps-1); betraege.fft2dNachbearbeitung(threads,doBetrQdr); - fft2dNachbearbeitung(threads,doAlleResIms); - gibAus('tiefe Frequenzen filtern',3); case genauigkeit of gSingle: @@ -3945,6 +3951,8 @@ begin end{of case}; betraege.free; + writeln(tIntPointToStr(maxPos)); + gibAus('zentrieren '+tIntPointToStr(maxPos),3); verschiebe(threads,maxPos); @@ -3955,14 +3963,14 @@ begin end; gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3); gibAus('berechne inverse t-FFT ...',3); - if not fft(threads,true,true,doAlleResIms,doAlleResIms,nil,hintergrund,pvFehler,Warn) then begin + if not fft(threads,true,true,doAlleResIms,doAlleResIms,nil,0,pvFehler,Warn) then begin gibAus('Es traten Fehler auf!',3); exit; end; gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3); - gibAus('Phasenwinkel ermitteln ...',3); - ermittlePhasenWinkel(threads); +// gibAus('Phasenwinkel ermitteln ...',3); +// ermittlePhasenWinkel(threads); gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; @@ -4011,15 +4019,7 @@ begin exit; until false; - _tSiz:=_tSiz*2; - case genauigkeit of - gSingle: - sWerte.params.istKomplex:=true; - gDouble: - dWerte.params.istKomplex:=true; - gExtended: - eWerte.params.istKomplex:=true; - end{of case}; + istKomplex:=true; if sT then begin result:=true; exit; @@ -5224,44 +5224,68 @@ var FNTs: array of tFFT2dNBThread; fertig: boolean; begin - if nB in [doAlleResIms,doAlleResSmi] then begin - _tSiz:=_tSiz*2; - holeRAM(3); + if istKomplex then begin + setLength(FNTs,threads); + for i:=0 to length(FNTs)-1 do + FNTs[i]:=tFFT2dNBThread.create( + round(i*(_xSteps-1)/length(FNTs))+1, + round((i+1)*(_xSteps-1)/length(FNTs)), + self, + nB); + repeat + sleep(10); + fertig:=true; + for i:=0 to length(FNTs)-1 do + fertig:=fertig and FNTs[i].fertig; + until fertig; + for i:=0 to length(FNTs)-1 do + FNTs[i].free; + gibAus('Alle FFT2dNBThreads fertig!',1); + if not (nB in [doAlleResIms,doAlleResSmi]) then begin + istKomplex:=false; + holeRAM(3); + end; + end + else begin + if nB in [doAlleResIms,doAlleResSmi] then begin + istKomplex:=true; + holeRAM(3); + case genauigkeit of + gSingle: + sWerte.fft2dNachbearbeitungVerdoppeln(nB); + gDouble: + dWerte.fft2dNachbearbeitungVerdoppeln(nB); + gExtended: + eWerte.fft2dNachbearbeitungVerdoppeln(nB); + end{of case}; + exit; + end; + + // der "Rand" case genauigkeit of - gSingle: - sWerte.fft2dNachbearbeitungVerdoppeln(nB); - gDouble: - dWerte.fft2dNachbearbeitungVerdoppeln(nB); - gExtended: - eWerte.fft2dNachbearbeitungVerdoppeln(nB); + gSingle: sWerte.fft2dNachbearbeitungA(nB); + gDouble: dWerte.fft2dNachbearbeitungA(nB); + gExtended: eWerte.fft2dNachbearbeitungA(nB); end{of case}; - exit; - end; - - // der "Rand" - case genauigkeit of - gSingle: sWerte.fft2dNachbearbeitungA(nB); - gDouble: dWerte.fft2dNachbearbeitungA(nB); - gExtended: eWerte.fft2dNachbearbeitungA(nB); - end{of case}; - // der Hauptteil (alles außer erster und mittlerer Zeile/Spalte) - setLength(FNTs,threads); - for i:=0 to length(FNTs)-1 do - FNTs[i]:=tFFT2dNBThread.create( - round(i*(_xSteps div 2 -1)/length(FNTs))+1, - round((i+1)*(_xSteps div 2 -1)/length(FNTs)), - self, - nB); - repeat - sleep(10); - fertig:=true; + // der Hauptteil (alles außer erster und mittlerer Zeile/Spalte) + setLength(FNTs,threads); for i:=0 to length(FNTs)-1 do - fertig:=fertig and FNTs[i].fertig; - until fertig; - for i:=0 to length(FNTs)-1 do - FNTs[i].free; - gibAus('Alle FFT2dNBThreads fertig!',1); + FNTs[i]:=tFFT2dNBThread.create( + round(i*(_xSteps div 2 -1)/length(FNTs))+1, + round((i+1)*(_xSteps div 2 -1)/length(FNTs)), + self, + nB); + repeat + sleep(10); + fertig:=true; + for i:=0 to length(FNTs)-1 do + fertig:=fertig and FNTs[i].fertig; + until fertig; + for i:=0 to length(FNTs)-1 do + FNTs[i].free; + gibAus('Alle FFT2dNBThreads fertig!',1); + end; end; function tWerte.exprToFloat(sT: boolean; s: string): extended; @@ -6104,11 +6128,18 @@ end; procedure tFFT2dNBThread.stExecute; begin gibAus('FFT2d-Nachbearbeitungsthread gestartet: '+intToStr(xMin)+'-'+intToStr(xMax)+' ...',1); - case pW.genauigkeit of - gSingle: pW.sWerte.fft2dNachbearbeitungB(xMin,xMax,nB); - gDouble: pW.dWerte.fft2dNachbearbeitungB(xMin,xMax,nB); - gExtended: pW.eWerte.fft2dNachbearbeitungB(xMin,xMax,nB); - end{of case}; + if pW.istKomplex then + case pW.genauigkeit of + gSingle: pW.sWerte.fft2dNachbearbeitungKomplex(xMin,xMax,nB); + gDouble: pW.dWerte.fft2dNachbearbeitungKomplex(xMin,xMax,nB); + gExtended: pW.eWerte.fft2dNachbearbeitungKomplex(xMin,xMax,nB); + end{of case} + else + case pW.genauigkeit of + gSingle: pW.sWerte.fft2dNachbearbeitungB(xMin,xMax,nB); + gDouble: pW.dWerte.fft2dNachbearbeitungB(xMin,xMax,nB); + gExtended: pW.eWerte.fft2dNachbearbeitungB(xMin,xMax,nB); + end{of case}; gibAus('... und fertig!',1); end; diff --git a/werteunit.pas b/werteunit.pas index cbf1794..a34b5f5 100644 --- a/werteunit.pas +++ b/werteunit.pas @@ -185,6 +185,10 @@ begin inc(cnt); end; + + for i:=1 to length(maxima)-1 do + if werte[maxima[i-1]['x']+maxima[i-1]['y']*params.xSteps]<werte[maxima[i]['x']+maxima[i]['y']*params.xSteps]then + raise exception.create('Interner Fehler: Maxima sind nicht sortiert, sollten sie aber sein!'); end; constructor tLLWerte.create(ps: tExtraInfos); @@ -1390,23 +1394,25 @@ var i,j,hLen: longint; begin hLen:=params.tSiz div 2; + if not params.istKomplex then + raise exception.create('Komplexe FFT2dNachbearbeitung geht nur mit vollkomplexen Werten!'); case nB of doResIms,doResSmi,doRes: raise exception.create('Vollkomplexe Werte können nicht auf die Hälfte komprimiert werden!'); doBetr: for j:=0 to hLen-1 do for i:=xMin to xMax do - werte[i+j*params.tSiz]:= + werte[i+j*params.xSteps]:= sqrt( - sqr(extended(werte[i+j*params.tSiz]))+ - sqr(extended(werte[i+(j+hLen)*params.tSiz])) + sqr(extended(werte[i+j*params.xSteps]))+ + sqr(extended(werte[i+(j+hLen)*params.xSteps])) ); doBetrQdr: for j:=0 to hLen-1 do for i:=xMin to xMax do - werte[i+j*params.tSiz]:= - sqr(extended(werte[i+j*params.tSiz]))+ - sqr(extended(werte[i+(j+hLen)*params.tSiz])); + werte[i+j*params.xSteps]:= + sqr(extended(werte[i+j*params.xSteps]))+ + sqr(extended(werte[i+(j+hLen)*params.xSteps])); doAlleResIms: ; doAlleResSmi: raise exception.create('Nachbearbeitungsmethode '+fftDoToStr(nB)+' ist aus Faulheit noch nicht implementiert -- mach''s doch einfach!'); |