summaryrefslogtreecommitdiff
path: root/epostunit.pas
diff options
context:
space:
mode:
Diffstat (limited to 'epostunit.pas')
-rw-r--r--epostunit.pas46
1 files changed, 32 insertions, 14 deletions
diff --git a/epostunit.pas b/epostunit.pas
index efdb914..07e921a 100644
--- a/epostunit.pas
+++ b/epostunit.pas
@@ -2856,7 +2856,7 @@ end;
function tWerte.fft(threads: longint; senkrecht,invers: boolean; const vor,nach: tFFTDatenordnung; fen: tFenster; hg: extended; out pvFehler: extended; Warn: tWarnstufe): boolean;
var
fftThreads: array of tFFTThread;
- i: int64;
+ i,fftTSiz: int64;
fertig: boolean;
begin
result:=false;
@@ -2869,11 +2869,12 @@ begin
gibAus('tWerte.fft kann nicht mit getrenntem Input oder Output umgehen!',3);
exit;
end;
+ fftTSiz:=_tSiz div (1+byte(vor in [doAlleResIms,doAlleResSmi]));
if senkrecht then begin
if assigned(fen) and
- (length(fen.werte)<>_tSiz) then
- fen.berechneWerte(_tSiz);
+ (length(fen.werte)<>fftTSiz) then
+ fen.berechneWerte(fftTSiz);
if threads>_xSteps then
threads:=_xSteps;
end
@@ -2881,8 +2882,8 @@ begin
if assigned(fen) and
(length(fen.werte)<>_xSteps) then
fen.berechneWerte(_xSteps);
- if threads>_tSiz then
- threads:=_tSiz;
+ if threads>fftTSiz then
+ threads:=fftTSiz;
end;
setLength(fftThreads,threads);
@@ -2915,7 +2916,7 @@ begin
tFFTThread.create(
self,
0,
- round(_tSiz/threads-1),
+ round(fftTSiz/threads-1),
senkrecht,
invers,
vor,
@@ -2926,8 +2927,8 @@ begin
fftThreads[i]:=
tFFTThread.create(
self,
- round(_tSiz/threads*i),
- round(_tSiz/threads*(i+1)-1),
+ round(fftTSiz/threads*i),
+ round(fftTSiz/threads*(i+1)-1),
senkrecht,
invers,
fftThreads[0].algo,
@@ -3803,6 +3804,7 @@ var
bekannteBefehle: tMyStringList;
maxPos: tIntPoint;
betraege: tWerte;
+ i,j: int64;
begin
result:=false;
Zeit:=now;
@@ -3883,14 +3885,14 @@ begin
gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3);
for b:=false to true do
fensters[b].free;
-
+(*
gibAus('spektrale Beträge ermitteln',3);
betraege:=tWerte.create(self,0,_xSteps-1);
betraege.fft2dNachbearbeitung(threads,doBetrQdr);
-
+ *)
fft2dNachbearbeitung(threads,doAlleResIms);
- gibAus('tiefe Frequenzen filtern',3);
+(* gibAus('tiefe Frequenzen filtern',3);
case genauigkeit of
gSingle:
sWerte.kantenFilter(betraege.sWerte,xFak,yFak,kfHochpass,true,maxPos);
@@ -3898,8 +3900,8 @@ begin
dWerte.kantenFilter(betraege.dWerte,xFak,yFak,kfHochpass,true,maxPos);
gExtended:
eWerte.kantenFilter(betraege.eWerte,xFak,yFak,kfHochpass,true,maxPos);
- end{of case};
- betraege.free;
+ end{of case}; *)
+// betraege.free;
gibAus('berechne inverse x-FFT ...',3);
if not fft(threads,false,true,doAlleResIms,doAlleResIms,nil,0,pvFehler,wsLasch) then begin
@@ -3913,6 +3915,22 @@ begin
exit;
end;
gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3);
+
+ hintergrund:=0;
+ for i:=_tSiz div 2 +1 to _tSiz-1 do
+ for j:=0 to _xSteps-1 do
+ hintergrund:=hintergrund + sqr(eWerte.werte[j+i*_xSteps]);
+
+ writeln(hintergrund,' ',_xSteps*_tSiz div 2,' ',hintergrund*2/_xSteps/_tSiz);
+
+ pvFehler:=0;
+ for i:=0 to _tSiz div 2 do
+ for j:=0 to _xSteps-1 do
+ pvFehler:=pvFehler + sqr(eWerte.werte[j+i*_xSteps]);
+
+// _tSiz:=_tSiz div 2;
+// holeRAM(3);
+
gibAus('... fertig '+timetostr(now-Zeit),3);
result:=true;
end;
@@ -5771,7 +5789,7 @@ begin
if senkrecht then
tmpFFTAlgo:=createFFTAlgorithmus(werte._tSiz div (1+byte(halberInput)),vor,nach)
else
- tmpFFTAlgo:=createFFTAlgorithmus(werte._xSteps div (1+byte(halberInput)),vor,nach);
+ tmpFFTAlgo:=createFFTAlgorithmus(werte._xSteps,vor,nach);
create(werte,sMin,sMax,senkrecht,invers,tmpFFTAlgo,fenster,hintergrund);
tmpFFTAlgo.free;
end;