Azhl. Schwingungen von kontinuierlichen Signal... |
Azhl. Schwingungen von kontinuierlichen Signal... |
22. Feb 2007, 12:40
Post
#1
|
|
Member Group: Members Posts: 68 Joined: 14.02.2007 From: Erfurt Member No.: 19 LV Version: 8.00 / 8.2 Zertifizierung: keine LV User seit: 2006 |
Mahlzeit.
Ich habe im Rahmen meiner Diplomarbeit eine LabVIEW-Anwendung zu erstellen. Nach langem Informationen sammeln/kopieren und Basteln bin ich soweit das ich vom FPGA zum PC HOST meine Signaldaten übertrage. Da handelt es sich zum einen um die Daten des Originalsignals und zum anderen des gemessenen Signals. ich habe vor diese in einen Vergleich zu stellen. Die Messung kann oder soll über einen längeren Zeitraum laufen. da ich die Vergleichswerte in einer Tabelle darstellen soll, macht es keinen Sinn alle Werte dafür zu benutzen. Es reicht also immer einen gewissen Abschnitt zu behandeln. Ich dachte da so an 5 Schwingungen. Jetzt habe ich dafür eine kleine Vergleichsrechnung aufgestellt. Die einzeln empfangenen Datenpaktet sollen solange zu einem Gesamt-Array gepackt werden, solange die Anzahl der darin befindlichen Elemente kleiner ist als die 5-fache Periodenzeit. das habe ich versucht damit zu verwirklichen indem folgende Rechnung aufstellte: 5 mal "eingestellte Looprate" / "aktuelle Frequenz". Wenn dann die Anzahl der schon mitgeschnittenen Elemente kleiner ist als dieser Wert, soll weiter in das Array reingepackt werden. Nach beenden der Hauptschleife lasse ich mir das ergebnis im 2. Signalverlaufsgraph anzeigen. [attachment=67:Datenauf...PC_Host_.vi] Leider läuft es nicht immer so wie es soll. es werden bei unterschiedlich eingestellten Frequenzen oft weit mehr Schwingungen protokolliert. dann scheint Es beim erneuten Start von Anfang an werte ins "Sammel-Array" zu packen obwohl noch keine Taste betätigt wurde. Hier liegt entweder ein denkfehler meinerseits vor oder ich weiß auch nicht. Gunni |
|
|
26. Feb 2007, 10:38
Post
#2
|
|
proven Member Group: Administrators Posts: 315 Joined: 16.10.2006 From: Düsseldorf Member No.: 2 LV Version: current Zertifizierung: CLA LV User seit: 2001 |
Ok, einen Teil des Rätsels hast du gelöst
Die kontinuierlich aufsteigenden Werte sind die Demo-Daten, die "normalerweise" von deiner Messkarte, etc. kommen und zwischengespeichert werden sollen. Das obere Array ist das Ringspeicher Array, in dem die Messdaten zwischengespeichert werden. Ich produziere die Demo-Daten extra streng monton steigend, damit man sieht, was bei dem "Zerlegen und umgekehrt zusammensetzen" passiert. Probiers einfach mal aus Wenn du ein 2D-Array brauchst, was spricht dagegen diese "Vorrichtung" zu duplizieren? -------------------- künstliche Intelligenz ist besser als natürliche Dummheit!
rotabench:rotierende Prüfstände nach dem Baukasten-Prinzip |
|
|
26. Feb 2007, 11:02
Post
#3
|
|
Member Group: Members Posts: 68 Joined: 14.02.2007 From: Erfurt Member No.: 19 LV Version: 8.00 / 8.2 Zertifizierung: keine LV User seit: 2006 |
QUOTE(CB @ 26. Feb 2007, 10:38) [snapback]114[/snapback] Ok, einen Teil des Rätsels hast du gelöst Die kontinuierlich aufsteigenden Werte sind die Demo-Daten, die "normalerweise" von deiner Messkarte, etc. kommen und zwischengespeichert werden sollen. Das obere Array ist das Ringspeicher Array, in dem die Messdaten zwischengespeichert werden. Ich produziere die Demo-Daten extra streng monton steigend, damit man sieht, was bei dem "Zerlegen und umgekehrt zusammensetzen" passiert. Probiers einfach mal aus Wenn du ein 2D-Array brauchst, was spricht dagegen diese "Vorrichtung" zu duplizieren? Du meinst mit duplizieren bestimmt das ich nicht beide Datenpakte sofort in ein "2D Array packen soll, sondern beide in ein "Teilarray erzeugen" schieben könne. Diese am Ende mit einem "Built Array" ja zu einem 2D Array zusammenfügen kann. Ich galube du splittest es um im nächsten Graph-Bild einen Teil des vorigen Bildes mit anzuzeigen. Dadurch glaubt man nicht neue Messungen vorliegen zu haben sondern, das diese zusammen gehören. Gunni |
|
|
26. Feb 2007, 16:26
Post
#4
|
|
proven Member Group: Administrators Posts: 315 Joined: 16.10.2006 From: Düsseldorf Member No.: 2 LV Version: current Zertifizierung: CLA LV User seit: 2001 |
QUOTE(Gunni1979 @ 26. Feb 2007, 11:02) [snapback]115[/snapback] Du meinst mit duplizieren bestimmt das ich nicht beide Datenpakte sofort in ein "2D Array packen soll, sondern beide in ein "Teilarray erzeugen" schieben könne. Diese am Ende mit einem "Built Array" ja zu einem 2D Array zusammenfügen kann. jau, mach 2 Schieberegister um deine Daten zwischenzuspeichern und füge die beiden 1D Arrays erst zusammen, wenn du sie anzeigen möchtest. Man kann zwar so ein Schieberegister auch in 2D aufbauen, das wird aber unter Umständen deutlich komplizierter. QUOTE(Gunni1979 @ 26. Feb 2007, 11:02) [snapback]115[/snapback] Ich galube du splittest es um im nächsten Graph-Bild einen Teil des vorigen Bildes mit anzuzeigen. Dadurch glaubt man nicht neue Messungen vorliegen zu haben sondern, das diese zusammen gehören. jau, genau dieses. Der Sinn der Sache ist, dass man in der While-Schleife, die die Daten abholt nicht nur das gerade abgeholte Paket visualisieren kann, sondern eine größere Portion (eben den Gesamten Ringspeicher) Beispiel: du holst mit deiner While-Schleife alle 100 Millisekunden 200 Werte von deinem Messgerät ab (wie du nun im Detail geschickt werden ist erstmal egal). Wenn du nun insgesamt einen zeitlichen Verlauf von - sagen wir mal 2 Sekunden - in deinem Graphen darstellen willst, dann musst du die letzten 19 Pakete irgendwo "puffern". Da du ingesamt 20 Häppchen á 200 Messwerten zwischenspeichern willst, brauchst du einen Ringspeicher, der 4000 Samples speichern kann. Genau dies geschieht in dem Ringspeicher, in dem immer wieder die ältesten Werte überschrieben werden. Am Ende wird das Ringspeicher-Array an der "Einfügemarke" aufgeteilt und die älterenn Werte werden für die Anzeige vor die neueren gesetzt Was heist das nun für deine D-Arbeit: du hast eine Sample-Rate von 100 kHz und möchtest ein Sin-Signal von z.B. 5 kHz verarbeiten, dabei sollen immer z.B. 10 volle Sinus-Wellen in deinem Graphen dargestellt werden: 100 kHz / 5 kHz = 20 -> eine Sinus Welle wird mit 20 Samples abgetastet 10 Sinus-Signale möchtest du darstellen => 20 * 10 = 200 => dein Ringspeicher muss 200 Werte puffern um 10 "Sinus-Wellen" darzustellen ... -------------------- künstliche Intelligenz ist besser als natürliche Dummheit!
rotabench:rotierende Prüfstände nach dem Baukasten-Prinzip |
|
|
Lo-Fi Version | Time is now: 20.05.2024 - 00:58 |