INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Signalverarbeitung die zweite



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

12.01.2007, 00:08 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2007 00:19 von Kopmann.)
Beitrag #1

Kopmann Offline
LVF-Grünschnabel
*


Beiträge: 41
Registriert seit: Nov 2006

8.0 Student
2005
kA

23552
Deutschland
Signalverarbeitung die zweite
Hallöchen alle zusammen,

kurz vor Weihnachten hat mich "Kvasir" auf einen besseren Programmierstil aufmerksam gemacht.
Jetzt bin ich dabei diesen Stil für ein bestehendes Programm anzuwenden.

In meinem alten Programm suche ich im ersten Teil nach Punkten die meine x-Achse schneiden und zwar immer von negativ -> positiv und danach von positiv -> negativ. Im weiteren Text sage ich dazu immer Wertepaar, weil ich glaube dass dies einfacher ist.

Problem 1:

Mein Programm registriert natürlich nicht nur die Wertepaare die ich haben will, sondern auch hier und da kleine Peaks die ca. 12ms lang sind. Diese würde ich gern herausschneiden das zum Schluss nur noch meine richtigen Wertepaare im Arry stehen.
Die Lösung für dieses Problem ist einfach ich nehme einfach den letzten Wert meine Wertepaares und ziehe den ersten davon ab. Die Differenz sofern kleiner als z.B.: 12ms muss ein falsches Wertepaar sein und wird entfernt.

Frage:

Geht es bei diesem Programmierstil das ich diese Bedingung gleich mit in meine Wertepaarsuche integriere oder ist es besser dass ich erst alle Wertepaare aufnehme und hinterher untersuche.

Problem 2:

Ich habe festgestellt dass der 2te Punkt meines ersten Wertepaares nicht gefunden wird. Er steht in der Zeile 20 meiner Beispieldatei. Der erste liegt in der Zeile 16. (Edit: Sorry ab der Zeile 1900 tritt ein ähnliches Problem auf.)

Frage:

Was passiert dort? Das alte Programm findet diesen Punkt. Erst dachte ich der Abstand ist zu klein aber dann würde das NulldurchgangsVi
auch die andern zu kleinen Wertepaare nicht oder nur teilweise finden was nicht der Fall ist. Oder liegt es vielleicht daran dass nur ein Punkt kurzzeitig negativ ist bevor der Graphverlauf wieder steigt.

Ihr findet hier das Programm und die Datendatei. Vielleicht solltet ihr euch die letzte Spalte der Datendatei einmal graphisch anzeigen lasse.
Diese Werte sind übrigens die Differenz der Werte zweier Drucksensoren. Es wurde deshalb gemacht damit man nicht danach suchen muss wo die Schnittpunkte der beiden Graphen liegen.

Gruß Gerrit


Angehängte Datei(en)
Sonstige .txt  SJM030117__017.txt (Größe: 96,09 KB / Downloads: 182)

Sonstige .vi  Drucksuche_1.vi (Größe: 25,4 KB / Downloads: 203)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.01.2007, 09:37 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2007 09:40 von Lucki.)
Beitrag #2

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Signalverarbeitung die zweite
Zu 1:
Für die Diskriminierung ungültiger Nulldurchgänge gibt es verschiedne Strategien, aber ganz frei von Willkür ist das immer nicht. Man kann immer Beispiele finden, in denen es nicht so wunschgemäß funktioniert, z.B. wenn mehrere Peaks dicht hintereinander folgen.
Ich würde die Entfernung auf jeden Fall "Online" vornehmen, und zwar so: Ein Übergang, z.B. -/+, ist nur dann gültig, wenn z.B die nachfolgenden 10 Samples alle positiv bleiben. Beispiel:
---++-++++--+++++++++++------ (nur der rote Wert wird gezählt)
Das läßt sich mit einem Zähler machen, wenn Du damit nicht zurechtkommst, helfe ich Dir gern weiter.

Zu 2:
Kann das nicht nachvollziehen, bei mir kommt genau das raus was ich erwarte. Ich hasse allerdings Kommas als Dezimalzeichen in meinem System, und um Deine Komma-Daten lesen zu können, mußte ich den Formatstring ändern.
   

Habe Dein VI etwas abgespeckt. Das Nulldurchgang-Vi ist wird hier nicht gebraucht. Wenn Du z.B in den State -+ eintrittst, sind die Werte ja immer erst mal negativ, und Du suchst den ersten positiven Wert. Da genügt ein einfache Abfrage >0.


Angehängte Datei(en)
Sonstige .vi  Drucksuche_1_WA.vi (Größe: 28,35 KB / Downloads: 170)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.01.2007, 16:06
Beitrag #3

Kopmann Offline
LVF-Grünschnabel
*


Beiträge: 41
Registriert seit: Nov 2006

8.0 Student
2005
kA

23552
Deutschland
Signalverarbeitung die zweite
Hallo Lucki

ich finde den ersten Weg auch besser. Die Idee kam mir auch schon nur die Umsetzung ist eine andere Sache. Bin eben kein Programmierer. (Ein Einfaches subtrahieren bekomme aber ich mittlerweile hin.Rolleyes)
Und die LV Vorlesung die dieses Semester an unsere FH angeboten wurde ging nur über 6 x 2h.
Von daher nehme ich dein Angebot mit dem Zähler an.

