Ich möchte mit einem Präprozessor eine Art der Datenrekonstruktion für
fehlerhaft gesendete Daten realisieren, um angeschlossenen Endgeräten
eine Rekonstruktion bzw. ein Ausblenden zu ersparen, sodass diese ihre
einfach Filtersoftware nutzen können. Bei den meisten Endgeräten ist es
nicht möglich, die Daten als falsch zu markieren und sie besitzen ausser
dem Filter keine Erkennung.
Die Datenaussetzer kommen von defekten Messtellen / Leitungen der
erzeugenden Einheit die produktionsbedingt vorliegen und interpoliert
werden. Das Problem ist, dass man nicht einfach garnichts senden kann,
sondern dem nachfolgenden System einen Wert geben muss, weil dieser
permanent taktet und es in die Filterkette läuft.
Das bisherige Verfahren war, einfach den alten Wert zu halten, bis ein
gültiger neuer kommt, was bei schnell ändernden Daten und aufeinander
folgenden Fehldaten zu ziemlichen Sprüngen führt.
Als Beispiel sei eine Rampe und ein Rechteck gezeigt:
REAL 1 2 3 4 5 6 7 8 (Physik)
DATA 1 2 3 x x 6 7 8 (gelesen)
REKO 1 2 3 3 3 6 7 8 (gesendet)
Das Ergebnis der Rampe führt zu einem Sprung und einem schwingenden
Filter, weil die Verbraucher die "3,6" sehen und falsch und stark
überschwingen. Bei dem Rechteck wiederum kommt es zu einer künstlichen
Kante:
REAL 1 1 1 1 9 9 9 9
DATA 1 1 1 1 x x 9 9
REKO 1 1 1 1 1 1 9 9
Ich würde das gerne interpolieren und dabei Kanten erhalten, wenn
möglich.
Wie könnte man das lösen?
Ich habe die Möglichkeit, bis zu 4 Daten zu puffern und zu betrachten,
bevor ich ausgeben muss. Damit könnte man eine Zeile mit 9 Daten in
einen Digitalfilter schieben. Der muss aber mit wenigen steps
entscheiden, was ausgegeben wird. Ich bräuchte so eine Art "analogen
Mehrheitsentscheider" der Löcher stopfen kann und dabei die Steigungen
berücksichtigen kann.
Kennt dazu jemand Literatur?
Ich brauche eine Umsetzung für einen FPGA, weil die Daten mit 80 MHz
kommen und das auf 7 Leitungen.
Das erste was mir einfällt, ist eine Art "Filter" der sich einfach die
Daten anschaut und sie nach gewissen Regeln ersetzt.
Z.B. Deine "Rampe" - wobei vorausgesetzt wird, dass dieser spezielle
Sensor immer nur Rampen sendet.
REAL 1 2 3 4 5 6 7 8 (Physik)
DATA 1 2 3 x x 6 7 8 (gelesen)
REKO 1 2 3 4 5 6 7 8 (gesendet)
Einfach lineare Interpolation.
In dem Rechteckfall ähnlich, wobei Du nur herausfinden musst, was das
geringere Übel ist resp. die optimale Position für die "gefakte" Flanke
und wie oben immer vorausgesetzt wird, dass dieser Sensor immer
Rechtecke sendet
Schwieriger wird es wenn auf einer Leitung mehrere grundverschiedene
Signale, also mal ein Sinus und mal ein Rechteck kommen.
Mann müsste mal mehr über das System und die Sensoren wissen - bzw. Du
müsstest einfach mal für Dich Material zusammenstellen.
Berndt Eggebrecht schrieb:> weil die Daten mit 80 MHz kommen und das auf 7 Leitungen.
Ist das 1 einziger 7-Bit Vektor?
> Das bisherige Verfahren war, einfach den alten Wert zu halten, bis ein> gültiger neuer kommt,
Du hast also eine Information, ob der Vektor "gültig" ist?
> Ich habe die Möglichkeit, bis zu 4 Daten zu puffern und zu betrachten,> bevor ich ausgeben muss.
Du kannst dir also 4 Takte Latency erlauben? Dann sieht das irgendwie
nach (linearer) Interpolation aus.
Aaaaber:
Wieviele "Daten" sind hintereinander maximal ungültig?
Bei mehr als 3 wird kritisch, denn "in die Zukunft sehen" geht nur bei
periodischen Signalen...
Zwei grundlegende Fragen:
Warum ist das Signal gestört?
Und warum reagiert der Regler so bissig darauf?
Leider kann da allesmögliche kommen. Die Rampen sind nur Beispiele von
dem, was theoretisch übertragen werden kann.
Die Sensorik liefert durchaus auch welliges und rauscht. Das Rauschen
wird später bekämpft, nur muss dazu einigermassen sinnvoll interpoliert
werden.
Man könnte jetzt Fallunterscheidungen machen, aber da kommen viele
Kombinationen zusammen.
Was vielleicht noch erwähnt werden kann, ist, dass es ein Zeitverhalten
gibt. Die Sensorik liefert ein leicht zeitversetztes Signal derselben
Situation. Aufgrund von Relaxationsverhalten sind vormals gestörte
Leitungen dann wieder i.O.
Es entsteht damit ein 2D-Datenfeld, in dem einzelne Datenpunkte fehlen,
teilweise Linien in der Zeitachse fehlen.
Man könnte mit etwas Geschick die Folgewerte nutzen, um Informationen zu
gewinnen - z.B. so:
3 3 3 3 x x x 7 7 7
4 4 4 4 4 x x 8 8 8
5 5 5 5 5 5 5 9 9 9
Man kann nun annehmen, dass der Sprung in der ersten Zeile durchaus kurz
vor der 7 war - im einem anderen Fall könnte es auch kurz nach der
letzten 3.
Lothar M. schrieb:> Ist das 1 einziger 7-Bit Vektor?
Nein es sind 7 vollkommen unabhängige Daten. Ich brauche die Schaltung
also 7mal. Die Daten haben praktisch nichts miteinander zu tun. Die
Bitbreite sind 18 Bit vom ADC.
Der letztere Fall (Kante) ist ohne zusätzliche Informationen meines
Erachtens nicht lösbar. Denn aus:
DATA 1 1 1 1 x x 9 9
könnte man rekonstruieren:
DATA 1 1 1 1 1 1 9 9 oder
DATA 1 1 1 1 1 9 9 9 oder
DATA 1 1 1 1 9 9 9 9
und man weiß nicht, welcher der drei Fälle tatsächlich vorgelegen hat.
Man könnte zwar zum Beispiel 1 1 1 1 3 6 9 9 daraus machen (siehe auch
unten), nur hat man dann eben auch keine saubere Kante mehr.
Allerdings mag es mit zusätzlicher Information anders aussehen. Wenn man
erwarten kann, dass ein Rechtecksignal mit einer bestimmten Frequenz
vorliegt, dann kann man berechnen wann die nächste Signalflanke erfolgen
müsste. Damit könnte man die Kante nachträglich an der Stelle wieder
"einbauen", wo sie hingehört.
Im Fall der Rampe wäre es so:
> DATA 1 2 3 x x 6 7 8 (gelesen)
6 minus 3 ergibt 3. 3 geteilt durch drei (drei Schritte von der 3 bis
zur 6) ergibt 1. Somit ist pro fehlendem Datenwert jeweils um diesen
berechneten Wert hochzuzählen, ausgehend vom letzten gültigen Datenwert.
Also linear interpoliert eben.
Berndt Eggebrecht schrieb:> Leider kann da allesmögliche kommen.
Äh ja. Das macht die Sache natürlich total viel einfacher. ;-)
Vielleicht für den Anfang mal linear interpolieren und sehen, wie weit
man damit kommt?
Die andere Möglichkeit wäre eine (lineare) Extrapolation. Du nimmst
die vorige Steigung und machst mit dieser weiter, bis wieder ein
gültiger Wert kommt.
Dumm wäre dann nur, wenn du dabei dann übers Ziel "hinausschießt"...
Und nach wie vor unklar ist mir, wie du die ungültigen 18-Bit-Werte
erkennst.
Berndt Eggebrecht schrieb:> Leider kann da allesmögliche kommen. Die Rampen sind nur Beispiele von> dem, was theoretisch übertragen werden kann.> Die Sensorik liefert durchaus auch welliges und rauscht. Das Rauschen> wird später bekämpft, nur muss dazu einigermassen sinnvoll interpoliert> werden.
Das macht die Sache schwierig. Gibt es überhaupt irgendein Modell des
Dings, an dem die Sensoren hängen?
> Man könnte jetzt Fallunterscheidungen machen, aber da kommen viele> Kombinationen zusammen.
Das könnte sein. Es gibt durchaus Situationen die sich nicht durch
einfache, geschlossene Beschreibungen modellieren lassen. In dem Fall
muss man eben ein komplexes Modell mit vielen Fallunterscheidungen
erstellen. (Ich erinnere mich an eine Erklärung aus der Graphentheorie,
die viele Einzelfälle nannte und meine Verwunderung darüber, wie denn
der arme Mensch festgestellt hat, dass er alle Fälle erfasst hat).
Danach kann man evtl. vereinfachen.
> Was vielleicht noch erwähnt werden kann, ist, dass es ein Zeitverhalten> gibt. Die Sensorik liefert ein leicht zeitversetztes Signal derselben> Situation. Aufgrund von Relaxationsverhalten sind vormals gestörte> Leitungen dann wieder i.O.>> Es entsteht damit ein 2D-Datenfeld, in dem einzelne Datenpunkte fehlen,> teilweise Linien in der Zeitachse fehlen.>> Man könnte mit etwas Geschick die Folgewerte nutzen, um Informationen zu> gewinnen - z.B. so:>>> 3 3 3 3 x x x 7 7 7> 4 4 4 4 4 x x 8 8 8> 5 5 5 5 5 5 5 9 9 9>> Man kann nun annehmen, dass der Sprung in der ersten Zeile durchaus kurz> vor der 7 war - im einem anderen Fall könnte es auch kurz nach der> letzten 3.
Nun, das ist - jedenfalls meiner Meinung nach - kein Problem das man mit
einem kurzen Tip aus dem Forum erschlagen kann. Es wird von Vorteil
sein, wenn Du uns eine recht detaillierte Beschreibung gibst; bis jetzt
beschränkt sich das ja auf eine numerisches Darstellung. Auch wenn Du
uns das hier nicht öffentlich machen willst, solltest Du Dir, wie ich
schon heute Nacht erwähnte, für Dich selbst eine vollständige Analyse
durchführen.
Literaturtips kann ich leider nicht geben. Die Suchworte sind Dir, wenn
ich das recht sehe, bekannt.
Mir geht die ganze Zeit Kalman durch den Kopf. Weiss nicht ob das
wirklich passt. Aber dafür brauchst Du jedenfalls ein Modell der Mimik
von der die Sensordaten abgenommen werden. "Dead Reckoning",
Interpolation, Filter sind durchaus passend, meine ich.
Schade, dass ich nicht viel helfen kann. Vielleicht fällt noch jemandem
was ein.
Viel Erfolg
Offen gesagt, würde ich vermutlich einige Energie darein stecken, die
Sensoren, die Verbindungen zu verbessern und/oder die Verarbeitung im
Empfänger, die wenigstens Ausfälle behandeln können sollte. Vermutlich
hast Du das aber schon probiert und/oder es geht aus irgendeinem Grund
nicht (sowas scheinst Du mir ja schon angedeutet zu haben).
Bayes habe ich ganz vergessen. Damit gehen auch Parameterschätzungen.
Aber wie gesagt: Meiner Meinung nach läuft ohne Modell gar nichts. Eben
auch der Leitungen und der Störungen darauf.
Klaus schrieb:> Offen gesagt, würde ich vermutlich einige Energie darein stecken, die> Sensoren, die Verbindungen zu verbessern und/oder die Verarbeitung im> Empfänger, die wenigstens Ausfälle behandeln können sollte.
Sehe ich auch so. Eine eventuell schlecht geschirmte Leitung sollte man
nicht durch Purzelbäume schlagen in der Software korrigieren.
Lothar M. schrieb:> Und nach wie vor unklar ist mir, wie du die ungültigen 18-Bit-Werte> erkennst.
Es gibt zwei Methoden: Einmal kommt aus einer Kalibrierung ein Wert der
sagt, ob die Leitungen übersteuert sind, ob sie defekt sind und ob daher
Unsinn kommt, und andermal muss ich das anhand von Datensprüngen selber
erkennen. Kriterien muss ich ausarbeiten.
Klaus schrieb:> Gibt es überhaupt irgendein Modell des> Dings, an dem die Sensoren hängen?
DA bin ich dran :-)
Klaus schrieb:> "Dead Reckoning",> Interpolation, Filter sind durchaus passend, meine ich.
Danke für das Stichwort. Das sehe ich nach.
Klaus schrieb:> Offen gesagt, würde ich vermutlich einige Energie darein stecken, die> Sensoren, die Verbindungen zu verbessern
Das haben wir nicht in der Hand. Kommt vom Zulieferer. Technologisch ist
das auch ziemlich ausgereift.
Klaus schrieb:> Bayes habe ich ganz vergessen. Damit gehen auch Parameterschätzungen.
Danke. Auch das werde ich nachsehen. Klingt super!
Berndt Eggebrecht schrieb:> Klaus schrieb:>> Offen gesagt, würde ich vermutlich einige Energie darein stecken, die>> Sensoren, die Verbindungen zu verbessern>> Das haben wir nicht in der Hand. Kommt vom Zulieferer. Technologisch ist> das auch ziemlich ausgereift.
Nun, offen gesagt, empfinde ich diese Aussage, in Verbindung mit dieser:
> Die Datenaussetzer kommen von defekten Messtellen / Leitungen ...
(aus Deinem ersten Posting)
als widersprüchlich; zumindest erklärungsbedürftig. Selbst wenn man
keine grundsätzlichen Defekte unterstellt, so würde ich von einem System
erwarten, dass es in sich auf Fehler vorbereitet ist wenn sie Problem
aufwerfen und Du nicht vor solchen Aufgaben stehst.
Es würde mich doch ein wenig interessieren, wie sich diese beiden
Aussagen miteinander vereinbaren lassen.
Wie auch immer: Viel Erfolg.
Es handelt sich um eine Art Detektor. Dieser ist technologisch bedingt
nicht perfekt. Es gibt sowohl Sensitivitäts- als auch
Halbleiterartefakte. Da die Wafer sehr gross sind, ist es praktisch
nicht möglich, perfekte Sensorik zu betreiben. Dies ist deshalb auch
nicht nötig, weil es auch "Überbelichtung" = "sparking" gibt, die Daten
dynamisch runinieren.
Die Kriterieren, wann ein Datum ok ist, werdne letztlich feststehen,
sodass ich in meinem Teil nur die Info bekomme: "Datum ok" / "Datum
kaputt". Dann soll es interpoliert / rekonstruiert werden.
Inbegriffen ist auch noch eine weitere Funktion, nämlich ein
Zwischenspeicher mit Resampler für Emfänger, die auch anderen Frequenzen
laufen.
Ich brauche jetzt einfach die Datenrekonstruktion. Einen Resampler habe
ich schon.
Eine wirkliche Datenrekonstruktion kann es nur geben, wenn es andere
Kriterien gibt, nach denen man ein Filter erstellen kann, z.b. die
Information, wie schnell sich ein Datum ändern kann. Das wirkt dann auf
die Grenzfrequenz des Filters. Letztlich wird es ein
Interpolationsfilter sein müssen, bzw. mehrere mit verschiedenen
Annahmen.
Unklar ist, wie in Deinem Fall die zeitliche Komponente ist Spiel kommt.
So wie ich das lese, müsste sich der reale Verlauf eines Datensignals in
der einen Zeit dadurch rekonstruieren lassen, indem man das Verhältnis
zu seinen Nachbarpunkten in der anderen Zeit betrachtet. Sowas läuft auf
eine 2D-Wellenfeld-Interpolation hinaus. Dazu muss man aber mehrere
Zeiten speichern. Ist das eine Art Zeilensensor?
Letztlich ist das alles immer eine Kaffesatzleserei. Wichtig ist, dass
der neue Wert nicht auffällt. Dabei ist vor allem das Verhalten das
nachfolgenden Systems wichtig. Je toleranter dies gegenüber schnellen
Änderungen ist, desto konservativer muss man filtern.
Wenn du das Grundlegende Problem nicht besetigen kannst bleibt dir nur
noch übrig das Signal so zu verändern(filtern), daß das nachfolgende
System nicht ins schwingen kommt. Die Sensoren werden ja wohl ein
zeitliches Verhalten haben! Also wie kann es sein, daß da so steile
flanken in einem korrektem Signal vorkommen. Man könnte mit höherer
Frequenz abtasten und Sensorwerte, die eigentlich Physikalisch nicht
möglich sind rauswerfen(bzw. interpolieren).
Zeig doch mal einen echten Signal Stream. Am besten vom Oszilloskop.