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
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.
"ein Skript vorbeireiten"? Bin doch nicht verrückt mich auf dieses ungezähmte Biest zu setzen!
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
Hallo Michael Vielen lieben Dank für deine Hilfe, es funktioniert ganz wunderbar!!!! Liebe Grüße Karina
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
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?
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...
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.