next up previous contents
Nächste Seite: M-Files zu den Funktionen Aufwärts: M-Files zu Faltung und Vorherige Seite: Faltungsalgorithmen   Inhalt

Beispiele und Demos zur Fourier-Transformation

Die folgenden Befehle zeigen die Definitionen von verschiedenen Rechtecks-, Dreiecks- Sägezahn- und Elementarfunktionen als mögliche Eingabedaten für das Demonstrationsprogramm zur Fourier-Transformation. Die vielen kurzen Dateien 'fdeftriang.m',  'fdeftriangl.m',  'fdefsaegz.m',  'fdefminisaegz.m',  'fdefsquare.m', 
'fdefsin.m', und 'fdefcos.m
sind im Text zusammengefaßt.

% fdeftriang.m - Skript f = Zickzack-Funktion, ungerade
f = [ 0:20 19:-1:-20 -19:-1 ] ; % 80 Elemente
% fdeftriangl.m - Skript  f = Zickzack-Funktion, ungerade
f = [ 0:25 24:-1:-25 -24:-1 ] ; % 100 Elemente
% fdefsaegz.m Skript f= Saegezahn-Funktion, ungerade
f = [ 0:40 -40:-1  ]/40 ;   % 81 Elemente
% fdefminisaegz.m Skript f= kl. Saegezahn-Funktion, Phasenverschoben
h = [ 0:20 -20:-1  ]/20 ;
f = [ h(10:41) h(1:9)] ;  41 Elemente
% fdefsquare.m - Skript f= quadrat. Puls, gerade, a0 klein
f = [ 1 ones(1,20) -1*ones(1,40) ones(1,20)];
% fdefsin.m Skript f = sin(0:dw:2pi-dw)
xvector = 0:99;
f = sin( xvector/50*pi); % 100 Elemente
% fdefcos.m Skript f = cos(0:dw:2pi-dw)
xvector = 0:99;
f = cos( xvector/50*pi); % 100 Elemente

Eine analoge Serie von Skripts definiert verschieden breite Rechteckpulse: 'fdefnarrpeak.m',  'fdefpeak.m',  'fdefmedpeak.m',  'fdefwidpeak.m'.

% fdefnarrpeak.m Skript f = Rechteckpuls 3 breit, 100 Elemente
f = [ 1 1   zeros(1,97)   1];
% fdefpeak.m Skript f = Rechteckpuls 5 breit, 100 Elemente
f = [ 1 1 1 zeros(1,95) 1 1];
% fdefmedpeak.m Skript f = Rechteckpuls 9 breit, 100 Elemente
f = [ 1 1 1 1 1  zeros(1,91)  1 1 1 1];
% fdefwidpeak.m Skript f = Rechteckpuls 15 breit, 100 Elemente
f = [ 1 1 1 1 1 1 1 1 zeros(1,85) 1 1 1 1 1 1 1];

Ein weiteres Skript 'fdefhat.m' zur Definition einer Testfunktion f erzeugt eine Hutfunktion aufgrund der interaktiven Abfrage der gewünschten Position und Breite.

% fdefhat.m Skript f - Hutfunktion, 
%    Breite und Position wird interaktiv abgefragt
f = zeros(1,100);
disp('Definition einer Hut-Funktion durch Angabe von');
disp('  Position und Breite');
pos = input(' Eingabe Position der Hut-Spitze (0..99):');
wid = input(' Eingabe halbe Breite des Spitz-Hutes:');
f(pos+1) = 1;
for k=pos+2:min(pos+1+wid,100)
     f(k) = 1-(k-pos-1)/wid;
end
for k=max(pos+2-100,1):pos+1+wid-100
     f(k) = 1-(k-pos-1+100)/wid;
end
for k=pos:-1:max(pos-wid+1,1)
     f(k) = 1+(k-pos-1)/wid;
end
for k=min(pos+100,100):-1:pos-wid+1+100
     f(k) = 1+(k-pos-1-100)/wid;
end

Das M-File 'rearrg.m' wird als Makro im Skript 'foudem.m' gebraucht:

