-
Gebiet der Erfindung
-
Diese Erfindung bezieht sich allgemein
auf das Gebiet von Filtern und ist nützlich im Bereich des digitalen
Filterns von Signalen.
-
Hintergrund
der Erfindung
-
Gegenwärtige Signalverarbeitungssysteme verwenden
zur Verbesserung der Signaltreue oft Filter, um unerwünschte Informationen
aus Signalen zu entfernen. In digitalen Signalverarbeitungsschemata ist
es oft wünschenswert,
zur Verarbeitung der Signale einen Medianfilter anzuwenden. Medianfilter
sind nichtlineare Filter, die zur Erzielung dramatischer Ergebnisse
bei diversen subtraktiven Syntheseanwendungen benutzt werden, wie
etwa bei Video-, Sprach-, allgemeinen Akustik-, Radar- und anderen Signalverarbeitungsanwendungen.
-
Insbesondere kann ein Medianfilter
eingesetzt werden, um das Signal/Rausch-Verhältnis bei Anwendungen zur Überwachung
und Steuerung der internen Leistung von Verbrennungsmotoren signifikant
zu verbessern. Eine derartige Anwendung ist die Bestimmung von Fehlzündungen.
Bei dieser Anwendung wird die Verbrennungsleistung eines Motors überwacht,
indem beispielsweise die Beschleunigung der Kurbelwelle des Motors
mittels eines Beschleunigungsmessers beobachtet wird. In einer Idealsituation,
wenn in einem unter Beobachtung stehenden Zylinder des Motors eine
Fehlzündung
auftritt (das dem Zylinder zugeführte
Luft-Brennstoff-Gemisch verbrennt nicht vollständig), tendiert die Kurbelwelle
des Motors zu einer Verlangsamung anstatt zu beschleunigen, wie
erwartet. Wird diese Verlangsamung von einem Fehlzündungs-Erkennungssystem
beobachtet, kann eine Fehlzündung
angezeigt werden.
-
Bei einer typischen Anwendung gibt
es jedoch viele Rauschquellen, die den Beobachtungsprozess kontaminieren.
Zum einen kann, da der Motor mechanisch mit einer Kraftübertragung
gekoppelt ist, die ihrerseits mit einer Antriebswelle und einer Räderanordnung
gekoppelt ist, wenn das von dem Motor angetriebene Fahrzeug fährt, eine
Bodenwelle in der Straßenoberfläche eine
verzögernde
Störung der
Räderanordnung
verursachen. Über
den oben beschriebenen Koppelmechanismus kann die Störung zur
Kurbelwelle des Motors rückgekoppelt
werden – und
somit zu dem Beschleunigungsmesser. Irgendeine Art der Verbesserung
der Signaltreue ist notwendig, um diese Rauschquelle zu eliminieren, und
eine fälschliche
Fehlzündungsanzeige
zu verhindern. Da diese Rauschquelle ein Signal verursacht, das
bei einer charakteristisch sehr niedrigen Frequenz erzeugt wird, könnte der
Signalverarbeitungsmechanismus einen traditionellen, digitalen Hochpassfilter
verwenden, um diese Störung
auszufiltern. Praktisch würde
dies einen digitalen Filter sehr hoher Ordnung erfordern, da das
aufgrund des Fehlzündungsverhaltens
von dem Beschleunigungsmesser erzeugte Signalspektrum demjenigen
Signalspektrum, das sich auf das, von der Straßenoberfläche induzierte Signal be- zieht,
eng benachbart ist.
-
Ein Medianfilter passt gut in diesen
Typ von Anwendungen, um von der Straßenoberfläche induzierte Signale aus
dem Spektrum zu entfernen, welches von dem Beschleunigungsmesser
in Bezug auf die Fehlzündung
erzeugt wird. Der Medianfilter erzielt mit einer Struktur relativ
niedriger Ordnung ein ähnliches
Ergebnis wie ein digitaler Hochpassfilter sehr hoher Ordnung.
-
Medianfilter für digitale oder gesampelte
Daten arbeiten mit einer Datensampleliste fester Länge. Der
Medianfilter bestimmt, welches in der Liste fester Länge vorhandene
Sample einen arithmetischen Medianwert in der Liste repräsentiert.
Manche Medianfilter nach dem Stand der Technik verwenden ein speicherintensives
Schema zur Bestimmung des Medianwertes in der Liste von Datensamples.
Beispielsweise wird eine Liste, sobald sie mit Daten gefüllt ist, in
eine arithmetisch geordnete Liste sortiert, und das in der Mitte
der Liste positionierte Datensample wird zum Medianergebnis. Durch
Subtraktion des Medianergebnisses von dem zeitlich geordneten Datensample,
das in der Mitte der zeitlich geordneten Liste positioniert ist,
kann ein mediangefiltertes Datensample erzeugt werden. Dies kann
anhand eines Beispiels klarer dargestellt werden.
Tabelle
1
zeitlich
geordnete Datensamples | nach
Größe geordnete Datensamples |
135 | 130 |
130 | 131 |
137 | 135 |
138 | 137 |
131 | 138 |
140 | 140 |
143 | 143 |
148 | 143 |
143 | 148 |
-
In der obigen Tabelle 1 repräsentiert,
die linke Spalte eine Liste von zeitlich geordneten Datensamples.
Mit anderen Worten heißt
das, das Datensample in der obersten Reihe "135" ist das jüngste Datensample,
und das Datensample in der untersten Reihe "143", ist das älteste Datensample.
Diese Samples repräsentieren
die Beschleunigung einer Kurbelwelle eines Motors, die von einem
Beschleunigungsmesser abgeleitet wurde. Die rechte Spalte repräsentiert
eine Liste von nach Größe geordneten Datensamples.
Diese Samples sind gemäß Schemata
nach dem Stand der Technik geordnet, um den Medianwert aufzufinden.
Da die Länge
der Liste (oder Ordnung des Filters) ungerade ist, enthält die Zentralposition
der nach Größe geordneten
Liste das Median-Datensample – hier
"138". Der mediangefilterte Wert kann somit abgeleitet werden als
131–138 oder –7. Obwohl
dieser allgemeine Ansatz funktioniert, weist er verschiedene Probleme
auf. Zum einen erfordert er zumindest genug Speicher um zusätzlich zu
der zeitlich geordneten Liste von Datensamples, die nach Größe geordnete
Liste von Datensamples zu speichern. Für die Reduzierung zur Anwendung auf
einem integrierten Schaltkreis ist dies wegen des großen Bereiches
an Siliziumfläche,
der notwendig ist, um die zusätzlichen
Speichererfordernisse zu erfüllen,
besonders problematisch. Dieses Schema erfordert es auch, jedes
Datensample auf der Liste zu sortieren, bevor das Median-Datensample
zuverlässig
aufgefunden werden kann und ist daher zeitintensiv und erfordert
eine komplizierte Steuerschaltung.
-
Für
eine Liste, die N Datensamples umfasst, werden, um eine Sortierung
durchzuführen,
typischerweise N2/2 Speicherzugriffsoperationen
durchgeführt.
Diese Speicherzugriffsoperationen erfordern einen wesentlichen Teil
der Ausführungszeit:
Frühere Versuche
zur Reduzierung der Anzahl von Speicherzugriffen oder der Ausführungszeit
erfolgten unglücklicherweise
auf Kosten einer Hardwarekomplexität, die exponentiell mit N wächst.
-
Die US-A-4 928 258 offenbart einen
rekursiven Medianfilter für
digitale Bilddaten. Die US-A-4 928 258 beschreibt eine Auswahlvorrichtung
mit 3 Eingaben, 5 Eingaben und 7 Eingaben. Die Auswahlvorrichtung
ist keine zirkulare Liste. Die Eingaben in die verschiedenen Auswahlvorrichtungen
in der US-A-4 928 258 beziehen keine Auswahl ein, die sich auf ein
ausgehendes Datensample bezieht, das getrennt und verschieden ist
von einem aktuellen Median-Datensample. Die US-A-4 928 258 diskutiert
nicht die Eingabe der letzten Median-Pixeldaten, sondern dieses
wird nur in Verbindung mit mehreren eingehenden Pixeldateneingaben
eingegeben. Die in US-A-4 928 258 offenbarte Struktur führt eine
Selektion durch, die auf mehreren eingehenden Pixeldaten sowie den vorangehenden
Median-Pixeldaten beruht. Die Struktur aktualisiert nicht das aktuelle
Median-Datensample zu einem neuen Median-Datensample, abhängig lediglich
von den Größen des eingehenden
Datensamples, des aktuellen Median-Datensamples und des ausgehenden Datensamples.
-
Die EP-A-O 257 843 offenbart 3 Rückkopplungs-Schieberegister,
die alle gleichzeitig ein eingehendes Datensample empfangen. Die
EP-A-O 257 843 offenbart weiter die Eingabe eines eingehenden Datensamples
in verschiedene logische Positionen (Zellen/Stufen) jedes Schieberegisters.
Die Ausgaben der 3 Schieberegister werden kombiniert, um ein "Median-Datensample"
zu liefern. Die EP-A-O 257 843 zeigt eine Zusammenstellung von 3
Schieberegistern mit 3 ausgehenden Datensamples (die rechteste Zellposition
jedes der 3 Schieberegister), die verbunden werden, um ein Median-Datensample
zu erzeugen. Es wird nicht offenbart, eine zirkulare Liste von N
Datensamples oder eine zirkulare Liste bereitzustellen; die N Datensamples
enthält.
-
Die EP-A-O 257 843 zeigt weiter einen
Mechanismus, der ein zuletzt geladenes Eingangs-Datensample durch
ein neues Eingangs-Datensample ersetzt. Die EP-A-O 257 843 offenbart
keine zirkulare Liste, die ein Eingangs-Datensample enthält, das
ein Ausgangsdatensample ersetzt.
-
Die EP-A 0 257 843 offenbart weiter
nicht die Aktualisierung des Median-Datensamples in Abhängigkeit
lediglich von den Größen des
Eingangs-Datensamples, des aktuellen Datensamples und des Ausgangs-Datensamples.
-
Die US-A-5 144 568 offenbart einen
Komparator, der einen gespeicherten Datenpunkt mit allen anderen
gespeicherten Datenpunkten vergleicht. Jeder Datenpunkt in dem Array
wird mit jedem anderen Datenpunkt im Array verglichen.
-
Die US-A-S 144 568 offenbart nicht,
ein aktuelles Median-Datensample
mit einem neuen Median-Datensample zu aktualisieren in Abhängigkeit
lediglich von den Größen des
Eingangs-Datensamples, des aktuellen Median-Datensamples und des Ausgangs-Datensamples.
-
Was benötigt wird, sind ein Verfahren
und ein Filter zur verbesserten Mediansuche mit limitierten Iterationen,
so dass sie effektiv auf einem integrierten Schaltkreis hergestellt
oder als Verfahren effizient ausgeführt werden können.
-
Die vorliegende Erfindung stellt
ein iterationseffizientes Verfahren zur Medianbestimmung gem. Anspruch
1 zur Verfügung.
-
Kurze Beschreibung
der Zeichnungen
-
. 1 ist
ein Blockdiagramm gemäß einem bevorzugten
Ausführungsbeispiel
der Erfindung;
-
2 ist
ein vereinfachtes Flussdiagramm, das das bevorzugte Verfahren illustriert;
-
3 illustriert
Details des in 2 eingeführten Schritts
205 in tabellarischem Format;
-
4A, 4B, und 4C sind
Flussdiagramme, die weitere Details der bevorzugten, in 2 eingeführten Verfahrensschritte zeigen;
und
-
5 ist
ein Flussdiagramm, das gem. einem anderen Ausführungsbeispiel eine Ausführungsform
mit 2N-fachem Speicherzugriff darstellt.
-
Beschreibung
einer bevorzugten Ausführungsform
-
Ein zeiteffizientes Verfahren und
ein Filter zur Mediansuche durchsuchen eine sich dynamisch verändernde,
zeitlich geordnete Liste von Datensamples nach einem Datensample,
das den arithmetischen Median der Liste repräsentiert. Ein nächster Median
wird von einem von verschiedenen Aus- führungsbeispielen bestimmt.
-
Ein wesentlicher Gesichtspunkt des
beschriebenen An-satzes
ist, dass ein eingehendes Datensample veranlasst, dass das aktuelle
Median-Datensample entweder dasselbe bleibt oder eine Größe eines
arithmetisch nächstliegenden
(numerisch benachbarten) Datensamples entweder ansteigender oder
abfallender Größe annimmt.
Ob das nächste Median-Datensample in seiner
Größe ansteigt
oder abfällt,
hängt von
den anderen Datensamples in der Liste ab. Unter dieser Annahme gibt
es mehrere verschiedene Ausführungsformen,
die zu einer wesentlichen Reduzierung von Speicherzugriffen führen, die.
zum Auffinden eines Medianwertes verwendet werden. Wie im Kapitel
"Hintergrund der Erfindung" erwähnt,
erfordern Systeme nach dem Stand der Technik N2/2
Speicherzugriffe, um einen Medianwert in einem-Satz oder einer Liste
von Werten zu ermitteln, wobei N der Rang oder die Menge von Einträgen in der
Liste ist. Die Anzahl von Speicherzugriffsoperationen wird in vielen
Systemen sehr bedeutend, da der Rang des Filters, N, ziemlich groß sein kann – was Schemata
nach dem Stand der Technik, die N2/2 Speicherzugriffe
verwenden, um einen Median zu ermitteln, höchst ineffizient macht. Die
bevorzugten Ausführungsbeispiele
sollen nach einer Einführung von 1 beschrieben wer den, die
zur Illustration des Verfahrens und des Filters ein System zur Detektion
von Motorfehlzündungen
verwendet. Man beachte, dass, wie im Kapitel "Hintergrund der Erfindung"
erwähnt,
die Mediansuchtechniken und Medianfilter auch bei anderen Anwendungen
gewinnbringend eingesetzt werden können, wie etwa im Bereich Video,
Sprache, allgemeine Akustik und Radar. Die hier beschriebenen Verbesserungen
können
bei diesen und anderen Anwendungen genutzt werden.
-
1 ist
ein Systemdiagramm, das einen Gesamtansatz zur Anwendung eines Medianfilters
in einem Fehlzündungs-Erkennungssystem
illustriert. Eine Kurbelwelle eines Motors treibt ein Codierungsrad 101 an,
das Markierungen aufweist, die radial daran verteilt sind. Ein Geschwindigkeitsmesser 103 erfasst
die Rotation des Codierungsrades 101 und gibt ein Signal 105 aus,
das eine Beschleunigung des Codierungsrades 101 anzeigt.
Dieses Signal 105 wird in ein Signalverarbeitungssystem 107 eingekoppelt. Dieses
Signalverarbeitungssystem 107 digitalisiert das Signal 105 und
liefert eine diskrete, zeitlich gesampelte Repräsentation des Beschleunigungsverhaltens
des Codierungsrades 101. Diese diskreten Zeitdatensamples
werden an eine Speichervorrichtung 109 geliefert, die vorzugsweise
als eine Liste in Form einer zirkularen Warteschlange der Länge N aufgebaut
ist. Wenn das Codierungsrad 101 rotiert, wird jeder neue
Datensampleeintrag in der Speichervorrichtung 109 gespeichert,
indem der älteste
Datensampleeintrag überschrieben
wird. Zum Beispiel zeigt in 1 das
Bezugszeichen 111 dasjüngste Datensample,
das den Wert 135 hat, und ein ältestes Datensample 113,
das den Wert 143 hat. Sobald ein nächstes Datensample erhältlich wird – hier mit
einem wert von 98 und dem Bezugszeichen 121 – wird das älteste Datensample
113 überschrieben
und durch das jüngste
Datensample (98) ersetzt. Ein Sortiermechanismus 117 mit
einer sehr viel höheren Rate
als der, mit welcher sich die Datensamples ändern, wird verwendet, um in
der als zirkulare Warteschlange 109 repräsentierten
Liste das Median-Datensample aufzufinden. Dieser kontinuierlich
sortierte Medianwert 119 – hier das Datensample mit
dem Wert 138 – wird
dann verwendet, um ein mediangefiltertes Datensample zu erzeugen.
Diese Filterung erfolgt durch Subtraktion des kontinuierlich sortierten Medianwertes 119 von
einem zeitlich zentrierten Datensample aus der Warteschlange. Das
Ergebnis wird einer Fehlzündungs-Erkennungsvorrichtung 115 präsentiert,
die dieses kontinuierlich gefilterte Median-Datensample verwendet,
um. das Fehlzündungsverhalten
des Motors zu bestimmen. Vorzugsweise umfasst die Fehlzündungs-Erkennungsvorrichtung 115 eine
Vergleichsschaltung, um eine Fehlzündungsanzeige zu liefern, wenn
das mediangefilterte Datensample der Datensamples in der Warteschlange
eine Fehlzündungsschwelle überschreitet.
Die Fehlzündungsschwelle
ist vorzugsweise programmierbar und in der Fehlzündungs-Erkennungsvorrichtung 115 gespeichert.
-
Nachdem nun das Blockdiagramm des
Systems beschrieben ist, sollen Details des verbesserten Verfahrens
und Filters beschrieben werden.
-
Bei einer Ausführungsform, welche die Anzahl
von Speicherzugriffen, die zur, Ermittlung eines Medianwertes erforderlich
sind, von N2/2 auf 2 N reduziert, wird der
nächste
Median aufgefunden, indem für
jedes neu eingehende Datensample bestimmt wird, ob das nächste Datensample
dasselbe bleibt wie das aktuelle Median-Datensample oder ob seine Größe in die
desjenigen Datensamples geändert wird,
das nu merisch nächstbenachbart
ist, entweder in der Größe ansteigend
oder abfallend. Dieses Verfahren basiert auf der Tat- sache, dass
bei jedem neu eingehenden Datensample der nächste Median nur eine von 3 Möglichkeiten
hat: Er bleibt der gleiche wie der aktuelle median, er erhöht seine
Größe auf den nächstgrößeren Datensamplewert
relativ zu der Größe des aktuellen
Medians oder er verringert seine Größe auf den nächstkleineren
Datensamplewert relativ zu der Größe des aktuellen Medians.
-
Zunächst wird mit dem aktuellen
median ein Test durchgeführt,
um zu bestimmen, ob er der nächste
median werden wird. Der Test besteht darin, dass ein erster Durchlauf
durch die Liste durchgeführt
wird und der aktuelle Median mit allen Samples in der Liste verglichen
wird. Bei diesem Ansatz wird die Liste 109 ein erstes Mal
durchlaufen, wobei ein Zählerwert
der Menge von Datensamples mit einer Größe aufgenommen wird, die numerisch
kleiner wird als das aktuelle Median-Datensample. Gleichzeitig überwacht
ein weiterer Zähler
die Menge von Datensamples mit einer Größe, die numerisch kleiner oder
gleich dem aktuellen Median-Datensample ist. Gleichzeitig wird ein
Datensample mit einer Größe aufgefunden,
die relativ zu der Größe des aktuellen Datensamples
numerisch nächstbenachbart
und größer ist.
Am Ende dieser ersten Iteration oder dieses Durchlaufs durch die
N Elemente in der Liste werden die Zähler überprüft um festzustellen, ob das
Median-Datensample für
die (neue) Liste dieselbe Größe haben
wird, wie das aktuelle Median-Datensample oder
ob sie sich ändern
wird. Ist die Anzahl der Datensamples aus der Liste mit einer Größe kleiner
als das aktuelle Median-Datensample kleiner oder gleich (N-1)/2
und ist die Anzahl von Datensamples aus der Liste mit einer Größe kleiner
oder gleich dem aktuellen Datensample größer als (N-1)/2, wird der nächste Median
gleich dem aktuellen Median sein.
-
Muss die Größe des aktuellen Median-Datensamples
aufgrund des vorangegangenen Schrittes verändert werden, wird die Liste
ein zweites Mal durchlaufen und die Menge von Datensamples mit einer
Größe, die
numerisch kleiner ist als das im vorangegangenen Schritt identifizierte
Datensample (dasjenige, das numerisch nächstbenachbart und größer ist)
wird gezählt.
Gleichzeitig überwacht
ein weiterer Zähler
die Menge von Datensamples mit einer Größe, die numerisch kleiner oder
gleich dem im vorangegangen Schritt identifizieren Datensample (dasjenige,
das numerisch nächstbenachbart
und größer ist)
ist. Gleichzeitig wird ein Datensample aufgefunden mit einer Größe, die
numerisch nächstbenachbart
und kleiner ist als die Größe des aktuellen
Median-Datensamples.
Am Ende dieses zweiten Durchlaufs durch die Liste werden die Zähler überprüft, um zu
bestimmen, ob das Median-Datensample für die Liste gleich dem nächstgrößeren Datensamples
ist. Ist die Anzahl von Datensamples aus der Liste mit einer Größe kleiner
als das nächstgrößere Datensample
kleiner oder gleich (N-1)/2 und ist die Anzahl von Datensamples
aus der Liste mit einer Größe kleiner
oder gleich dem nächstgrößeren Datensample
größer als
(N-1)/2, wird der nächste
Median gleich dem Datensample mit der nächstgrößeren Größe relativ zu dem aktuellen
Median sein.
-
Ist das Median-Datensample für die Liste nicht
gleich dem nächstgrößeren Datensample,
wird es als nächstes
auf das nächstkleinere
Datensample gesetzt. Dieser Ansatz ist sowohl einfach als auch effizient.
In einer apparativen Ausführungsform
ist er auch siliziumeffizient.
-
Bei einer Ausführungsform, welche die Anzahl
von Speicherzugriffs-Operationen zur Ermittlung eines Medianwertes
von N2/2 auf N reduziert, wird der nächste Median
aufgefunden, indem ein eingehendes Datensample und ein ausgehendes
Datensample gegen ein aktuelles Median-Datensample getestet werden,
um schnell die Anzahl bestehender Möglichkeiten für den nächsten Median
von 3 auf 2 zu reduzieren. Durch Einschließen der ausgehenden Datensamples
in diese Auswertung kann das Verfahren mit 2N Speicherzugriffen
reduziert werden auf N Speicherzugriffe. Der nächste Schritt besteht darin, die
Liste zu durchsuchen und ein Datensample zu identifizieren, das
eine Größe hat,
die derjenigen des aktuellen Median-Datensamples nächstbenachbart und
größer ist,
falls das Median-Datensample für
die Liste, wie vorangehend bestimmt, anwachsen soll, und ein Datensample
zu identifizieren, das eine Größe hat,
die derjenigen des aktuellen Median-Datensamples nächstbenachbart
und kleiner als diese ist, falls das Median-Datensample für die Liste,
wie zuvor bestimmt, kleiner werden soll, und ein nächstbenachbartes
Datensample zu bestimmen, falls sich das Median-Datensample für die Liste ändern soll. Gleichzeitig
mit dem Durchlauf durch die Liste wird getestet, ob sich das Median-Datensample ändert, indem
bestimmt wird, ob eine Anzahl von Datensamples aus der zirkularen
Liste mit einer Größe, die
kleiner als der aktuelle Median ist, größer ist als (N-1)/2 oder ob die
Anzahl von Datensamples aus der zirkularen Liste mit einer Größe, die
kleiner oder gleich dem aktuellen Median-Datensample ist, kleiner
oder gleich (N-1)/2 ist. Ist eine dieser beiden Bedingungen erfüllt, wird
die Größe des aktuellen
Median-Datensamples auf das zuvor aufgefundene nächstbenachbarte Datensample
geändert.
-
Ein genaueres Verständnis der
erfinderischen Aspekte der oben eingeführten Struktur wird erhältlich durch
Einführung
und detaillierte Beschreibung der verbleibenden Figuren.
-
2 ist
ein vereinfachtes Flussdiagramm, das das bevorzugte Verfahren illustriert.
Die Routine 200 ist vor- zugsweise eingebettet in einen
Motorola-(RTM) MC68HC332-Mikrokontroller,
der zu dem in 1 eingeführten Signalverarbeitungssystem 107 gehört. Alternativ
können
die Verfahrensschritte in einer Hardwarevorrichtung implementiert
sein, die leicht in einen integrierten Schaltkreis zur Signalverarbeitung
integriert werden kann.
-
2 stellt
eine Ausführungsform
dar, die das Verfahren mit N Speicherzugriffen illustriert. Zunächst wird
ein Test ausgeführt,
bei dem ein eingehendes Datensample und ein ausgehendes Datensample
mit dem aktuellen Median verglichen werden (der in vorangehenden
Iterationen des Verfahrensschrittes aufgefunden wurde), um zu bestimmen, ob
oder ob nicht der nächste
Median anwachsen oder abfallen oder dieselbe Größe behalten sollte, wie der
aktuelle Median. In 1 hat
das eingehende Sample eine Größe von 98 und
ist mit dem Bezugszeichen 121 dargestellt. Das ausgehende
(oder zeitlich gesehen das älteste)
Datensample hat eine Größe von 143 und
ist mit, dem Bezugszeichen 113 dargestellt; und der aktuelle
Median hat eine Größe von 138 und
ist mit dem Bezugszeichen 119 dargestellt.
-
Man beachte, dass es eine Routine 200 gibt, die
kontinuierlich läuft
und abhängig
von der kontinuierlichen Datenaufnahme bei einer Baten- oder aufnahmegesteuerten
Rate eine zeitlich geordnete Liste von Datensamples bereit stellt.
Die Routine 202 zur Bestimmung des Medianes beginnt beim
Startschritt 201.
-
Im Schritt 201 werden die
Liste von Datensamples und der aktuelle Median zu einem Zustand
oder. zu Zuständen
initialisiert, in denen der aktuelle Median dem Zustand der in der
Liste gespeicherten Datensamples entspricht. Dies wird gemacht,
um einen bekannten aktuellen Median zu erzeugen, auf welchem die
nachfolgenden Schritte basieren.
-
In einem nächsten Schritt 203 überprüft die Routine 202,
ob oder ob nicht ein neu eingehendes Datensample erhältlich ist.
Ist kein neu eingehendes Datensample erhältlich, wiederholt sich Schritt 203 bis
ein neu eingehendes Datensample erhältlich ist.
-
In Schritt 205 bestimmt
die Routine 202 dann, ob eine Größe eines Median-Datensamples
für die
Liste erhöht
werden, gleich bleiben oder sich verringern sollte, indem die Größen sowohl
des eingehenden Datensamples, als auch des ausgehenden Datensamples
mit der Größe des aktuellen
Median-Datensamples verglichen werden. Unter Bezugnahme auf 3 illustriert ein Diagramm 300 alle neun
in Betracht kommenden Zustände
und die drei möglichen
Resultate.
-
3 illustriert
in tabellarischer Form Details des in 2 eingeführten Schrittes 205.
Das Diagramm 300 hat zwei Eingangsvariablen, nämlich das ausgehende
Datensample 301 und das eingehende Datensample 303,
und einen Ausgangs-Suchbereich 305,
der in Abhängigkeit
von der Kombination der Eingangsbedingungen bestimmt wird. Beispielsweise
wird bei einem Vergleich des eingehenden Datensamples und des ausgehenden
Datensamples mit dem aktuellen Median-Datensample ein Ergebnis "keine Änderung
erforderlich" realisiert, wenn sowohl die Größe des eingehenden Datensam ples,
als auch die Größe des ausgehenden
Datensamples größer sind
als die Größe des aktuellen
Median-Datensamples. Dies bedeutet, dass der nächste Median (für die Liste
einschließlich
des eingehenden Datensamples und ohne das ausgehende Datensample)
dieselbe Größe haben
wird wie das aktuelle Median-Datensample. Alle mit dem Bezugszeichen 307 versehene
Eingangsbedingungen resultieren in einer Schlussfolgerung für den Suchbereich,
die mit dem Bezugszeichen 313 versehen ist.
-
In einem anderen, unter dem Bezugszeichen 309 illustrierten
Fall, in dem entweder die Größen des ausgehenden
Datensamples und des eingehenden Datensamples entsprechend größer als
und kleiner als oder gleich groß wie
und kleiner als die Größe des aktuellen
Median-Datensamples sind, wird der Suchbereich auf eine Schlussfolgerung
begrenzt, dass die Größe des nächsten Median-Datensamples
entweder gleich der Größe des aktuellen
Median-Datensamples ist oder gleich der Größe eines Datensamples mit einer
Größe, welche
der Größe des aktuellen
Median-Datensamples nächstbenachbart und
kleiner als diese ist, wie dies unter dem Bezugszeichen 315 dargestellt
ist.
-
In einem weiteren, unter dem Bezugszeichen 311 illustrierten
Fall, in dem entweder die Größen des
ausgehenden Datensamples und des eingehenden Datensamples entsprechend
kleiner als oder größer als
oder gleich wie oder größer als
die Größe des aktuellen
Medians sind, wird der Suchbereich auf eine Schlussfolgerung beschränkt, dass
die Größe des nächsten Median-Datensamples
entweder gleich der Größe des aktuellen
Median-Datensamples ist oder gleich der Größe eines Datensamples mit einer Größe, welche
der Größe des aktuellen
Median-Datensamples nächstbenachbart
und größer als diese ist,
wie dies unter dem Bezugszeichen 317 dargestellt ist. Man
beachte, dass hier kein konklusiver Test durchgeführt wird,
ob oder ob nicht der Suchbereich auf "keine Änderung erforderlich" beschränkt werden kann.
-
Wir kehren zurück zu 2. In Schritt 205 bestimmt die
Routine 202 im Wesentlichen, ob die Größe des Median-Datensamples für die Liste
anwachsen oder dieselbe bleiben sollte, wie das aktuelle Median-Datensample
oder ob sie sich verringern oder dieselbe bleiben sollte wie das
aktuelle Median-Datensample, indem die Größen sowohl des eingehenden
als auch des ausgehenden Datensamples mit der Größe des aktuellen Median-Datensamples verglichen
werden. Das Ergebnis dieses Tests ist es, eine Vorzeichenanzeige
zu liefern, oder, was äquivalent
ist, den Suchbereich für
den nächsten
Median von drei auf nicht mehr als zwei Möglichkeiten zu reduzieren.
-
In Schritt 207 identifiziert
die Routine 202 als nächstes
ein Datensample mit einer Größe, die
dem aktuellen Median-Datensample nächstbenachbart und größer als
dieses ist, falls das Median-Datensample für die Liste, wie im Schritt 205 bestimmt, ansteigen
sollte und identifiziert ein Datensample mit einer Größe, die
dem aktuellen Median-Datensample nächstbenachbart
und kleiner als dieses ist, falls das Median-Datensample für die Liste,
wie in Schritt 205 bestimmt, abfallen sollte, und liefert
ein nächstbenachbartes
Datensample in Abhängigkeit
davon, welche der vorgenannten Bedingungen zutrifft.
-
In Schritt 209 wird dann
die Größe des aktuellen
Datensamples in die Größe des nächstbenachbarten
Datensamples verändert,
falls die Anzahl von Datensamples aus der Liste mit einer Größe kleiner als
das aktuelle Datensample größer ist
als (N-1)/2 oder die Anzahl von Datensamples für die Liste mit einer Größe kleiner
oder gleich dem aktuellen Datensample kleiner oder gleich (N-1)/2
ist. Anderenfalls ist das Median-Datensample für die Liste dem aktuellen Median-Datensample numerisch äquivalent
und es wird keine Änderung
durchgeführt.
-
Als nächstes wird in 4 eine
detailliertere Erläuterung
angegeben wie das Suchverfahren dieser Ausführungsform durchgeführt werden
kann.
-
Die Bestimmung, ob oder ob nicht
das aktuelle Median-Datensample
verändert
werden soll, kann auch mit anderen äquivalenten Ansätzen hergeleitet
werden, ohne sich von dem Kern des beschriebenen, Ansatzes zu entfernen.
Beispielsweise kann in Schritt 209 das für die Änderung
des aktuellen Median-Datensamples erforderliche Kriterium wie folgt
modifiziert werden: Die Größe des aktuellen
Median-Datensamples wird auf die Größe des nächstbenachbarten Datensamples
verändert,
wenn die Anzahl von Datensamples aus der Liste mit einer Größe größer als
das aktuelle Median-Datensample größer ist als (N-1)/2 oder die
Anzahl von Datensamples aus der Liste mit einer Größe größer oder
gleich dem aktuellen Median-Datensample kleiner oder gleich (N-1)/2
ist.
-
4 ist
in drei separate Diagramme aufgeteilt, nämlich 4A, 4B und 4C, die eine Routine 400 darstellen.
In einem Ausführungsbeispiel
des Verfahrens ist die Routine 400 vorzugsweise in dem in 1 eingeführten Sortiermechanismus 117 eingebettet
in einen Motorola-MC68HC332-Mikrocontroller.
Alternativ können
die Verfahrensschritte in einer Hardwarevorrichtung implementiert
sein. Die Routine 400 beginnt beim Startschritt 401.
Im Wesentlichen implementiert das mit 4A gekennzeichnete Flussdiagramm
den Verfahrensschritt 205 von 2 in größerem Detail.
-
In einem nächsten Schritt 403 werden die Variablen
der Routine wie folgt initialisiert: LTC-Zähler (less than count: "kleiner
als"-Zähler-)
wird auf Null gesetzt. Ein LTEC-Zähler (less than or equal count:
"kleiner als oder gleich"-Zähler)
wird auf Null gesetzt. Ein CM-Register (current median: aktueller Median)
wird auf Null gesetzt. Alle Datenregister in der zirkularen Warteschlange
oder Liste werden auf Null gesetzt. Es ist wichtig zu beachten,
dass die Größe des CM-Registers
arithmetisch gleich dem aktuellen Medianwert der Datensamples der
Liste sein muss. Ist dies nicht der Fall, wird der Filter nicht
konvergieren. Daher werden die voreingestellten Werte der Datenregister
und des CM-Registers, die dieses Kriterium erfüllen, funktionieren. In einer
nächsten Reihe
von Schritten wird, um einen Durchlauf durch die Liste zu eliminieren,
ein reduzierter Suchbereich für
den Median für
eine neue Liste wie folgt bestimmt.
-
Im Schritt 405 wird ein
Test durchgeführt,
um nachzusehen, ob eine Größe des ausgehenden
Datensamples größer oder
gleich einer Größe des aktuellen
Median-Datensamples ist. Ist dies der Fall, wird in Schritt 407
eine OGECM-Flag (outgoing greater than or equal to current median:
Ausgang größer oder
gleich aktuellem Median) gesetzt. Ein gesetzter Status der OGECM-Flag
zeigt an, dass die Größe des ausgehenden
Datensamples größer oder
gleich der Größe des aktuellen
Median-Datensamples ist. Ist die Größe des ausgehenden Datensamples
kleiner als die Größe des aktuellen
Datensamples, wird Schritt 409 ausgeführt. Nachdem Schritt 407 abgeschlossen
ist, wird als nächstes
Schritt 409 ausgeführt.
-
In Schritt 409 wird ein
Test durchgeführt,
um zu bestimmen, ob oder ob nicht die Größe des ausgehenden Datensamples
kleiner oder gleich der Größe des aktuellen
Median-Datensamples ist. Ist dies der Fall, wird Schritt 411 ausgeführt.
-
In Schritt 411 wird eine
OLECM-Flag (outgoing less than or equal to current median: Ausgang kleiner
oder gleich aktuellem Median) gesetzt. Ein gesetzter Zustand der
OLECM-Flag zeigt an, dass die Größe des ausgehenden
Datensamples kleiner oder gleich der Größe des aktuellen Median-Datensamples ist.
Nachdem Schritt 411 ausgeführt
ist oder falls die Größe des ausgehenden
Datensamples größer war
als die Größe des aktuellen
Median-Datensamples, wird 413 ausgeführt.
-
In Schritt 413 holt die
Routine 400 das eingehende Datensample und setzt es in
die Position des ältesten
Datensamples in der zirkularen Liste.
-
Als nächstes wird in Schritt 415 ein
Test durchgeführt,
um nachzusehen, ob oder ob nicht die Größe des eingehenden Datensamples
größer ist
als die Größe des aktuellen
Median-Datensamples. Ist die Größe des eingehenden
Datensamples größer als
die Größe des aktuellen
Median-Datensamples, wird
Schritt 417 ausgeführt.
-
In Schritt 417 wird eine
IGCM-Flag (incoming greater than current median: Eingang größer als
aktueller Median) gesetzt. Ein gesetzter Status der IGCM-Flag zeigt
an, dass die Größe des eingehenden Datensamples
größer ist
als die Größe des aktuellen Medians.
Nach Schritt 417 oder auch in Schritt 415, falls
die Größe des eingehenden
Datensamples kleiner. oder gleich der Größe des aktuellen Median-Datensamples ist,
wird Schritt 419 ausgeführt.
-
In Schritt 419 wird ein
Test durchgeführt,
um nachzusehen, ob oder ob nicht die Größe des eingehenden Datensamples
kleiner ist als die Größe des aktuellen
Median-Datensamples.
Ist dies der Fall, wird Schritt 421 ausgeführt.
-
In Schritt 421 wird eine
ILCM-Flag (incoming less than current median: Eingang kleiner als
aktueller Median) gesetzt. Ein gesetzter Status der ILCM-Flag zeigt
an, dass die Größe des eingehenden
Datensamples kleiner ist als die Größe des aktuellen Datensamples.
-
Nach Schritt 421 oder auch,
falls die Größe des eingehenden
Datensamples größer oder
gleich der Größe des aktuellen
Median-Datensamples, wie in Schritt 419 bestimmt war, ist
Schritt 423 ausführbar und
eine Nachbarschaftsvariable wird gleich der Größe des eingehenden Datensample
s, gesetzt. Die Nachbarschaftsvariable kann optional in einem Register
gespeichert werden.
-
Als nächstes verbindet der mit "A"
bezeichnete Verbindungspunkt 425 mit dem in 4B mit "A" bezeichneten
Verbindungspunkt 425.
-
Das mit 4B bezeichnete
Flussdiagramm implementiert im Wesentlichen den Verfahrensschritt 207 von 2 in größerem Detail.
-
In Schritt 427 testet die
Routine 400, ob oder ob nicht die Größe des betrachteten Datensamples kleiner
ist als. die Größe des aktuellen
Median-Datensamples. Ist dies der Fall wird Schritt 429 ausgeführt. In
Schritt 429 wird ein LTC-Zähler (less than counter) erhöht. Der
LTC-Zähler überwacht,
wie viele der getesteten Datensamples eine Größe haben, die kleiner ist als
die Größe des aktuellen
Median-Datensamples.
Nach Vollendung von Schritt 429 oder in Schritt 427,
falls bestimmt worden war, dass die Größe des betrachteten Datensamples
nicht kleiner war als die Größe des aktuellen
Median-Datensamples, wird Schritt 431 ausgeführt.
-
In Schritt 431 prüft die Routine 400,
ob oder ob nicht die Größe des betrachteten
Datensamples kleiner oder gleich der Größe des aktuellen Median-Datensamples
ist. Ist dies der Fall, wird Schritt 433 ausgeführt.
-
In Schritt 433 wird ein
LTEC-Zähler
erhöht. Der
LTEC-Zähler überwacht,
wie viele der getesteten Datensamples eine Größe haben, die kleiner oder gleich
der Größe des aktuellen
Median-Datensamples ist. Bei Vollendung von Schritt 433 oder
falls die Größe des betrachteten
Datensamples nicht kleiner oder gleich der Größe des aktuellen Median-Datensamples ist,
wird Schritt 435 durchgeführt.
-
In Schritt 435 überprüft die Routine 400,
ob sowohl die OLECM-Flag als auch die IGCM-Flag gesetzt sind. Ist
dies der Fall, wird Schritt 437 ausgeführt.
-
In Schritt 437 überprüft die Routine
dann, ob oder ob nicht die Größe des betrachteten
Datensamples größer als
die Größe des aktuellen
Median-Datensamples und kleiner als die Nachbarschaftsvariable ist.
Wird in Schritt 437 bestimmt, dass die Größe des betrachteten
Datensamples nicht größer als
die Größe des aktuellen
Median-Datensamples und/oder nicht kleiner als die Nachbarschaftsvariable
ist, springt die Routine zu Schritt 446. In Schritt 446 überprüft ein Indexpointer
für die
Liste, ob alle Datensamples der Liste ausgewertet wurden. Wurden
alle Datensamples der Liste ausgewertet, fährt die Routine fort zu dem
mit "B" bezeichneten Verbindungspunkt 450. Wurden noch
nicht alle Datensamples der Liste ausgewertet, führt die Routine als nächstes Schritt 448 aus,
der den Listenindex-Pointer erhöht,
um auf das nächste
zu testende Datensample der Liste zu zeigen und kehrt zurück zu Schritt 427.
Bestimmt Schritt 437, dass die Größe des betrachteten Datensamples
größer als
die Größe des aktuellen
Median-Datensamples und kleiner als die Nachbarschaftsvariable ist,
wird Schritt 439 ausgeführt.
-
In Schritt 439 wird die
Nachbarschaftsvariable gesetzt, um den Wert des betrachteten Datensamples
anzunehmen. Nach Ausführung
von Schritt 439 wird Schritt 446, wie oben beschrieben, ausgeführt.
-
Wurden in Schritt 435 die
OLECM- und IGECM-Flags nicht gesetzt, wird Schritt 441 ausgeführt.
-
In Schritt 441 bestimmt
die Routine, ob oder ob nicht sowohl die OGECM- als auch die ILCM-Flag gesetzt
wurde. Wurden sowohl die OGCM- als auch die ILCM-Flag gesetzt, wird
Schritt 443 ausgeführt.
-
In Schritt 443 bestimmt die Routine,
ob oder ob nicht die Größe des betrachteten
Datensamples kleiner als die Größe des aktuellen
Median-Datensamples und größer als
die Nachbarschaftsvariable ist. Ist dies der Fall, wird Schritt
439, wie oben beschrieben, ausgeführt. Ist die Größe des betrachteten
Datensamples nicht kleiner als die Größe des aktuellen Median-Datensamples
und/oder nicht größer als
die Nachbarschaftsvariable; führt
die Routine Schritt 446 wie oben beschrieben aus.
-
Wir kehren zurück zu Schritt 441.
Sind die OGECM- und die ILCM-Flag nicht beide gesetzt, wird Schritt 445 ausgeführt .
-
In Schritt 445 wird die
Nachbarschaftsvariable mit dem aktuellen Median-Datensample gleichgesetzt.
Dann wird Schritt 446 wie oben beschrieben ausgeführt. Verbindungspunkt
B 450 von 4B wird
mit Verbindungspunkt B 450 von 4C verbunden.
-
Im nächsten Schritt 447 wird
ein Test durchgeführt,
um nachzusehen, ob die Größe des LTC-Zählers einen
Wert kleiner oder gleich (N-1)/2 hat und die Größe des LTEC-Zählers einen
wert größer (N-1)/2
hat. Ist dies nicht der Fall, wird Schritt 449 ausgeführt.
-
In Schritt 449 wird der
aktuelle Median gleich der Nachbarschaftsvariablen gesetzt. Wird
der Test in Schritt 447 bestanden, oder nach Ausführung von Schritt 449,
wird Schritt 451 ausgeführt.
-
In Schritt 451 werden sowohl
der LTC-Zähler als
aus der LTEC-Zähler
auf Null reinitialisiert. Dann gibt Verbindungspunkt C 453 von 4C die Ausführung der
Routine zurück
an Verbindungspunkt C 453 von 4A. Die Routine pausiert dann bis ein
nächstes
eingehendes Datensample erhältlich
ist.
-
Als nächstes wird 5 beschrieben, welche die Verfahrensschritte
des 2N-Ausführungsbeispiels
repräsentiert.
Eine Routine 500 beginnt beim Startschritt 501.
Als nächstes
werden in Schritt 503 die N Datensamples der Liste ein
erstes Mal durchlaufen; während
ein erster Zählwert
der Menge der Datensamples mit einer Größe kleiner einer Größe des aktuellen
Median-Datensamples festgehalten wird. Gleichzeitig wird ein zweiter
Zählwert
einer Menge von Datensamples mit einer Größe kleiner oder gleich einer
Größe des aktuellen
Median-Datensamples festgehalten. Auch wird ein Datensample mit
einer Größe, welche
der Größe des aktu ellen
Median-Datensamples numerisch nächstbenachbart und
größer als
diese ist, aufgefunden.
-
In Schritt 505 wird als
nächstes
in Abhängigkeit
von dem ersten und dem zweiten Zählwert
bestimmt, ob oder ob nicht ein Median-Datensample für die Liste
eine Größe hat,
die von der Größe des aktuellen
Median-Datensample verschieden ist.
-
Insbesondere ist, falls der Wert
des ersten Zählwertes
kleiner oder gleich (N-1)/2 ist und der Wert des zweiten Zählwertes
größer als
(N-1)/2 ist, das Median-Datensample gleich dem aktuellen Median-Datensample.
-
Wurde in Schritt 505 bestimmt,
dass das Median-Datensample
nicht gleich dem aktuellen Median-Datensample ist, wird in Schritt 507 die
Liste ein zweites Mal durchlaufen und ein dritter Zählwert einer Menge
von Datensamples mit einer Größe kleiner
als eine Größe des Datensamples
mit einer Größe, welche
der Größe des aktuellen
Median-Datensamples numerisch nächstbenachbart
und größer als
diese ist, wird festgehalten. Gleichzeitig wird ein vierter Zählwert einer
Menge von Datensamples mit einer Größe klei- ner oder gleich der
Größe des Datensamples
mit einer Größe, welche
der Größe des aktuellen
Median-Datensamples numerisch nächstbenachbart
und größer als
diese ist, festgehalten. Auch wird ein Datensample aufgefunden mit
einer Größe, welche
der Größe des aktuellen
Median-Datensamples numerisch nächstbenachbart
und kleiner als diese ist.
-
In Schritt 509 wird in Abhängigkeit
des dritten und des vierten Zählwertes
eine Bestimmung durchgeführt,
ob oder ob nicht das Median-Datensample für die Liste gleich dem Datensample
mit einer Größte ist,
welche der Größe des aktuellen
Median-Datensamples numerisch nächstbenachbart und
größer als
diese ist. Insbesondere ist, falls der wert des dritten Zählwertes
kleiner oder gleich ist als (N-1)/2 und der wert des vierten Zählwertes
größer ist
als (N-1)/2, das Median-Datensample gleich dem Datensample mit einer
Größe, welche
der Größe des aktuellen
Medians numerisch nächstbenachbart
und größer als dieser
ist. Ist das Median-Datensamples
für die
Liste nicht gleich dem nächstgrößeren Datensample
wird es auf das nächstkleinere
Datensample gesetzt. Die Routine 500 wird in Schritt 511 beendet.
-
Für
Systeme, die mit dem möglichen
Auftreten eines zufälligen
Fehlers im Speicher und seiner Auswirkungen auf das Suchverfahren
konfrontiert sind, kann eine Fehlerkorrektur mit einem zusätzlichen
Durchlauf durch die Liste implementiert werden. Bei diesem zusätzlichen
Durchlauf kann das endgültige
Medianresultat direkt getestet werden und, falls ein Fehler entdeckt
wird und der abgeleitete Median definitiv als nicht mit dem aktuellen
Median übereinstimmend
festgestellt wird, kann der Speicher für die Liste und den aktuellen
Median reinitialisiert werden.
-
Um irgendeine der oben beschriebenen,
bevorzugten Verfahren zu implementieren, ist es ein leichtes, die
Verfahrensoperationen in eine digitale Logikschaltung zu konvertieren
und dabei dieselben strukturellen Beziehungen zwischen den Elementen aufrechtzuerhalten.
-
Zusammenfassend würde ein Verfahren und ein Filter
zur verbesserten Mediansuche beschrieben, mit beschränktem Speicherzugriff,
so dass sie effektiv in einem integrierten Schaltkreis hergestellt oder
als Verfahren effizient ausgeführt
werden können.
Bei einem Ausführungsbeispiel
werden zwei Durchgänge
durch die Liste von N Samples durchgeführt. Bei einem anderen Ausführungsbeispiel
wird an dem eingehen den und dem ausgehenden Datensample ein Vortest
im Vergleich zu einem aktuellen Median-Datensample durchgeführt, um
einen Durchgang durch die Liste zu eliminieren.