Gerrit
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.01.2007, 11:38
Beitrag #4

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Signalverarbeitung die zweite
Habe mal was gemacht. Aber wie gesagt, Aussortierung "falscher Nulldurchgänge" ist nie frei von Willkür. Ich habe es hier so gemacht, das ein Nulldurchgang nur dann zählt, wenn die nachfolgenden N Werte alle das gleiche Vorzeichen haben. Ebenso gut hätte man es so machen können, daß ein Nulldurchgang nur zählt, wenn es in den vorangegangenen Werten keinen Vorzeichenwechsel gab. (das entspricht dem ersten Fall, wenn man das Array von hinten anfangen würde zu untersuchen).
Weitere Möglichkeiten, um "falsche" Nulldurchgänge zu eliminieren:
[list]
[*]Hysterese (Schmitt.Trigger-Verhalten)<>
[*]Totzeit nach jedem gefundenem Durchgang<>
[*]Tiefpassfilterung<>
[st]Habe festgestellt, ab N=5 bleibt die Anzahl Nulldurchgänge sehr schön stabil auf 11


Angehängte Datei(en)
Sonstige .vi  Drucksuche_1_WA1.vi (Größe: 29,5 KB / Downloads: 216)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.01.2007, 15:58
Beitrag #5

Kopmann Offline
LVF-Grünschnabel
*


Beiträge: 41
Registriert seit: Nov 2006

8.0 Student
2005
kA

23552
Deutschland
Signalverarbeitung die zweite
Danke für deine Hilfe Lucki,

jetzt habe ich schon mal einen Ansatz wie ein Zähler programmiert wird.

Ich werde jetzt versuchen dass das Programm als ersten nach einem ND von minus -> plus sucht. Damit dürfte dann auch der erste Wert (19) verschwinden. (Sofern du das noch nicht gemacht hast!)

Nur eine Sache ist merkwürdig! Ich habe mal die Indexe überprüft - wenn das Programm eine ND n->p findet merkt es sich nicht den ND sondern 3 Werte vorher und von p->n 2 Werte vorher. Mal sehen wie das zustande kommt! Ein wenig Arbeit muss mir schließlich auch noch bleiben.

Ich danke nochmals
Gerrit
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.01.2007, 20:16 (Dieser Beitrag wurde zuletzt bearbeitet: 13.01.2007 20:18 von Lucki.)
Beitrag #6

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Signalverarbeitung die zweite
Zitat:jetzt habe ich schon mal einen Ansatz wie ein Zähler programmiert wird.
Ich werde jetzt versuchen dass das Programm als ersten nach einem ND von minus -> plus sucht. Damit dürfte dann auch der erste Wert (19) verschwinden. (Sofern du das noch nicht gemacht hast!)
Das wußte ich nicht, daß das Ergebnis-Array immer mit dem ersten ND-+ beginnen soll. Habe das geändert.

Zitat:Nur eine Sache ist merkwürdig! Ich habe mal die Indexe überprüft - wenn das Programm eine ND n->p findet merkt es sich nicht den ND sondern 3 Werte vorher und von p->n 2 Werte vorher. Mal sehen wie das zustande kommt! Ein wenig Arbeit muss mir schließlich auch noch bleiben.

Bei mir tritt das nicht auf, siehe Diagramm
   

Hab das VI abgeändert, und zwar so, daß es nun wirklich keiner mehr verstehen kann. Wenigstens diese Erläuterungen:[list=1]
[*]zu "Case1": Das Vi fängt immer mit den richtigen Werten an zu suchen. Wenn der erste Datenwert positiv ist (Wie in Deinen Daten), wird als erstes nach einem ND+- gesucht, und umgekehrt. (Wenn man dem "falschen" Wert beginnt, dann hat man beim Datenpunkt 0 fehlerhafterweise schon einen Durchgang).<>
[*]zu "Case2": Falls aber der erste gefundene Wert, wie in Deinen Daten, kein ND-+ ist, wird dieser nicht verwendet, d.h er kommt nicht in das Ergebnis-Array.<>
[*]Die Schleife "For1": Die Zahl N=17 hat den Hintergrund, daß ich - rein willkürlich - 17 Kursoren erzeugt habe.<>
[st]


Angehängte Datei(en)
Sonstige .vi  Drucksuche_1_WA2.vi (Größe: 31,77 KB / Downloads: 181)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Signalverarbeitung PatrickF1706 8 4.542 31.07.2018 13:11
Letzter Beitrag: PatrickF1706
  Signalverarbeitung mit Array tomi2107 2 3.989 21.10.2013 10:16
Letzter Beitrag: BsaiboT
  was macht die zweite while-Schleife? Hasenfuss 18 11.137 01.02.2013 11:50
Letzter Beitrag: GerdW
  Sinus über Rauschen - Signalverarbeitung SoR 7 10.266 25.03.2011 07:34
Letzter Beitrag: SoR
  Signalverarbeitung eines Gyroskopes ToraBoraJack 8 8.282 16.03.2010 14:41
Letzter Beitrag: jg
  Signalverarbeitung Kopmann 2 3.907 26.01.2007 01:04
Letzter Beitrag: Kopmann

Gehe zu: