DE69325618T2 - Architektur zur Erzeugung einer kovarianten Matrize - Google Patents
Architektur zur Erzeugung einer kovarianten MatrizeInfo
- Publication number
- DE69325618T2 DE69325618T2 DE69325618T DE69325618T DE69325618T2 DE 69325618 T2 DE69325618 T2 DE 69325618T2 DE 69325618 T DE69325618 T DE 69325618T DE 69325618 T DE69325618 T DE 69325618T DE 69325618 T2 DE69325618 T2 DE 69325618T2
- Authority
- DE
- Germany
- Prior art keywords
- memory
- covariance matrix
- row
- register
- accumulator
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 239000011159 matrix material Substances 0.000 title claims description 100
- 230000015654 memory Effects 0.000 claims description 56
- 238000000034 method Methods 0.000 claims description 23
- 238000003491 array Methods 0.000 claims description 2
- LFVLUOAHQIVABZ-UHFFFAOYSA-N Iodofenphos Chemical compound COP(=S)(OC)OC1=CC(Cl)=C(I)C=C1Cl LFVLUOAHQIVABZ-UHFFFAOYSA-N 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 6
- 238000009825 accumulation Methods 0.000 description 5
- 238000005259 measurement Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- RRLHMJHRFMHVNM-BQVXCWBNSA-N [(2s,3r,6r)-6-[5-[5-hydroxy-3-(4-hydroxyphenyl)-4-oxochromen-7-yl]oxypentoxy]-2-methyl-3,6-dihydro-2h-pyran-3-yl] acetate Chemical compound C1=C[C@@H](OC(C)=O)[C@H](C)O[C@H]1OCCCCCOC1=CC(O)=C2C(=O)C(C=3C=CC(O)=CC=3)=COC2=C1 RRLHMJHRFMHVNM-BQVXCWBNSA-N 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Description
- Die vorliegende Erfindung betrifft ein Verfahren und eine Vorrichtung zum Erzeugen eines vorbestimmten Teils einer Kovarianzmatrix, die in einer bevorzugten Ausgestaltung durch eine CMOS-IC-Schaltung ausgebildet ist.
- Viele Anwendungsfälle enthalten Verfahren, die einen Schritt verlangen, bei denen die Variation zwischen Sets beliebiger Variablen gemessen wird. Diese Messwerte können in Form eines zweidimensionalen Arrays gespeichert oder angezeigt werden. Diese Arrays werden im folgenden als Kovarianzmatrizes bezeichnet.
- Ein Beispiel eines Anwendungsfalls, bei dem die Erzeugung einer Kovarianzmatrix erforderlich ist, ist die Implementierung des IS-54 Digital Cellular Radio Standard. Bei diesem Standard wird ein Sprachkodierer als Vector Sum Excited Linear Predictive Coding (VSELP) bekannter Sprachkodierer verwendet, der die. Berechnung einer Kovarianzmatrix erfordert, bei der als Eingangssignal ein Block digitaler Sprachproben verwendet wird. Die Sprachproben werden mit einer Abtastrate von 8 KHz aus einem analogen Eingangssignal gespeichert. Die Details des Standards IS-54 sind aufgeführt in EIA/TIA Document 2215 (Cellular System - Dual Mode Mobile Station/One State Compatibility Standard IS-54, Dezember 1989).
- Die Formel zum Erzeugen einer Kovarianzmatrix aus 170 Eingabe- Sprachproben ist in Gleichung 1 gezeigt, in der φ den Wert in der Reihe i, Spalte k der Kovarianzmatrix repräsentiert, NA die Gesamt-Anzahl der Eingabe-Sprachproben (NA = 170) repräsentiert, NP die maximale Reihen- und Spalten-Anzahl der Kovarianzmatrix angibt (NP = 10), und S(x) den Wert des xten Eingangs-Abtastwertes angibt.
- φ(i, k) = S(n - i)S(n - k)
- In Fig. 1A ist eine Wiedergabe einer durch Gleichung 1 erzeugten Kovarianzmatrix gezeigt, wobei x, y den Kovarianz-Messwert angibt, der in Reihe x, Spalte y der Kovarianzmatrix gespeichert ist.
- Fig. 1B zeigt ein mögliches Verfahren des Speicherns der Werte der Kovarianzmatrix gemäß Fig. 1A in einem Direktzugriffsspeicher (RAM). Es ist zu beachten, dass nur 66 RAM-Stellen benötigt werden, um eine 11-mal-11-Kovarianzmatrix zu speichern, da eine Kovarianzmatrix symmetrisch ist. Somit ist für jedes Element φ(i, k) in einer Kovarianzmatrix φ(i, k) = φ(k, i). Folglich brauchen nur die Elemente entlang des hauptsächlichen diagonalen und oberen (oder unteren) Dreiecks einer Kovarianzmatrix erzeugt und gespeichert zu werden, um die gesamte Kovarianzmatrix zu repräsentieren.
- Fig. 1C zeigt die Speicherungskonfigurationen für drei Matrizes F, B und C, bei denen es sich um Untergruppen der gemäß Fig. 1B gespeicherten Kovarianzmatrix handelt. Diese drei Matrizes sind ferner symmetrisch.
- Gleichung 1 zeigt eine Redundanz dahingehend, dass, falls die Elemente der Reihe 0 einer Kovarianzmatrix (d. h. φ(0, 0) bis φ(0, 10) erzeugt werden, die übrigen Elemente leicht mittels der nachstehenden Gleichung 2 erzeugt werden können:
- φ(i + 1, k + 1) = φ(i, k) + S(NP - i - 1)S(NP - k - 1) - S(NA - i - 1)S(NA - k - 1) (2)
- Die folgenden Gleichungen zeigen die Ableitung der Gleichung 2 für φ(1, 1).
- φ(0, 0) = S(10) S(10) + (S(11) S(11) + ... + S(169) S(169) φ(1, 1) = S(9) S(9) + (S(10) S(10) +... + S(168) S(168)
- Somit gilt φ (1, 1) = φ(0, 0) + S(9) S(9) - S(169)S(169).
- Die Implementierung von Gleichung 2 ist generell unkompliziert, indem Multiplikations-Akkumulations-Hardware verwendet wird. Jedoch müssen die Elemente der Reihe 0 (d. h. φ(0,0) bis φ(0,10) einer Kovarianzmatrix zuerst durch die Gleichung 1 erzeugt werden, bevor der Rest der Matrix durch die Gleichung 2 erzeugt wird.
- Die Operanden in den durch Gleichung 1 erforderlichen Multikationen sind Abtastwerte, die um eine feste Zahl voneinander versetzt sind. Die Formel zum Erzeugen von φ(0,1) lautet z. B. φ(0, 1) = S(10) S(9) + (S(11) S(10) +... + S(169) S(168).
- Bei diesem Beispiel sind die Operanden jeder Multiplikation Abtastwerte, die um eins voneinander versetzt sind.
- Gemäß dem Stand der Technik muss zum effizienten Implementieren einer Gleichung, die die Form der Gleichung 1 aufweist, ein Kovarianzmatrixgenerator entweder zwei separate Speicher, die die 170 Sprachproben enthalten, oder eine Pipeline an einem die 170 Sprachproben enthaltenden Speicher aufweisen. Blockschaltbilder dieser Architekturen sind in Fig. 2 bzw. 3 gezeigt.
- Das Pipeline-Verfahren ist eine Form der Verarbeitung, bei der eine funktionale Einheit ihren Vorgang in mehreren Schritten durchführt. Wenn der erste Schritt abgeschlossen ist, werden die Ergebnisse einem zweiten Schritt zugeführt, bei dem unterschiedliche Hardware verwendet wird. Die Hardware des ersten Schritts ist somit frei für den Beginn des Verarbeitens neuer Daten. Obwohl die Pipeline-Verarbeitung generell einen schnellen Durchsatz für sequentielle Vorgänge ermöglicht, wird sie typischerweise für Vorgänge verwendet, bei denen die zum Durchlaufen einer funktionalen Einheit eines Computersystems erforderliche Zeit andernfalls länger wäre als die Intervalle, an denen die Daten in diese funktionale Einheit eintreten können.
- Die Doppel-Speicher-Architektur gemäß Fig. 2 hat den offensichtlichen Nachteil, dass sie zweimal soviel Speicher benötigt wie die Pipeline-Architektur gemäß Fig. 3. Wenn jedoch ein Kovarianzmatrixgenerator, bei dem die Pipeline-Architektur gemäß Fig. 3 verwendet wird, z. B. φ(1,0) erzeugt, ist eine 10- Niveau-Pipeline erforderlich. Eine derartige Pipeline ermöglicht eine schneller Erzeugung einer Kovarianzmatrix, jedoch ist ihr Zweck einzig auf das Erzeugen einer Kovarianzmatrix zugeschnitten. Derartige Pipelines sind nicht (in irgendeiner offensichtlichen Weise) geeignet für andere Berechnungen, wie z. B. für die anderen Teile der Berechnungs-Anforderungen für VSELP.
- Somit besteht ein deutlicher Bedarf an der Schaffung eines effizienten Kovarianzmatrixgenerators, der problemlos als ein Ergebnisspeicher für generelle Zwecke verwendbar ist, bei dem jedoch nicht erforderlich ist, die Abtastwerte, auf denen die Matrix basiert, in zwei Speicher-Dateien zu speichern.
- Ferner besteht Bedarf an der Schaffung eines Kovarianzmatrixgenerators, der Kovarianzmatrix-Berechnungen effizient mit niedrigen Hardware-Kosten implementiert und der dem System einen zweckmäßigen "Notizbock"-Speicher für andere Berechnungen hinzufügt, um vorübergehende Ergebnisse zu speichern.
- Gemäß einem Aspekt der Erfindung wird eine Vorrichtung zum Erzeugen eines vorbestimmten Teils einer Kovarianzmatrix gemäß Anspruch 1 geschaffen.
- Gemäß einem weiteren Aspekt der Erfindung wird ein Verfahren zum Erzeugen eines vorbestimmten Teils einer Kovarianzmatrix gemäß Anspruch 8 angegeben.
- Der vorbestimmte Teil ist vorzugsweise eine erste Reihe der Kovarianzmatrix, und der vorbestimmte Teil ist vorzugsweise ein oberer oder unterer Dreieck-Abschnitt der Kovarianzmatrix, wobei der Speicher einen ersten Speicher und einen zweiten Speicher aufweist und der Multiplikations-Akkumulator mit den ersten und zweiten Speichern und dem Zirkular-Puffer verbunden ist;
- wobei eine arithmetische Logikeinheit mit dem zweiten Speicher und dem Multiplikations-Akkumulator verbunden ist;
- wobei das erste Element eine erste Reihe der Kovarianzmatrix ist, und wobei die übrigen Elemente übrige Elemente der ersten Reihe der Kovarianzmatrix sind;
- wobei eine Einrichtung vorgesehen ist, um das erste Element der ersten Reihe der Kovarianzmatrix in dem zweiten Speicher zu speichern;
- wobei eine Einrichtung vorgesehen ist, um die übrigen Elemente der ersten Reihe der Kovarianzmatrix in dem zweiten Speicher zu speichern;
- wobei eine Einrichtung vorgesehen ist, um in der arithmetischen Logikeinheit die übrigen Elemente des oberen oder unteren Dreieck-Abschnitts der Kovarianzmatrix zu erzeugen; und
- wobei eine Einrichtung vorgesehen ist, um die übrigen Elemente des oberen oder unteren Dreieck-Abschnitts der Kovarianzmatrix in dem zweiten Speicher zu speichern.
- Der Zirkular-Puffer kann eine Zwei-Port-Registerdatei mit einem Leseadressgenerator und einem Schreibadressgenerator aufweisen, wobei die Adressgeneratoren in Wrap-around Konfiguration ausgebildet sind, und die in der arithmetischen Einheit vorgesehene Erzeugungseinrichtung kann eine Einrichtung zum selektiven Zuführen von Daten aus dem ersten Speicher und der Datei des Zirkular-Puffers zu dem Multiplikations-Akkumulator, und eine Einrichtung zum selektiven Zuführen von Daten aus dem zweiten Speicher und dem Multiplikations-Akkumulator zu der arithmetischen Logikeinheit aufweisen.
- Vorzugsweise werden die übrigen Elemente des oberen oder unteren Dreieck-Abschnitts der Kovarianzmatrix in der arithmetischen Logikeinheit erzeugt, wo die erste Reihe der Kovarianzmatrix erzeugt wird, und die in der arithmetischen Einheit vorgesehene Erzeugungseinrichtung weist eine Einrichtung zum selektiven Zuführen von Daten aus dem zweiten Speicher zu der arithmetischen Logikeinheit auf.
- Vorzugsweise weist der Multiplikations-Akkumulator zwei Eingangsregister und ein Ausgangsregister auf;
- sind ein erster und ein zweiter Multiplexer vorgesehen, wobei der erste Multiplexer die zum gleichzeitigen Ausgeben vorgesehene Einrichtung aufweist und mit einem Eingangsregister des. Multiplikations-Akkumulators verbunden ist, und wobei der zweite Multiplexer mit dem anderen Eingangsregister des Multiplikations-Akkumulators verbunden ist;
- weist der Zirkular-Puffer eine Zwei-Port-Registerdatei mit einem Leseadressgenerator und einem Schreibadressgenerator auf, wobei der Ausgang der Registerdatei mit dem zweiten Multiplexer verbunden ist;
- ist ein dritter Multiplexer vorgesehen, der mit dem Eingang der Registerdatei verbunden ist;
- ist eine arithmetische Logikeinheit mit zwei Eingangsregistern und einem Ausgangsregister vorgesehen;
- sind ein vierter und ein fünfter Multiplexer vorgesehen, wobei der vierte Multiplexer mit einem Eingangsregister der arithmetischen Logikeinheit verbunden ist und der fünfte Multiplexer mit dem anderen Eingangsregister der arithmetischen Logikeinheit verbunden ist;
- weist die Ausgabeeinrichtung einen ersten Datenbus auf, der mit den ersten, zweiten, dritten, vierten und fünften Multiplexern verbunden ist, wobei der erste Datenbus ferner mit dem Ausgangsregister des Multiplikations-Akkumulators, dem Ausgangsregister der ALU und dem Ausgang des Dateiregisters verbunden ist;
- ist ein zweiter Datenbus vorgesehen, der mit den ersten, zweiten und vierten Multiplexern verbunden ist, wobei der zweite Datenbus ferner mit dem Ausgangsregister des Multiplikations- Akkumulators, dem Ausgangsregister der arithmetischen Logikeinheit und dem Ausgang der Registerdatei verbunden ist;
- ist ein dritter Datenbus vorgesehen, der mit dem dritten Multiplexer und dem fünften Multiplexer verbunden ist, wobei der dritte Datenbus ferner mit dem Ausgangsregister des Multiplikations-Akkumulators, dem Ausgangsregister der arithmetischen Logikeinheit und dem Ausgang der Registerdatei verbunden ist;
- wobei der erste Speicher ein Adressregister aufweist und der erste Speicher mit dem ersten Datenbus verbunden ist; und ein zweiter Speicher vorgesehen ist, der ein Adressregister aufweist, wobei der zweite Speicher mit dem zweiten Datenbus verbunden ist.
- Im folgenden wird die Erfindung anhand der zugehörigen Zeichnung erläutert, in der gleiche Elemente mit gleichen Bezugszeichen versehen sind:
- Fig. 1A zeigt eine 11-mal-11-Kovarianzmatrix, bei der jedes zusammengehörige Paar von Zahlen X, Y den Wert des Elementes von Reihe X, Spalte Y der Kovarianzmatrix repräsentiert;
- Fig. 1B zeigt die Weise, in der eine 11-mal-11-Kovarianzmatrix als Ergebnis ihrer Symmetrie-Eigenschaft in dem Speicher gespeichert werden kann;
- Fig. 1C zeigt symmetrische Untermatrizes der Kovarianzmatrix gemäß Fig. 1B;
- Fig. 2 zeigt ein Blockschaltbild eines Kovarianzmatrixgenerators, der Abtastwerte in zwei separaten Speichern speichert;
- Fig. 3 zeigt ein Blockschaltbild eines Kovarianzmatrixgenerators, der eine Register-Pipeline an einem Speicher aufweist;
- Fig. 4 zeigt ein Blockschaltbild eines Kovarianzmatrixgenerators gemäß einem Aspekt der vorliegenden Erfindung;
- Fig. 5 zeigt ein Flussdiagramm der Arbeitsweise eines Kovarianzmatrixgenerators gemäß einem Aspekt der vorliegenden Erfindung;
- Fig. 6 zeigt ein Diagramm der Datenübertragungssequenz im Zusammenhang mit den Taktzyklen;
- Fig. 7 zeigt ein Flussdiagramm des Vorgangs für das Erzeugen des ersten Elementes einer ersten Reihe einer Kovarianzmatrix;
- Fig. 8A-8C zeigen ein Flussdiagramm des Vorgangs zum Erzeugen der übrigen Elemente der ersten Reihe der Kovarianzmatrix;
- Fig. 9 zeigt ein Blockschaltbild eines erweiterten Kovarianzmatrixgenerators gemäß einem weiteren Aspekt der vorliegenden Erfindung;
- Fig. 10A-10B zeigen ein Flussdiagramm des Vorgangs zum Erzeugen der Haupt-Diagonalen einer Kovarianzmatrix;
- Fig. 11A-11B zeigen ein Flussdiagramm des Vorgangs zum Erzeugen der übrigen Elemente einer Kovarianzmatrix.
- In Fig. 4 ist ein Kovarianzmatrixgenerator 10 gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung gezeigt. Der Generator 10 enthält generell mehrere Direktzugriffsspeicher (RAM5) 12 und 48, eine Zwei-Port-Registerdatei 20 und mehrere Multiplexer 24 und 26. Der Generator 10 enthält ferner zwei Datenbusse 28 und 30 und einen (im folgenden als MAC bezeichneten) Multiplikations-Akkumulator 32.
- Bei dem MAC 32 handelt es sich um eine Drei-Niveau-Pipeline, und er weist zwei Eingangs-Port und einen Ausgangs-Port auf.
- Insbesondere ist nach drei Zyklen im Anschluss an das Zuführen zweier Operanden zu den Eingangs-Ports des MAC 32 das Produkt eines Multiplizierens oder Multiplizierens-Akkumulierens der Operanden an seinem Ausgangs-Port verfügbar. Diese Architektur minimiert die Hardware-Struktur des MAC 32 und fügt der Berechnungszeit einer einzelnen Multiplizierungs-Akkumulierungs- Operation eine Verlängerung von 3 Taktzyklen hinzu. Da jedoch jede Kovarianzmessung eines Sets von 170 Abtastwerten 160 Multiplizierungs-Akkumulierungs-Berechnungen verlangt (siehe Gleichung 1), beträgt der prozentuale Anstieg der Berechnungszeit des MAC 32 gegenüber einem Ein-Zyklus-Multiplikations- Akkumulator weniger als 2 Prozent.
- Der Adressgenerator 18 ist der "Lese"-Adressgenerator der Registerdatei 20, und der Adressgenerator 16 ist der "Schreib"-Adressgenerator der Registerdatei 20. Bei dem Verfahren des Evaluierens von Gleichung 1 mittels des Generators 10 wird die Registerdatei 20 als Zirkular-Puffer mit einer Tiefe von 10 Stellen verwendet. Die Adressgeneratoren 16 und 18 sind derart konfiguriert, dass sie ihren jeweiligen Adress- Pointern ermöglichen, im "Wrap-around" zu einer gegebenen Start-Adresse (Stelle 0) zu gelangen, wenn eine Grenz-Adresse (Stelle 9) erreicht worden ist. Falls beispielsweise der Pointer des Adressgenerators 16 inkrementiert wird, wenn er aufdie Stelle 9 der Registerdatei 20 weist, dann wird der Pointer durch Rücksetzen oder "Wrap-around" zu der Stelle O der Registerdatei 20 bewegt. In ähnlicher Weise wird, falls der Pointer des Adressgenerators 16 dekrementiert wird, wenn er auf die Stelle 0 der Registerdatei 20 weist, der Pointer durch Rücksetzen oder "Wrap-around" zu der Stelle 9 der Registerdatei 20 bewegt. Der Pointer der Adressgenerators 18 ist für ein gleichartiges "Wrap-around" konfiguriert.
- Ein Eingang in den MAC 32 wird direkt durch den Datenbus 28 geführt, während der andere durch den Multiplexer 24 gesteuert wird. Der Multiplexer 24 wird anfangs derart konfiguriert, dass er Daten aus dem Bus 28 zu dem Eingang des MAC 32 leitet, den er steuert. Der Multiplexer 28 steuert den Eingang in die Registerdatei 20, und wird anfangs derart konfiguriert, dass er Daten aus dem Datenbus 28 zu der Stelle der Registerdatei leitet, auf die der Adressgenerator 16 weist.
- Die Erzeugung einer Kovarianzmatrix kann gemäß den Schritten 52, 54, 56 und 58 gemäß Fig. 5 implementiert werden. Die Schritte 52 und 54 werden im Zusammenhang mit dem Generator 10 beschrieben, während die Schritte 56 und 58 im Zusammenhang mit dem erweiterten Generator beschrieben werden, der im folgenden anhand von Fig. 9 erläutert wird. Insbesondere wird in Schritt S2 das Element an Reihe 0, Spalte 0 der Kovarianzmatrix, φ(0, 0), erzeugt. In Schritt S4 werden die Messwerte zum Abschließen der ersten Reihe (Reihe 0) der Kovarianzmatrix, φ(10, 1) bis φ(10, 10), erzeugt. In Schritt S6 werden die Elemente der Haupt-Diagonalen der Matrix φ(1, 1) bis φ(10, 10), erzeugt, und in Schritt S8 werden die übrigen Elemente der Matrix erzeugt. Jeder dieser Schritte wird im folgenden anhand Fig. 7- 11B detaillierter beschrieben.
- Wie oben erwähnt, erzeugt in Schritt S2 der Generator 10 zuerst die Parameter φ(0, 0) einer Kovarianzmatrix gemäß Gleichung 1. Das Flussdiagramm für die Implementierung von Schritt 52 ist in Fig. 7 gezeigt. Insbesondere wird in Schritt 202 der Adressgenerator 14, der der Adressgenerator für das RAM 12 ist, derart eingestellt, dass er auf die Stelle 10 des RAM 12 weist, der Adressgenerator 16 wird derart eingestellt, dass er auf die Stelle 0 der Registerdatei 20 weist, und der Adressgenerator 18 wird deaktiviert. Die Multiplexer 24 und 26 sind derart konfiguriert, dass sie Daten aus dem Datenbus 28 akzeptieren. Nach der Initialisierung ist der Generator 10 derart konfiguriert, dass er es möglich macht, die Daten aus dem RAM 12 über den Datenbus 28 direkt in beide Eingänge des MAC 32 zu leiten.
- In Schritt 204 wird ein Zeitgeber gestartet, um 160 Multiplizierungen-Akkumulierungen zu erzeugen, und die Schritte 206 bis 214 werden jeweils ausgeführt, bis die 160 Multiplizierungen-Akkumulierungen erfolgt sind.
- In Schritt 206 wird der Abtastwert an der Position in dem RAM 12, auf die der Adressgenerator 14 weist, in beide Eingänge des MAC 32 eingegeben und in das Dateiregister 20 geschrieben. Der MAC 32 multipliziert die Eingangswerte und addiert das Produkt der Multiplikation der Summe der vorherigen Berechnungen hinzu. In Schritt 208 werden die Adressgeneratoren 14 und 16 synchron inkrementiert.
- Somit weist der Adressgenerator 14 sukzessiv auf die Adressen 10 bis 169 des RAM 12, die jeweiligen Werte S(10) bis S(169) enthalten. Wie bereits erwähnt, ist der Pointer des Adressgenerators 16 für ein Wrap-around konfiguriert. Somit wird in den Schritten 210 und 212, wenn der Adressgenerator 16 inkrementiert wird, sein Pointer durch Wrap-around zu der Stelle 0 bewegt, nachdem er auf die Stelle 9 gewiesen hat. Nach jedem "Wrap-around" werden durch die neuen Daten, die in die Registerdatei 20 geschrieben werden, die dort zuvor gespeicherten Daten überschrieben.
- Während der Iteration der Schritte. 206 bis 214 werden die Daten-Abtastwerte S(10) bis S(169) in die Eingangs-Ports des MAC 32 eingegeben, mit sich selbst multipliziert und den Ergebnissen der vorherigen Berechnungen akkumulierend hinzugefügt, um das Endergebnis φ(0, 0) zu erzeugen. Gleichzeitig werden S(10) bis S(169) sukzessiv in die Registerdatei 20 geschrieben. Da die Registerdatei 20 derart konfiguriert ist, dass sie in nur zehn Speicherstellen schreiben kann, werden nur die letzten zehn Eingangswerte in ihr gespeichert. Deshalb enthält, wenn 160 Multiplizierungen-Akkumulierungen abgeschlossen sind, das Ausgangssignal des MAC 32 φ(0,0), und die Registerdatei 20 ist in der gezeigten Weise konfiguriert, wobei X die Stelle in der Registerdatei 20 repräsentiert, auf die die entsprechenden Adressgeneratoren weisen (in diesem Fall wird der Adressgenerator 18 deaktiviert, und der Adressgenerator 16 zeigt auf die Stelle 9):
- In Schritt 216 wird das Ausgangssignal des MAC 32. (d. h. φ(0,0)) über den Datenbus 30 in dem RAM 48 gespeichert, und in Schritt 218 wird das Ausgangsregister des MAC 32 gelöscht. Der Adressgenerator 14 zeigt nun auf S(169) an der Stelle 169 des RAM 12, und der Adressgenerator 16 zeigt auf die Stelle 9 der Registerdatei 20, die auch S(169) enthält.
- Statt die anderen 10 Terme auf der Haupt-Diagonalen der Kovarianzmatrix (d. h. φ(1, 1) bis φ(10, 10) gemäß der obigen Gleichung 2 zu erzeugen, wird die vorliegende Konfiguration der Registerdatei 20 ausgenutzt, um die anderen 10 Elemente der Reihe 0 (d. h. φ(10, 1) bis φ(10, 10)) der Kovarianzmatrix zu erzeugen (Schritt S4).
- Die Implementierung des Schritts 54, für den ein Flussdiagramm in Fig. 8A bis 8C gezeigt ist, wird nun detaillierter beschrieben. Um die Erzeugung von φ(10, 1) zu beginnen, wird in Schritt 220 der Multiplexer 24 zum Lesen aus der Registerdatei 20 konfiguriert. Somit kommt ein Eingangssignal des MAC 32 nun aus der Registerdatei 20, während das andere Eingangssignal des MAC 32 immer noch aus dem RAM 12 kommt.
- Ähnlich wie bei der Erzeugung von φ(0, 0) erfordert die Erzeugung jedes der der Reihe 0 zugehörigen Elemente 160 Multiplizierungen-Akkumulierungen. Die Operanden, die für die Multiplikationen dieser Berechnungen erforderlich sind, sind jedoch fehlausgerichtet. Insbesondere sind für jedes Kovarianzelement φ(0, k) die Operanden der Multiplikationen, die zum Erzeugen von φ(0, k) erforderlich sind, um k Abtastwerte versetzt. Beispielsweise sind die Operanden der Multiplikationen, die zum Erzeugen von φ(0,1) erforderlich sind, um 1 Abtastwert versetzt (z. B. S(10) S(9), S(11) S(10) etc..). Folglich wird zur Handhabung dieser Versetzung bei der Erzeugung von φ(0,1) in Schritt 222 der Adressgenerator 14 derart neuausgerichtet, dass er auf die Stelle 168 in dem RAM 12 weist, und der Adressgenerator 16 wird derart neuausgerichtet, dass er auf die Stelle 8 in der Registerdatei 20 weist (d. h. die Adressgeneratoren 14 und 16 werden dekrementiert). Der Adressgenerator 18 wird derart neuausgerichtet, dass er auf die Stelle 9 in der Registerdatei 20 weist. Die Registerdatei 20 ist nun wie nachstehend gezeigt konfiguriert:
- Somit weist, um die Erzeugung von φ(0,1) zu beginnen, der Adressgenerator 14 auf die Stelle 168 in dem RAM 12, die den Wert S(168) hält, der Adressgenerator 16 weist auf die Stelle 8 in der Registerdatei 20, die den Wert S(168) hält, und der Adressgenerator 18 weist auf die Stelle 9 in der Registerdatei 20, die den Wert S(169) hält. Folglich werden die Werte S(168) aus dem Datenbus 28 und S(169) aus der Stelle 9 in der Registerdatei 20 zu Anfang in die Eingangs-Ports des MAC 32 geladen.
- In Schritt 124 werden die Adressgeneratoren 14, 16 und 18 in die Dekrementierungs-Betriebsart versetzt. Während der Multiplexer 26 noch Daten aus dem Datenbus 28 zu dem Schreib-Port der von dem Adressgenerator 16 adressierten Registerdatei 20 leitet, hat der Schreib-Port der Registerdatei 20 als Eingangssignal S(168) aus dem Datenbus 28.
- In Schritt 226 wird ein Zeitgeber derart initiiert, dass er einen Zähler für die 160 Multiplizierungen-Akkumulierungen bildet, die durch die Erzeugung von φ(0, 1) erforderlich sind. Somit beginnt der MAC 32 damit, das Produkt von S(169) und S(168) mit dem Produkt von S(168) und S(167) zu akkumulieren, etc. Die Registerdatei 20 befindet sich in einer Lese-/ Schreib-Betriebsart, in der die Daten aus der Stelle gelesen werden, auf die der Adressgenerator 18 während der ersten Hälfte des Taktzyklus weist, und Daten werden an die Stelle geschrieben, auf die der Adressgenerator 16 während der zweiten Hälfte des Taktzyklus weist. Diese Zeitsteuerung ist in Fig. 6 gezeigt.
- Somit wird in dem ersten Zyklus der Erzeugung von. φ(0, 1) S(169) aus der Registerdatei 20 gelesen, und S(168) wird in Schritt 228 aus dem RAM 12 gelesen. Diese Werte werden in Schritt 230 multipliziert und in dem MAC 32 akkumuliert. Dann wird in Sehritt 232 S(168) in der Registerdatei an die Stelle 8 geschrieben, auf die der Adressgenerator 16 weist. Als näch stes werden in Schritt 234 die Pointer der Adressgeneratoren 14, 16 und 18 dekrementiert, so dass der Adressgenerator 14 nun auf die Stelle 167 in dem RAM 12 weist, die den Wert S(167) hält, der Adressgenerator 18 nun auf die Adresse 8 in der Registerdatei 20 weist, die den Wert S(168) hält, und der Adressgenerator 16 auf die Adresse 7 der Registerdatei 20 weist, die den Wert S(167) von der Erzeugung von φ(0,0) hält. In den Schritten 236 und 238 führen die Pointer des Adressgenerators 16 und des Adressgenerators 18 ein Wrap-around durch; falls sie ihre Wrap-around-Grenze überschritten haben. In dem ersten Zyklus haben sie dies nicht getan, und somit rückt die Ausführung auf den Schritt 240. In Schritt 240 wird der Zeitgeber-Status geprüft. Falls keine 160 Iterationen abgeschlossen worden sind, wird die Ausführung zurück auf Schritt 228 geleitet.
- In dem zweiten Zyklus der Erzeugung von φ(0,1) multipliziert in den Schritten 228 bis 240 der MAC 32 S(167) aus dem RAM 12 mit S(168) aus der Registerdatei 20 und akkumuliert das Produkt dieser Multiplikation mit dem Produkt von S(169) und S(168). Dieser Vorgang wird fortgesetzt, bis sämtliche Terme von φ(0,1) erzeugt worden sind und in dem MAC 32 akkumuliert worden sind (d. h. für 160 Multiplizierungen-Akkumulierungen). Wie bereits erwähnt, werden während dieser Berechnungen jedes Mal, wenn die Stelle 0 erreicht wird, die Adressgeneratoren 16 und 18 synchron dekrementiert, um 1 Stelle versetzt und führen ein Wrap-around aus. Ferner werden die Wert in der Registerdatei 20 kontinuierlich überschrieben. Da jedoch der Adressgenerator 18 effektiv dem Adressgenerator 16 "voraus" ist und der Adressgenerator 18 stets zu dem nächsten Operanden für die Erzeugung von φ(0, 1) weist, wird die Erzeugung von φ(0,1) effektiv implementiert.
- Nach der Vervollständigung des Zeitgebers ist die Registerdatei 20 in der nachstehenden Weise konfiguriert.
- Der letzte Term bei der Erzeugung von φ(0, 1) ist S(10) S(9). Somit befindet sich der Wert S(10) an der Stelle der Registerdatei 20, auf die der Adressgenerator 20 derzeit weist, und der Wert von S(9) ist an die Stelle 9 der Registerdatei 20 geschrieben worden. Das Ausgangsregister des MAC 32 enthält nun den Wert von φ(0,1), und der Adressgenerator 14 weist auf die Stelle 9 in dem RAM 12, die den Wert S(9) hält.
- An diesem Punkt rückt die Ausführung auf Schritt 242, in dem φ(0,1) über den Datenbus 30 in das RAM 48 geschrieben wird und das Ausgangsregister des MAC 32 gelöscht wird. In Schritt 244 werden der Adressgenerator 14 und der Adressgenerator 16 noch einmal dekrementiert, so dass 5(8) aus dem RAN 12 an die Stelle 8 der Registerdatei 20 geschrieben werden kann (Überschreiben von S(18). In Schritt 246 wird der Adressgenerator 14 dann so eingestellt, dass er auf S(10) weist, und der Pointer des Adressgenerators 16 wird gegen den Pointer des Adressgenerators 18 ausgetauscht. Somit weist der Adressgenerator 14 nun auf S(10) an der Stelle 10 des RAM 12, der Adressgenerator 16 weist auf S(10) an der Stelle 0 der Registerdatei 20, und der Adressgenerator 18 weist auf S(8) an der Stelle 8 der Registerdatei 20. Der Adressgenerator 16 und der Adressgenerator 18 können entweder direkt so eingestellt werden, dass sie zu den gewünschten Stellen weisen, oder ihre Adress-Ausgänge können durch einen (nicht gezeigten) Adress-Multiplexer geschaltet werden. Die Pointer des Adressgenerators 16 und des Adressgenerators 18 sind nun um 2 außer Schritt.
- Der Generator 10 erzeugt nun φ(0,2) durch die folgende Gleichung:
- φ(0,2) = S(10)S(8) + S(11)S(9) +... + S(169)S(167).
- Die Konfiguration der Registerdatei 20 zu Beginn dieser Erzeugung ist nachstehend gezeigt:
- In Schritt 248 werden die Adressgeneratoren 14, 16 und 18 in die Inkrementierungs-Betriebsart versetzt. Die Konfigurationen der Multiplexer 24 und 26 bleiben unverändert. In Schritt 250 wird ein Zeitgeber gestartet, um 160 Multiplizierungen-Akkumulierungen für die Erzeugung von φ(0,2) zu erbringen. Wie in den Schritten 228 bis 240 der Erzeugung von φ(0,1) multipliziert-akkumuliert der MAC 32 in den Schritten 252 bis 260 die Terme von φ(0,2), und der Inhalt der Registerdatei 20 wird kontinuierlich überschrieben. Insbesondere schreibt, wenn der Adressgenerator 18 auf die S(17) enthaltende Stelle 7 der Registerdatei 20 weist, der Adressgenerator 16 S(19) an die Stelle 9. Bei dem vorherigen Taktzyklus wurde S(18) an die Stelle 8 geschrieben, um die Situation vorzubereiten, in der zwei Zyklen später der Adressgenerator 18 auf die Stelle 8 zugreifen würde.
- Nach Abschluß der Erzeugung von φ(0, 2) ist die Registerdatei 20 wie nachstehend gezeigt konfiguriert.
- Das Ausgangsregister des MAC 32 enthält φ(0,2). Die Ausführung wird mit dem Schritt 262 fortgesetzt, in dem das Ausgangssignal des MAC 32 in dem RAM 48 gespeichert wird und das Ausgangsregister des MAC 32 gelöscht wird.
- Vor der Erzeugung von φ(0,3) werden in Schritt 264 die Pointer der Adressgeneratoren 14, 18 und 16 derart eingestellt, dass sie auf die Position 166 des RAM 12 bzw. die Position 9 der Registerdatei 20 bzw. die Position 6 der Registerdatei 20 weisen. Somit weist der Adressgenerator 14 auf den Abtastwert S(166), der Adressgenerator 18 weist auf den Abtastwert S(169) und der Adressgenerator 16 weist auf den Abtastwert S(166). Die Pointer des Adressgenerators 16 und des Adressgenerators 18 können eingestellt werden, indem deren jeweilige Pointer direkt auf die angezeigten Stellen eingestellt werden oder indem der Pointer des Adressgenerators 18 um 1 dekrementiert wird und dessen Pointer durch einen (nicht gezeigten) Adress multiplexer gegen denjenigen des Adressgenerators 16 ausgetauscht wird.
- In Schritt 266 wird geprüft, ob sämtliche Elemente der Reihe 0 erzeugt worden sind. Da dies nicht der Fall ist, geht die Ausführung zurück auf den Schritt 224. In Schritt 224 werden die Adressgeneratoren 14, 16 und 18 in die Dekrementierungs- Betriebsart versetzt. Somit ist zu Beginn der Erzeugung von φ(0,3) die Registerdatei 20 wie nachstehend gezeigt konfiguriert.
- Das Kovarianzmatrixelement φ(0,3) wird dann gemäß den oben beschriebenen Schritten 226 bis 242 erzeugt. Im einzelnen wird in Schritt 226 wieder ein Zeitgeber gestartet, um die 160 Multiplizierungen-Akkumulierungen zu erzeugen. Wenn die 160 Multiplizierungen-Akkumulierungen abgeschlossen sind, hat da Ausgangssignal des MAC32 den Wert φ(0, 3), der gemäß Schritt 242 dann in dem RAM 48 gespeichert wird. Das Ausgangsregister des MAC32 wird dann gelöscht. Nach Abschluß der Erzeugung von φ(0, 3) ist die Registerdatei 20 wie nachstehend gezeigt konfiguriert.
- Nach der Erzeugung von φ(0,3) werden der Adressgenerator 14 und der Adressgenerator 16 gemäß Schritt 244 dekrementiert, so dass S(6) an die Stelle 6 geschrieben werden kann. In Schritt 246 wird der Adressgenerator 14 dann derart rückgesetzt, dass er auf die Stelle 10 des RAM 12 weist, und die Pointer der Adressgeneratoren 16 und 18 werden ausgetauscht. Dann weist zu Beginn der Erzeugung von φ(0,4) der Adressgenerator 14 auf S(10), der Adressgenerator 16 weist auf S(10), und der Adressgenerator 18 weist auf S(6). In Schritt 248 werden die Adressgeneratoren 14, 16 und 18 dann in die Inkrementierungs-Betriebsart versetzt.
- Diese Abfolge von Operationen wird wiederholt, bis das letzte Element der Reihe 0 der Kovarianzmatrix, φ(0,10), erzeugt worden ist. Insbesondere befindet sich bei Abschluß der Erzeugung von φ(0,9) die Ausführung auf Schritt 244, und die Registerdatei 20 ist wie nachstehend gezeigt konfiguriert:
- Wie zuvor werden in Schritt 244 der Adressgenerator 14 und der Adressgenerator 16 dekrementiert, so dass der Adressgenerator 16 auf die Stelle 0 zeigt, und S(0) wird an die Stelle 0 der Registerdatei 20 geschrieben. In Schritt 246 wird der Adressgenerator 14 dann auf S(10) rückgesetzt, und die Adressgeneratoren 16 und 18 werden ausgetauscht (beide weisen auf die Adresse 0). In Schritt 248 werden die Adressgeneratoren 14, 16 und 18 dann in die Inkrementierungs-Betriebsart versetzt. Das letzte Matrix-Reihe-0-Element, φ(0,10), wird dann gemäß der folgenden Gleichung erzeugt:
- φ(0, 10) = S(10)S(0) + S(11)S(1) + (S(11) S(1) +... + S(169) S(159).
- Insbesondere weist der Adressgenerator 14 auf S(10) in dem RAM 12, und beide Adressgeneratoren 16 und 18 weisen auf S(0) an der Stelle 0 der Registerdatei 20. Da der. Generator 10 derart konfiguriert ist, dass zu jedem gegebenen Taktzyklus Lesevorgänge vor Schreibvorgängen erfolgen, wird in Schritt 252 zunächst S(0) aus der Stelle 0 der Registerdatei 20 gelesen, und dann wird S(10) an der Stelle 0 der Registerdatei 20 über S(0) geschrieben. Zu Abschluß der Erzeugung von φ(0,10) wird das Ausgangssignal des MAC 32 in dem RAM 48 gespeichert, und das Ausgangssignal des MAC 32 wird gemäß Schritt 262 gelöscht. Schritt 264 kann während dieses letzten Zyklus wahlweise über sprungen werden, da die Pointer der Adressgeneratoren 14, 16 und 18 zu Beginn von Schritt S6 auf neue Werte gesetzt werden.
- Schritt S4 ist nun abgeschlossen, und die Kovarianzmatrixelemente 4(0,0) bis φ(0,10) sind erzeugt und gespeichert worden. Während des Schritts 56 werden die übrigen Elemente der Haupt- Diagonalen der Kovarianzmatrix, φ(1, 1) bis φ(0, 10), gemäß Gleichung 2 erzeugt. Insbesondere wird φ(1, 1) entsprechend der folgenden Formel erzeugt:
- 4(1, 1) = φ(0, 0) + S(9) S(9) - S(169) S(169).
- Die Erläuterung der Implementierung der Schritte 56 und 58 erfolgt anhand Fig. 9, die eine erweiterte Ausführungsform des Kovarianzmatrixgenerators 100 zeigt. Dem Fachmann auf dem Gebiet ist direkt ersichtlich, dass die Schritte 52 und 54 durch den Generator 100 in der oben im Zusammenhang mit dem Generator 10 beschriebenen Weise implementiert werden können. Bei der Erläuterung der Schritte 56 und 58 wird angenommen, dass die Schritte 52 und 54 durch den Generator 100 wie oben beschrieben ausgeführt worden sind.
- Fig. 9 zeigt den Kovarianzmatrixgenerator 100 gemäß einer exemplarischen Ausführungsform der vorliegenden Erfindung. Der Generator 100 enthält generell mehrere Direktzugriffsspeicher (RAM) 112 und 152, mehrere Adressgeneratoren 114, 116, 118 und 150, eine Zwei-Port-Registerdatei 120 und mehrere Multiplexer 102, 104, 106, 108 und 126. Der Generator 10 enthält ferner drei Datenbusse 128, 130 und 154, und einen Multiplikations- Akkumulator (MAC) 132 und eine arithmetische Logik-Einheit (ALU) 110, deren Ausgangsregister das ALU-Ausgangssignal halten kann oder es durchlässig zu dem Datenbus 130 weiterleiten kann.
- Der MAC 132 hat zwei Eingangs-Ports und einen Ausgangs-Port und ist ähnlich wie der oben beschriebene MAC 32 als 3-Niveau- Pipeline konzipiert. Ein Eingang in den MAC 132 wird durch den Multiplexer 102 gesteuert, während der andere durch den Multiplexer 104 gesteuert wird. Zu Beginn des Schritts 56, dessen spezieller Ablauf in Fig. 10A und 10B gezeigt ist, werden sowohl der Multiplexer 102 als auch der Multiplexer 104 derart konfiguriert, dass sie gemäß Schritt 300 Daten aus dem Datenbus 128 zu dem MAC 132 leiten.
- Die Registerdatei 120 ist als Zirkular-Puffer mit einer Tiefe von 20 Stellen konzipiert. Der Adressgenerator 118 ist der "Lese"-Adressgenerator der Registerdatei 120, und der Adressgenerator 116 ist der "Schreib"-Adressgenerator der Registerdatei 120. Die Adressgeneratoren 116 und 118 sind derart konfiguriert, dass sie ihren jeweiligen Adress-Pointern ermöglichen; in der oben beschriebenen Weise ein "Wrap-around" durchzuführen. Der Multiplexer 126 steuert den Eingang in die Registerdatei 120 und ist derart konfiguriert, dass er Daten aus dem Datenbus 128 an die Stelle der Registerdatei 120 leitet, auf die der Adressgenerator 116 weist.
- Die ALU 110 hat zwei Eingänge, die durch den Multiplexer 106 und den Multiplexer 108 gesteuert werden. Während der Schritte 56 und 58 wird die ALU 110 verwendet, um die Ausgangssignale des MAC 132 zu akkumulieren. Somit wird zum Abschluß des Schritts 54 der MAC 132 in eine Nur-Multiplikations-Betriebsart versetzt.
- Der Adressgenerator. 114 ist der Adressgenerator des RAM5 112 und ist mit zwei modifizierbaren Pointern versehen. In Schritt 302 wird zunächst der erste modifizierbare Pointer des Adressgenerators 114 derart eingestellt, dass er auf die Stelle 9 des RAM 112 weist, und der zweite Adress-Pointer des Adressgenerators 114 wird zunächst derart eingestellt, dass er auf die Stelle 169 des RAM 112 weist. In Schritt 304 werden zunächst beide Adress-Pointer des Adressgenerators 114 in die Dekrementierungs-Betriebsart versetzt. Der Adressgenerator 114 ist ferner derart konfiguriert, dass jeder seiner beiden Pointer den Adressbus 128 auf alternierende Taktzyklen steuern kann, wie im folgenden gezeigt:
- Folglich liefert der Datenbus 128 sequentiell die Werte S(9), S(169), S(8), S(168), ..., S(0), S(160). In der oben erläuterten Konfiguration beginnt der Generator 100 die Erzeugung der diagonalen Elemente φ(1,1) bis φ(10, 10). Insbesondere werden in Schritt 306 beiden Eingängen des MAC 132 sukzessiv die Werte S(9), S(169), ..., S(0), S(160) aus dem Datenbus 128 zugeführt.. Somit gibt der MAC 132 sukzessiv die Produkte S(9), S(9), S(9), S(169), S(169),..., S(0), S(0), S(160), S(160) aus. Durch Lesen des Datenbusses 128 während alternierender Ausführungen des Schritts 306 gibt das Dateiregister 120 die Werte S(0) bis S(9) ein.
- Ferner werden während des Schritts 306 die Ausgangssignale des MAC 132 sequentiell über den Datenbus 130 dem Multiplexer 108 der ALU 110 zugeführt. In den Schritten 308 und 310 übermittelt das RAM 152 im ersten Fall φ(0, 0) aus dem RAM 152 über den Datenbus 154 an den Multiplexer 106. Drei Taktzyklen nach dem Eingeben von S(9) in die beiden·Eingänge des MAC 132 gibt der MAC 132 S(9)S(9) aus. In dem nächsten Taktzyklus wird gemäß Schritt 314 S(9)S(9) zu φ(0, 0) in der ALU 110 hinzuad diert. Die Summe von φ(0, 0) und S(9) S(9) wird in dem gleichen Zyklus an dem Ausgang der ALU 110 verfügbar. In Schritt 316 wird diese Summe über den Datenbus 154 an den Multiplexer 106 zum weiteren Zugriff weitergegeben. Der Ausgang der ALU 110 ist, obwohl dieser mit dem Datenbus 130 verbunden ist, während dieses Vorgangs von dem Datenbus 130 isoliert. In Schritt 318 erzeugt der MAC 132 S(169)S(169), das in Schritt 320 zu dem Multiplexer 108 übertragen wird. Das Ausgangssignal der ALU 110 wird gemäß Schritt 322 direkt dem Datenbus 154 und somit dem Multiplexer 106 zugeführt. In dem 5ten Zyklus wird gemäß Schritt 320 das Produkt S(169)5(169) aus dem Ausgang des MAC 132 über den Datenbus 130 in den Multiplexer 108 eingegeben, und in Schritt 324 subtrahiert die ALU 110 diesen Wert von der vorherigen Akkumulation. Diese Operation ergibt φ(0,0) + S(9) S(9) - S(169) S(169), was gleich φ(1, 1) ist. Während des Zyklus 5 wird das Ausgangssignal der ALU 110 auf dem Datenbus 154 verfügbar, wird in Schritt 326 in das RAM 152 geschrieben und wird gleichzeitig dem Multiplexer 106 zur Erzeugung von φ(2, 2) gemäß der nachstehend gezeigten Gleichung zugeführt:
- φ(2, 2) = φ(1, 1) + S(8)S(8) - S(168)S(168).
- In Schritt 328 wird geprüft, ob die Haupt-Diagonale vervollständigt worden ist. Da dies nicht der Fall ist, beginnt, die Ausführung erneut auf Schritt 306.
- Da die Produkte S(8)S(8) und S(168)S(168) die nächsten beiden Ausgangssignale aus dem MAC 132 sind, wird der soeben im Zusammenhang mit den Schritten 306 bis 328 beschriebene Vorgang ohne eine Unterbrechung in der Pipeline des MAC 132 wiederholt; bis φ(10, 10) erzeugt worden ist und in dem RAM 152 gespeichert worden ist. Die Datenbusse 128, 130 und 154 werden bei dieser Operation sämtlich ohne Konflikt benutzt.
- Wie bereits gezeigt, enthält bei Abschluß des Schritts 54 die Registerdatei 120 die Werte S(160) bis S(169) an zehn ihrer Stellen. Zusätzlich werden bei der Ausführung des Schritts 56 die Werte S(0) bis S(9) zu den übrigen zehn Stellen der Registerdatei 120 übertragen. Wie gezeigt, tritt bei dieser Übertragung keine Überlastung auf, da während der Erzeugung von φ(1, 1) bis φ(10, 10) aus dem RAM 112 über den Datenbus 128 auf die Werte S(0) bis S(9) zugegriffen wird. Ferner enthält am Ende von Schritt S6 das RAM 152 φ(0, 0) aus dem Schritt 52, φ(0, 1) bis φ(0, 10) aus dem Schritt S4 und φ(1, 1) bis 4(10,10) aus dem Schritt 56.
- Da während des Schritts 56 die Werte S(0) bis S(10) an die Registerdatei 120 übertragen wurden, wird die Registerdatei 120 mit den geeigneten Werten konfiguriert, um während des Schritts 58 dem MAC 132 ein Eingangssignal, zuzuführen. Folglich wird in Schritt 350 der Multiplexer 104 zum Zugriff auf die Daten aus der Registerdatei 120 konfiguriert. Wie während des Schritts 56 wird während des Schritts 58 das andere Eingangssignal des. MAC 132 über den Datenbus 128 direkt aus dem RAM 112 zugeführt. Somit wird die Pipeline des MAC 132 gefüllt gehalten.
- Zum Erzeugen von 4(1, 2) und anschließender diagonaler. Werte müssen die in der Registerdatei 120 gespeicherten Werte verwendet werden. Es besteht immer noch kein Konflikt auf den Datenbussen, da die Registerdatei 120 eines der Eingangssignale über den Multiplexer 104 an den MAC 132 ausgeben kann. Wie in Schritt S6 ist der Ausgang der Registerdatei 120 mit dem Datenbus 130 verbunden, jedoch von diesem isoliert.
- Zum Implementieren des Schritts 58, während dessen die Werte φ(1, 2) bis φ(9, 10) erzeugt werden, ist der Adressgenerator 118 der Registerdatei 120 mit zwei Pointern konfiguriert, von denen beide dekrementierbar sind. Wiederum hat der Adressgenerator 114 zwei Adress-Pointer, die in alternierenden Zyklen dem Datenbus 128 Werte S(169) bis S(161) und S(9) bis S(1) zuführen.
- In Schritt 352 werden die Pointer des Adressgenerators 118 der Registerdatei 120 derart konfiguriert, dass sie in alternierenden Zyklen Werte S(168) bis S(160) und S(8) bis S(0) zuführen.
- Somit führt während des Schritts 354 das RAM 112 einem Eingang des MAC 132 die Werte S(9), S(169), S(8), S(168), ..., S(1) S(161) zu, wobei der Datenbus 128 und der Multiplexer 102 verwendet werden, während die Registerdatei 120 dem anderen Eingang des MAC 132 die Werte S(8), S(168), S(7), S(167), ..., S(0) S(160) zuführt, wobei der Multiplexer 104 verwendet wird. Die sequentiellen Ausgangssignale aus dem MAC 132 (das noch ausschließlich zum Multiplizieren konfiguriert ist) sind:
- S(9), S(8), S(169), S(168), ..., S(1) S(0), S(161) S(160).
- Der ALU 110 wird der Wert φ(0, 1) aus dem RAM 152 über den Multiplexer 106 und das Ausgangssignal des MAC 132, S(9)S(8), über den Multiplexer 108 gemäß den Schritten 356 bis 360 zugeführt: In den Schritten 366 bis 370 wird der ALU 110 dann die Summe der letzten Berechnung und das nächste Ausgangssignal des MAC 132, S(169)(5168), zugeführt, und in Schritt 372 subtrahiert sie das letztere von dem ersteren, was φ(1, 2) ergibt. In Schritt 374 wird 4(1, 2) in dem RAM 152 gespeichert. Dieser Vorgang wird gemäß den in Fig. 11A bis 11B gezeigten Schritten wiederholt, wobei die Pointer des RAM 112 und der Registerdatei 120 in geeigneter Weise geändert werden, bis gemäß der Bestimmung in Schritt 376, sämtliche der Elemente des oberen Dreieck-Abschnitts der Kovarianzmatrix erzeugt worden sind. Während dieses Vorgangs wird die Pipeline des MAC 132 gefüllt gehalten, und sämtliche der diagonalen Elemente φ(1, 2) bis φ(9, 10) werden effizient erzeugt und aus dem Ausgang der ALU 110 über den Datenbus 154 gespeichert.
- Die Anzahl der Maschinenzyklen zum Abschließen der Schritte 52 und 54 mittels des Generators 100 beträgt ungefähr 1.763. Im einzelnen erfordert die Erzeugung von φ(0,0) bis φ(0, 10) elf Multiplizierungen-Akkumulierungen und 3 Pipeline-Zyklen, was gleich 1.763 Zyklen ist. Ferner können zusätzliche Zyklen für die Adresserzeugungs- und Rücksetz-Beanspruchung erforderlich sein.
- Der Mehraufwand für die Schritte 52 und 54 beträgt drei Pipeline-Zyklen, da die endgültigen Adressen zum Erzeugen von φ(0, 0) der Registerdatei 120 und dem RAM 112 drei Zyklen vor dem Zeitpunkt zuführt, zu dem φ(10, 0) zur Speicherung in dem RAM 152 zur Verfügung steht. Diese Verzögerung um drei Zyklen kann jedoch verwendet werden, um die Adresserzeugungs-Belastung zu minimieren. Insbesondere können während der 3-Zyklen- Verzögerung die Adress-Pointer für das RAM 112 und die Registerdatei 120 auf die Werte rückgesetzt werden, die zum Beginnen der Berechnung des nächsten Kovarianzelementes erforderlich sind.
- Schritt S6, während dessen die Elemente φ(1, 1) bis φ(10, 10) erzeugt werden, erfordert ungefähr zwanzig Multiplikationsoperationen, wobei die ALU-Addierungen/Subtrahierungen parallel zu der Mehrfach-Pipeline-Operation erfolgen.
- Schritt S8, während dessen der Rest der Kovarianz-Pipeline erzeugt wird, erfordert ungefähr 110 Multiplikationen und drei Pipeline-Zyklen. Somit erfordert die Erzeugung einer Kovarianzmatrix mit dem Generator 100 insgesamt nur 1.876 Zyklen plus dem gesamten Aufwand des Rücksetzens des Adressgenerators.
- Falls der MAC 32 derart modifiziert ist, dass er das Akkumulieren von Multiplikationen erlaubt, während er Multiplikationen ausgibt, kann das oben beschriebene Verfahren zum Erzeugen einer Kovarianzmatrix dahingehend modifiziert werden, dass eine Einsparung von ungefähr 55 Zyklen ermöglicht wird. Insbesondere kann, statt die Elemente der Reihe 0, φ(0,0) bis φ(0,10) separat von ihren jeweiligen diagonalen Elementen zu erzeugen, der MAC 132 derart konfiguriert sein, dass er die diagonalen Elemente erzeugt, während er die Elemente der Reihe 0 erzeugt, womit 55 redundante Berechnungen vermieden werden.
- Beispielsweise werden die Produkte S(10)S(10) bis S(169)S(169) während der Berechnung von φ(0,0) wie nachstehend gezeigt berechnet:
- φ(0, 0) = S(10) S(10) + (S(11) S(11) +... + S(169) S(169).
- Es sind jedoch zehn der Faktoren, die bei der Erzeugung von φ(0, 0), S(160) S(160) bis S(169) S(169) verwendet werden, auch Faktoren, die zum Erzeugen diagonaler Elemente φ(1, 1) bis φ(10,10) verwendet werden, wie nachstehend gezeigt:
- φ(1, 1) = φ(0, 0) + S(9) S(9) - S(169) S(169). φ(2, 2) = φ(1, 1) + S(8) S(8) - S(168) S(168).
- φ(10,10) = φ(9, 9) + S(0)S(0) - S(160)S(160).
- Statt jeden der Werte S(160)S(160) bis S(169)S(169) zweimal zu berechnen, können diese redundanten Berechnungen vermieden werden, indem das oben beschriebene Verfahren zum Erzeugen der Kovarianzmatrix wie folgt modifiziert wird:
- Das Kovarianzelement φ(0, 0) wird wie oben beschrieben erzeugt, außer dass der Adressgenerator 114 derart eingestellt wird, dass er zunächst auf die Stelle 0 in dem RAM 112 weist, die S(0) enthält, und der Zeitgeber derart eingestellt wird, dass er 170 statt 160 Operationen durchführt. Während der ersten zehn Taktzyklen werden S(0)S(0) bis S(9)S(9) durch den MAC 132 erzeugt, jedoch nicht akkumuliert. Statt dessen werden diese 10 Parameter unmittelbar aus dem MAC 132 ausgegeben und über den Datenbus 154 in dem RAM 152 gespeichert. Da der Datenbus 154 ansonsten nur in Schritt S2 verwendet wird, um das endgültige erzeugte Element in dem RAM 48 zu speichern, treten keine Konflikte auf.
- Nachdem S(0)S(0) bis S(9)S(9) gespeichert worden sind, wird φ(0, 0) in der bereits beschriebenen Weise erzeugt. Wenn jedoch die letzten zehn Faktoren bei der Erzeugung von S(160) S(160) bis S(169)S(169) aus dem MAC 132 verfügbar sind, werden auch diese über den Datenbus 154 in dem RAM 152 gespeichert. Nachdem φ(0, 0) erzeugt und gespeichert worden ist, enthält das RAM 48 φ(0, 0), S(0) S(0) bis S(9) S(9), und S(160) S(160) bis S(169) S(169). Somit enthält das RAM 48 sämtliche erforderlichen Daten zum Erzeugen der diagonalen Elemente φ(1, 1) bis φ(10, 10).
- Während der Erzeugung des nächsten Elementes in der Reihe 0 der Matrix, φ(0,1), kann die ALU 110 über den Datenbus 154 während der Speicherung der ersten Gruppe der Multiplikationen und während der Speicherung der letzten Gruppe von Multiplikationen jederzeit auf die in dem RAM 152 gespeicherten Daten zugreifen, außer wenn die Erzeugung eines neuen Elementes der Reihe 0 abgeschlossen worden ist, ohne dass ein Bus-Konflikt auftritt.
- Insbesondere verwendet während des Erzeugens von φ(0, 1) der MAC 132 den Datenbus 154 während der ersten 9 Betriebszyklen, um die Werte S(1) S(0) bis S(9) S(8) in dem RAM 152 zu speichern, verwendet den Datenbus 154 nicht für die nächsten 150 Zyklen während des Akkumulierens von S(10)S(9) bis S(160) S(159), und verwendet den Datenbus 154 erneut, um die letzten neun Faktoren von φ(0,1), S(161)S(161) bis S(169)S(169) in dem RAM 152 zu speichern. Während der 150-Zyklen-Ruhephase, wenn der Datenbus 154 und das RAM 152 von dem MAC 132 nicht verwendet werden, kann die ALU 110 den Datenbus 154 und das RAM. 152 verwenden, um φ(1, 1) bis φ(10,10) zu erzeugen, die übrigen Elemente in der ersten Diagonalen der Kovarianzmatrix. Somit benutzt die ALU 110, während der MAC 132 φ(0,1) erzeugt, den Datenbus 154 und das RAM 152, um φ(1, 1) bis φ(10, 10) zu berechnen, und speichert das Ergebnis zurück in das RAM 152.
- Die Erzeugung jedes der diagonalen Elemente erfordert vier Zyklen, und die Erzeugung vony (1, 1) bis φ(10,10) erfordert somit 10 · 4 = 40 Zyklen. Diese Erzeugungsvorgänge können somit leicht während der 150-Zyklen-Ruhephase abgeschlossen werden, während derer der MAC 132 die Verwendung des Datenbusses 154 oder des RAM5 152 für die Erzeugung von φ(0,1) nicht benötigt. Da S(160) S(160) bis S(169) S(169) während der Erzeugung von φ(0, 0) gespeichert werden, wird die redundante Berechnung dieser Werte für die Erzeugung von φ(1, 1) bis φ(10, 10) vermieden, was eine Ersparnis von 10 Multiplikationen ergibt.
- Dieser Vorgang wird wiederholt, bis sämtliche Elemente der Kovarianzmatrix erzeugt worden sind. Beispielsweise werden, während φ(0, 1) in dem MAC 132 erzeugt wird, die diagonalen Elemente φ(1, 1) bis φ(10, 10) durch die ALU 110 erzeugt und in dem RAM 152 gespeichert, und die Werte S(1) S(0) bis S(9) S(8) und S(161)S(160) bis S(169)S(168) werden ebenfalls in dem RAM 152 gespeichert. Diese Werte werden dann von der ALU 110 verwendet, um die Elemente der nächsten Diagonalen, φ(1, 2) bis φ(9, 10) zu erzeugen, während φ(0, 3) in dem MAC 132 erzeugt wird.
- Somit arbeiten der MAC 132 und die ALU 110 parallel, wobei sie die Ressourcen des Generators 100 effizient ausnutzen. Diese Modifikationen können leicht implementiert werden, da bei ihnen die gleichen Adressierschemata verwendet werden, die oben beschrieben wurden. Insgesamt ergibt die oben beschriebene Modifikation eine Ersparnis von 10 Zyklen beim ersten Durchlauf, 9 Zyklen beim zweiten Durchlauf, 8 Zyklen beim dritten, etc., so dass sich eine Gesamtersparnis von 55 Zyklen ergibt.
- Somit werden die Pipeline-Kapazitäten der Architektur voll ausgenutzt, und es erfolgt eine parallele Verarbeitung, die sich die Existenz mehrerer funktionaler Einheiten zunutze macht. Insbesondere arbeiten die Registerdatei 120, die ALU 110, der MAC 132 und die RAM5 112 und 152 sämtlich parallel, so daß sich eine hohe Leistung bei der Implementierung der Kovarianzmatrix-Berechnung für VSELP ergibt.
- Obwohl spezielle Ausführungsformen der Erfindung beschrieben und gezeigt worden sind, ist ersichtlich, daß an den Details der speziell gezeigten und beschriebenen Ausführungsformen Veränderungen vorgenommen werden können, ohne von dem Umfang der Erfindung, der in den beigefügten Ansprüchen definiert ist, abzuweichen. Beispielsweise wurden die oben beschriebenen Ausführungsbeispiele der Erfindung anhand einer 11-mal-11 Matrix auf der Basis von 170 Abtastwerten erläutert. Die Erzeugungsarchitektur und die Erzeugungsverfahren, die hier beschrieben sind, sind jedoch problemlos derart modifizierbar, daß Kovarianzmatrizes jeder beliebigen Dimension auf der Basis jeder beliebigen Anzahl von Eingangs-Abtastwerten erzeugt werden können.
Claims (12)
1. Vorrichtung zum Erzeugen eines vorbestimmten Teils einer
Kovarianzmatrix, wobei der vorbestimmte Teil eine erste
Reihe der Kovarianzmatrix enthält, mit:
einem Speicher (12), der ein Array von Werten enthält,
welche mehrere Abstastwerte repräsentieren;
einem mit dem Speicher verbundenen Zirkular-Puffer (20);
der so konfiguriert ist, dass er eine vorbestimmte Anzahl
von Speicherstellen aufweist;
einem Multiplikations-Akkumulator (32), der mit dem
Speicher und dem Zirkular-Puffer verbunden ist;
einer Einrichtung (28) zum Ausgeben einer sequentiellen
Untergruppe des Arrays von Werten aus dem Speicher an den
Multiplikations-Akkumulator, um ein erstes Element der
ersten Reihe der Kovarianzmatrix zu erzeugen; und
einer Einrichtung (24), um gleichzeitig an den
Multiplikations-Akkumulator eine erste Serie sequentieller
Untergruppen des Arrays von Werten aus dem Speicher, und eine
zweite Serie sequentieller Untergruppen des Arrays von
Werten aus dem Zirkular-Puffer auszugeben, um die übrigen
Elemente der ersten Reihe der Kovarianzmatrix zu erzeugen.
2. Vorrichtung nach Anspruch 1, bei der der vorbestimmte Teil
eine erste Reihe der Kovarianzmatrix ist.
3. Vorrichtung nach Anspruch 1, bei der der vorbestimmte Teil
ein oberer oder unterer Dreieck-Abschnitt der
Kovarianzma
trix ist, wobei der Speicher einen ersten Speicher (12,
112) und einen zweiten Speicher (48, 152) aufweist und der
Multiplikations-Akkumulator mit den ersten und zweiten
Speichern und dem Zirkular-Puffer verbunden ist;
wobei eine arithmetische Logikeinheit (110) mit dem
zweiten Speicher und dem Multiplikations-Akkumulator verbunden
ist,
wobei eine Einrichtung vorgesehen ist, um das erste
Element der ersten Reihe der Kovarianzmatrix in dem zweiten
Speicher zu speichern;
wobei eine Einrichtung vorgesehen ist, um die übrigen
Elemente der ersten Reihe der Kovarianzmatrix in dem
zweiten Speicher zu speichern;
wobei eine Einrichtung vorgesehen ist, um in der
arithmetischen Logikeinheit die übrigen Elemente des oberen oder
unteren Dreieck-Abschnitts der Kovarianzmatrix zu
erzeugen; und
wobei eine Einrichtung vorgesehen ist, um die übrigen
Elemente des oberen oder unteren Dreieck-Abschnitts der
Kovarianzmatrix in dem zweiten Speicher zu speichern.
4. Vorrichtung nach einem der Ansprüche 1 bis 3, bei der der
Zirkular-Puffer eine Zwei-Port-Registerdatei mit einem
Leseadressgenerator (18) und einem Schreibadressgenerator
(16) aufweist, wobei die Adressgeneratoren in Wrap-around
Konfiguration ausgebildet sind.
5. Vorrichtung nach Anspruch 3, bei der die in der
arithmetischen Einheit vorgesehene Erzeugungseinrichtung eine
Einrichtung zum selektiven Zuführen von Daten aus dem
ersten Speicher und der Datei des Zirkular-Puffers zu dem
Multiplikations-Akkumulator, und eine Einrichtung zum
selektiven Zuführen von Daten aus dem zweiten Speicher und
dem Multiplikations-Akkumulator zu der arithmetischen
Logikeinheit aufweist.
6. Vorrichtung nach Anspruch 3, bei der die übrigen Elemente
des oberen oder unteren Dreieck-Abschnitts der
Kovarianzmatrix in der arithmetischen Logikeinheit erzeugt werden,
wo die erste Reihe der Kovariarizmatrix erzeugt wird, und
bei der die in der arithmetischen Einheit vorgesehene
Erzeugungseinrichtung eine Einrichtung zum selektiven
Zuführen von Daten aus dem zweiten Speicher zu der
arithmetischen Logikeinheit aufweist.
7. Vorrichtung nach Anspruch 1, bei der:
der Multiplikations-Akkumulator zwei Eingangsregister und
ein Ausgangsregister aufweist;
ein erster und ein zweiter Multiplexer vorgesehen sind,
wobei der erste Multiplexer die zum gleichzeitigen
Ausgeben vorgesehene Einrichtung aufweist und mit einem
Eingangsregister des Multiplikations-Akkumulators verbunden
ist, und wobei der zweite Multiplexer mit dem anderen
Eingangsregister des Multiplikations-Akkumulators verbunden
ist;
der Zirkular-Puffer eine Zwei-Port-Registerdatei mit einem
Leseadressgenerator und einem Schreibadressgenerator
aufweist, wobei der Ausgang der Registerdatei mit dem zweiten
Multiplexer verbunden ist;
ein dritter Multiplexer vorgesehen ist, der mit dem
Eingang der Registerdatei verbunden ist;
eine arithmetische Logikeinheit mit zwei Eingangsregistern
und einem Ausgangsregister vorgesehen ist;
ein vierter und ein fünfter Multiplexer vorgesehen sind,
wobei der vierte Multiplexer mit einem Eingangsregister
der arithmetischen Logikeinheit verbunden ist und der
fünfte Multiplexer mit dem anderen Eingangsregister der
arithmetischen Logikeinheit verbunden ist;
die Ausgabeeinrichtung (28) einen ersten Datenbus
aufweist, der mit den ersten, zweiten, dritten, vierten und
fünften Multiplexern verbunden ist, wobei der erste
Datenbus ferner mit dem Ausgangsregister des Multiplikations-
Akkumulators, dem Ausgangsregister der ALU und dem Ausgang
des Dateiregisters verbunden ist;
ein zweiter Datenbus vorgesehen ist, der mit den ersten,
zweiten und vierten Multiplexern verbunden ist, wobei der
zweite Datenbus ferner mit dem Ausgangsregister des
Multiplikations-Akkumulators, dem Ausgangsregister der
arithmetischen Logikeinheit und dem Ausgang der Registerdatei
verbunden ist;
ein dritter Datenbus vorgesehen ist, der mit dem dritten
Multiplexer und dem fünften Multiplexer verbunden ist,
wobei der dritte. Datenbus ferner mit dem Ausgangsregister
des Multiplikations-Akkumulators, dem Ausgangsregister der
arithmetischen Logikeinheit und dem Ausgang der
Registerdatei verbunden ist; wobei der erste Speicher ein
Adressregister aufweist und der erste Speicher mit dem ersten
Datenbus verbunden ist; und ein zweiter Speicher
vorgesehen ist, der ein Adressregister aufweist, wobei der zweite
Speicher mit dem zweiten Datenbus verbunden ist.
8. Verfahren zum Erzeugen eines vorbestimmten Teils einer
Kovarianzmatrix, wobei der vorbestimmte Teil eine erste
Reihe der Kovarianzmatrix enthält, mit den folgenden
Schritten:
Bereitstellen eines Arrays von Werten, welche mehrere
Abstastwerte repräsentieren, in einem Speicher (12);
Erzeugen eines erstes Elementes in der ersten Reihe der
Kovarianzmatrix durch Ausgeben einer sequentiellen
Untergruppe des Arrays von Werten aus dem Speicher an einen
Multiplikations-Akkumulator (32);
Erzeugen jedes der übrigen Elemente der ersten Reihe der
Kovarianzmatrix durch gleichzeitiges Durchführen der
folgenden Sehritte:
Ausgeben einer ersten Serie sequentieller Untergruppen des
Arrays von Werten aus dem Speicher an den Multiplikations-
Akkumulator; und
Ausgeben einer zweiten Serie sequentieller Untergruppen
des Arrays von Werten an den Multiplikations-Akkumulator
aus einem Zirkular-Puffer (29), der mit dem Speicher
verbunden und so konfiguriert ist, dass er eine vorbestimmte
Anzahl von Speicherstellen aufweist.
9. Verfahren nach Anspruch 8, bei dem die beiden
Erzeugungsschritte die folgenden Schritte aufweisen:
Erzeugen eines ersten Elementes der ersten Reihe der
Kovarianzmatrix in dem Multiplikations-Akkumulator durch
aufeinanderfolgendes Eingeben einer sequentiellen Untergruppe
des Arrays von Werten aus dem Speicher in den
Multiplikations-Akkumulator; und
Erzeugen der übrigen Elemente der ersten Reihe der
Kovarianzmatrix durch aufeinanderfolgendes Eingeben einer
ersten Serie sequentieller Untergruppen des Arrays von
Werten aus dem Speicher in den
Multiplikations-Akkumulator, während gleichzeitig eine zweite Serie sequentieller
Untergruppen des Arrays von Werten aus dem Zirkular-Puffer
in den Multiplikations-Akkumulator eingegeben wird.
10. Verfahren nach Anspruch 9, mit den folgenden Schritten:
Speichern der Elemente der ersten Reihe in einem zweiten
Speicher (48);
von Diagonale zu Diagonale durchgeführtes Erzeugen der
übrigen Elemente des oberen oder unteren
Dreieck-Abschnitts der Kovarianzmatrix in einer arithmetischen
Logikeinheit (110); und
Speichern der übrigen Elemente des oberen oder unteren
Dreieck-Abschnitts der Kovarianzmatrix in dem zweiten
Speicher.
11. Verfahren nach Anspruch 10, bei dem der Schritt des von
Diagonale zu Diagonale durchgeführten Erzeugens der
übrigen Elemente des oberen oder unteren Dreieck-Abschnitts
der Kovarianzmatrix gleichzeitig mit dem Schritt des
Erzeugens der übrigen Elemente der ersten Reihe der
Kovarianzmatrix durchgeführt wird.
12. Verfahren nach Anspruch 8, bei dem der vorbestimmte Teil
ein oberer oder unterer Dreieck-Abschnitt einer
Kovarianz
matrix ist, der eine erste Reihe von Elementen und mehrere
diagonale Arrays von Elementen definiert, mit den
folgenden Schritten:
Speichern des ersten Elementes der ersten Reihe in einem
zweiten Speicher (48);
von Diagonale zu Diagonale durchgeführtes Erzeugen der
übrigen Elemente jedes diagonalen Arrays in einer
arithmetischen Logikeinheit; und
Speichern der übrigen Elemente jedes diagonalen Arrays in
dem zweiten Speicher.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US07/900,000 US5299144A (en) | 1992-06-17 | 1992-06-17 | Architecture for covariance matrix generation |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69325618D1 DE69325618D1 (de) | 1999-08-19 |
DE69325618T2 true DE69325618T2 (de) | 2000-04-06 |
Family
ID=25411835
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69325618T Expired - Fee Related DE69325618T2 (de) | 1992-06-17 | 1993-03-24 | Architektur zur Erzeugung einer kovarianten Matrize |
Country Status (4)
Country | Link |
---|---|
US (1) | US5299144A (de) |
EP (1) | EP0575033B1 (de) |
JP (1) | JP3740516B2 (de) |
DE (1) | DE69325618T2 (de) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05233853A (ja) * | 1992-02-24 | 1993-09-10 | Sharp Corp | 演算処理装置 |
US6970509B2 (en) * | 2001-07-31 | 2005-11-29 | Wis Technologies, Inc. | Cell array and method of multiresolution motion estimation and compensation |
US6996702B2 (en) * | 2001-07-31 | 2006-02-07 | Wis Technologies, Inc. | Processing unit with cross-coupled ALUs/accumulators and input data feedback structure including constant generator and bypass to reduce memory contention |
US20050207663A1 (en) * | 2001-07-31 | 2005-09-22 | Weimin Zeng | Searching method and system for best matching motion vector |
US7035332B2 (en) * | 2001-07-31 | 2006-04-25 | Wis Technologies, Inc. | DCT/IDCT with minimum multiplication |
US7219173B2 (en) * | 2001-07-31 | 2007-05-15 | Micronas Usa, Inc. | System for video processing control and scheduling wherein commands are unaffected by signal interrupts and schedule commands are transmitted at precise time |
US7184101B2 (en) * | 2001-07-31 | 2007-02-27 | Micronas Usa, Inc. | Address generation for video processing |
US6981073B2 (en) * | 2001-07-31 | 2005-12-27 | Wis Technologies, Inc. | Multiple channel data bus control for video processing |
US7085320B2 (en) * | 2001-07-31 | 2006-08-01 | Wis Technologies, Inc. | Multiple format video compression |
US7142251B2 (en) * | 2001-07-31 | 2006-11-28 | Micronas Usa, Inc. | Video input processor in multi-format video compression system |
US6952460B1 (en) * | 2001-09-26 | 2005-10-04 | L-3 Communications Corporation | Efficient space-time adaptive processing (STAP) filter for global positioning system (GPS) receivers |
US7327798B2 (en) | 2001-10-19 | 2008-02-05 | Lg Electronics Inc. | Method and apparatus for transmitting/receiving signals in multiple-input multiple-output communication system provided with plurality of antenna elements |
KR100463526B1 (ko) * | 2002-01-04 | 2004-12-29 | 엘지전자 주식회사 | 다중 입력 다중 출력 시스템에서의 전력 할당 방법 |
US7441105B1 (en) * | 2004-01-02 | 2008-10-21 | Altera Corporation | Reducing multiplexer circuitry for operand select logic associated with a processor |
US7805301B2 (en) * | 2005-07-01 | 2010-09-28 | Microsoft Corporation | Covariance estimation for pattern recognition |
JP5659203B2 (ja) * | 2012-09-06 | 2015-01-28 | 株式会社東芝 | モデル学習装置、モデル作成方法及びモデル作成プログラム |
US9069701B2 (en) * | 2012-12-11 | 2015-06-30 | International Business Machines Corporation | Virtual machine failover |
US9032157B2 (en) * | 2012-12-11 | 2015-05-12 | International Business Machines Corporation | Virtual machine failover |
US9721495B2 (en) * | 2013-02-27 | 2017-08-01 | E Ink Corporation | Methods for driving electro-optic displays |
US10386491B2 (en) | 2015-11-23 | 2019-08-20 | Honeywell International Inc. | Efficient covariance matrix update |
CN111596320B (zh) * | 2020-05-28 | 2023-03-24 | 成都天奥信息科技有限公司 | 一种高性能的抗干扰方法及装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4544919A (en) * | 1982-01-03 | 1985-10-01 | Motorola, Inc. | Method and means of determining coefficients for linear predictive coding |
US4545025A (en) * | 1983-08-16 | 1985-10-01 | The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration | Auto covariance computer |
AU588334B2 (en) * | 1985-07-18 | 1989-09-14 | Raytheon Company | Digital sound synthesizer and method |
JPS6273391A (ja) * | 1985-09-27 | 1987-04-04 | Toshiba Corp | パタ−ン認識学習装置 |
DE3634239A1 (de) * | 1986-10-08 | 1988-04-21 | Bosch Gmbh Robert | Schaltungsanordnung zur umwandlung eines durch eine stoerfunktion gestoertes messsignals in ein ungestoertes signal |
JPH03120598A (ja) * | 1989-10-03 | 1991-05-22 | Canon Inc | 音声認識方法及び装置 |
-
1992
- 1992-06-17 US US07/900,000 patent/US5299144A/en not_active Expired - Lifetime
-
1993
- 1993-03-24 DE DE69325618T patent/DE69325618T2/de not_active Expired - Fee Related
- 1993-03-24 EP EP93302223A patent/EP0575033B1/de not_active Expired - Lifetime
- 1993-06-15 JP JP14372193A patent/JP3740516B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH0660106A (ja) | 1994-03-04 |
EP0575033B1 (de) | 1999-07-14 |
DE69325618D1 (de) | 1999-08-19 |
EP0575033A1 (de) | 1993-12-22 |
US5299144A (en) | 1994-03-29 |
JP3740516B2 (ja) | 2006-02-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69325618T2 (de) | Architektur zur Erzeugung einer kovarianten Matrize | |
DE60215835T2 (de) | Reduzierung von komponenten in einer montgomery multiplikations-recheneinheit | |
DE3786594T2 (de) | Speicherverwaltungseinheit für Digitalsignalprozessor. | |
DE1901343C3 (de) | Datenverarbeitungsanlage zur Ausführung von Mateirenrechnungen | |
DE19839627B4 (de) | Digitaler Signalprozessor | |
DE69130581T2 (de) | Verfahren zur Berechnung einer Operation des Typus A.X modulo N, in einem Kodierverfahren gemäss der RSA-Methode | |
DE3338345C2 (de) | ||
DE3485792T2 (de) | Digitale signalverarbeitungseinrichtungen. | |
DE1549476C3 (de) | Anordnung zur Ausführung von Divisionen | |
DE19835216A1 (de) | Verfahren und Prozessoranordnung zur parallelen Datenverarbeitung | |
DE2758830A1 (de) | Rechenvorrichtung | |
DE1942005B2 (de) | Datenverarbeitungsanlage zur aufnahme und abgabe von digitalen daten und zur ausfuehrung von operationen an den daten | |
DE19826252C2 (de) | Verfahren zur digitalen Signalverarbeitung | |
DE69424790T2 (de) | Prozessor für schnelle Fourier-Transformation | |
DE3507584C2 (de) | ||
DE19504089A1 (de) | Pipelined SIMD-Systolic Array Prozessor und dessen Arbeitsverfahren | |
DE69029796T2 (de) | Adressierprozessor für einen Signalprozessor | |
DE69029608T2 (de) | Digitale Signalprozessorvorrichtung | |
DE69030932T2 (de) | Hochgeschwindiger digitaler Prozessor | |
DE2612665A1 (de) | Konvolutionsfunktionsgenerator und dessen anwendung in digitalfiltern | |
EP0598112B1 (de) | Verfahren und anordnung zum bilden der summe einer kette von produkten | |
DE19637369C2 (de) | Digitaler Signalprozessor mit Multipliziereinrichtung und -Verfahren | |
EP0721618B1 (de) | Verfahren zur beschleunigten regelauswertung in einem fuzzy-inference-prozessor und vorrichtung zu dessen durchführung | |
DE68908202T2 (de) | Binärzahlmultiplizierer mit einer sehr grossen Bitzahl. | |
DE3416536A1 (de) | Recheneinrichtung zur schnellen fourier-transformation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8339 | Ceased/non-payment of the annual fee |