FFT aus Textdatei mit Octave

Gast #974237
Lesenswert?

Hallo Leute


Ich hab als Nebenaufgabe bekommen, aus einer Textdatei mit 3 Achsen eine 
FFT an Octave durchzuführen, komme mit diesem Programm aber überhaupt 
nicht zurecht!

In der Textdatei stehen die Daten in folgender Form:
 x1,y1,z1
 x2,y2,z2
 ...

Nun soll ich hieraus für jede Messachse eine eigene FFT berechnen und 
als Plot ausgeben lassen.
Erste Frage wäre, geht das überhaupt oder müssen die jeweiligen Achsen 
in eigene Textdateien?
Und zweite Frage ist eher eine Bitte: Kann mir wer dafür ein Skript 
vorbeireiten, welches ich dann einfach auf meine Textdatei anwenden 
kann?
Würde mich sehr darüber freuen, weil ich noch nie mit diesem Programm in 
Berührung gekommen bin.


Danke.
LG
Karina
Gast #974419
Lesenswert?

Hallo Karina,

> Ich hab als Nebenaufgabe bekommen, aus einer Textdatei mit 3 Achsen eine
> FFT an Octave durchzuführen, komme mit diesem Programm aber überhaupt
> nicht zurecht!
>
> In der Textdatei stehen die Daten in folgender Form:
>  x1,y1,z1
>  x2,y2,z2
>  ...
Ich vermute, die Dateien sind in ASCII-Zeichen.
1) Lösche zunächst mit einem Texteditor die Kommata und tausche sie 
beispielsweise gegen Leerzeichen aus (weiß nicht 100%ig, ob das nötig 
ist, aber mach es besser mal)
2) Achte darauf, daß der Dezimalpunkt tatsächlich ein Punkt ist.
3) Benennen die Datei "datei.asc".

Dann kannst Du in Octave die folgenden Befehle ausführen, am besten erst 
einzeln zur Fehlerkontrolle:

M = load('datei.asc');    % Matrix laden
x = M(:,1);
y = M(:,2);
z = M(:,3);

fs  = 2500;                                  % Abtastfrequenz
N   = length(x);                             % Laenge der Vektoren
f   = 0:1/N*fs:(N-1)/N*fs;                   % Frequenzvektor

ftx = fft(x);             % Fouriertransformation x
fty = fft(y);             % Fouriertransformation y
ftz = fft(z);             % Fouriertransformation z

figure(1);                % Bildschirmplot
subplot(3,1,1);           % Teilfenster
plot(f,abs(ftx));         % Betragsspektrum x-Vektor
subplot(3,1,2);           % Teilfenster
plot(f,abs(fty));         % Betragsspektrum y-Vektor
subplot(3,1,3);           % Teilfenster
plot(f,abs(ftz));         % Betragsspektrum z-Vektor
xlabel('f/Hz');
ylabel('Amplitudenspektrum');

Anschließend:

print -Peps2 'plot.eps'
(plottet in eine EPS-Datei)

wenn Dir die Qualität egal ist:
print -Ppng 'plot.png'   oder
print -Pjpg 'plot.jpg'

Wenn Du ein Phasenspektrum brauchst, nimmst Du angle(ftx) statt 
abs(ftx).
Beim Powerspektrum benutzt Du abs(ftx).^2

Beachte dabei den Punkt vor dem Hochkomma; er bewirkt, daß die Operation 
komponentenweise angewendet wird. Normalerweise versucht Matlab/Octave 
ansonsten eine Matrixmultiplikation.

Mit dem Befehl axis([x1,x2,y1,y2]) kannst Du in einen Bereich des Plots 
zoomen.

> Nun soll ich hieraus für jede Messachse eine eigene FFT berechnen und
> als Plot ausgeben lassen.
> Erste Frage wäre, geht das überhaupt oder müssen die jeweiligen Achsen
> in eigene Textdateien?
> Und zweite Frage ist eher eine Bitte: Kann mir wer dafür ein Skript
> vorbeireiten, welches ich dann einfach auf meine Textdatei anwenden
> kann?
> Würde mich sehr darüber freuen, weil ich noch nie mit diesem Programm in
> Berührung gekommen bin.
Das Programm kannst Du Dir ruhig anschauen. Die Befehle sind zu großen 
Teilen identisch mit Matlab.


Grüße
Michael
Gast #978819
Lesenswert?

Hallo


Ich hatte ein ähnliches Problem und auch mir hat die Antwort 
weitergeholfen.
Nun hätte ich allerdings noch eine ergänzende Frage:

Meine Messwerte sind in der Form

"untereGrenze Messwert1 obereGrenze"
"untereGrenze Messwert2 obereGrenze"
"untereGrenze Messwert3 obereGrenze"

in einer Logdatei gespeichert.
Wie kann sie nun in Octave gemeinsam in einem Diagramm anzeigen lassen?


Danke.

Gruß
Peter
Gast #2978508
Lesenswert?

Ich schätze mal, dass der Code von Michael nicht das richtige Ergebnis 
liefert.

Man tastet da (im Codebeispiel) mit 2.5kHz ab und das Spektrum geht von 
links (0Hz) bis rechts (ca. 2.5kHz). Shannon lässt grüßen...
Oder was meint ihr so?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren