mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Sample-Werte benutzen


Autor: DK (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: DK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klingt gut, aber bei 5000 Werten?... Hmmm

Autor: DK (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: DK (Gast)
Datum:

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

Autor: DK (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: DK (Gast)
Datum:

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

Autor: DK (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: DK (Gast)
Datum:

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

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht 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
import csv
data = csv.reader(open("data", "r"), delimiter=",")
t = []
i = []
q = []

for x in data:
  t.append(x[0])
  i.append(x[1])
  q.append(x[2])
  

print "deinedeklaration t[] = {"
for x in t :
  print str(x)+","
print "};"
print "deinedeklaration i[] = {"
for x in i :
  print str(x)+","
print "};"

print "deinedeklaration q[] = {"
for x in q :
  print str(x)+","
print "};"

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
*********
#include <stdio.h>

int main()
{
  char line[256];

  while( gets( line ) ) {
    printf( "%s,\n", line );
  }
}

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
  .....

double data[] =  {
#include "data_new.inc"
};

...

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.

Autor: Simon K. (simon) Benutzerseite
Datum:

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

Autor: Kevin K. (nemon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wertest du das denn später aus? Matlab? Excel? Eigenes Programm?

Autor: Lukas K. (carrotindustries)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

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.