BKM-Algorithmus

Der BKM-Algorithmus ist ein iterativer Algorithmus, mit dessen Hilfe sich die Logarithmus- und Exponentialfunktion effizient in digitalen Schaltungen berechnen lassen. Er wurde 1994 von J. C. Bajard, S. Kla und Jean-Michel Muller entwickelt, wovon sich auch die Bezeichnung ableitet.

Allgemeines

Der BKM-Algorithmus ist wie CORDIC-Algorithmus ein so genannter Shift-and-add-Algorithmus, der auf bitweisen Verschiebungen und ganzzahligen Additionen in Addierwerken basiert. Divisionen werden ausschließlich mit negativen Potenzen von 2 durchgeführt, welche sich in digitalen Schaltungen direkt als bitweise Verschiebung implementieren lassen. Der Algorithmus kommt im Gegensatz zu dem CORDIC-Verfahren ohne Skalierungsfaktor aus und verwendet Logarithmentabellen anstelle der bei CORDIC notwendigen Arkustangens-Tabelle.

Die Berechnung eines Funktionswertes erfolgt in einem Iterationsverfahren mit einer Konvergenzrate von ungefähr einem Bit pro Durchlauf. Aufgrund dieses Umstands wird dieser Algorithmus manchmal auch als Bitalgorithmus bezeichnet.

Algorithmus

Gegeben sei die Iterationsvorschrift

mit und . Die neun Fälle für ergeben sich aus zwei unabhängigen Fallunterscheidungen für Real- und Imaginärteil:

.

Für die komplexe Multiplikation aus der Iterationsvorschrift

sind die Operationen Addition, Fallunterscheidung und Bitshift ausreichend. Eine echte Multiplikation wird nicht benötigt. Die Iteration für benötigt einen Tabellen-Lookup für den Logarithmus und eine Subtraktion. Die Tabelle hat eine Zeile pro Iterationsschritt und neun komplexwertige Spalten für die neun möglichen Werte von . Manche Spalten sind immer reell oder sind das komplex konjugierte einer anderen Spalte, so dass sich der real benötigte Speicherplatz erheblich reduzieren lässt.

E-Mode

Zur Berechnung der komplexen Exponentialfunktion (E-Mode) ist als Argument gegeben und wird mit eins initialisiert. Die werden in jedem Schritt so gewählt, dass gegen null konvergiert. Wenn der Algorithmus endet, kann das Ergebnis in abgelesen werden. Die Fallunterscheidung in jedem Schritt lautet:

In einer realen Implementierung wird nach jedem Iterationsschritt um ein Bit nach links geschoben, so dass in der Fallunterscheidung mit statt mit gearbeitet werden kann. Die Einträge der Logarithmentabelle sind passend dazu ebenfalls nach links verschoben, d. h. Zeile der Tabelle enthält für alle neun Fälle von .

L-Mode

Für den komplexen Logarithmus (L-Mode) wird umgekehrt vorgegangen. ist als Argument gegeben und wird mit null initialisiert. Die werden in jedem Schritt so gewählt, dass gegen eins konvergiert. Am Ende wird das Ergebnis in abgelesen. Wir definieren den Fehler und darauf die Fallunterscheidung:

Auch hier wird in einer realen Implementierung direkt aus berechnet, ohne den Umweg über und . Dabei wird nach der Initialisierung überhaupt nicht mehr benötigt, sondern nur noch iteriert.

Literatur

Einzelnachweise

  1. ↑ J. Bajard, S. Kla, Jean-Michel Muller: A new hardware algorithm for complex elementary functions. In: IEEE Transactions on Computers. Band 43, Nr. 8, 1994, ISSN 0018-9340, S. 955–963, doi:10.1109/12.295857.