(solved) Qwt Plot neue Daten

Alles rund um die Programmierung mit Qt
Antworten
akirahinoshiro
Beiträge: 17
Registriert: 22. Mai 2012 20:17

(solved) Qwt Plot neue Daten

Beitrag von akirahinoshiro »

Hallo,

Ich habe einen surface plot erstellt, alles funktioniert, bis ich in einem anderen thread neue Daten erstelle.
Danach sieht der plot komisch aus, ein frischer plot mit den selben Eingaben funktioniert problemlos, wie kann ich die Daten erst löschen und dann neu schreiben, wie in einem neuen Plot?

Danke
Zuletzt geändert von akirahinoshiro am 1. August 2012 20:09, insgesamt 1-mal geändert.
Uwe
Beiträge: 176
Registriert: 9. Oktober 2005 13:37
Wohnort: München

Re: Qwt Plot neue Daten

Beitrag von Uwe »

Wenn Du die Daten hinter dem Rücken des Spektogram Items veränderst mußt Du dessen internen Cache löschen:

Code: Alles auswählen

spectrogram->invalidateCache();
Das verhindert aber nur das Du ein altes Bild angezeigt wird - da Du aber etwas von "komisch" schreibst nehme ich mal an, dass Du Deine Threads nicht coordiniert hast und Daten Aktualisierung und Bilderzeugung ins Gehege kommen. Aber letztendlich ist "komisch" keine Beschreibung bei der Du zwingend eine passende Antwort erwarten kannst.

Wenn Speicherplatz kein Thema ist würde ich Dir empfehlen jeweils ein neues QwtRasterData Object zu erzeugen und zuzuweisen. So passiert alles vollautomatisch und Du mußt Dich um diese Theme ( s.o. ) nicht kümmern.

Uwe
akirahinoshiro
Beiträge: 17
Registriert: 22. Mai 2012 20:17

Re: Qwt Plot neue Daten

Beitrag von akirahinoshiro »

Das mit dem invalidateCache hatte ich auch probiert, ändert allerdings nichts.
Vielleicht etwas genauer, im Tab eins gebe ich Werte an, welche ein Array errechnen, dies wird an den Plot übergeben.
Dort werden aus den Stützstellen Zwischenwerte interpoliert und in die Data geschrieben.
Beim ersten mal funktioniert es immer.
Ändere ich hinterher die Werte und übergebe ein neues Array mit Stützstellen an die Interpolation, sind manche Zeilen mit alten Werten, welche demenstsprechend sehr merkwürdig aussehen.
Das neue Maximun stimmt, allerdings sind die Contoulines sehr zackig.

Das mit dem Thread probier ich mal.
akirahinoshiro
Beiträge: 17
Registriert: 22. Mai 2012 20:17

Re: Qwt Plot neue Daten

Beitrag von akirahinoshiro »

Hi,

Leider hat das deaktivieren von threads nichts gebracht.
Ich muss also irgendeinen anderen dummen Fehler gemacht haben.
Das mit dem neuen Object probier ich später mal.
Uwe
Beiträge: 176
Registriert: 9. Oktober 2005 13:37
Wohnort: München

Re: Qwt Plot neue Daten

Beitrag von Uwe »

akirahinoshiro hat geschrieben:Vielleicht etwas genauer, im Tab eins gebe ich Werte an, welche ein Array errechnen, dies wird an den Plot übergeben.
Dort werden aus den Stützstellen Zwischenwerte interpoliert und in die Data geschrieben.
In etwa so wie es QwtMatrixRasterData macht - allerdings erfolgt dort die Interpolation erst beim Generieren des Bildes in Abhängigkeit von der Zielbildauflösung.

Falls Deine Interpolation ohnehin nur Nearest Neighbour macht übergieb Dein Ausgangsarray lieber so wie es ist an ein QwtMatrixRasterData Objekt oder interpoliere innerhalb von YourRasterData::value(). Vorab zu interpolieren macht eigentlich nur Sinn wenn Du einen teuren Algorithmus verwendest, den aus Performance Gründen einmal vorab machen willst. Bei der Bildkomposition muß dann ohnehin noch einmal bzgl der Bildauflösung interpoliert werden.
Beim ersten mal funktioniert es immer. Ändere ich hinterher die Werte und übergebe ein neues Array mit Stützstellen an die Interpolation, sind manche Zeilen mit alten Werten, welche demenstsprechend sehr merkwürdig aussehen.
Wenn ich Dich recht verstanden habe läuft die Interpolation in Deinem Code - da kann außer Dir niemand viel Sinnvolles dazu sagen.

Wenn ich mal Zeit habe möchte ich mal einen anderen Contour Algorithmus implementieren, der geschlossene Polygone anstelle von zusammenhanglosen Linien produziert. Damit hättest man bessere Chancen Labels zu platzieren und bei Farbtabellen ohne Gradienten könnte man das Spectrogram viel schneller zeichnen ohne eine Rastergrafik jeweils aufwändig zusammen pixeln zu müssen.

Uwe
akirahinoshiro
Beiträge: 17
Registriert: 22. Mai 2012 20:17

Re: Qwt Plot neue Daten

Beitrag von akirahinoshiro »

