Hallo Florian,
die FFT steht unten. Vorher mußt Du die Multiple Precision Toolbox
einbauen.
http://www.mathworks.de/matlabcentral/fileexchange/6446
Die Installation unter Windows ist nur mittelprächtig intuitiv. Du
solltest zunächst die dll-Dateien (/toolbox/NewClasses/@mp/private) an
eine Stelle kopieren, an der Windows bzw. Matlab sie findet und
anschließend den Suchpfad in Matlab um den Pfad ergänzen, der die
.m-Dateien enthält.
Folgende Dateistruktur sollte funktionieren:
Das Verzeichnis
\Matlab\toolbox\mptoolbox_1.1\
enthält verschiedene .m-Dateien (angefangen mit mp_dev_sort_bubble_a.m
und euler.m)
in das Verzeichnis
\Matlab\toolbox\mptoolbox_1.1\@mp
kommen die restlichen .m-Dateien wie abs.m, acos.m usw
und in das Verzeichnis
\Matlab\toolbox\mptoolbox_1.1\@mp\private
kommen schließlich die zugehörigen dll- und c-Dateien.
Gruß,
Michael
% Fouriertransformation mit beliebiger Genauigkeit
% y = fft_mp(x, prec)
%
% erlaubt Eingaben aus der multiple-precision-Toolbox.
% Die Anzahl N der Werte muß ein Vielfaches von 2 sein.
% Die Genauigkeit kann über "prec" festgelegt werden.
function ret = fft_mp(vec,prec)
PI = 2*asin(mp(1,prec)); % pi mit hoher Genauigkeit
n = length(vec); % Anzahl der Zahlen
if (log2(n) ~= round(log2(n))), % Fehlermeldung falls nicht 2^x
fprintf('The number of elements must be a power of 2.\n');
fprintf('Calculation terminated.\n');
ret = 0;
return;
end;
if n==1, % Rekursionsanfang
ret = vec;
else
g = fft_mp(vec(1:2:n-1), prec); % FFT-Algorithmus nach Cooley u.
Tuckey
u = fft_mp(vec(2:2:n), prec);
for k=0:(n/2-1),
c(k+1) = g(k+1)+u(k+1)*exp(-2*PI*i*k/n);
c(k+n/2+1) = g(k+1)-u(k+1)*exp(-2*PI*i*k/n);
end;
ret = c;
end