www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP FFT aus Textdatei mit Octave


Autor: Karina (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

: Verschoben durch Admin
Autor: Karina (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karina, so wird das nix! (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"ein Skript vorbeireiten"? Bin doch nicht verrückt mich auf dieses 
ungezähmte Biest zu setzen!

Autor: Michael Lenz (hochbett)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karina (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael


Vielen lieben Dank für deine Hilfe, es funktioniert ganz wunderbar!!!!


Liebe Grüße
Karina

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: meckerziege (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: troll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
meckerziege schrieb:
> Ich schätze mal, dass der Code von Michael nicht das richtige Ergebnis
> liefert.
und ich schätze dass das nach Jahren niemanden mehr interessiert...

Autor: Hannes Jaeger (pnuebergang)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
troll schrieb:
> meckerziege schrieb:
>> Ich schätze mal, dass der Code von Michael nicht das richtige Ergebnis
>> liefert.
> und ich schätze dass das nach Jahren niemanden mehr interessiert...

Das, und da es sowieso stark nach verkappter Hausaufgabe roch, ist das 
gut so.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.