Forum: Mikrocontroller und Digitale Elektronik Sample-Werte benutzen


von DK (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von DK (Gast)


Lesenswert?

Klingt gut, aber bei 5000 Werten?... Hmmm

von DK (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von DK (Gast)


Lesenswert?

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!

von DK (Gast)


Lesenswert?

achso, ganz vergessen - erster Wert ist bspw. Zeit, dann I-Komponente 
und Q-Komponente

von Karl H. (kbuchegg)


Lesenswert?

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.

von DK (Gast)


Lesenswert?

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 ;-)

von DK (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von DK (Gast)


Lesenswert?

Danke, werede mich dann wieder melden, falls ich nicht weiter komme

von Lukas K. (carrotindustries)


Lesenswert?

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 "};"

von Karl H. (kbuchegg)


Lesenswert?

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.

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Kevin K. (nemon) Benutzerseite


Lesenswert?

Wie wertest du das denn später aus? Matlab? Excel? Eigenes Programm?

von Lukas K. (carrotindustries)


Lesenswert?

Karl heinz Buchegger schrieb:
> Er muss es doch gar nicht parsen
Dann kann er ja auch die CSV-Datei direkt inkludieren?

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.