Digital Signal Processing Reference
In-Depth Information
for k=1:length(M2)
fprintf('length = %g\n',M2(k))
x = randn(1,M2(k));
% random signal in time domain
t = cputime;
% challenge Matlab cpu clock
dit2fft(x);
% dit2fft algorithm
TIME2(k) = cputime-t;
% elapsed Matlab cpu time
end
% Graphics
TIMEref = 0.001;
% normalize elapsed time
TIME1 = TIME1/TIMEref; TIME2 = TIME2/TIMEref;
P1 = log2(M1); P2 = log2(M2);
TIMEmin = min([TIME1 TIME2]); tmin = 10^floor(log10(TIMEmin));
TIMEmax = max([TIME1 TIME2]); tmax = 10^ceil(log10(TIMEmax));
FIG1 = figure('Name','dsplab4_1 : estimates of elapsed cpu time for
dft algorithms','NumberTitle','off',...
'Units','normal','Position',[.4 .4 .5 .5]);
semilogy(P1,TIME1,'+',P2,TIME2,'*',P1,TIME1,':',P2,TIME2,':'), grid
axis([min(P1) max(P2) tmin tmax]);
xlabel('log_2(DFT length) \rightarrow')
ylabel('elapsed cpu time [ms] \rightarrow')
legend('dft','dit2fft')
4.6
Versuchsdurchführung
M4.1
Erstellen Sie eine MATLAB-Funktion zur DIT-Radix-2-FFT entsprechend Bild 4-4
für beliebige Zweierpotenzen als Transformationslänge. Verwenden Sie den Butter-
fly in Bild 4-3 rechts.
Hinweis: Verwenden Sie soweit möglich die Programmbeispiele 4-1, 4-2 und 4-3.
Übernehmen Sie den Programmkopf in Programmbeispiel 4-4.
Programmbeispiel 4-5 Radix-2-FFT mit DIT (Programmkopf)
% decimation-in-time radix-2-fft
% function y = dit2fft(x)
% x : signal in time domain
% X : dft spectrum
% dit2fft.m * mw * 10/25/2005
function X = dit2fft(x)
M4.2
Testen Sie Ihr FFT-Programm dit2fft anhand von bekannten Beispielen, siehe
Versuch 3. Verwenden Sie dazu auch die MATLAB-Built-in-Funktionen fft und
ifft .
M4.3
Überprüfen Sie die Wachstumsgesetze für die Komplexität der DFT in direkter
Form dft und Ihres DIT-Radix-2-Programmes dit2fft durch Messung der
Rechenzeiten.
Hinweise: Benützen Sie das Programmbeispiel 4-4 dsplab4_1 . Wenn Sie das Pro-
gramm zweimal laufen lassen und die gemessenen Zeiten vergleichen, stellen Sie
Search WWH ::




Custom Search