FFT aus Textdatei mit Octave

Gast #974237
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
Jetzt hab ich doch glatt noch etwas Wichtiges vergessen: Die 
Abtastfrequenz der Messwerte betrug 2500Hz. Es sind einfache 
A/D-Wandler-Werte eines Mikrocontrollers von einem Sensor.
Gast
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
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
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.