Numerische Differentation mit Fourier-Transformation

29/12/2007 - 20:25 von Stephan Berger | Report spam
Hallo,

die Fourier-Transformation hat ja eine schöne Eigenschaft in Bezug auf
die Differentation:

d^n g(t) / dt^n <-> (i 2pi f)^n G(f)

wb G die Fourier-Transformierte von g ist. Wenn ich also G(f) habe kann
ich doch
d^n g(t) / dt^n
berechnen, in dem ich die IFT von
(i 2 pi f)^n G(f)
berechne, oder?

Kann man dies einfach auf die DFT übertragen? Angenommen ich bekomme ein
abgetastetes Signal
g = [ 0 1 2 3 4 5 ]
kann ich dann analog zu oben g' "berechnen" (im Sinne von "gut
approximieren"), indem ich die DFT von g berechne, mit (i 2pi f)
multipliziere und dann die IDFT berechne? Wàre doch z.B. ganz nett, wenn
man sowieso schon die DFT eines Inputs braucht...
Ich habe das mal versucht in MATLAB umzusetzen:

%--
function test_dft_d
c = [ 0 1 2 3 4 5 ];
C = fft(c);
C_1dd = [];
for s = 1:length(C)/2
C_1dd = [ C_1dd, complex(0, 2*pi*(s-1))*C(s) ];
end
j = int16( (length(C)/2)+1 );
for s = -length(C)/2:-1
C_1dd = [ C_1dd, complex(0, 2*pi*s)*C(j) ];
j = j + 1;
end
c_1dd = ifft(C_1dd)
end
%--

Ich glaube, keinen Fehler gemacht zu haben (abgesehen von einer u.U.
stümperhaften Implementierung). Das Ergebeniss überzeugt mich aber nicht
gerade:


EDU>> test_dft_d

c_1dd
Columns 1 through 4

-18.1380 + 9.4248i 14.5104 - 9.4248i 3.6276 + 9.4248i 3.6276 -
9.4248i

Columns 5 through 6

14.5104 + 9.4248i -18.1380 - 9.4248i
-

Meine (wahrscheinlich naive) Hoffnung war es ja, in c_1dd(1) und
c_1dd(6) "seltsame" Werte zu bekommen (wegen der angenommenen
periodizitàt), aber zumindest dazwischen was "in Richtung 1" zu erhalten.

Kann mir jemand auf die Sprünge helfen? Ist meine Implementierung
schrott oder kann man eben mit der DFT eines Signals nicht so umspringen
bzw. wie wàre es denn richtig?

Vielen Dank im Voraus für eine Antwort! :)

Grüße
Stephan
 

Lesen sie die antworten

#1 roland franzius
29/12/2007 - 23:04 | Warnen spam
Stephan Berger wrote:
Hallo,

die Fourier-Transformation hat ja eine schöne Eigenschaft in Bezug auf
die Differentation:

d^n g(t) / dt^n <-> (i 2pi f)^n G(f)

wb G die Fourier-Transformierte von g ist. Wenn ich also G(f) habe kann
ich doch
d^n g(t) / dt^n
berechnen, in dem ich die IFT von
(i 2 pi f)^n G(f)
berechne, oder?

Kann man dies einfach auf die DFT übertragen? Angenommen ich bekomme ein
abgetastetes Signal
g = [ 0 1 2 3 4 5 ]
kann ich dann analog zu oben g' "berechnen" (im Sinne von "gut
approximieren"), indem ich die DFT von g berechne, mit (i 2pi f)
multipliziere und dann die IDFT berechne? Wàre doch z.B. ganz nett, wenn
man sowieso schon die DFT eines Inputs braucht...
Ich habe das mal versucht in MATLAB umzusetzen:

%--
function test_dft_d
c = [ 0 1 2 3 4 5 ];
C = fft(c);
C_1dd = [];
for s = 1:length(C)/2
C_1dd = [ C_1dd, complex(0, 2*pi*(s-1))*C(s) ];
end
j = int16( (length(C)/2)+1 );
for s = -length(C)/2:-1
C_1dd = [ C_1dd, complex(0, 2*pi*s)*C(j) ];
j = j + 1;
end
c_1dd = ifft(C_1dd)
end
%--

Ich glaube, keinen Fehler gemacht zu haben (abgesehen von einer u.U.
stümperhaften Implementierung). Das Ergebeniss überzeugt mich aber nicht
gerade:


EDU>> test_dft_d

c_1dd >
Columns 1 through 4

-18.1380 + 9.4248i 14.5104 - 9.4248i 3.6276 + 9.4248i 3.6276 -
9.4248i

Columns 5 through 6

14.5104 + 9.4248i -18.1380 - 9.4248i
-

Meine (wahrscheinlich naive) Hoffnung war es ja, in c_1dd(1) und
c_1dd(6) "seltsame" Werte zu bekommen (wegen der angenommenen
periodizitàt), aber zumindest dazwischen was "in Richtung 1" zu erhalten.

Kann mir jemand auf die Sprünge helfen? Ist meine Implementierung
schrott oder kann man eben mit der DFT eines Signals nicht so umspringen
bzw. wie wàre es denn richtig?

Vielen Dank im Voraus für eine Antwort! :)



Nur nahe bei k/N= 0.

Exakt ergeben Differenzen bei der diskreten Fouriertransformation
trigonometrische, nicht polynominale Faktoren in der Variablen k,
zB
F(x-> f(x+1)-f(x-1) )(k) F( x->f(x+1))(k) - F(x->f(x-1))
= 2 i sin (2 pi i k/N) F(x->f(x))(k)


Roland Franzius

Ähnliche fragen