Hallo,
Hier geht es tatsächlich nicht um ein Problem, sondern darum wie leicht
man Daten effitient per Script verarbeiten kann.
Ich möchte Messdaten effitient verarbeiten, und habe sie vom Messgerät
in der Form:
1
#1,01-Jan-2003 01:30:45,0
2
Time,Ampl
3
0,-170.969
4
3.0517578,-89.8264
5
6.1035156,-86.5723
6
9.1552734,-86.2506
7
12.207031,-85.7201
Diese möchte ich zunächst mal mit Exel sowie Scilab unproblematisch zur
Diagrammerstellung öffnen können.
Dazu muss in Exel 2013 unter Datei->Optionen->Erweitert der Haken
"Trennzeichen von Betriebssystem übernehmen." abgewählt werden.
Als Dezimalzeichen wähle Ich einen ".".
Somit können gewünschte Diagramme nacher korrekt dargestellt werden.
Im nächsten Schritt geht's unter
Start->Systemsteuerung->Programme->Standardprogramme->Dateityp óder
Protokoll einem Programm zuordnen.
CSV wählen, ->Programm ändern->Die Datei "Konverter.bat" wählen.
Diese enthält folgenden Inhalt:
1
C:\1\Messungen\Scilab\Konverter.py %1
Der Dateipfad muss gegebenenfalls angepasst werden.
Es wird die Datei "Konverter.py" aufgerufen und ihr als
Übergabeparameter der Pfad der Gewünschten CSV-Datei übergeben.
Duch das Python-Skript wird der Dateiinhalt konvertiert sodass er
einfach in Scilab/Exel weiterverarbeitet werden kann.
Das Python-Skript enthält folgendes:
Hierbei wird der übergebene Pfad zunächst getrennt, damit der Dateiname
entnommen werden kann.
In dieser Datei werden entsprechend "," durch "." ersetzt.
Es wird auch überprüft ob nicht etwa ein Eintrag keine Nachkommastelle
hat. Deshalb die if-Abfrage.
Die erzeugte Datei wird nun in Exel automatisch in zwei Spalten
geöffnet.
Die konvertierte Datei wird im Pfad der gewählten Datei als Erg.csv
gespeichert.
Abschließend wird dir Datei "Auswertung.sci" geöffnet.
Dadurch wird automatisch Scilab mit der konvertierten Datei gestartet.
Diese kann nun durch Drücken auf F5 ausgewertet werden.
--> Habt ihr eine Idee wie man sich dass sparen kann?
Darin könnte man sich z.b. das Zeitsignal eine FFT oder die
Autokorrelation der gewählten Datei ansehen...
z.b. so
1
M=csvRead('Erg.csv',";")
2
Achse = M(:,1)
3
Ampl = M(:,2)
4
[c,ind]=xcorr(Ampl,"biased")
5
F=fft(Ampl)
6
subplot(221)
7
plot(Achse,Ampl)
8
title ("Signal druch XI44")
9
xlabel ("Zeitverlauf")
10
ylabel ("Amplitude")
11
legend ("Signal(t)")
12
subplot(222)
13
plot(ind,c)
14
title ("Autokorrelation")
15
xlabel ("dt")
16
ylabel ("Amplitude")
17
legend ("Autokorr")
18
subplot(223)
19
plot(F)
20
title ("FFT")
21
xlabel ("Frequenz")
22
ylabel ("Amplitude")
23
legend ("FFT")
Nun seht ihr das gewünschte...
Ich wäre dankbar für Anregungen und einen Tip wie die Frequenzachse der
FFT richtig skaliert wird...
oder das gewünschte einfacher erreicht werden kann...
Grüße,
Matze
Du könntest versuchen fft und Plot komplett in Python zu machen. Mit
numpy und matplotlib kommt man schon ziemlich weit. Auch das
umständliche Einlesen eines CSV (Dein erstes Script wird in numpy zu
einem Einzeiler)
Matze schrieb:> Ich wäre dankbar für Anregungen und einen Tip wie die Frequenzachse der> FFT richtig skaliert wird...
Die FFT erzeugt Frequenzpunkte der Breite "Samplingfrequenz/fftpoints",
und das bis zur Nyquistfrequenz. Mache sowas mit FS=Samplingfrequenz und
fft_points=Anzahl FFT Punkte:
f=(0:(FS/fft_points):(FS)-(FS/fft_points));
Und nimm das dann auf die x-Achse
"F=fft(Ampl)" + "plot(F)" würde bei mir in Octave allerdings nicht
funktionieren, weil die FFT komplexe Werte liefert, ich schreibe
stattdessen den Betrag, außerdem verwende ich einen Vorfaktor, der dafür
sorgt dass die Amplitude eines Signales unabhängig von der Anzahl der
FFT Punkte ist:
spectrum=(2/fft_points).*(abs(fft(Y,fft_points)));
Plotten tue ich dann in dB:
plot(f,20*log10(spectrum))
> oder das gewünschte einfacher erreicht werden kann...
Was du davor gemacht hast mit Python usw. habe ich nicht ganz kapiert,
ich mache sowas in Octave und kann dort Messdaten in verschiedenen
Formaten (S2P, CSV) direkt mit "dlmread" einlesen. Einfacher geht es
eigentlich nicht.
Bernhard S. schrieb:> Was du davor gemacht hast mit Python usw. habe ich nicht ganz kapiert,> ich mache sowas in Octave und kann dort Messdaten in verschiedenen> Formaten (S2P, CSV) direkt mit "dlmread" einlesen.
Er ist Python-Anfänger. Warte erstmal bis er die mitgelieferten
Batterien¹ findet, auspackt und einlegt ;-)
________
¹)
https://www.python.org/dev/peps/pep-0206/#batteries-included-philosophy
@Bernhard S.
> FFT
Danke dass werd ich versuchen :)
Bernhard S. schrieb:> Was du davor gemacht hast mit Python usw. habe ich nicht ganz kapiert,> ich mache sowas in Octave und kann dort Messdaten in verschiedenen> Formaten (S2P, CSV) direkt mit "dlmread" einlesen. Einfacher geht es> eigentlich nicht.
Also im Prinzip hat der Nutzer csv Dateien.
Diese klickt er mit Doppelklich an, sie werden so konvertiert dass sie
nun leicht mit SciLab und Exel geöffnet werden können.
Die Kopie wird als Erg.csv im Verzeichniss der Ursprungsdatei
gespeichert.
Das Skript zur Auswertung der konvertierten Datei wird in Scilab
geöffnet, zusätzlich befindet sich Scilab im richtigen verzeichniss und
durch nur einen Tastendruck auf F5 wird das zu den Messdaten gehörige
Script ausgeführt.
Als Nebenergebniss lässt sich die Datei Erg.csv auch in Exel nun
unkompliziert weiterverarbeiten.
Dass Auswerteskript, das Python und Batch-File können an jedem
beliebigen Ort auf dem PC Liegen.
Allein durch Doppelklich auf die Messdatendatei und einen Tastendruck
auf F5 erhält der Nutzer alle gewünschten diagramme jeder beliebigen
csv-Messdatei :)
Wenn ich nur wüsste wie ein Script bei laden in Scilab automatisch
gestartet werden kann... dazu hab ich nichts gefunden?
Matze schrieb:> Also im Prinzip hat der Nutzer csv Dateien.> Diese klickt er mit Doppelklich an, sie werden so konvertiert dass sie> nun leicht mit SciLab
Aber SciLab kann doch die Datei auch so schon lesen, das ist eine ganz
normale csv-Datei. Die Notwendigkeit des Umwegs über Python an der
Stelle ist irgendwie nicht nachvollziehbar.