-
TECHNISCHES GEBIET
-
Das technische Gebiet betrifft im Allgemeinen Nachschlagetabellen und genauer das Durchsuchen einer Nachschlagetabelle nach einem Vektorindex, der einem Eingabewert entspricht, und das Bestimmen eines Ausgabewertes, der dem Eingabewert entspricht.
-
HINTERGRUND
-
Systeme, wie beispielsweise mechanische und/oder elektronische Systeme, werden oft analysiert, um mathematische Verhältnisse unter den Eingängen, Zuständen und Ausgängen des Systems zu bestimmen. Sobald diese Informationen erhalten werden, können dieselben verwendet werden, um Nachschlagetabellen zu erzeugen, die das Verhalten des Systems charakterisieren. Eine Nachschlagetabelle ist eine Datenstruktur, wie beispielsweise ein Array oder assoziatives Array, die oft verwendet wird, um eine Laufzeitberechnung durch eine einfachere Arrayindizieroperation zu ersetzen.
-
Nachschlagetabellen können durch das Sammeln von Eingabe- und Ausgabedaten für ein statisches oder dynamisches System erzeugt werden. Dies kann künstlich, über Simulation, oder experimentell durch Prüfen eines tatsächlichen Systems erfolgen. Bei einem System mit M Eingängen und N Ausgängen kann ein Satz von N M-dimensionalen Nachschlagetabellen verwendet werden, um das Verhalten des Systems zu charakterisieren. Für ein System mit N Ausgabedatenwerten werden N Arrayelemente lokalisiert und die entsprechenden Daten an diesen Orten gespeichert.
-
Sobald ein Satz Nachschlagetabellen basierend auf Systemeingabedaten und Systemausgabedaten erzeugt ist, kann derselbe in einem Computerspeicher gespeichert werden, so dass das entsprechende Array der Werte bei Anwendungen ohne die Notwendigkeit des Regenerierens der Systemsausgabedaten verwendet werden kann. Zum Lokalisieren der adäquaten Arrayelemente in der Nachschlagetabelle werden nur die Eingabedaten erfordert und die ungefähren Systemausgabedaten können aus diesen Orten ausgelesen werden. An sich kann die Verwendung von Nachschlagetabellen erhebliche Einsparungen hinsichtlich der Verarbeitungszeit liefern, da das Abrufen eines Wertes aus einem Speicher oft schneller als das Durchlaufen einer extensiven Berechnung oder Eingabe/Ausgabeoperation in Echtzeit ist.
-
Nachschlagetabellen erfassen ein Eingabe-Ausgabe-Mapping des Systems in Form von numerischen Daten, die an vorbestimmten Arrayorten gespeichert werden können. Eine Nachschlagetabelle implementiert ein Array von Tabellendaten (manchmal als „Elemente” bezeichnet) und ordnet die Tabellendaten/Tabellenelemente einem Bereich indizierter Werte zu, an dem die Tabelle für einen gegebenen Index evaluiert wird. Diese indizierten Werte dienen zum Unterteilen des Tabelleneingaberaums in Bereiche, die als „Zellen” bezeichnet werden, wobei jede Zelle durch zwei „Haltepunkte” begrenzt ist, um einen Intervall oder ein Segment zu definieren, in den/das ein Eingabewert fallen kann.
-
Eine eindimensionale Nachschlagetabelle enthält einen Indexvektor und einen entsprechenden Ausgabevektor. Jeder Vektor besteht aus einer Anzahl von Zellen, die zum Speichern von Werten verwendet werden. Der Indexvektor weist einen Satz diskreter Eingabewerte auf und der Ausgabevektor enthält eine Reihe entsprechender Ausgabewerte, so dass jede Zelle des Indexvektors mit einer entsprechenden Zelle des Ausgabevektors assoziiert wird. Alle Werte des Indexvektors und Ausgabevektors werden mit einem entsprechenden Vektorindex, der üblicherweise ein ganzzahliger Wert ist, assoziiert oder bei demselben evaluiert.
-
In den meisten Fällen kann ein Eingabewert in die Nachschlagetabelle überall innerhalb einer bestimmten Zelle des Indexvektors liegen (z. B. kann der Eingabewert zwischen zwei Haltepunkten liegen, die eine bestimmte Zelle eines Indexvektors definieren). Für einen bestimmten Indexvektor kann eine Suche durchgeführt werden, um die zwei Zellen des Indexvektors zu identifizieren, die hinsichtlich des Wertes dem Eingabewert am nächsten sind. Beispielsweise definiert ein Prozessor den Ort des Eingabewertes relativ zu einem der Intervalle, um die Zellen des Eingabevektors und die entsprechenden numerischen Tabellendatenwerte derselben zu identifizieren.
-
Sobald die Zellen des Indexvektors identifiziert wurden, sind die entsprechenden Zellen eines Ausgabevektors bekannt. Der Prozessor kann dann einen Interpolationsalgorithmus basierend auf den Werten der Zellen ausführen, die derselbe identifiziert hat, um zwischen Tabellendatenwerten zu interpolieren, um einen Ausgabewert zu bestimmen, der dem Eingabewert entspricht.
-
Ein Indexvektor kann entweder linear oder stückweise indiziert sein. Für einen linear indizierten Indexvektor ist der Unterschied zwischen jeglichen zwei aufeinanderfolgenden Zellen immer der Gleiche. Im Gegensatz dazu ist für einen stückweise indizierten Indexvektor der Indexvektor auf eine „stückweise” Art indiziert, was bedeutet, dass Zellen manchmal ungleichmäßig beabstandet sind, so dass ein Unterschied zwischen einer Gruppe zwei aufeinanderfolgender Zellen des stückweise indizierten Indexvektors anders als ein Unterschied zwischen einer anderen Gruppe zwei aufeinanderfolgender Zellen des stückweise indizierten Indexvektors ist.
-
Das Verfahren zum Durchsuchen des Indexvektors zum Identifizieren der Zellen des Indexvektors (die hinsichtlich des Wertes dem Eingabewert am nächsten sind) variiert abhängig davon, ob der Indexvektor linear oder stückweise indiziert ist. Wenn bekannt ist, dass der Indexvektor linear ist, kann beispielsweise ein Suchalgorithmus eingesetzt werden, bei dem die lineare Interpolation unter Verwendung der Steigung basierend auf dem Unterschied zwischen einer Gruppe zwei aufeinanderfolgender Zellen und eines berechneten Index berechnet wird. Im Gegensatz dazu kann, wenn bekannt ist, dass der Indexvektor stückweise indiziert ist, ein Suchalgorithmus eingesetzt werden, bei dem der Indexvektor vom Beginn des Indexvektors sequentiell (d. h. auf einer zellenweisen Basis) durchsucht wird, bis der Index gefunden wird. Dieses Verfahren zum Durchsuchen eines stückweise indizierten Indexvektors verbraucht einen erheblichen Betrag des Prozessordurchsatzes.
-
Folglich wird erwünscht verbesserte Verfahren und Systeme zum Durchsuchen eines Indexvektors einer Nachschlagetabelle nach einem Vektorindex zu liefern, um die Zellen des Indexvektors zu identifizieren, die hinsichtlich des Wertes dem Eingabewert entsprechen und demselben am nächsten sind, so dass ein Ausgabewert (der dem Eingabewert entspricht) bestimmt werden kann. Es wäre erstrebenswert, wenn diese verbesserten Verfahren und Systeme ungeachtet dessen verwendet werden können, ob der Indexvektor linear oder stückweise indiziert ist. Zudem werden andere erwünschte Merkmale und Charakteristiken der vorliegenden Erfindung aus der folgenden detaillierten Beschreibung und den beiliegenden Ansprüchen offensichtlich werden, die in Verbindung mit den beiliegenden Zeichnungen und dem vorangehenden technischen Gebiet und Hintergrund genommen wurden.
-
ZUSAMMENFASSUNG
-
Ein Verfahren ist geliefert, das durch einen Computerprozessor in Verbindung mit einer Nachschlagetabelle durchgeführt werden kann.
-
Basierend auf einem Eingabewert, nach dem innerhalb eines Indexvektors der Nachschlagetabelle gesucht wird, kann ein Wert eines Vektorindex berechnet werden, um einen berechneten Vektorindex zu erzeugen. In einigen Ausführungsformen kann bestimmt werden, ob der berechnete Vektorindex kleiner als eine Länge eines Indexvektors ist, und wenn nicht, dann kann der berechnete Vektorindex durch Dekrementieren der Länge des Indexvektors um eins erneut berechnet werden, um einen erneut berechneten Vektorindex zu erzeugen.
-
Dann kann bestimmt werden, ob der Wert des berechneten Vektorindex korrekt ist, um zu bestimmen, ob der Indexvektor linear oder stückweise indiziert ist.
-
Wenn entweder bestimmt wird, dass der Wert des berechneten Vektorindex korrekt ist, oder wenn der erneut berechnete Vektorindex erzeugt wird, kann eine Interpolationsroutine für einen linear indizierten Indexvektor unter Verwendung eines gegenwärtig berechneten Vektorindex ausgeführt werden, um einen interpolierten Ausgabewert zu bestimmen, der dem Eingabewert entspricht. Der gegenwärtig berechnete Vektorindex kann entweder der berechnete Vektorindex oder der erneut berechnete Vektorindex sein.
-
Wenn im Gegensatz dazu bestimmt wird, dass der Wert des berechneten Vektorindex nicht korrekt ist, wird bestimmt, dass der Indexvektor stückweise indiziert ist, und eine Interpolationsroutine für einen stückweise indizierten Indexvektor kann ausgeführt werden, um den interpolierten Ausgabewert zu bestimmen, der dem Eingabewert entspricht.
-
BESCHREIBUNG DER ZEICHNUNGEN
-
Die Ausführungsformen werden nachstehend in Verbindung mit den folgenden Figuren der Zeichnung beschrieben werden, in denen ähnliche Nummern ähnliche Elemente bezeichnen und in denen:
-
1 ein Blockdiagramm eines Systems nach einer Ausführungsform ist;
-
2 ein Ablaufplan ist, der ein Verfahren nach einer Ausführungsform veranschaulicht; und
-
3 ein Graph ist, der die Interpolation gemäß einer Ausführungsform veranschaulicht.
-
DETAILLIERTE BESCHREIBUNG
-
Die folgende detaillierte Beschreibung ist rein beispielhafter Art und soll die Anwendung und Verwendungen nicht beschränken. Zudem besteht keine Absicht durch eine zum Ausdruck gebrachte oder implizierte Theorie gebunden zu sein, die in dem/der vorangehenden technischen Gebiet, Hintergrund, kurzen Zusammenfassung oder der folgenden detaillierten Beschreibung dargelegt ist.
-
Vor dem detaillierten Beschreiben von Ausführungsformen, die gemäß der vorliegenden Erfindung sind, sollte beachtet werden, dass die Ausführungsformen in erster Linie in Kombinationen von Verfahrensschritten und Vorrichtungskomponenten in Bezug auf das Durchsuchen eines Indexvektors einer Nachschlagetabelle nach einem Vektorindex, der einem Eingabewert entspricht, und dann Berechnen einer Steigung, die in Verbindung mit dem Eingabewert und dem berechneten Vektorindex verwendet werden kann, um einen entsprechenden Ausgabewert zu bestimmen, liegen. Es wird eingesehen werden, dass Ausführungsformen der Erfindung, die hierin beschrieben sind, unter Verwendung von Hardware, Software oder einer Kombination derselben implementiert werden können. Es wird eingesehen werden, dass hierin beschriebene Ausführungsformen der Erfindung aus einem oder mehreren herkömmlichen Prozessoren und einzigartigen, gespeicherten Programmbefehlen bestehen können, die den einen oder die mehreren Prozessoren steuern, um in Verbindung mit bestimmten Nichtprozessorschaltungen einige, die meisten oder alle Funktionen zum Durchsuchen eines Indexvektors einer Nachschlagetabelle nach einem Vektorindex, der einem Eingabewert entspricht, und dann Berechnen einer Steigung zu implementieren, die in Verbindung mit dem Eingabewert und dem berechneten Vektorindex verwendet werden kann, um einen entsprechenden Ausgabewert zu bestimmen, wie hierin beschrieben wird. An sich können diese Funktionen als Schritte eines Verfahrens zum Durchsuchen eines Indexvektors einer Nachschlagetabelle nach einem Vektorindex, der einem Eingabewert entspricht, und dann Berechnen einer Steigung interpretiert werden, die in Verbindung mit dem Eingabewert und dem berechneten Vektorindex verwendet werden kann, um einen entsprechenden Ausgabewert zu bestimmen.
-
1 ist ein Blockdiagramm eines Systems 30 nach einer Ausführungsform der vorliegenden Erfindung. Das System 30 enthält einen Prozessor 10 und einen Speicher 20, die miteinander gekoppelt sind und in Verbindung stehen.
-
Der Speicher 20 enthält eine Nachschlagetabelle 22. Die Nachschlagetabelle 22 wird zum Speichern von Information verwendet, die einen Indexvektor (X) 26 und einen entsprechenden Ausgabevektor (Y) 28 enthalten. Jeder Vektor 26, 28 enthält eine Anzahl von Zellen, die zum Speichern von Werten verwendet werden. Jeder Wert des Indexvektors (X) 26 und des Ausgabevektors (Y) 28 wird mit einem entsprechenden Vektorindex assoziiert oder bei demselben evaluiert, der ein ganzzahliger Wert ist, der in einem Bereich von null bis N liegt, wobei N die Länge des Vektors ist.
-
Der Indexvektor (X) 26 weist einen Satz diskreter Eingabewerte X0 bis XN auf und der Ausgabevektor (Y) 28 weist eine Reihe entsprechender Ausgabewerte Y0 bis YN auf. Beispielsweise weist der Indexvektor eine Anzahl von Zellen (X0...XN) auf und kann wie folgt repräsentiert werden: Indexvektor = [X0, X1, X2, X3, ..., XN], wobei der Zahlenabschnitt von X0, X1 etc. einem Index entspricht, der einen Bereich von 0 bis N aufweist. An sich ist die Zelle null (X0) die erste Zelle des Indexvektors (X) 26 und enthält den Wert des Indexvektors (X) 26, der beim Index 0 evaluiert wird (X0 = Indexvektor(0)), und die Zelle N (XN) die letzte Zelle des Indexvektors (X) 26 und enthält den Wert des Indexvektors (X) 26, der beim Index N evaluiert wird (XN = Indexvektor(N)). Ähnlich ist die Zelle null (Y0) die erste Zelle des Ausgabevektors (Y) 28 und enthält den Wert des Ausgabevektors (Y) 28, der beim Index 0 evaluiert wird (Y0 = Ausgabevektor(0)), und die Zelle N (YN) die letzte Zelle des Ausgabevektors (Y) 28 und enthält den Wert des Ausgabevektors (Y) 28, der beim Index N evaluiert wird (YN = Ausgabevektor(N)).
-
Der Indexvektor (X) 26 kann entweder linear oder stückweise indiziert sein. Für einen linear indizierten Indexvektor (X) 26 sind die Zellen derart gleichmäßig beabstandet, dass der Unterschied zwischen jeglichen zwei aufeinanderfolgenden Zellen des linear indizierten Indexvektors (X) 26 immer der Gleiche ist. Im Gegensatz dazu sind für einen stückweise indizierten Indexvektor (X) 26 die Zellen eines stückweise indizierten Indexvektors (X) 26 derart ungleichmäßig beabstandet, dass ein Unterschied zwischen den zwei aufeinanderfolgenden Zellen des stückweise indizierten Indexvektors (X) 26 anders als ein Unterschied zwischen anderen zwei aufeinanderfolgenden Zellen des stückweise indizierten Indexvektors (X) 26 ist.
-
Der Prozessor 10 enthält ein Vektorindex-Suchmodul 12, das die Nachschlagetabelle 22 durchsucht, um entweder einen Vektorindex zu berechnen oder zu finden, der einem Eingabewert (Xin) 11 entspricht, ein Steigungsberechnungsmodul 14, das einen oder mehrere Steigungswerte basierend auf einem Vektorindex berechnet, der vom Vektorindex-Suchmodul 12 bereitgestellt wird, und ein Interpolationsmodul 16, das einen Ausgabewert (Yout) 18 basierend auf einem der berechneten Steigungswerte und Informationen erzeugt, die vom Vektorindex-Suchmodul 12 bereitgestellt werden. Wie hierin verwendet, bezieht sich der Ausdruck „Modul” auf eine Vorrichtung, eine Schaltung, eine elektrische Komponente und/oder eine softwarebasierte Komponente zum Durchführen einer Aufgabe. Weitere Details werden nun nachstehend beschrieben werden.
-
Das Vektorindex-Suchmodul 12 nimmt anfänglich an, dass der Indexvektor linear indiziert ist, und berechnet einen Vektorindex basierend auf dem Eingabewert (Xin) 11. Das Vektorindex-Suchmodul 12 bestimmt, ob der berechnete Vektorindex (CVI) innerhalb des Bereiches oder der Länge (N) des Indexvektors 26 liegt. Wenn nicht, berechnet das Vektorindex-Suchmodul 12 den Vektorindex erneut durch Dekrementieren desselben um eins, um einen erneut berechneten Vektorindex (RVI) zu erzeugen.
-
Wenn das Vektorindex-Suchmodul 12 bestimmt, dass sich der Vektorindex innerhalb des Längenbereiches (N) des Indexvektors befindet, bestimmt das Vektorindex-Suchmodul 12 dann durch Bestimmen, ob der Eingabewert (Xin) 11 innerhalb von Werten bestimmter Zellen des Indexvektors (X) 26 ist, ob der Indexvektor (X) 26 linear indiziert ist.
-
Wenn das Vektorindex-Suchmodul 12 bestimmt, dass der Indexvektor linear indiziert ist und dass der Vektorindex (CVI), der anfänglich berechnet wurde, korrekt ist, bestimmt das Vektorindex-Suchmodul 12, ob eine anfänglich berechnete Steigung oder „erste” Steigung korrekt ist. Die erste Steigung wird durch das Steigungsberechnungsmodul 14 basierend auf einem gegenwärtig berechneten Vektorindex berechnet, der entweder der berechnete Vektorindex (CVI) oder der erneut berechnete Vektorindex (RVI) sein kann.
-
Wenn das Vektorindex-Suchmodul 12 bestimmt, dass die erste Steigung korrekt ist, verwendet das Interpolationsmodul 16 den gegenwärtig berechneten Vektorindex und die erste Steigung, um einen Ausgabewert (Yout) 18 zu interpolieren. Im Gegensatz dazu, berechnet das Steigungsberechnungsmodul 14 eine zweite Steigung, wenn das Vektorindex-Suchmodul 12 bestimmt, dass die erste Steigung nicht korrekt ist, und das Interpolationsmodul 16 verwendet den Eingabewert (Xin) 11, den gegenwärtig berechneten Vektorindex und die zweite Steigung, um einen Ausgabewert (Yout) 18 zu interpolieren.
-
Wenn das Vektorindex-Suchmodul 12 bestimmt, dass der Indexvektor (X) 26 nicht linear indiziert ist und der berechnete Vektorindex (CVI) inkorrekt ist, wird das Vektorindex-Suchmodul 12 dann andererseits annehmen, dass der Indexvektor (X) 26 ein stückweise indizierter Indexvektor ist, und eine Suche vornehmen, die von dem Wert der ersten Steigung abhängt, um einen neuen Vektorindex zu finden, der nachstehend als gefundener Vektorindex (FVI) bezeichnet werden wird. Sobald das Vektorindex-Suchmodul 12 den neuen, gefundenen Vektorindex (FVI) findet, verwendet das Steigungsberechnungsmodul 14 den Eingabewert (Xin) 11 und den gefundenen Vektorindex, um eine dritte Steigung zu berechnen, und das Interpolationsmodul 16 den Eingabewert (Xin) 11, die dritte Steigung und den gefundenen Vektorindex, um einen Ausgabewert (Yout) 18 zu interpolieren.
-
2 ist ein Ablaufplan, der ein Verfahren 100 zum Durchsuchen eines Indexvektors (X) 26 einer Nachschlagetabelle 22 nach einem Vektorindex, der einem Eingabewert (Xin) entspricht, und dann Berechnen einer Steigung veranschaulicht, die in Verbindung mit dem Eingabewert (Xin) und dem Vektorindex verwendet werden kann, um einen entsprechenden Ausgabewert (Yout) gemäß einigen der offenbarten Ausführungsformen zu bestimmen. 2 wird in Bezug auf die Nachschlagetabelle 22 in 1 beschrieben werden.
-
3 ist ein Graph, der eine Interpolation gemäß einer Ausführungsform veranschaulicht. 3 veranschaulicht drei Punkte 210, 220, 230, wobei: Punkt 210 einen Wert einer Zelle (X) des Indexvektors (X) 26 und einen entsprechenden Wert einer Zelle (Yn) des Ausgabevektors (Y) 28 repräsentiert; Punkt 220 einen Wert einer angrenzenden Zelle (Xn+1) des Indexvektors (X) 26 und einen entsprechenden Wert einer Zelle (Yn+1) des Ausgabevektors (Y) 28 repräsentiert; und Punkt 230 den Eingabewert (Xin) und den entsprechenden Ausgabewert (Yout) desselben repräsentiert, nach dem gesucht wird. Hier wird die Bezeichnung X verwendet, um einen Wert der Zelle n des Indexvektors (X) 26 (d. h. den Wert des Indexvektors (X) 26, der beim Index n evaluiert wird) anzugeben, wohingegen die Bezeichnung Xn+1 verwendet wird, um einen Wert der Zelle n + 1 des Indexvektors (X) (d. h. den Wert des Indexvektors (X) 26, der beim Index n + 1 evaluiert wird) anzugeben. Ähnlich wird die Bezeichnung Yn verwendet, um einen Wert der Zelle n des Ausgabevektors (Y) 28 (d. h. den Wert des Ausgabevektors (Y) 28, der beim Index n evaluiert wird) anzugeben, wohingegen die Bezeichnung Yn+1 verwendet wird, um einen Wert der Zelle n des Ausgabevektors (Y) 28 (d. h. den Wert des Ausgabevektors (Y) 28, der beim Index n + 1 evaluiert wird) anzugeben. 2 wird nachstehend in Bezug auf 3 beschrieben werden.
-
Das Verfahren 100 ermöglicht das Durchsuchen des Ausgabevektors ungeachtet dessen, ob derselbe linear oder stückweise indiziert ist.
-
Das Verfahren 100 beginnt mit dem Schritt 110, in dem ein Vektorindex berechnet wird. Im Schritt 110 wird angenommen, dass ein gleichmäßiger Abstand zwischen aufeinanderfolgenden Zellen besteht (d. h., dass der Ausgabevektor (Y) 28 linear ist). In einer Ausführungsform kann der Wert des Vektorindex unter Verwendung der Gleichung (1), die folgt, berechnet werden: Index = Floor([Xin – X0]/[X1 – X0]) (1), wobei Xin ein Eingabewert, nach dem innerhalb des Indexvektors (X) gesucht wird, (oder „gesuchter Wert”) ist. Die Abrundungsfunktion bzw. Floor-Funktion setzt den ganzzahligen Abschnitt der Berechnung zurück. Der Unterschied zwischen zwei aufeinanderfolgenden Zellen des Eingabevektors (X) wird als Zellenunterschied (DiffX) bezeichnet werden. Anfänglich wird angenommen, dass der Zellenunterschied linear ist. In einer Ausführungsform kann der Zellenunterschied (DiffX) durch die Gleichung (2), die folgt, berechnet werden: DiffX = X1 – X0 (2).
-
Folglich wird in einer Ausführungsform des Schrittes 110 ein Verhältnis von: (1) einem Unterschied zwischen dem Eingabewert (Xin) 230, nach dem innerhalb des Indexvektors (X) gesucht wird, und einem Wert einer ersten Zelle (X0) des Indexvektors (X); zu (2) dem Zellenunterschied (DiffX) zwischen zwei aufeinanderfolgenden Zellen des Indexvektors (X) berechnet und der ganzzahlige Abschnitt dieses Verhältnisses ist der Wert des berechneten Vektorindex (CVI). Der Wert des berechneten Vektorindex (aus Schritt 110) kann verwendet werden, um zu bestimmen, ob der Indexvektor (X) 26 linear indiziert oder stückweise indiziert ist.
-
Im Schritt 120 wird bestimmt, ob der berechnete Vektorindex (aus Schritt 110) kleiner als die Länge des Indexvektors (N) ist.
-
Wenn bestimmt wird, dass der berechnete Vektorindex (aus Schritt 110) größer als die Länge des Indexvektors (N) oder gleich derselben ist, fährt das Verfahren 100 mit dem Schritt 135 fort, in dem der berechnete Vektorindex durch Dekrementieren der Länge des Indexvektors (N) um eins erneut berechnet wird, um einen erneut berechneten Vektorindex zu erzeugen, und das Verfahren 100 fährt dann mit dem Block 140 fort. Mit anderen Worten wird der erneut berechnete Vektorindex auf einen Wert N – 1 (Index = N – 1) gesetzt.
-
Wenn im Gegensatz dazu (im Schritt 124) bestimmt wird, dass der Index kleiner als N ist, bedeutet dies, dass der berechnete Vektorindex (aus Schritt 110) innerhalb der maximalen Länge (N) des Indexvektors ist, und das Verfahren 100 fährt mit dem Schritt 130 fort.
-
Im Schritt 130 wird durch Bestimmen, ob der berechnete Vektorindex (aus Schritt 110) korrekt ist, bestimmt, ob der Indexvektor (X) 26 entweder linear indiziert oder stückweise indiziert ist. Hierfür wird in einer Ausführungsform bestimmt, ob der Eingabewert (Xin) zwischen: (1) einem ersten Wert des Indexvektors (X) 26, der bei dem berechneten Vektorindex evaluiert wird; und (2) einem zweiten Wert des Indexvektors (N) 26 ist, der bei dem um eins inkrementierten berechneten Vektorindex evaluiert wird. Dies kann in der Gleichung (3), die folgt, repräsentiert werden: Indexvektor(Index) ≤ Xin UND Xin ≤ Indexvektor(Index + 1)? (3).
-
In der Gleichung (3) wird bestimmt, ob der Wert des Indexvektors (X) 26, der bei dem Index evaluiert wird, kleiner als der Eingabewert (Xin) oder gleich demselben ist, und, ob der Eingabewert (Xin) kleiner als der Wert des Indexvektors (X) 26 oder gleich demselben ist, der beim Index + 1 evaluiert wird.
-
Wenn bestimmt wird, dass der Eingabewert (Xin) zwischen: (1) dem ersten Wert des Indexvektors (X) 26, der bei dem berechneten Vektorindex evaluiert wird; und (2) dem zweiten Wert des Indexvektors (N) 26 ist, der bei dem um eins inkrementierten berechneten Vektorindex evaluiert wird, wird bestimmt, dass der Indexvektor (X) 26 linear indiziert ist. Im Gegensatz dazu wird bestimmt, dass der Indexvektor (X) 26 stückweise indiziert ist, wenn bestimmt wird, dass der Eingabewert (Xin) nicht zwischen: (1) dem ersten Wert des Indexvektors (X) 26, der bei dem berechneten Vektorindex evaluiert wird; und (2) dem zweiten Wert des Indexvektors (N) 26 ist, der bei dem um eins inkrementierten berechneten Vektorindex evaluiert wird.
-
Interpolationsroutine für einen linear indizierten Indexvektor
-
Wenn (im Schritt 130) bestimmt wird, dass beide Bedingungen erfüllt (oder wahr) sind, dann wird bestimmt, dass der berechnete Vektorindex (aus Schritt 110) korrekt ist, was heißt, dass der Indexvektor (X) 26 rein linear ist, und das Verfahren 100 fährt mit dem Block 140 fort, in dem eine Interpolationsroutine für eine linear indizierten Indexvektor ausgeführt wird.
-
Die Interpolationsroutine 140 für einen linear indizierten Indexvektor beginnt mit dem Schritt 142.
-
Der dem Block 142 bereitgestellte Vektorindex kann entweder der berechnete Vektorindex (aus Schritt 110) oder der erneut berechnete Vektorindex (aus Schritt 135) sein und wird nachstehend als gegenwärtig berechneter Vektorindex bezeichnet.
-
Im Schritt 142 kann bestimmt werden, ob eine erste Bedingung erfüllt ist, d. h., ob (1) ein Unterschied zwischen dem Wert des Indexvektors, der bei dem gegenwärtig berechneten Vektorindex + 1 (Indexvektor(gegenwärtigberechneterVektorindex + 1)) evaluiert wird, und dem Wert des Indexvektors, der bei dem gegenwärtig berechneten Vektorindex (Indexvektor(gegenwärtigberechneterVektorindex)) evaluiert wird, gleich (2) einem Zellenunterschied (z. B. Unterschied zwischen dem Wert der Zelle eins (X1) des Eingabevektors (X) und dem Wert der Zelle null (X0) des Eingabevektors (X))) ist. Dies kann in der Gleichung (4), die folgt, repräsentiert werden: Indexvektor(gegenwärtigberechneterVektorindex + 1) – Indexvektor(gegenwärtigberechneterVektorindex) = DiffX? (4).
-
Wenn bestimmt wird, dass die erste Bedingung bei 142 wahr ist, bedeutet dies, dass eine erste Steigung berechnet und zur Interpolation verwendet werden kann. Das Verfahren fährt mit dem Schritt 144 fort, in dem die erste Steigung berechnet werden kann. In einer Ausführungsform kann die erste Steigung basierend auf einem Verhältnis von (1) einem Zellenunterschied zwischen zwei aufeinanderfolgenden Zellen des Indexvektors (z. B. Unterschied zwischen Zelle eins (Y1) des Ausgabevektors (Y1) und Zelle null (Y0) des Ausgabevektors (Y) 28) und (2) einem zweiten Unterschied zwischen der Zelle eins (X1) des Eingabevektors (X) und der Zelle null (X0) des Eingabevektors (X) berechnet werden. Dies kann in der Gleichung (5), die folgt, repräsentiert werden: Erste Steigung = (Y2 – Y1)/(DiffX); wobei DiffX = X1 – X0 (5).
-
Das Verfahren 100 fährt dann mit dem Schritt 145 fort, in dem der gegenwärtig berechnete Vektorindex und die erste Steigung verwendet werden, um einen Wert der Ausgabe (Yout) durch die Gleichung (6), die folgt, zu interpolieren: Yout = Erste Steigung × (Xin – Indexvektor(gegenwärtigberechneterVektorindex)) + Y0 (6), wobei die erste Steigung berechnet wird, wie oben beschrieben wurde, Indexvektor(gegenwärtigberechneterVektorindex) der Indexvektor ist, der bei dem gegenwärtig berechneten Vektorindex evaluiert wird, der entweder der berechnete Vektorindex (aus Schritt 110) oder der erneut berechnete Vektorindex (aus Schritt 135) ist, Xin der Eingabewert (Xin) ist, nach dem gesucht wird, und Yout der interpolierte Ausgabewert ist, der dem Eingabewert (Xin) entspricht. Das Verfahren 100 endet dann mit dem Schritt 170.
-
Wenn bestimmt wird, dass die Bedingung beim Schritt 142 falsch ist, bedeutet dies, dass zwar der gegenwärtig berechnete Vektorindex (aus Schritt 110 oder Schritt 135) korrekt ist, aber die erste Steigung nicht korrekt ist (dies ist eine indirekte Bestimmung beim Schritt 142, wenn falsch), und daher fährt das Verfahren mit dem Schritt 146 fort, in dem eine zweite Steigung berechnet wird. In einer Ausführungsform wird die zweite Steigung basierend auf einem Verhältnis von (1) einem dritten Unterschied zwischen dem Wert des Ausgabevektors (Y) 28, der bei dem gegenwärtig berechneten Vektorindex plus 1 (Ausgabevektor(gegenwärtigberechneterVektorindex + 1)) evaluiert wird, und dem Wert des Ausgabevektors (Y) 28, der bei dem gegenwärtig berechneten Vektorindex (Ausgabevektor(gegenwärtigberechneterVektorindex)) evaluiert wird, und (2) einem vierten Unterschied zwischen dem Wert des Indexvektors, der bei dem gegenwärtig berechneten Vektorindex + 1 (Indexvektor(gegenwärtigberechneterVektorindex + 1)) evaluiert wird, und dem Indexvektor, der bei dem gegenwärtig berechneten Vektorindex (Indexvektor(gegenwärtigberechneterVektorindex)) evaluiert wird. Die Berechnung der zweiten Steigung kann in der Gleichung (7), die folgt, repräsentiert werden: Zweite Steigung = ((Ausgabevektor(gegenwärtigberechneterVektorindex + 1) – Ausgabevektor(gegenwärtigberechneterVektorindex))/(Indexvektor(gegenwärtigberechneterVektorindex + 1) – Indexvektor(gegenwärtigberechneterVektorindex)) (7).
-
Das Verfahren 100 fährt dann mit dem Schritt 148 fort, in dem der gegenwärtig berechnete Vektorindex und die zweite Steigung zum Interpolieren eines Wertes der Ausgabe (Yout) durch die Gleichung (8), die folgt, verwendet werden: Yout = Zweite Steigung × (Xin – Indexvektor(gegenwärtigberechneterVektorindex)) + Ausgabevektor(gegenwärtigberechneterVektorindex) (8), wobei die zweite Steigung berechnet wird, wie oben in Bezug auf die Gleichung (7) beschrieben wurde, und die anderen Variablen oben in Bezug auf die Gleichung (7) beschrieben wurden. Wieder ist Yout der interpolierte Ausgabewert, der dem Eingabewert (Xin) entspricht. Das Verfahren 100 endet dann mit dem Schritt 170.
-
Interpolationsroutine für einen stückweise indizierten Indexvektor
-
Wenn (im Schritt 130) bestimmt wird, dass eine der Bedingungen nicht erfüllt (oder falsch) ist, dann wird bestimmt, dass der berechnete Vektorindex (aus Schritt 110) inkorrekt ist, was heiß, dass der Indexvektor (X) 26 quasilinear indiziert (z. B. stückweise indiziert) ist, und das Verfahren 100 fährt mit dem Block 150 fort, in dem eine Interpolationsroutine für einen stückweise indizierten Indexvektor ausgeführt wird. Mit anderen Worten fährt das Verfahren mit dem Schritt 150 fort, wenn im Schritt 130 bestimmt wird, dass eine oder beide Bedingungen nicht wahr sind. Wie nachstehend beschrieben werden wird, wird im Block 150 eine Interpolation basierend auf einer dritten Steigung und dem dritten Index durchgeführt.
-
Die Routine 150 beginnt mit dem Schritt 152, in dem bestimmt wird, ob der Zellenunterschied (DiffX) (z. B. Unterschied zwischen Zelle eins (X1) des Eingabevektors (X) und Zelle null (X0) des Eingabevektors (X)) größer als null ist (d. h. positiv oder negativ ist).
-
Wenn (im Schritt 152) bestimmt wird, dass der Zellenunterschied (DiffX) größer als null (positiv) ist, fährt das Verfahren 100 mit dem Schritt 154 fort, in dem bestimmt wird, ob der Indexvektor, der bei dem berechneten Vektorindex (aus Schritt 110) (Indexvektor(Index)) evaluiert wird, kleiner als der Eingabewert (Xin) ist, was in dem Ausdruck (9), der folgt, zum Ausdruck gebracht werden kann: Indexvektor(Index) < Xin? (9).
-
Wenn bestimmt wird, dass der Indexvektor, der bei dem berechneten Vektorindex (Indexvektor(Index)) evaluiert wird, größer als (oder nicht kleiner als) der Eingabewert (Xin) ist, fährt das Verfahren 100 mit dem Schritt 162 fort, in dem eine erste stückweise Suche durchgeführt wird. Die erste stückweise Suche beginnt bei dem berechneten Vektorindex (Indexvektor(Index)) und dekrementiert den Vektorindex um eins in Richtung der Zelle null (X0) des Eingabevektors (X) bis eine erste gefundene Bedingung auftritt, an welchem Punkt der neue Vektorindex gefunden wird, und der gefundene Vektorindex wird auf den neuen Vektorindex zurückgesetzt, der gefunden wurde. In einer Ausführungsform tritt die erste gefundene Bedingung auf, wenn bestimmt wird, dass der Eingabewert (Xin) größer als der Indexvektor, der bei dem berechneten Vektorindex (CVI) evaluiert wird, oder gleich demselben ist, oder der Vektorindex null (0) erreicht. Folglich wird, wenn entweder: bestimmt wird, dass der Eingabewert (Xin) größer als der Indexvektor, der bei dem berechneten Vektorindex (Indexvektor(Index)) evaluiert wird, oder gleich demselben ist; oder der Vektorindex null (0) erreicht, der neue Vektorindex gefunden und der Wert einer Variablen (gefundenerIndex) auf den Vektorindexwert zurückgesetzt, der gefunden wurde.
-
Wenn im Gegensatz dazu bestimmt wird, dass der Indexvektor, der bei dem berechneten Vektorindex (Indexvektor(Index)) evaluiert wird, kleiner als der Eingabewert (Xin) ist, fährt das Verfahren 100 mit dem Schritt 156 fort, in dem eine zweite stückweise Suche durchgeführt wird. Die zweite stückweise Suche beginnt bei dem berechneten Vektorindex (Indexvektor(Index)) und der Vektorindex wird um eins in Richtung der Zelle N (XN) des Eingabevektors (X) inkrementiert bis eine „zweite” gefundene Bedingung auftritt, an welchem Punkt der neue Vektorindex gefunden wird, und der gefundene Vektorindex wird auf den neuen Vektorindex, der gefunden wurde, minus eins (1) zurückgesetzt. In einer Ausführungsform tritt die zweite gefundene Bedingung auf, wenn entweder: bestimmt wird, dass der Eingabewert (Xin) kleiner als der Wert des Indexvektors, der bei dem berechneten Vektorindex (Indexvektor(Index)) evaluiert wird, oder gleich demselben ist; oder der Wert des Vektorindex N erreicht, an welchem Punkt der neue Vektorindex gefunden wird, und der Wert einer Variablen (gefundenerIndex) kann auf den neuen Vektorindexwert, der gefunden wurde, minus 1 zurückgesetzt werden.
-
Wenn im Schritt 152 bestimmt wird, dass die Zellendifferenz (DiffX) negativ ist, fährt das Verfahren 100 mit dem Schritt 160 fort, in dem bestimmt wird, ob der Indexvektor, der bei dem berechneten Vektorindex (aus Schritt 110) (Indexvektor(Index)) evaluiert wird, größer als der Eingabewert (Xin) ist, was in dem Ausdruck (10), der folgt, zum Ausdruck gebracht werden kann: Indexvektor(Index) > Xin? (10).
-
Wenn bestimmt wird, dass der Indexvektor, der bei dem berechneten Vektorindex (Indexvektor(Index)) evaluiert wird, kleiner als der Eingabewert (Xin) ist, fährt das Verfahren 100 mit dem Schritt 162 fort, in dem die erste schrittweise Suche durchgeführt wird, wie oben beschrieben wurde. Wenn im Gegensatz dazu bestimmt wird, dass der Indexvektor, der bei dem berechneten Vektorindex (Indexvektor(Index)) evaluiert wird, größer als der Eingabewert (Xin) ist, fährt das Verfahren 100 mit dem Schritt 156 fort, in dem die zweite stückweise Suche erfolgt, wie oben beschrieben wurde.
-
In Anschluss an entweder den Schritt 156 oder den Schritt 162 fährt das Verfahren 100 mit dem Schritt 158 fort. Im Schritt 158 wird eine dritte Steigung basierend auf dem Indexvektor, der bei dem im Schritt 156 oder Schritt 162 gefundenen Vektorindex evaluiert wird, (Indexvektor(gefundenerIndex)) berechnet. In einer Ausführungsform kann die Berechnung, die zum Berechnen der dritten Steigung im Schritt 158 durchgeführt wird, in der Gleichung (11), die folgt, repräsentiert werden: Dritte Steigung = (Ausgabevektor(gefundenerIndex + 1) – Ausgabevektor(gefundenerIndex))/(Indexvektor(gefundenerIndex + 1) – Indexvektor(gefundenerindex)) (11).
-
Wie in der Gleichung (11) gezeigt, wird die dritte Steigung basierend auf einem Verhältnis von (1) einem fünften Unterschied zwischen dem Wert des Ausgabevektors (Y) 28, der bei dem gefundenen Vektorindex plus 1 (Ausgabevektor(gefundenerIndex + 1)) evaluiert wird, und dem Wert des Ausgabevektors (Y) 28, der bei dem gefundenen Vektorindex (Ausgabevektor(gefundenerIndex)) evaluiert wird, und (2) einem sechsten Unterschied zwischen dem Wert des Indexvektors, der bei dem gefundenen Vektorindex + 1 (Indexvektor(gefundenerIndex + 1)) evaluiert wird, und dem Indexvektor, der bei dem gefundenen Vektorindex (Indexvektor(gefundenerIndex)) evaluiert wird, berechnet. Es wird angemerkt, dass abhängig davon, auf welchem Weg der Block 150 durchlaufen wurde, der Wert von gefundenerIndex aus entweder dem Block 162 oder Block 156 kommt.
-
Das Verfahren 100 fährt dann mit dem Schritt 164 fort, in dem der gefundene Vektorindex und die dritte Steigung verwendet werden, um einen Wert der Ausgabe (Yout) durch die Gleichung (12), die folgt, zu interpolieren: Yout = Dritte Steigung × (Xin – Indexvektor(gefundenerIndex)) + Ausgabevektor(gefundenerIndex) Gleichung (12), wobei die dritte Steigung (im Schritt 158) berechnet wird, wie oben beschrieben wurde, und die anderen Variablen oben in Bezug auf die Gleichung (10) beschrieben sind. Wieder ist Yout der interpolierte Ausgabewert, der dem Eingabewert (Xin) entspricht. Das Verfahren 100 endet dann bei 170.
-
Jemand mit technischen Fähigkeiten wird einsehen, dass die verschiedenen illustrativen logischen Blöcke, Module und Algorithmusschritte, die in Verbindung mit den Ausführungsformen beschrieben wurden, die hierin offenbart sind, als elektronische Hardware, Computersoftware oder Kombinationen aus beiden implementiert werden können. Einige der Ausführungsformen und Implementierungen sind oben bezüglich funktionalen und/oder logischen Blockkomponenten (oder Modulen) und verschiedenen Verarbeitungsschritten beschrieben. Es sollte jedoch eingesehen werden, dass solche Blockkomponenten (oder Module) durch irgendeine Anzahl von Hardware-, Software- und/oder Firmwarekomponenten umgesetzt werden können, die zum Durchführen der spezifizierten Funktionen vorgesehen sind.
-
Um diese Austauschbarkeit von Hardware und Software deutlich zu veranschaulichen, wurden verschiedene veranschaulichende Komponenten, Blöcke, Module und Schritte oben im Allgemeinen hinsichtlich der Funktionalität derselben beschrieben. Ob solch eine Funktionalität als Hardware oder Software implementiert wird, hängt von der bestimmten Anwendung und Ausgestaltungsbedingungen ab, die dem Gesamtsystem auferlegt sind. Fachmänner werden die beschriebene Funktionalität auf variierende Weisen für jede bestimmte Anwendung implementieren, aber solche Implementierungsentscheidungen sollten nicht interpretiert werden eine Abweichung von dem Bereich der vorliegenden Erfindung zu verursachen. Beispielsweise kann eine Ausführungsform eines Systems verschiedene Komponenten einer integrierten Schaltung einsetzten, z. B. Speicherelemente, digitale Signalverarbeitungselemente, Logikelemente, Nachschlagetabellen oder Ähnliches, die eine Vielzahl von Funktionen unter der Steuerung von einem oder mehreren Mikroprozessoren oder anderen Steuervorrichtungen ausführen können. Zudem wird jemand mit technischen Fähigkeiten einsehen, dass die hierin beschriebenen Ausführungsformen lediglich nicht einschränkende, beispielhafte Implementierungen sind.
-
Die verschiedenen veranschaulichenden logischen Blöcke und Module, die in Verbindung mit den hierin offenbarten Ausführungsformen beschrieben sind, können mit einem Allzweckprozessor, einem digitalen Signalprozessor (DSP), einer anwendungsspezifischen integrierten Schaltung (ASIC), einem feldprogrammierbaren Gate-Array (FPGA) oder einer anderen programmierbaren Logikvorrichtung, diskreten Gate- oder Transistorlogik, anderen diskreten Hardwarekomponenten oder einer Kombination derselben implementiert oder durchgeführt werden, die zum Durchführen der hierin beschriebenen Funktionen ausgestaltet sind. Ein Allzweckprozessor kann ein Mikroprozessor sein, aber alternativ kann der Prozessor jeder/jede herkömmliche Prozessor, Controller oder Mikrocontroller oder Zustandsmaschine sein. Ein Prozessor kann auch als Kombination aus Rechenvorrichtungen, z. B. eine Kombination aus einem DSP und einem Mikroprozessor, eine Vielzahl von Mikroprozessoren, ein oder mehrere Mikroprozessoren in Verbindung mit einem DSP-Kern oder jede andere solche Konfiguration sein.
-
Die Schritte eines Verfahrens oder Algorithmus, die in Verbindung mit den hierin offenbarten Ausführungsformen beschrieben sind, können direkt in Hardware, in einem Softwaremodul, das durch einen Prozessor ausgeführt wird, oder in einer Kombination der beiden ausgeführt werden. Ein Softwaremodul kann in einem RAM-Speicher, einem Flash-Speicher, einem ROM-Speicher, einem EPROM-Speicher, einem EEPROM-Speicher, Registern, einer Festplatte, einer Wechselplatte, einer CD-ROM oder einer anderen Form von Speichermedium liegen, das in der Technik bekannt ist. Ein beispielhaftes Speichermedium ist mit dem Prozessor derart gekoppelt, dass der Prozessor Informationen von dem Speichermedium lesen und auf dasselbe schreiben kann. Alternativ kann das Speichermedium ein Bestandteil des Prozessors sein. Der Prozessor und das Speichermedium können in einer ASIC liegen. Alternativ können der Prozessor und das Speichermedium diskrete Komponenten bleiben.
-
In diesem Dokument können relationale Ausdrücke, wie zum Beispiel erster/erste/erstes und zweiter/zweite/zweites und Ähnliches, nur zum Unterscheiden einer Entität oder Funktion von einer anderen Entität oder Funktion verwendet werden ohne eine tatsächliche solche Beziehung oder Ordnung zwischen solchen Entitäten oder Funktionen unbedingt zu erfordern oder zu implizieren. Numerische Ordinale, wie beispielsweise „erster/erste/erstes”, „zweiter/zweite/zweites”, „dritter/dritte/drittes” etc., bezeichnen lediglich unterschiedliche Einzelne einer Vielzahl und implizieren keinerlei Ordnung oder Reihenfolge, sofern nicht speziell durch die Anspruchssprache definiert. Die Reihenfolge des Textes in einem der Ansprüche impliziert nicht, dass Verfahrensschritte in einer temporalen oder logischen Ordnung gemäß solch einer Reihenfolge durchgeführt werden müssen, sofern es nicht durch die Sprache des Anspruchs speziell definiert ist. Die Verfahrensschritte können in jeder Ordnung miteinander vertauscht werden, ohne von dem Bereich der Erfindung abzuweichen, solange solch ein Austausch nicht im Widerspruch zur Anspruchssprache steht und logischerweise unsinnig ist.
-
Abhängig von dem Kontext implizieren zudem Wörter wie „verbinden” oder „gekoppelt mit”, die beim Beschreiben eines Verhältnisses zwischen zwei unterschiedlichen Elementen verwendet werden, nicht, dass eine direkte physische Verbindung zwischen diesen Elementen hergestellt werden muss. Beispielsweise können zwei Elemente physisch, elektronisch, logisch oder auf eine andere Weise durch eines oder mehrere zusätzliche Elemente miteinander verbunden sein.
-
Zwar wurde zumindest eine beispielhafte Ausführungsform in der vorangehenden detaillierte Beschreibung dargelegt, aber es sollte eingesehen werden, dass eine große Anzahl von Variationen besteht. Es sollte auch eingesehen werden, dass die beispielhafte Ausführungsform oder die beispielhaften Ausführungsformen nur Beispiele sind und den Bereich, die Anwendbarkeit oder Konfiguration der Offenbarung keineswegs beschränken sollen. Vielmehr wird die vorangehende detaillierte Beschreibung jemandem mit technischen Fähigkeiten einen geeigneten Plan zum Implementieren der beispielhaften Ausführungsform oder beispielhaften Ausführungsformen liefern. Es sollte klar sein, dass verschiedene Änderungen an der Funktion und Anordnung von Elementen vorgenommen werden können ohne vom Bereich der Offenbarung abzuweichen, der in den beiliegenden Ansprüchen und rechtmäßigen Äquivalenten derselben dargelegt ist.
-
WEITERE AUSFÜHRUNGSFORMEN
-
- 1. Verfahren, das durch einen Computerprozessor in Verbindung mit einer Nachschlagetabelle durchgeführt wird, wobei das Verfahren Folgendes aufweist:
Berechnen eines Wertes eines Vektorindex basierend auf einem Eingabewert (Xin), nach dem innerhalb eines Indexvektors (X) der Nachschlagetabelle gesucht wird, um einen berechneten Vektorindex zu erzeugen;
Bestimmen, ob der berechnete Vektorindex kleiner als eine Länge eines Indexvektors (N) ist;
wenn bestimmt wird, dass der berechnete Vektorindex größer als die Länge des Indexvektors (N) ist, erneutes Berechnen des berechneten Vektorindex durch Dekrementieren der Länge des Indexvektors (N) um eins, um einen erneut berechneten Vektorindex zu erzeugen;
Bestimmen, ob der Wert des berechneten Vektorindex korrekt ist, um zu bestimmen, ob der Indexvektor (X) linear indiziert oder stückweise indiziert ist;
wenn entweder bestimmt wird, dass der Wert des berechneten Vektorindex korrekt ist, oder der erneut berechnete Vektorindex erzeugt wird, Ausführen einer Interpolationsroutine für einen linear indizierten Indexvektor unter Verwendung eines gegenwärtig berechneten Vektorindex, um einen interpolierten Ausgabewert (Yout) zu bestimmen, der dem Eingabewert (Xin) entspricht, wobei der gegenwärtig berechnete Vektorindex entweder der berechnete Vektorindex oder der erneut berechnete Vektorindex ist; und
wenn bestimmt wird, dass der berechnete Vektorindex inkorrekt ist, und bestimmt wird, dass der Indexvektor (X) stückweise indiziert ist, Ausführen einer Interpolationsroutine für einen stückweise indizierten Indexvektor, um den interpolierten Ausgabewert (Yout) zu bestimmen, der dem Eingabewert (Xin) entspricht.
- 2. Verfahren nach der Ausführungsform 1, wobei das Berechnen des Wertes eines Vektorindex Folgendes aufweist:
Berechnen des Wertes des Vektorindex basierend auf dem Eingabewert (Xin), nach dem innerhalb des Indexvektors (X) gesucht wird, und einer Zellendifferenz (DiffX) zwischen zwei aufeinanderfolgenden Zellen des Indexvektors (X), um den berechneten Vektorindex zu erzeugen.
- 3. Verfahren nach der Ausführungsform 2, wobei das Berechnen des Wertes eines Vektorindex Folgendes aufweist:
Berechnen eines Verhältnisses von (1) einem Unterschied zwischen dem Eingabewert (Xin), nach dem innerhalb des Indexvektors (X) gesucht wird, und einem Wert einer ersten Zelle (X0) des Indexvektors (X) zu (2) dem Zellenunterschied (DiffX) zwischen zwei aufeinanderfolgenden Zellen des Indexvektors (X), wobei der berechnete Vektorindex ein ganzzahliger Abschnitt des Verhältnisses ist.
- 4. Verfahren nach der Ausführungsform 1, wobei das Bestimmen, ob der Wert des berechneten Vektorindex korrekt ist, Folgendes aufweist:
Bestimmen, ob der Eingabewert (Xin) zwischen: einem ersten Wert des Indexvektors (X), der bei dem berechneten Vektorindex evaluiert wird; und einem zweiten Wert des Indexvektors (X) ist, der bei dem um eins inkrementierten berechneten Vektorindex evaluiert wird.
- 5. Verfahren nach der Ausführungsform 4 ferner mit:
Bestimmen, dass der Indexvektor (X) linear indiziert ist, wenn bestimmt wird, dass der Eingabewert (Xin) zwischen: dem ersten Wert des Indexvektors (X), der bei dem berechneten Vektorindex evaluiert wird; und dem zweiten Wert des Indexvektors (X) ist, der bei dem um eins inkrementierten berechneten Vektorindex evaluiert wird.
- 6. Verfahren nach der Ausführungsform 5, wobei das Ausführen der Interpolationsroutine für den linear indizierten Indexvektor Folgendes aufweist:
Bestimmen, ob eine erste Bedingung erfüllt ist.
- 7. Verfahren nach der Ausführungsform 6, wobei die erste Bedingung ist, ob ein erster Unterschied zwischen einem ersten Wert und einem zweiten Wert gleich einem zweiten Unterschied zwischen einem dritten Wert und einem vierten Wert ist, wobei der erste Wert der Wert des Indexvektors ist, der bei dem gegenwärtig berechneten Vektorindex plus 1 (Indexvektor(gegenwärtigberechneterVektorindex + 1)) evaluiert wird, wobei der zweite Wert der Wert des Indexvektors ist, der bei dem gegenwärtig berechneten Vektorindex (Indexvektor(gegenwärtigberechneterVektorindex)) evaluiert wird, wobei der dritte Wert der Wert der Zelle eins (X1) des Eingabevektors (X) ist und wobei der vierte Wert der Wert der Zelle null (X0) des Eingabevektors (X) ist.
- 8. Verfahren nach der Ausführungsform 6 ferner mit:
Berechnen einer ersten Steigung, wenn die erste Bedingung erfüllt ist; und
Interpolieren des interpolierten Ausgabewertes (Yout), der dem Eingabewert (Xin) entspricht, basierend auf dem gegenwärtig berechneten Vektorindex und der ersten Steigung.
- 9. Verfahren nach der Ausführungsform 8, wobei das Berechnen der ersten Steigung Folgendes aufweist:
Berechnen der ersten Steigung ein Verhältnis von: (1) einem ersten Unterschied zwischen der Zelle eins (Y1) des Ausgabevektors (Y) und der Zelle null (Y0) des Ausgabevektors (Y), und (2) einem zweiten Unterschied zwischen der Zelle eins (X1) des Eingabevektors (X) und der Zelle null (X0) des Eingabevektors (X) zu sein.
- 10. Verfahren nach der Ausführungsform 9, wobei das Interpolieren des interpolierten Ausgabewertes (Yout), der dem Eingabewert (Xin) entspricht, Folgendes aufweist: Interpolieren des interpolierten Ausgabewertes (Yout) als die Summe von:
Zelle eins (Y0) des Ausgabevektors (Y) und
einem Produkt der ersten Steigung und einem Unterschied zwischen dem Eingabewert (Xin) und dem Indexvektor, der bei dem gegenwärtig berechneten Vektorindex evaluiert wird.
- 11. Verfahren nach der Ausführungsform 6 ferner mit:
Berechnen einer zweiten Steigung, wenn die erste Bedingung nicht erfüllt ist; und
Interpolieren des interpolierten Ausgabewertes (Yout), der dem Eingabewert (Xin) entspricht, basierend auf dem gegenwärtig berechneten Vektorindex und der zweiten Steigung.
- 12. Verfahren nach der Ausführungsform 11, wobei das Berechnen der zweiten Steigung Folgendes aufweist:
Berechnen der zweiten Steigung ein Verhältnis von:
(1) einem dritten Unterschied zwischen einem Wert des Ausgabevektors (Y), der bei dem gegenwärtig berechneten Vektorindex plus 1 (Ausgabevektor(gegenwärtigberechneterVektorindex + 1)) evaluiert wird, und einem Wert des Ausgabevektors (Y), der bei dem gegenwärtig berechneten Vektorindex (Ausgabevektor(gegenwärtigberechneterVektorindex)) evaluiert wird; und
(2) einem vierten Unterschied zwischen dem ersten Wert des Indexvektors, der bei dem gegenwärtig berechneten Vektorindex plus 1 (Indexvektor(gegenwärtigberechneterVektorindex + 1)) evaluiert wird, und dem zweiten Wert des Indexvektors, der bei dem gegenwärtig berechneten Vektorindex (Indexvektor(gegenwärtigberechneterVektorindex)) evaluiert wird,
zu sein.
- 13. Verfahren nach der Ausführungsform 12, wobei das Interpolieren des interpolierten Ausgabewertes (Yout), der dem Eingabewert (Xin) entspricht, Folgendes aufweist:
Interpolieren des interpolierten Ausgabewertes (Yout) als die Summe von:
dem Wert des Ausgabevektors (Y), der bei dem gegenwärtig berechneten Vektorindex (Ausgabevektor(gegenwärtigberechneterVektorindex)) evaluiert wird, und
einem Produkt der zweiten Steigung und eines Unterschieds zwischen dem Eingabewert (Xin) und dem Indexvektor, der bei dem gegenwärtig berechneten Vektorindex evaluiert wird.
- 14. Verfahren nach der Ausführungsform 4 ferner mit:
Bestimmen, dass der Indexvektor (X) stückweise indiziert ist, wenn bestimmt wird, dass der Eingabewert (Xin) nicht zwischen: dem ersten Wert des Indexvektors (X), der bei dem berechneten Vektorindex evaluiert wird; und dem zweiten Wert des Indexvektors (X) ist, der bei dem um eins inkrementierten berechneten Vektorindex evaluiert wird; und
wobei das Ausführen der Interpolationsroutine für den stückweise indizierten Indexvektor Folgendes aufweist:
Suchen nach einem neuen Vektorindex, der, nachdem derselbe gefunden wurde, ein gefundener Vektorindex ist;
Berechnen einer dritten Steigung basierend auf dem gefundenen Vektorindex; und
Interpolieren des interpolierten Ausgabewertes (Yout), der dem Eingabewert (Xin) entspricht, basierend auf dem gefundenen Vektorindex und der dritten Steigung.
- 15. Verfahren nach der Ausführungsform 14, wobei das Suchen nach einem neuen Vektorindex, der, nachdem derselbe gefunden wird, ein gefundener Vektorindex ist, Folgendes aufweist:
Bestimmen, ob der Zellenunterschied (DiffX) größer als null ist;
wenn bestimmt wird, dass der Zellenunterschied (DiffX) größer als null ist, Bestimmen, ob der Indexvektor, der bei dem berechneten Vektorindex evaluiert wird, kleiner als der Eingabewert (Xin) ist.
- 16. Verfahren nach der Ausführungsform 15, wobei das Verfahren, wenn bestimmt wird, dass der Indexvektor, der bei dem berechneten Vektorindex evaluiert wird, größer als der Eingabewert (Xin) ist, ferner Folgendes aufweist:
Durchführen einer ersten stückweisen Suche nach dem neuen Vektorindex, wobei das Durchführen der ersten stückweisen Suche Folgendes aufweist: Beginnen bei dem berechneten Vektorindex und Dekrementieren des Vektorindex um eins in Richtung der Zelle null (X0) des Eingabevektors (X) bis eine erste gefundene Bedingung auftritt, an welchem Punkt der neue Vektorindex gefunden wird, wobei die erste gefundene Bedingung auftritt, wenn bestimmt wird, dass der Eingabewert (Xin) größer als der Indexvektor, der bei dem berechneten Vektorindex evaluiert wird, oder gleich demselben ist, oder der Vektorindex null (0) erreicht; und
Zurücksetzen des gefundenen Vektorindex auf den neuen Vektorindex, der gefunden wurde.
- 17. Verfahren nach der Ausführungsform 15, wobei das Verfahren, wenn bestimmt wird, dass der Indexvektor, der bei dem berechneten Vektorindex evaluiert wird, kleiner als der Eingabewert (Xin) ist, ferner Folgendes aufweist:
Durchführen einer zweiten stückweisen Suche nach dem neuen Vektorindex, wobei das Durchführen der zweiten stückweisen Suche Folgendes aufweist: Beginnen bei dem berechneten Vektorindex, Inkrementieren des Vektorindex um eins in Richtung der Zelle N (XN) des Eingabevektors (X) bis eine zweite gefundene Bedingung auftritt, an welchem Punkt der neue Vektorindex gefunden wird, wobei die zweite gefundene Bedingung auftritt, wenn bestimmt wird, dass der Eingabewert (Xin) kleiner als der Indexvektor, der bei dem berechneten Vektorindex evaluiert wird, oder gleich demselben ist, oder der Vektorindex N erreicht; und
Zurücksetzen des gefundenen Vektorindex auf den neuen Vektorindex, der gefunden wurde, minus eins.
- 18. Verfahren nach der Ausführungsform 15, wobei das Verfahren, wenn bestimmt wird, dass der Zellenunterschied (DiffX) kleiner als null ist, Folgendes aufweist:
Bestimmen, ob der Indexvektor, der bei dem berechneten Vektorindex evaluiert wird, größer als der Eingabewert (Xin) ist.
- 19. Verfahren nach der Ausführungsform 18, wobei das Verfahren, wenn bestimmt wird, dass der Indexvektor, der bei dem berechneten Vektorindex evaluiert wird, kleiner als der Eingabewert (Xin) ist, ferner Folgendes aufweist:
Durchführen einer ersten stückweisen Suche nach dem neuen Vektorindex, wobei das Durchführen der ersten stückweisen Suche Folgendes aufweist: Beginnen bei dem berechneten Vektorindex und Dekrementieren des Vektorindex um eins in Richtung der Zelle null (X0) des Eingabevektors (X) bis eine erste gefundene Bedingung auftritt, an welchem Punkt der neue Vektorindex gefunden wird, wobei die erste gefundene Bedingung auftritt, wenn bestimmt. wird, dass der Eingabewert (Xin) größer als der Indexvektor, der bei dem berechneten Vektorindex evaluiert wird, oder gleich demselben ist, oder der Vektorindex null (0) erreicht; und
Zurücksetzen des gefundenen Vektorindex auf den neuen Vektorindex, der gefunden wurde.
- 20. Verfahren nach der Ausführungsform 18, wobei das Verfahren, wenn bestimmt wird, dass der Indexvektor, der bei dem berechneten Vektorindex evaluiert wird, größer als der Eingabewert (Xin) ist, ferner Folgendes aufweist:
Durchführen einer zweiten stückweisen Suche nach dem neuen Vektorindex, wobei das Durchführen der zweiten stückweisen Suche Folgendes aufweist: Beginnen bei dem berechneten Vektorindex, Inkrementieren des Vektorindex um eins in Richtung der Zelle N (XN) des Eingabevektors (X) bis eine zweite gefundene Bedingung auftritt, an welchem Punkt der neue Vektorindex gefunden wird, wobei die zweite gefundene Bedingung auftritt, wenn bestimmt wird, dass der Eingabewert (Xin) kleiner als der Indexvektor, der bei dem berechneten Vektorindex evaluiert wird, oder gleich demselben ist, oder der Vektorindex N erreicht; und
Zurücksetzen des gefundenen Vektorindex auf den neuen Vektorindex, der gefunden wurde, minus eins.
- 21. Verfahren nach der Ausführungsform 14, wobei das Berechnen der dritten Steigung basierend auf dem gefundenen Vektorindex Folgendes aufweist:
Berechnen der dritten Steigung ein Verhältnis von:
(1) einem fünften Unterschied zwischen einem Wert des Ausgabevektors (Y), der bei dem gefundenen Vektorindex plus 1 (Ausgabevektor(gefundenerIndex + 1)) gefunden wird, und einem Wert des Ausgabevektors (Y), der bei dem gefundenen Vektorindex (Ausgabevektor(gefundenerIndex)) evaluiert wird; und
(2) einem sechsten Unterschied zwischen einem ersten Wert des Indexvektors, der bei dem gefundenen Vektorindex plus 1 (Indexvektor(gefundenerIndex + 1)) evaluiert wird, und einem zweiten Wert des Indexvektors, der bei dem gefundenen Vektorindex (Indexvektor(gefundenerIndex)) evaluiert wird,
zu sein.
- 22. Verfahren nach der Ausführungsform 14, wobei das Interpolieren des interpolierten Ausgabewertes (Yout), der dem Eingabewert (Xin) entspricht, Folgendes aufweist:
Interpolieren des interpolierten Ausgabewertes (Yout) als die Summe von:
dem Wert des Ausgabevektors (Y) 28, der bei dem gefundenen Vektorindex (Ausgabevektor(gefundenerIndex)) evaluiert wird; und
einem Produkt der dritten Steigung und einem Unterschied zwischen dem Eingabewert (Xin) und dem Indexvektor, der bei dem gefundenen Vektorindex evaluiert wird.
- 23. Verfahren nach der Ausführungsform 1, wobei die Zellen eines linear indizierten Indexvektors (X) gleichmäßig beabstandet sind, so dass der Unterschied zwischen jeglichen zwei aufeinanderfolgenden Zellen des linear indizierten Indexvektors (X) immer der Gleiche ist; und
wobei Zellen eines stückweise indizierten Indexvektors (X) ungleichmäßig beabstandet sind, so dass ein Unterschied zwischen den zwei aufeinanderfolgenden Zellen des stückweise indizieren Indexvektors (X) anders als ein Unterschied zwischen anderen zwei aufeinanderfolgenden Zellen des stückweise indizierten Indexvektors (X) ist.