Haja genau genommen, mache ich auch nichts anderes als die Zwischenwerte in Dreiecksflächen zu zerlegen.
Innerhalb der SpectrogramData wird Abhängig von x und y ein Rechteck zerlegt liegt x und y oberhalb der Linie von meinem Ausganspunkt x0,y0 und x1,y1 dann wird das obere Dreieck benutzt, ansonstens das untere.
Ich habe also 3 Stützstellen im 3D Raum
x0,y0,
x0,y1, bzw. x1,y0
x1,y1
Daraus kann man sich eine Fläche erstellen und z(x,y) berechnen, klingt simpel reicht aber vollkommen aus bei hinreichend vielen Stützstellen.
An der Stelle liegt auch der Fehler nicht, wie gesagt beim ersten mal zeichnen stimmt alles, nur beim ändern er Stützstellen, also hab ich Mist beim plot an sich gemacht.
Ich habe mich recht stark an das Beispiel gehalten und (fast) nur die Datengenerierung geändert.
Uwe
Beiträge: 176
Registriert: 9. Oktober 2005 13:37
Wohnort: München

Re: Qwt Plot neue Daten

Beitrag von Uwe »

akirahinoshiro hat geschrieben:Daraus kann man sich eine Fläche erstellen und z(x,y) berechnen, klingt simpel reicht aber vollkommen aus bei hinreichend vielen Stützstellen.
Hat der Algorithmus einen Namen und kommt da was großartig anderes raus als bei Nearest Neighbour ? Wenn ja ist der Algorithmus signifikant schneller als bilineares Interpolieren ?

Ergänze doch bitte mal die Implementierung von QwtMatrixRasterData um einen weiteren Resample Modus, und bau Deine Interpolation ein. Wie ist das Ergebnis, wenn Du das mit dem rasterview Beispiel ( auch mit einer größeren Datenmatrix ) testest ?
( Das hilft Dir bei Deinem Problem natürlich gar nicht weiter aber eine Interpolation die bzgl. Performance und Qualität einen Kompromiss zwischen den bereits existierenden Modi anbietet würde mich interessieren. )

Wenn Du ganz große Lust hast wäre eine Implementierung für eine bikubische Interpolation auch sehr willkommen. Die wollte ich schon immer mal einbauen - ist aber recht weit hinten auf meiner Liste.
akirahinoshiro hat geschrieben: An der Stelle liegt auch der Fehler nicht, wie gesagt beim ersten mal zeichnen stimmt alles, nur beim ändern er Stützstellen, also hab ich Mist beim plot an sich gemacht. Ich habe mich recht stark an das Beispiel gehalten und (fast) nur die Datengenerierung geändert.
Wenn Du das Problem in einer einfachen Single Thread Anwendung nachstellen kannst, kann ich mir den Code ja mal anschauen.

Uwe
akirahinoshiro
Beiträge: 17
Registriert: 22. Mai 2012 20:17

Re: Qwt Plot neue Daten

Beitrag von akirahinoshiro »

Haja,

Es kommt schon ein sehr verschiedenes Ergebnis im Vergleich zum Nearest Neighbour raus.
Da ich Ingenieur bin, bin ich nicht ganz konform mit allen möglichen Lösungen und das erschien mir eine einfache Lösung, ich teste das ganze mal aus und gucke ob mein Algorithmus schneller oder zumindest gleich schnell dazu ist (nicht mehr Heute).
Bzw. ich gehe die Laufzeit der Bilinearen Filterung durch und vergleiche die mit meiner.

Das rasterview werde ich bald mal testen.
Ich stehe ein wenig unter Zeitdruck, daher müsste ich das ganze in 2 Wochen am laufen haben und momentan sieht es einfach scheisse aus, wenn man jedesmal das Programm beenden muss.
akirahinoshiro
Beiträge: 17
Registriert: 22. Mai 2012 20:17

Re: Qwt Plot neue Daten

Beitrag von akirahinoshiro »

Ich bin einfach zu blöd.
Im Anhang ein Beispiel.
Wie kriege ich es hin im zweiten Tab nichts bevor ein Ergebnis vorliegt und ansonsten immer wieder erneuert wird nach einem Signal mit den aktuellen Daten?

Sorry für die Dateiendung unsere IT auf Arbeit hat in ihrer unglaublichen Weisheit zip Dateien gesperrt.
Dateianhänge
surface.zip.txt
(4.32 KiB) 195-mal heruntergeladen
Uwe
Beiträge: 176
Registriert: 9. Oktober 2005 13:37
Wohnort: München

Re: Qwt Plot neue Daten

Beitrag von Uwe »

Wenn man auf tab2 klickt stürzt das Programm ab weil auf ein leeres Array ( A ) zugegriffen wird. Also ein bisschen näher an Deiner Problembeschreibung sollte das Beispiel dann schon sein.

Uwe
akirahinoshiro
Beiträge: 17
Registriert: 22. Mai 2012 20:17

Re: Qwt Plot neue Daten

Beitrag von akirahinoshiro »

Okay ich krieg es bei einer reimplementierung nicht hin den Fehler zu reproduzieren.
Also wird der Fehler wohl an einer anderen Stelle sein, ich werd wohl noch mal alles debuggen müssen.
Wegen dem Algorithmus schau ich wenn ich mehr Zeit hab, kann allerdings nur die Mathematik dahinter posten, da ich keine Rechte an dem Quellcode habe.
akirahinoshiro
Beiträge: 17
Registriert: 22. Mai 2012 20:17

Re: Qwt Plot neue Daten

Beitrag von akirahinoshiro »

Okay,

Asche über mein Haupt, das nach implementieren und versuchen den Fehler zu reproduzieren hat mich zur Lösung gebracht.
Es war kein qwt Problem, ich hab schlicht vergessen zwischen den Eingaben meine std::vector zu leeren.
Zumindest nicht alle. Klar das dabei nur Grütze rauskommt und die Werte "komisch" aussehen.
Es tut mir leid nach mehreren Monaten hab ich wohl diese "Kleinigkeit" übersehen.
Antworten