function ovec = rearrg(ivec)
ltot = length(ivec);
ovec = [  ivec(floor((ltot+1)/2)+1:ltot) , ivec(1:floor(ltot/2)+1 ) ];

Eine Serie von Displays der verschiedenen Darstellungsarten von Fourier-Spektren zur vorher zu definierenden Funktion f erfolgt mit dem M-File 'foushow.m'.

% foushow.m -  Demo Skript zum Zeichnen der verschiedenen
%  Darstellungsformen der Fourierkoeffizienten
% die Zeitfunktion muss im Vektor   f  vordefiniert werden
ft = fft(f);  n = length(f);
% die einfachste verfuegbare Fourier-Transformation ist fft
fmi = min(f); fma = max(f);
% Rechen-Ungenauigkeits-Effekte werden Null gesetzt
if max(real(ft)) < 1e-12;  ft = j*imag(ft);  end
if max(imag(ft)) < 1e-12 ; ft = real(ft);  end
% 1. ganz gewoehnliche Fourier-Koeffizienten
ftn = 2*ft/n;  nh = floor(n/2);  ibas=1:nh;
figure(1);  clf;  figure(2);  clf
figure(1) ; subplot(2,1,1);  bar(ibas,real(ftn(1:nh)))
subplot(2,1,2);  bar(ibas,-imag(ftn(1:nh)))
figure(2);  plot(f)  % Die Zeitfunktion erscheint in Figur 2
axis([-3 n+3 fmi-0.15*(fma-fmi) fma+0.15*(fma-fmi)])
figure(1)
% Stop durch Tastatur-Abfrage
cont = input('1. in Fig. 1: a und b-Koeffizienten - weiter?');
clf;  bar(ibas,abs(ftn(1:nh)))
% 2.  Power-Spektrum,  Stop durch Tastatur-Abfrage
cont = input('2. im Fig. 1: Power-Spektrum -weiter?');
%    alle diskret - Transformierten Koeffizienten
igew = 1:n; subplot(2,1,1); bar(igew,real(ft))
subplot(2,1,2); bar(igew,-imag(ft))
% 3. DFT Koeffizienten, Stop durch Tastatur-Abfrage
cont = input('3. im Fig. 1: DFT-Koeffizienten - weiter?');
% 4. Komplexe Darstellung
ftr = rearrg(ft); lorig = length(f); 
idx = -floor(lorig/2):floor(lorig/2); ftrn = ftr/n;
clf; subplot(2,1,1) ; bar(idx,real(ftrn))
subplot(2,1,2); bar(idx,imag(ftrn))
disp('4. im Fig. 1: Re, Im der komplexen Koeffizienten - Show fertig')

Nur gerade der Display von Realteil und Imaginärteil der komplexen Fourier-Koeffizienten zur vorher definierten Funktion 'f' erfolgt mit dem M-File 'foushow.m'.

% foushowexp.m Darstellung der Fourier-Koeffizienten 
%   zur vordefinierten Funktion f
% in der komplexen Exponenten-Form ck*exp(j*k*w), k=-N..+N,
ft = fft(f); n = length(f);
ftr = rearrg(ft); lorig = length(f);
idx = -floor(lorig/2):floor(lorig/2);
rcoef = real(ftr);
% Rechen-Ungenauigkeits-Effekte werden Null gesetzt
if max(rcoef) < 1e-12
  rcoef = zeros(1,length(ftr));
end
xicoef = imag(ftr);
if max(xicoef) < 1e-12
  xicoef = zeros(1,length(ftr));
end
% plot in zwei Teilbildern uebereinander
subplot(2,1,1);  bar(idx,rcoef)
subplot(2,1,2);  bar(idx,xicoef)

In der M-File-Sammlung ist auch ein Demonstrationsskript zur Erläuterung des Algorithmus der schnellen Fouriertransformation enthalten Für diese Skripts 'shoffralgo.m',  'dftmatrix.m',  und 'xfftmatrix.m' wird jedoch auf den Textteil des Buches verwiesen.


next up previous contents
Nächste Seite: M-Files zu den Funktionen Aufwärts: M-Files zu Faltung und Vorherige Seite: Faltungsalgorithmen   Inhalt
Stefan Adam 2006-03-07