Hallo alle zusammen, ich möchte die gesampleten Daten in einem Xmega benutzen, da ich das eigentliche Signal noch nicht habe, möchte aber die Auswertung trotzdem anfangen zu programmieren. Wie mache ich es am besten? Ich habe eine csv-Datei mit drei Spalten und 5000 Zeilen (Komma-getrennt). Die Werte werden in Zukunft einem abgetasteten Basisband-Datensignal entsprechen. Danke, DK
DK schrieb: > anfangen zu programmieren. Wie mache ich es am besten? > Ich habe eine csv-Datei mit drei Spalten und 5000 Zeilen > (Komma-getrennt). Die Daten mittels Editor-Hexerei so aufbereiten, dass du sie in ein Array (Array aus einer Struktur?) einbauen kannst. Dann noch eine Funktion, die jeweils den nächsten Wert aus dem Array liefert.
Das einzige was mir hierzu einfaellt waere Konstanten anzulegen und denen den entsprechenden Index zuweisen, ist aber wider etwas aufwändig bei so vielen Daten
DK schrieb: > Klingt gut, aber bei 5000 Werten?... Hmmm Wo liegt das Problem? Ein guter Programmiereditor hat eine Art Makrofähigkeit. Man zeigt ihm die Sequenz, die er machen soll, geht dann mit dem Cursor in Startstellung, legt einen Stein auf die Makrotaste und sieht dem Editor zu, wie er sich durch die Datei durchkämpft. Alternativ kann man sich natürlich immmer noch schnell ein C Programm schreiben, welches die vorhandenen Daten liest und so ergänzt in einer anderen Datei abspeichert, dass sie Compilertauglich werden. Mittels Redirection auf der Command Line, ist das meist noch nicht mal viel Aufwand. Oder man benutzt einen sed ... Wie auch immer. Man muss halt seinen Werkzeugkasten kennen. Ich weiß ja nicht, wie deine Daten aussehen und was man alles machen müsste, damit sie C-tauglich werden. Wenn du Bammel wegen der 5000 hast. Du kannst ja auch abspecken. Du kannst aber auch den jeweils nächsten Wert per UART vom PC einspielen, wenn du es lieber komplizierter haben willst. Du kannst aber auch die Auswertung an sich auf dem PC programmieren und dort testen. Solange es um die reine Berechnung geht, ist das ja (eventuell bis auf Datentypen) identisch und du brauchst dazu gar keinen µC um die Auswertung erst mal in Schwung zu bekommen. Möglichkeiten gibt es viele.
Ein Beispiel aus der csv-Datei: -475.88060000,122.83460000,-53.54330000 -475.88050000,124.40940000,-51.96850000 -475.88030000,125.98420000,-55.11811000 -475.88020000,125.98420000,-56.69291000 -475.88010000,127.55900000,-55.11811000 -475.88000000,125.98420000,-58.26771000 -475.87990000,125.98420000,-56.69291000 -475.87980000,124.40940000,-58.26771000 -475.87960000,122.83460000,-58.26771000 -475.87950000,122.83460000,-56.69291000 ... Ich bin noch nicht so fit, was C-Programmierung angeht. Wäre schön da ein paar Tipps zu bekommen!
achso, ganz vergessen - erster Wert ist bspw. Zeit, dann I-Komponente und Q-Komponente
DK schrieb: > Ich bin noch nicht so fit, was C-Programmierung angeht. Wie willst du dann die Auswertung programmieren, wenn du in C nicht soweit fit bist, dass du eine Zeile einliest, ein ',' hinten drann hängst und das dann wieder ausgibst (das File-Handling machst du mittels Command Line Redirection). Was dir aber unter Umständen mehr bringt: Wenn du deinen Editor durchforstest, welche Möglichkeiten der Automatisierung er dir bietet. Für jeden halbwegs brauchbaren Programmier-Editor ist es ein Klacks mittels eines Makros an jede Zeile hinten oder vorne noch was anzuhängen. Sein Werkzeug zu kennen hat noch nie geschadet.
Karl heinz Buchegger schrieb: > Wie willst du dann die Auswertung programmieren, wenn du in C nicht > soweit fit bist wenn es sein muss, dann lern man es eben ;-)
Karl heinz Buchegger schrieb: > Was dir aber unter Umständen mehr bringt: Wenn du deinen Editor > durchforstest, welche Möglichkeiten der Automatisierung er dir bietet. > Für jeden halbwegs brauchbaren Programmier-Editor ist es ein Klacks > mittels eines Makros an jede Zeile hinten oder vorne noch was > anzuhängen. das werde ich ausprobieren, danke
DK schrieb: > Karl heinz Buchegger schrieb: >> Wie willst du dann die Auswertung programmieren, wenn du in C nicht >> soweit fit bist > > wenn es sein muss, dann lern man es eben ;-) Dann tu das. Alles was du für diese Umformung brauchst, sind C Grundlagen, die in jedem noch so grindigen C Buch im ersten Drittel stehen. Dazu musst du erst mal wissen, wie das Ergebnis überhaupt aussehen soll. Das wiederrum richtet sich danach, wie du deinen Messwertefaker aufbauen willst. Daher würde ich damit anfangen, den zu entwerfen. Die ersten paar Zeilen der Daten sind ja auch händisch schnell ergänzt und zum Testen reicht das allemal. Wenn dann feststeht, in welcher textuellen Form die Daten vorliegen müssen, wird die Konvertierung in Angriff genommen.
C ist für derartige Zeichenkettenbasteleien überaus mindergeeignet. Skriptsprachen wie python, ruby, perl und php sind dafür mit ihren "höherentwickelten" Zeichenkettenverarbeitungsfunktionen wesentlich besser geeignet. Für python gibt es sogar ein CSV-Parser-Modul. Damit ist deine Aufgabe in nullkommanichts erledigt. EDIT: Mir war' grad langweilig
1 | import csv |
2 | data = csv.reader(open("data", "r"), delimiter=",") |
3 | t = [] |
4 | i = [] |
5 | q = [] |
6 | |
7 | for x in data: |
8 | t.append(x[0]) |
9 | i.append(x[1]) |
10 | q.append(x[2]) |
11 | |
12 | |
13 | print "deinedeklaration t[] = {" |
14 | for x in t : |
15 | print str(x)+"," |
16 | print "};" |
17 | print "deinedeklaration i[] = {" |
18 | for x in i : |
19 | print str(x)+"," |
20 | print "};" |
21 | |
22 | print "deinedeklaration q[] = {" |
23 | for x in q : |
24 | print str(x)+"," |
25 | print "};" |
Luk4s K. schrieb: > C ist für derartige Zeichenkettenbasteleien überaus mindergeeignet. > Skriptsprachen wie python, ruby, perl und php sind dafür mit ihren > "höherentwickelten" Zeichenkettenverarbeitungsfunktionen wesentlich > besser geeignet. Für python gibt es sogar ein CSV-Parser-Modul. Damit > ist deine Aufgabe in nullkommanichts erledigt. Er muss es doch gar nicht parsen convert.c *********
1 | #include <stdio.h> |
2 | |
3 | int main() |
4 | {
|
5 | char line[256]; |
6 | |
7 | while( gets( line ) ) { |
8 | printf( "%s,\n", line ); |
9 | }
|
10 | }
|
fertig. Command line öffnen convert < data.dat > data_new.inc und die Sache ist soweit erledigt, dass er das inc File in seinen eigentlichen Code includen kann
1 | .....
|
2 | |
3 | double data[] = { |
4 | #include "data_new.inc" |
5 | };
|
6 | |
7 | ...
|
Ich bezweifle nicht, dass man das in Ruby oder Perl genauso gut und genauso schnell hinkriegt (und sicherer, weil man ja in C doch auf 256 char Zeilen, oder irgendeine andere Zahl, limitiert ist), aber so ein simples Einmal-Tool sollte keinem C-Programmierer die Schweißperlen auf die Stirn treiben. Ansonsten soll er sich sein Lehrgeld zurückgeben lassen bzw. überhaupt erst mal anfangen die C Grundlagen zu lernen. Das ist 1. Klasse, 5. Lektion oder so. Gleich nachdem man den Begriff "String" kennen gelernt hat.
Du kannst CSV Dateien auch mit Excel öffnen und dort Kommas anhängen ("Ausfüllen"), etc. Und dann alles markieren, kopieren, im Texteditor einfügen. Der Anfang einer neuen Zelle wird dann durch einen Tabulator ersetzt.
Karl heinz Buchegger schrieb: > Er muss es doch gar nicht parsen Dann kann er ja auch die CSV-Datei direkt inkludieren?
Luk4s K. schrieb: > Karl heinz Buchegger schrieb: >> Er muss es doch gar nicht parsen > Dann kann er ja auch die CSV-Datei direkt inkludieren? In C nicht, weil ihm am Ende jeder Zeile ein ',' fehlt, der notwendig wäre, damit er sein File als Initialisierung eines Arrays benutzen könnte. Und ich gestehe: Ich habe eine Annahme getroffen, die so nicht genannt wurde. Aus "XMega" und "Auswertung programmieren" habe ich auf C-Programmierung geschossen. Dieser Schluss ist aber nicht zwingend.
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.