DE69023979T2 - Digitale Signalverarbeitung. - Google Patents
Digitale Signalverarbeitung.Info
- Publication number
- DE69023979T2 DE69023979T2 DE69023979T DE69023979T DE69023979T2 DE 69023979 T2 DE69023979 T2 DE 69023979T2 DE 69023979 T DE69023979 T DE 69023979T DE 69023979 T DE69023979 T DE 69023979T DE 69023979 T2 DE69023979 T2 DE 69023979T2
- Authority
- DE
- Germany
- Prior art keywords
- function
- values
- value
- sine
- algorithm
- 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
- 238000012545 processing Methods 0.000 title claims description 7
- 230000006870 function Effects 0.000 claims description 76
- 238000000034 method Methods 0.000 claims description 26
- 238000004422 calculation algorithm Methods 0.000 claims description 22
- 230000015654 memory Effects 0.000 claims description 15
- 238000004364 calculation method Methods 0.000 claims description 12
- 230000000295 complement effect Effects 0.000 claims description 9
- 230000003595 spectral effect Effects 0.000 claims description 2
- 230000003247 decreasing effect Effects 0.000 claims 1
- 230000002123 temporal effect Effects 0.000 claims 1
- 230000009466 transformation Effects 0.000 claims 1
- 238000012360 testing method Methods 0.000 abstract description 3
- 239000013598 vector Substances 0.000 description 12
- 239000011159 matrix material Substances 0.000 description 11
- 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 10
- 101150083341 LOG2 gene Proteins 0.000 description 4
- 238000013213 extrapolation Methods 0.000 description 4
- 238000007792 addition Methods 0.000 description 2
- 238000000354 decomposition reaction Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000004044 response Effects 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/17—Function evaluation by approximation methods, e.g. inter- or extrapolation, smoothing, least mean square method
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/02—Digital function generators
- G06F1/03—Digital function generators working, at least partly, by table look-up
- G06F1/0321—Waveform generators, i.e. devices for generating periodical functions of time, e.g. direct digital synthesizers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/02—Digital function generators
- G06F1/03—Digital function generators working, at least partly, by table look-up
- G06F1/035—Reduction of table size
- G06F1/0356—Reduction of table size by using two or more smaller tables, e.g. addressed by parts of the argument
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2101/00—Indexing scheme relating to the type of digital function generated
- G06F2101/04—Trigonometric functions
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
- Electrophonic Musical Instruments (AREA)
- Stereo-Broadcasting Methods (AREA)
Description
- Die vorliegende Erfindung bezieht sich auf ein Verfahren und eine Vorrichtung zur Erzeugung trigonometrischer Funktionswerte insbesondere für die Verwendung in der digitalen Signalverarbeitung, insbesondere (jedoch nicht ausschließlich) für die Erzeugung von Sinus- und Kosinusfunktionswerten.
- Auf vielen Gebieten der digitalen Signalverarbeitung ist es erforderlich, eine Folge von abgetasteten Sinus- und Kosinusfunktionen zu erzeugen. Beispiele, an die man sofort denkt, sind Auswertungen von Fourier-Transformationen, digitale Quadraturdemodulatoren und die Erzeugung von Prüftönen.
- Ein direktes Verfahren verwendet einen Nachschlagvorgang mit einer gespeicherten Tabelle, bei dem eine Tabelle von Funktionswerten entsprechend den Argumentwerten zur Verfügung gestellt wird. Dieses Verfahren bietet eine hohe Geschwindigkeit und eine Genauigkeit nach Wunsch. Das Hauptproblem ist hierbei der übermäßige Speicherplatzbedarf. Wenn z. B. eine Folge mit 1024 Punkten und 16 Bit-Arithmetik benötigt wird, ist ein ROM mit 32 kByte erforderlich, nur um die Sinus- und Kosinuswellen zu speichern (unter der Annahme, daß keine Daten wiederholt werden.)
- Wenn etwas Berechnungszeit pro Zyklus zugelassen wird, kann dieser Speicherplatzbedarf in einem zweiten Verfahren beträchtlich verringert werden, indem eine arithmetische Einheit zur Berechnung von Funktionswerten vorgesehen wird. Zum Beispiel erfordert die einfache Rekursion
- sin[(n+1)x] = cos(x)sin(nx) + sin(x)cos(nx)
- cos[(n+1)x] = cos(x)cos (nx) - sin(x)sin(nx)
- vier Multiplikationen pro Zyklus und benötigt nur einige wenige Speicherplätze.
- Bei Verwendung dieser Formel bleibt jedoch ein ungutes Gefühl, da eine Extrapolation verwendet wird. Es treten Rundungsfehler auf, die mit fortschreitender Extrapolation anwachsen. Der zugehörige Zeiger neigt dazu, sich spiralförmig nach innen oder nach außen zu bewegen, statt eine konstante Amplitude zu halten.
- Ein bekannter Weg zur Überwindung dieses Extrapolationsproblems besteht darin, das Zeigerinkrement leicht zu verlängern. Dem laufenden Zeiger wird somit bei jeder Aktualisierung eine kleine Auswärtsbewegung verliehen. Unter der Annahme, daß die verwendete Arithmetik in der DSP-Berechnungsvorrichtung bei Abtastwerten größer als 1 gesättigt ist, wird die Ausgabe (leicht) abgeschnitten, ist jedoch stabil. Das Problem bei diesem Verfahren liegt darin, daß es einen beträchtlichen Fehler aufbauen kann, bevor ein Abschneiden stattfindet, so daß der sich ergebende Fehler groß ist. Ein alternatives drittes Verfahren basiert auf der Interpolation (1), (2). Es sind Sinusund Kosinusfunktionen gespeichert, die anfangs für einen kleinen Satz von Abtastpunkten, die den interessierenden Bereich abdecken, genau berechnet worden sind. Diese Werte werden als Eingaben in einen von einer arithmetischen Einheit ausgeführten Algorithmus verwendet, der Interpolationsberechnungen verwendet, um alle übrigen Werte zu finden. Es können und werden kleine Fehler auftreten, jedoch sind diese beträchtlich kleiner als die Fehler eines Extrapolationsalgorithmus.
- Der Preis für diese gesteigerte Genauigkeit ist eine kleine Erhöhung der Berechnungszeit im Vergleich zum ersten Verfahren und ein mäßiges Ansteigen der Speichergröße im Vergleich zum zweiten Verfahren.
- Bei einem einfachen Interpolationsverfahren, das in (3) beschrieben ist, wird eine kurze Tabelle der Länge (log&sub2;N) + 2, wobei N die Anzahl der abgeleiteten Winkelwerte (beabstandet um 2π/N) einschließlich der Sekans- Werte von (π/4), (π/8), (π/16) ... (π/N), verwendet, um schrittweise Ebenen einer Tabelle von interpolierten Funktionswerten zu berechnen, wobei von den Werten bei π/4, 0 ausgegangen wird und interpoliert wird, um die Werte bei π/8 und 3π/8 zu finden, anschließend zwischen diesen Werten interpoliert wird, um jene Werte bei π/16, 3π/16, 5π/16 und 7π/16 etc. zu finden. Dieses Verfahren hat jedoch Nachteile, da die Funktionswerte nicht in der gewünschten Reihenfolge erzeugt werden und somit eine große Tabelle (der Länge N) erzeugt werden muß, bevor die Werte ausgegeben werden. Dies führt ferner zu einer Berechnungsverzögerung vor der Ausgabe des ersten gewünschten Wertes.
- Bei einem zweiten Verfahren, das in (1) beschrieben ist, wird dieselbe Interpolationsgleichung verwendet, jedoch verwendet der Algorithmus statt der Erzeugung einer großen Tabelle der Länge N, die alle gewünschten Funktionswerte enthält, eine kurze Tabelle der Länge (log&sub2;N) + 2, die zu jedem gegebenen Zeitpunkt den derzeitigen Funktionswert der Folge, die beiden Werte, zwischen welchen der nächste Funktionswert der Folge interpoliert wird, sowie die Werte enthält, die für die fortschreitende Interpolation aller weiteren Funktionswerte der Folge erforderlich sind; sobald ein eingetragener Wert dieser Tabelle verwendet worden ist, wird er durch einen neuen Interpolationswert ersetzt, der in einem späteren Schritt verwendet werden soll. Die Art und die Gesamtzahl der Berechnungen sind die gleichen wie bei dem vorangegangenen Verfahren, wobei jedoch der für die Tabelle erforderliche Speicherplatz beträchtlich verringert ist und die Ergebnisse ohne Anfangsverzögerung der Reihe nach erscheinen.
- Selbstverständlich schließen sich die beiden Verfahren nicht notwendigerweise gegenseitig aus.
- Eine Möglichkeit, dieses letztere Interpolationsverfahren zu verwirklichen, ist folgende.
- Zu Beginn wird der Arbeitsvektor oder die Matrix V der Größe (log&sub2;N) + 2 betrachtet, aus der eine Folge von Sinuswerten erhalten wird. Dieser Vektor besitzt einige der Sinuswerte, die als Abtastwerte ausgegeben werden. Wenn ein Abtastwert ausgegeben wird, wird er durch einen weiteren Abtastwert ersetzt, der ab diesem Zeitpunkt verwendet wird. Unterhalb befindet sich ein Vektor mit fünf Elementen, der den Speicherdatenfluß und die Berechnung bei der Berechnung bis zu 128 Werten eines Sinus zeigt. Zur Vereinfachung ist ein Element durch eine ganze Zahl dargestellt, die in Wirklichkeit einen Sinuswert darstellt. Zum Beispielsteht die 16 in Reihe 1 (in Position V&sub4;) für sin(16 φ&sub0;), wobei φ&sub0; der Winkelabstand zwischen den Sinusabtastwerten ist. TABELLE 1
- Wird die Situation in der Stufe betrachtet, in der der erste Ausgangswert ausgegeben werden soll (Zeitpunkt n = 1) wird das kursive Element in dieser Reihe, Sinus (1 X φ&sub0;), ausgegeben (V&sub0; wird ausgegeben) und durch sin (3 x φ&sub0;) ersetzt. Dieser Wert wird unter Verwendung der unterstrichenen Elemente in dieser Reihe mit der Interpolationsformel
- sin(K φ&sub0;) = [(sin((K+L)φ&sub0;) + sin(K-L)φ&sub0;)] / [2 cos(Lφ&sub0;)]
- ...(1a)
- berechnet, wobei in diesem Fall K = 3, L = 1 gilt. Im allgemeinen sind die L Zweierpotenzen, so daß die Faktoren 1/[2 cos(Lφ&sub0;)] vorausberechnet, gespeichert und dann bei Bedarf nachgeschlagen werden. Die anderen Reihen, die aufeinanderfolgende Abtastwertausgabezeitpunkte darstellen, werden ähnlich berechnet und ausgegeben.
- Eine Folge von Kosinuswerten kann auf ähnliche Weise berechnet werden, da eine Kosinusinterpolation existiert:
- cos(K φ&sub0;) = [(cos((K+L)φ&sub0;) + cos(K-L)φ&sub0;)] / [2 cos(Lφ&sub0;)]
- ...(1b)
- Ein weiterer Vektor der gleichen Größe wie V wird benötigt, um die Kosinuswerte zu speichern, jedoch gelten die gleichen j, ja und jb. Somit kann die Kosinusfolge kostengünstig und einfach gleichzeitig mit der Sinusfolge erzeugt werden.
- Bei diesen beiden Verfahren kann ein Genauigkeitsproblem auftreten, insbesondere wenn der Faktor 1/[2 cos(Lφ&sub0;)] groß ist (was eintritt, wenn L1, φ&sub0; ungefähr π/2, 3π/2 etc. beträgt). Dies führt dazu, daß der Zähler der Interpolation, sin([K + L]φ&sub0;) + sin([K - L]φ&sub0;), einen kleinen Wert besitzt, da zwei nahezu gleich große Werte subtrahiert werden. Die Subtraktion ergibt bei endlich genauer Hardware einen Rundungsfehler (bei Festkomma-Hardware mehr als bei Fließkomma-Hardware). Ferner wird üblicherweise die ungenaue Interpolation ihrerseits verwendet, um weitere Interpolationen zu erzeugen, so daß sich der Fehler durch die weiteren Berechnungen fortpflanzt.
- Dementsprechend kann in der vorliegenden Erfindung das Problem gelöst werden, indem eine andere trigonometrische Interpolation um solche Argumentwerte verwendet wird. Gemäß der Erfindung wird ein trigonometrischer Funktionsgenerator für die Erzeugung eines Wertes einer trigonometrischen Funktion als Antwort auf die Eingabe eines Argumentes geschaffen, mit: einer Eingabeeinrichtung, die ein Eingangsargument empfängt; einer ersten Speichereinrichtung, die Werte der Funktion, die voneinander beabstandeten Argumentwerten entsprechen, speichert; und einer Arithmetikeinrichtung, die in einer ersten Betriebsart betrieben werden kann, um unter Verwendung eines ersten Algorithmus Werte der Funktion, die Argumenten entsprechen, die in den Zwischenräumen zwischen jenen beabstandeten Argumentwerten liegen, interpolierend zu berechnen; dadurch gekennzeichnet, daß:
- - der Generator ferner eine zweite Speichereinrichtung enthält, die Werte einer zweiten, komplementären Funktion, die voneinander beabstandeten Argumentwerten entsprechen, speichert;
- - die Arithmetikeinrichtung in einer zweiten Betriebsart betrieben werden kann, um unter Verwendung eines zweiten Algorithmus aus Werten der zweiten Funktion, die den benachbarten, vorgegebenen Argumentwerten entsprechen, Werte der ersten Funktion, die Argumenten entsprechen, die in den Zwischenräumen zwischen jenen beabstandeten Argumentwerten liegen, interpolierend zu berechnen; und
- - der Generator ferner eine Steuereinrichtung enthält, die so betrieben werden kann, daß sie den Wert einer Größe prüft, die in der Berechnung zu verwenden ist, um festzustellen, ob er in einen ersten oder einen zweiten Bereich von Werten fällt, für den der erste bzw. der zweite Algorithmus den kleineren abgerundeten Fehler erzeugt, und aufgrund dessen die Recheneinrichtung in die erste Betriebsart bzw. in die zweite Betriebsart schaltet.
- In einem weiteren Aspekt schafft die vorliegende Erfindung ein Verfahren zum interpolierenden Berechnen mehrerer trigonometrischer Funktionswerte mit endlicher Genauigkeit, das die Berechnung der Funktionswerte aus gespeicherten Funktionswerten in Übereinstimmung mit einem ersten Algorithmus enthält, gekennzeichnet durch die Prüfung des Wertes einer Größe, die in der Berechnung zu verwenden ist, um festzustellen, ob er in einen ersten oder einen zweiten Bereich von Werten fällt, für den der erste Algorithmus bzw. ein zweiter Algorithmus einen geringeren abgerundeten Fehler erzeugt, und um dann, wenn er in den zweiten Bereich fällt, die Funktionswerte in Übereinstimmung mit einem zweiten Algorithmus aus gespeicherten Werten einer zweiten, komplementären Funktion zu berechnen.
- Bei dem obenerwähnten Verfahren wird z. B. statt der Berechnung von ...
- sin(K φ&sub0;) = [(sin((K+L)φ&sub0;) + sin(K-L)φ&sub0;)] / [2 cos(Lφ&sub0;)]
- ...(1a)
- (oder [(sin((K+L)φ&sub0;) + sin(K-L)φ&sub0;)] sec(Lφ&sub0;)/2)
- cos(K φ&sub0;) = [(cos((K+L)φ&sub0;) + cos(K-L)φ&sub0;)] / [2 cos(Lφ&sub0;)]
- ...(1b)
- wobei cos (Lφ&sub0;) sehr klein ist, folgendes verwendet
- sin(K φ&sub0;) = [(cos((K+L)φ&sub0;) - cos(K-L)φ&sub0;)] / [2 cos(π/2+Lφ&sub0;)]
- ...(2a)
- cos(K φ&sub0;) = [(sin((K-L)φ&sub0;) - sin(K+L)φ&sub0;)] / [2 cos(π/2+Lφ&sub0;)]
- ...(2b)
- und cos((π/2 + Lφ&sub0;) = sin(Lφ&sub0;).
- Somit wird der Sinuswert unter Verwendung von Eintragungen des Kosinusvektors gefunden (und umgekehrt). Diese Zusammenarbeit zwischen den beiden Vektoren stellt sicher, daß die Genauigkeit zu jedem Zeitpunkt gewahrt ist. Die Entscheidung über die Verwendung der einen oder der anderen der obenerwähnten Formeln hängt vom Wert Lφ&sub0; ab. Wenn Lφ&sub0; näher an nπ liegt als an mπ/2, wobei m ungerade ist, wird Gleichung (1a) verwendet. Ansonsten wird Gleichung (2a) verwendet. Ein numerisches Beispiel reicht aus, um den Nutzen der Erfindung darzulegen. Es sei Kφ&sub0; = 20º, Lφ&sub0; = 89,9º und es werde durchgehend vierstellige Genauigkeit verwendet. Gleichung (1a) ergibt
- sin(20º) 286,5 (0,9403 - 0,9391) = 0,3438
- wobei die Gleichung (2a) das korrekte Ergebnis liefert.
- Sin(20º) = -0,5000 (-0,3404 - 0,3437) = 0,3420
- Mit Gleichung (1a) ist wenigstens eine Dezimalstelle der Genauigkeit verlorengegangen.
- Der Preis hierfür ist der zusätzliche Speicherplatz, der zum Speichern der komplementären Funktionsinterpolationswerte erforderlich ist, sowie die (kleine Anzahl von) zusätzlichen Berechnungen pro Zyklus, die zur Aktualisierung dieser gespeicherten Werte erforderlich sind. Falls es in irgendeinem Fall erwünscht ist, die komplementäre Funktion zu erzeugen (wie z. B. bei der Fourier-Analyse), wird der Vorteil der Erfindung selbstverständlich ohne zusätzlichen erforderlichen Speicherplatz erreicht.
- Im folgenden wird die Erfindung beispielhaft mit Bezug auf die beigefügten Zeichnungen beschrieben, in welchen:
- Fig. 1 ein Blockschaltbild der Vorrichtung ist, die zur Durchführung der Erfindung geeignet ist;
- Fig. 2 ein Blockschaltbild ist, das eine Ausführungsform der Vorrichtung der Fig. 1 zeigt; und
- Fig. 3 ein Flußdiagramm eines beispielhaften Verfahrens zur Durchführung der Erfindung ist.
- Wenn wie in Tabelle 1 gezeigt das zweite Interpolationsverfahren verwendet wird, bestehen die beiden zentralen Fragen darin, wie der Algorithmus weiß, welches Element aus zugeben ist und welche beiden Elemente Vja und Vjb zu verwenden sind, um die Ersatzelemente zu finden. Zuerst soll beschrieben werden, wie j zu finden ist. Anschließend werden für ja und jb einfache Formeln gefunden.
- Das ausgegebene Element ist in Position j in V angeordnet, wobei j die am weitesten rechts liegende 1 von n ist (ausgedrückt in Binärform). Für n = 6 (110) ist z. B. die am weitesten rechts liegende 1 gleich 1, und somit j = 1, wobei V&sub1; ausgegeben wird. Für n = 5 (101) (und für alle anderen ungeraden Werte n) wird V&sub0; ausgegeben. Das erste Problem besteht darin, wie bei gegebenem in die am weitesten rechts liegende 1 lokalisiert werden kann. Die Operation zum Feststellen der Anzahl führender Nullen einer binären ganzen Zahl wird von einigen Rechnern als Teil ihres Befehlssatzes zur Verfügung gestellt oder kann unter Verwendung einer Maschinensprachroutine festgestellt werden, indem schrittweise Verschiebungen nach rechts und Bitprüfungen ausgeführt werden. Ein weiteres Verfahren wird wie folgt durchgeführt. Begonnen wird mit der Bildung von J = (n UND -n) (unter der Annahme, daß n in Zweierkomplementform vorliegt). J wird eine einzelne 1 in der Position der am weitesten rechts liegenden 1 enthalten. Wenn z. B. n = 4 = (0100) ist, ist -n = (1100) und J = n UND -n = (0100).
- Aus J soll unter Verwendung möglichst weniger Schritte j gewonnen werden. Wird angenommen, daß j die binäre Darstellung j = j&sub2;j&sub1;j&sub0; besitzt, wird jedes ji mittels einer UND-Operation gefunden und anschließend j unter Verwendung geschachtelter Multiplikationen berechnet. Um dies zu verdeutlichen, folgt eine Tabelle der acht möglichen 8-Bit-Werte J.
- Die Nullen für jeden Wert J auf der linken Seite der Tabelle sind der Klarheit halber nicht gezeigt. Zum Beispiel ist J in der ersten Reihe 00000001. Es ist klar, daß
- j&sub2; = 1, wenn die Bits 7, 6, 5 oder 4 in J = 1. Somit A(2,3) = (11110000) = 240.
- j&sub1; = 1, wenn die Bits 7, 6, 3 oder 2 in J = 1. Somit A(1,3) = (11001100) = 204.
- j&sub0; = 1, wenn die Bits 7, 5, 3 oder 1 in J = 1. Somit A(0,3) = (10101010) = 170.
- Die A(r,s) stellen die Zahlen dar, die mit J UND-verknüpft werden, um auf eine 1 in verschiedenen Positionen von J zu prüfen. Das heißt,
- j&sub2; = J UND A(2,3), j&sub1; = J UND A(1,3), j&sub0; = J UND A(0,3)
- Das s in A(r,s) zeigt an, daß J mit 2S Binärbits dargestellt ist. Schließlich wird j mit der geschachtelten Multiplikation gebildet:
- j = ((j&sub2;) 2 + j&sub1;) 2 + j&sub0;
- Es gibt ein einfaches Ergebnis für die Berechnung der Werte A(r,s) für jedes gegebene r, s. Um dies zu verdeutlichen, werden die obenerwähnten Werte A wie folgt kombiniert: sum
- In allen drei Fällen ist die Summe dieselbe. Dies wird verallgemeinert zu
- A(r,s) + 2-(2r) A(r,s) = 22s - 1, oder
- A(r,s) = 22r (22s - 1) / (22r + 1)
- Für eine Gegenrechnung seien r = 2 und s = 3. Dann ergibt sich A(2,3) = 16 255 / 17 = 240, die korrekte Antwort.
- Da nun j gefunden ist, kann Vj (der momentane Funktionswert) ausgegeben werden. Als nächstes sind ja und jb zu finden, die Orte der beiden Sinuswerte, die zu mitteln sind, um den nächsten interpolierten Wert zu bilden, der im Vektor an der Position Vj gespeichert wird; zu Beginn folgt eine Zerlegung der Argumente.
- In der Vektortabelle ist das Argument für die auszugebende Größe n, der Zählereingang, der sich in der j-ten Position befindet. J = (n UND -n) = 2j ist von vorhin ebenso verfügbar. Eine Betrachtung der Vektortabelle zeigt, daß in der Spalte j das nächste Argument n + 2j+1 sein wird. Dieser Wert soll der Mittelwert zwischen n&sub1; und n&sub2; sein, welche die Argumente des zu mittelnden Sinusausdrucks sind. Um dies zu erreichen, wird
- n&sub1; + n&sub2; = 2(n+2j+1) 2n + 2j+2 = 2n + 2j+1 + 2j + 2j
- wobei für unterschiedliche n&sub1; und n&sub2; gilt
- n&sub1; = n + 2j, n&sub2; = n + 2j+1 + 2j
- Mit dieser Zerlegung der Argumente werden als nächstes vier Möglichkeiten zur Bildung von n&sub1; und n&sub2; betrachtet. FALL 1 niedriger FALL 2 niedriger FALL 3 niedriger FALL 4 niedriger
- Die Fälle 1 bis 4 zeigen, daß n&sub1; oder n&sub2; in der Spalte j&sub1; = j+1 erscheint. Weiter zeigen Fall 1 und 3 oder Fall 2 und 4, daß die anderen Argumente in einer höherwertigen Spalte auftreten. Um das Argument na in der benachbarten Spalte j+1 zu finden, führen die Fälle 1 und 4 zu der Bildung von
- na = n + 2j + (2j+1 UND n)
- Das andere n wird zu
- nb = 2n + 2j+1 + 2j + 2j - (n + 2j + (2j+1 UND n)) = n + 2j+1 + 2j - (2j+1 UND n)
- Unter Berücksichtigung, daß J = 2j bereits gefunden ist, ergibt sich
- nb = n + 3J - (2J UND n)
- Die am weitesten rechts liegende 1 von nb (jb) und diejenige von na (ja) werden in nb und na unter Verwendung des Verfahrens lokalisiert, das j von n liefert. Schließlich wird das Ersatzelement durch Interpolation der Elemente Vja und Vjb von V unter Verwendung der Gleichung 1a (oder 2a) berechnet.
- Mit Bezug auf Fig. 1 wird im folgenden eine Ausführungsform der Vorrichtung beschrieben, die zur Ausführung der Erfindung verwendet werden kann. In dieser Ausführungsform umfaßt der Funktionsgenerator eine Arithmetik-Logik- Einheit 1, die mit endlicher Genauigkeit (z. B. 12, 16 oder 32 Bits) Additionen, Subtraktionen und Multiplikationen (oder Divisionen) nach der Anweisung eines eingegebenen Programms ausführen kann. Die Eingabe in die Arithmetikeinheit ALU 1 findet über einen Datenbus 2 (typischerweise 12 oder 16 Bits breit) statt. Mit dem Datenbus 2 ist ein Speicher 3 verbunden, der M = (log&sub2;N) - 2 aufeinanderfolgende Speicherplätze umfaßt, die jeweils eine Binärdarstellung eines konstanten Wertes enthalten. Die Werte sind die Matrix der in der Interpolationsformel verwendeten Sekanten (1/[2 cos(L)], wobei L = 2&sup0;, 2¹, 2², ...) und können in einem ROM enthalten sein, da in diesen Speicher nicht geschrieben wird. Selbstverständlich könnten statt dessen Kosinuskonstanten gespeichert und verwendet werden, wenn die ALU 1 Divisionen ausführen kann. Auf den Speicher wird über einen Adreßbus 4 zugegriffen. Ein RAM 5 umfaßt mehrere M von aufeinanderfolgenden Speicherplätzen und wird ebenfalls mittels des Adreßbusses 4 adressiert und ist an den Datenbus 2 angeschlossen. Dieser RAM hält den Arbeitsvektor Sj (äquivalent zum obenerwähnten Vj), der interpolierte Funktionswerte speichert (im folgenden ist die Funktion beispielhaft eine Sinusfunktion), einschließlich der aktuellen Werte. Ein Aufwärtszähler 6, der anfangs auf 1 gesetzt ist, erzeugt aufeinanderfolgende Eingangswerte bis M, die an eine Ausgangsadressen-Decodiererlogikschaltung 7 angelegt werden. Diese Schaltung erzeugt die Adresse für den Sinustabellen-RAM 5 des vom Generator auszugebenden Funktionswertes, in den die am weitesten rechts liegende "1" in der Binärdarstellung des Eingangswertes vom Zähler 6 unter Verwendung z. B. eines der obenbeschriebenen Algorithmen lokalisiert wird. Dieser Wert wird an den Adreßbus 4 angelegt. Eine zweite Adreßdecodiererschaltung 8 erzeugt für den vom Zähler 6 angelegten Eingangswert die zwei Adressen für den Sinustabellen-RAM 5 der Sinuswerte Sja und Sjb, zwischen welchen das Ersatzelement des Vektors S berechnet wird, und Sj zu ersetzen.
- Ferner ist ein RAM 9 mit der gleichen Größe M wie der RAM 5 vorhanden, um den Arbeitskosinusvektor Cj zu halten, während ein ROM 10 mit der gleichen Größe wie der ROM 3 vorhanden ist, um die zugehörige Matrix von Kosekanten zu halten.
- Selbstverständlich können alle vier Speicher 3, 5, 9 und 10 abgeteilte Bereiche der gleichen RAM-Vorrichtung sein. Da ferner, wie deutlich wird, für jeden gegebenen Wert von L entweder die Sekans- oder die Kosekans-Konstante, jedoch nicht beide, bei der Interpolation verwendet werden, muß von beiden insgesamt nur M (= (log&sub2;N) + 2) gespeichert werden; nämlich die Werte des Sekans für niedrige L und des Kosekans für große L. Zur Vereinfachung werden jedoch im folgenden die Speicher 3, 5, 9 und 10 als getrennte Vorrichtungen behandelt.
- Wenn der Funktionsgenerator selbständig sein soll (z. B. als Tongenerator), wird ein Ausgangspuffer 11 vorgesehen, der mit dem Datenbus 2 verbunden ist (und ferner einen DAC besitzen kann, um einen Analogausgang zur Verfügung zu stellen).
- Im folgenden wird die Arbeitsweise dieser Vorrichtung beschrieben.
- Der Zähler 6 erzeugt einen Wert von n (den Eingabewert für den Generator). Der Ausgangsadreßdecodierer 7 empfängt n und lokalisiert anhand desselben die Position des nächsten auszugebenden Wertes im Sinustabellen-RAM 5, indem wie oben erläutert die Spalte der am weitesten rechts liegenden 1 bestimmt wird. Der Wert j wird zum variablen Adreßdecodierer weitergeleitet, der die Adressen ja und jb der beiden Werte berechnet, von welchen ausgehend unter Verwendung des obenerwähnten Verfahrens der nächste (Ersatz-) Sinuswert interpoliert wird. Die Entscheidungslogik 12 bewertet dann j, um zu entscheiden, welcher Algorithmus zur Berechnung des nächsten Wertes verwendet werden soll. Die Entscheidungslogik 12 veranlaßt die Addition von ja und jb zur Basisadresse entweder des Sinustabellen-RAMs 5 oder des Kosinustabellen-RAMs 9. Die beiden Adressen werden dann ihrerseits auf den Adreßbus 4 ausgegeben, wobei die entsprechenden Werte Sja und Sjboder Cja und Cjb vom betreffenden RAM 5 oder 9 auf den Datenbus 2 ausgegeben und in die Register der ALU 1 eingegeben werden.
- Dann wird im Ausgangsadreßdecodierer 7 j zur Offset- Basisadresse des Sinustabellen-RAMs 5 addiert und auf den Adreßbus 6 ausgegeben. Anschließend legt das Sinustabellen-RAM 5 den betreffenden Sinusausgangswert Sj auf den Datenbus 2, wobei der Ausgangspuffer 11 freigegeben wird, um eine gepufferte Ausgabe zu erzeugen.
- Wenn j niedrig ist (entsprechend einem niedrigen Lφ&sub0; oder bei irgendeiner Rate näher an nπ als mπ/2), addiert der Ausgangsadreßdecodierer 7 zu j einen Offset, der der Basisadresse des Sekanstabellen-ROMS 3 entspricht, und gibt das Ergebnis auf den Adreßbus 4 aus. Entsprechend legt das Sekanstabellen-ROMs 3den nächsten Wert von 1/2 cos(Lφ&sub0;) auf den Datenbus 2. Die ALU 1 wird freigegeben, um diesen Wert in ein Register zu lesen.
- Wenn j hoch ist (entsprechend einem hohen Lφ&sub0;), wird statt dessen ein Offset hinzuaddiert, der der Basisadresse des Kosekanstabellen-ROMs 10 entspricht.
- Die ALU 1 hält nun (in drei Registern) die erforderlichen Daten für die Berechnung der neuen Sinusinterpolation, um den alten Ausgangswert zu ersetzen.
- Die Entscheidungslogik 12 übergibt entweder eine Addieroder eine Subtrahieranweisung an die ALU 1, die somit die Inhalte der ersten beiden Register entweder addiert (Sja + Sjb) oder subtrahiert (Cja + Cjb) und das Ergebnis mit der betreffenden Konstante, die im dritten Register gehalten wird, multipliziert.
- Der erzeugte neue Sinuswert wird von der ALU 1 auf den Datenbus 2 gelegt, während vom Adreßdecodierer die Adresse j (zur Offset-Basisadresse des Sinustabellen-RAMs addiert) auf den Adreßbus 4 gelegt wird, wobei der Ersatzwert den eben ausgegebenen Wert im Sinustabellen-RAM 5 überschreibt.
- Dann wird auf dieselbe Weise wie oben unter Verwendung der adressierten j, ja und jb der Ersatzwert des Kosinustabellen-RAMs 9 berechnet und gespeichert. Falls gewünscht, kann ferner das bestehende Kosinuselement ausgegeben werden.
- Dann wird der Zähler 6 inkrementiert und der nächste Zyklus beginnt.
- Es ist normalerweise zweckmäßig, die beiden RAMs 5, 9 und ähnlich die beiden ROMs 10, 3 als einzelne Vorrichtungen zu verwirklichen.
- Wie in Fig. 2 gezeigt, können die Speicher 3, 5, 9 und 10 als Bereiche einer einzigen RAM-Vorrichtung 13 ausgeführt sein. Der Zähler 6 ist zweckmäßigerweise als ein Register der ALU 1 ausgeführt. Die Entscheidungslogik 12, der variable Adreßdecodierer 8 und der Ausgangsadreßdecodierer 7 werden alle zweckmäßigerweise durch die ALU 1 verwirklicht, die mit einem Steuerprogramm betrieben wird, das z. B. in einem Programm-ROM 14 gespeichert, wobei der Logik der Fig. 3 folgend die ALU zweckmäßigerweise eine DSP-Vorrichtung, z. B. ein Mitglied der DSP- Familie von AT&T, ist (und platineninternes RAM oder ROM 13 und/oder 14 enthalten kann), und wobei das Programm, das die Erfindung verwirklicht, Teil eines anderen Programms sein kann (das z. B. eine Fourier-Transformation für ein Eingabesignal ausführt)
- Obwohl die Erfindung mit Bezug auf das zweite offenbarte Interpolationsverfahren beschrieben worden ist, ist sie (im weitesten Sinn) ebenso auf das erste anwendbar.
- Andere trigonometrische Funktionen als Sinus und Kosinus können auf dieselbe Weise erzeugt werden.
- Die Erfindung ist bei der Interpolation periodischer, alternierender Funktionen besonders nützlich, da diese besonders dazu neigen, zwischen großen Zahlen kleine Abweichungen zu erzeugen; eine Klasse solcher Funktionen sind jene, die von Sinus- und Kosinusfunktionen einfach abgeleitet werden können (wie z. B. Tangensfunktionen).
- Allgemeiner ausgedrückt, eine weitere Klasse von Funktionen, auf die die Erfindung angewendet werden kann, sind die Exponentialfunktionen:
- e(c (n+k)) = e(c+n) e(c k)
- e(c (n-k)) = e(c n) e-(c k)
- e(c (n+k)) + e(c (n-k)) = e(c n) (e(c k) e(-c k))
- wobei c eine Konstante ist, die komplex sein kann. Sinusund Kosinusfunktionen sind Spezialfälle der Funktionenklasse, die gedämpfte harmonische Funktionen umfaßt. Die betreffenden Interpolationsgleichungen können aus der Betrachtung vom Fachmann abgeleitet werden.
- Die Entscheidungslogik 12 muß nicht notwendigerweise auf der Grundlage der Werte von j oder L entscheiden, welcher Algorithmus zu verwenden ist, sondern könnte z. B. den Subtraktionsschritt ausführen und bestimmen, ob das Ergebnis die Differenz von zwei nahezu gleichen Größen ist (was Rundungsfehler erzeugt). Der Zähler 6 könnte selbstverständlich abwärts zählen, statt aufwärts zu zählen (mit einer leichten Anderung des Verfahrens für die Herleitung von ja und jb), wobei komplexere Wellen erzeugt werden könnten, indem aufwärts und anschließend abwärts gezählt würde.
- Wie oben erwähnt worden ist, liegt eine wichtige Anwendung der Erfindung in der digitalen Signalverarbeitung, die ein Eingangssignal empfängt, eine Operation ausführt und eine Ausgangssignal erzeugt; eine Klasse solcher Vorrichtungen führt Spektraltransformationen für aufeinanderfolgende Abschnitte des Eingangssignals aus. Die Erfindung ist besonders nützlich bei der Berechnung von Kurzterm-Fouriertransformationen und diskreten Kosinus oder Sinustransformationen, die bei Echtzeit-Signalverarbeitungsoperationen (in welchen Geschwindigkeit und Speicherplatzeinsparung wichtig sind), wie z. B. bei einer hochkomprimierenden Videocodierung, weit verbreitet sind. Die Erfindung hat jedoch auch andere Anwendungsgebiete; z. B. die Erzeugung hochreiner Signalwellen zum Prüfen oder die Quadraturdemodulation, bei welchen über einen DAC eine Folge von Funktionswerten erzeugt und ausgegeben werden, um eine Analogwelle zu erzeugen. Die Erfindung kann ferner in Taschenrechnern eingesetzt werden.
- 1. Buneman O. - "Stable On-line Creation of Sines or Cosines of Successive Angles", Proc. IEEE, Bd. 75, Nr. 10, S. 1434-1435, Oktober 1987.
- 2. Lind L. F. - Stable On-line Creation of Some Common Functions", IEEE Fifth International Conference on Digital Processing of Signals in Communications, Loughborough, S. 11-15, September 1988.
- 3. Oliver J. - "Stable Methods of Evaluating Cos(iπ/n)", J Inst Maths Applic, Bd. 16, S. 247-258, 1975.
- Es folgt ein ZBASIC-Auflistung eines Simulationsprogramms für die Verwirklichung der Erfindung unter Verwendung des obenbeschriebenen Algorithmus zur Steigerung der Genauigkeit.
- 00010 REM ONLINE-ERZEUGUNG VON SINUSWELLEN
- 00020 REM L.F. Lind, 6. März, 1989.
- 00030 REM Initialisierung.
- 00040 REM Ba = die Anzahl der Genauigkeits-Bits.
- 00050 REM S = Sinusmatrix, online-erzeugt.
- 00060 REM Sc = berechnete Sinusmatrix (12 Stellen Genauigkeit)
- 00070 REM C = Kosinusmatrix, online-erzeugt.
- 00080 REM Cc = berechnete Kosinusmatrix (12 Stellen Genauigkeit)
- 00090 REM SEC Sekansmatrix von Konstanten.
- 00100 REM CSC = Kosekansmatrix von Konstanten.
- 00110 REM SW = Schaltmatrix zum Wählen des SEC- oder CSC- Elements.
- 00120 REM D = Konstanten in der LOG2-Unterroutine.
- 00130 REM N% = Anzahl der zu berechnenden Abtastpunkte.
- 00140 REM NLG% = log N% (zur Basis 2), aufgerundet...
- 00150 REM zur nächsten ganzen Zahl.
- 00160 REM T = Radiant-Winkelinkrement.
- 00170 BREAK ON
- 00180 CLS
- 00190 DIM S(12),Sc(2000),C(12),Cc(2000),SEC(12),CSC(12), SW% (12)
- 00200 DIM D(3),E(2000),F(2000)
- 00210 Ba=65536:REM Dies ergibt 16 Bit Genauigkeit.
- 00250 T=1
- 00260 N%=10: NLG%=4
- 00270 dXp=1000/ (N%-1)
- 00320 REM Initialisieren der Matrizen S,C,SEC,CSC,SW%.
- 00330 FOR K%=0 TO NLG%
- 00340 X=SIN(2 K%*T) :GOSUB"round":S(K%)=X
- 00350 X=l/(2*S(K%)) :GOSUB"round":CSC(K%)=X
- 00360 X=COS(2 K%*T) :GOSUB"round":C(K%)=X
- 00370 X=l/(2*C(K%) :GOSUB"round" :SEC(K%)=X
- 00380 SW%(K%)=1
- 00390 IF ABS(SEC(K%))> ABS(CSC(K%)) THEN SW%(K%)=0
- 00400 NEXT K%
- 00410 REM Initialisieren der Matrix D.
- 00420 D(0)=43690:D(1)=52428
- 00430 D(2)=61680:D(3)=65280
- 00460 REM NI% ist Argument der Zahl, die der gewählten folgt.
- 00470 REM 5% ist Argument der Zahl, die der gewählten vorangeht.
- 00480 REM Online-Erzeugung von Sinuswerten.
- 00520 REM ******** Beginn der Hauptschleife ********
- 00530 FOR K%=l TO N%
- 00540 J%=K% AND -K%:J2%=2*J%
- 00550 NS%=J%:GOSUB"LOG2":L%=JS%:L1%=L%+l
- 00560 F%=K%+3*J%-(J2% AND K%)
- 00570 NS%-F% AND -F%:GOSUB"LOG2":L2%=JS%
- 00590 E(K%)=E1
- 00600 REM Finde den nächsten Tabellenwert.
- 00610 IF SW%(L%)=0 GOTO 670
- 00620 X=SEC(L%)*(S(L1%)+S(L2%)):GOSUB"round":S(L%)=X
- 00630 X=SEC(L%)*(C(L1%)+C(L2%)):GOSUB"round":C(L%)=X
- 00640 GOTO 710
- 00650 REM Hier wird statt Sekans Kosekans verwendet.
- 00660 REM Zuerst wird argu(LI%) < argu(L2%) arrangiert.
- 00670 IF F%> K%+J2% GOTO 690
- 00680 R%=L1%:L1%=L2%:L2%=R%
- 00690 X=CSC(L%)*(S(L2%)-S(L1%)):GOSUB"round":C(L%)=X
- 00700 X=CSC(L%)*(C(L1%)-C(L2%)):GOSUB"round":S(L%)=X
- 00710 REM Sinus und Kosinus ausgeben
- 00720 FRINT "sin of "K%" = "S(L%)
- 00730 FRINT "cos of "K%" = "C(L%)
- 00840 NEXT K%
- 00850 REM ******** Ende der Hauptschleife ********
- 01050 "LOG2"
- 01060 JS%=0
- 01070 FOR KS%=3 TO 0 STEP -l
- 01080 JS%=2*JS%
- 01090 IF(NS% AND D(KS%))=0 GOTO 1110
- 01100 JS%=JS%+l
- 01110 NEXT KS%
- 01120 RETURN
- 01130 "round"
- 01140 S=SGN(X) :Y=INT(X*Ba+O.5*8)
- 01150 X=Y/Ba
- 01160 RETURN
Claims (9)
1. Generator für trigonometrische Funktionen, der
anhand eines Eingangsarguments einen Wert einer
trigonometrischen Funktion erzeugt, mit: einer
Eingabeeinrichtung, die ein Eingangsargument empfängt; einer ersten
Speichereinrichtung (5), die Werte (Sj) der Funktion, die
voneinander beabstandeten Argumentwerten entsprechen,
speichert; und einer Arithmetikeinrichtung (1), die in
einer ersten Betriebsart betrieben werden kann, um unter
Verwendung eines ersten Algorithmus Werte der Funktion,
die Argumenten entsprechen, die in den Zwischenräumen
zwischen jenen beabstandeten Argumentwerten liegen,
interpolierend zu berechnen; dadurch gekennzeichnet, daß
- der Generator ferner eine zweite Speichereinrichtung
(g) enthält, die Werte (Cj) einer zweiten, komplementären
Funktion, die voneinander beabstandeten Argumentwerten
entsprechen, speichert;
- die Arithmetikeinrichtung (1) in einer zweiten
Betriebsart betrieben werden kann, um unter Verwendung
eines zweiten Algorithmus aus Werten der zweiten
Funktion, die den benachbarten, vorgegebenen Argumentwerten
entsprechen, Werte der ersten Funktion, die Argumenten
entsprechen, die in den Zwischenräumen zwischen jenen
beabstandeten Argumentwerten liegen, interpolierend zu
berechnen; und
- der Generator ferner eine Steuereinrichtung (12)
enthält, die so betrieben werden kann, daß sie den Wert
einer Größe (j, L) prüft, die in der Berechnung zu
verwenden ist, um festzustellen, ob er in einen ersten oder
einen zweiten Bereich von Werten fällt, für den der erste
bzw. der zweite Algorithmus den kleineren abgerundeten
Fehler erzeugt, und aufgrund dessen die Recheneinrichtung
(1) in die erste Betriebsart bzw. in die zweite
Betriebsart schaltet.
2. Funktionsgenerator nach Anspruch 1, bei dem die
Funktion (Sj) eine Sinusfunktion ist und die
komplementäre Funktion eine Kosinusfunktion (Cj) ist, oder
umgekehrt.
3. Funktionsgenerator nach Anspruch 1 oder Anspruch
2, der ferner eine Einrichtung (6) enthält, die eine
zunehmende oder abnehmende Folge von Argumenten (n) an
die Eingabeeinrichtung liefert, wobei der Ausgang des
Funktionsgenerators eine der Funktion entsprechende
zeitliche Folge enthält.
4. Funktionsgenerator nach Anspruch 3, bei dem die
erste Speichereinrichtung (5) so bemessen ist, daß sie
weniger als die Gesamtzahl der Funktionswerte, die
erzeugt werden, speichert, und die Arithmetikeinrichtung
(1) so beschaffen ist, daß sie einen weiteren
Funktionswert berechnet, um einen Ausgangs-Funktionswert im ersten
Speicher durch den weiteren Funktionswert zu ersetzen.
5. Funktionsgenerator nach irgendeinem vorangehenden
Anspruch, in dem die Arithmetikeinrichtung (1) außerdem
so beschaffen ist, daß sie für den oder jeden
Eingangswert den Wert der komplementären Funktion erzeugt.
6. Funktionsgenerator nach irgendeinem der Ansprüche
3 bis 5, der ferner eine analoge Ausgabeeinrichtung (11)
enthält, die einen dem erzeugten Funktionswert
entsprechenden analogen Ausgang erzeugt.
7. Digitale Signalverarbeitungsvorrichtung, mit
einem Eingang, der ein Eingangssignal empfängt, einem
Generator für trigonometrische Funktionen nach
irgendeinem der Ansprüche 1 bis 5 und einer digitalen
Verarbeitungseinrichtung, die so beschaffen ist, daß sie unter
Verwendung von trigonometrischen Funktionen vom
Funktionsgenerator für die Verarbeitung des Eingangssignals
eine Spektraltransformationsoperation ausführt, um ein
Ausgangssignal zu erzeugen.
8. Vorrichtung nach Anspruch 7, bei dem die
Transformationsoperation eine Fourier-Transformation ist.
9. Verfahren zum interpolierenden Berechnen mehrerer
trigonometrischer Funktionswerte mit endlicher
Genauigkeit, das die Berechnung der Funktionswerte aus
gespeicherten Funktionswerten in Übereinstimmung mit einem
ersten Algorithmus enthält, gekennzeichnet durch die
Prüfung des Wertes einer Größe, die in der Berechnung zu
verwenden ist, um festzustellen, ob er in einen ersten
oder einen zweiten Bereich von Werten fällt, für den der
erste Algorithmus bzw. ein zweiter Algorithmus einen
geringeren abgerundeten Fehler erzeugt, und um dann, wenn
er in den zweiten Bereich fällt, die Funktionswerte in
Übereinstimmung mit einem zweiten Algorithmus aus
gespeicherten Werten einer zweiten, komplementären Funktion zu
berechnen.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB898918337A GB8918337D0 (en) | 1989-08-11 | 1989-08-11 | Digital signal processing |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69023979D1 DE69023979D1 (de) | 1996-01-18 |
DE69023979T2 true DE69023979T2 (de) | 1996-04-25 |
Family
ID=10661483
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69023979T Expired - Fee Related DE69023979T2 (de) | 1989-08-11 | 1990-08-09 | Digitale Signalverarbeitung. |
Country Status (6)
Country | Link |
---|---|
US (1) | US5146418A (de) |
EP (1) | EP0412826B1 (de) |
AT (1) | ATE131293T1 (de) |
DE (1) | DE69023979T2 (de) |
GB (2) | GB8918337D0 (de) |
HK (1) | HK132596A (de) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2728706A1 (fr) * | 1994-12-21 | 1996-06-28 | Philips Electronique Lab | Circuit d'interpolation pour fonctions trigonometriques |
US6677513B1 (en) | 1998-05-29 | 2004-01-13 | International Business Machines Corporation | System and method for generating and attenuating digital tones |
US6661852B1 (en) | 1999-07-21 | 2003-12-09 | Raytheon Company | Apparatus and method for quadrature tuner error correction |
US6640237B1 (en) * | 1999-07-27 | 2003-10-28 | Raytheon Company | Method and system for generating a trigonometric function |
US6647075B1 (en) | 2000-03-17 | 2003-11-11 | Raytheon Company | Digital tuner with optimized clock frequency and integrated parallel CIC filter and local oscillator |
US6590948B1 (en) | 2000-03-17 | 2003-07-08 | Raytheon Company | Parallel asynchronous sample rate reducer |
US6465110B1 (en) | 2000-10-10 | 2002-10-15 | Material Sciences Corporation | Metal felt laminate structures |
US7379493B2 (en) * | 2004-06-07 | 2008-05-27 | Lockheed Martin Corporation | Signal analyzer for detecting distortions in signals |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5865493A (ja) * | 1981-10-15 | 1983-04-19 | 松下電器産業株式会社 | 波形発生装置 |
JPS5880766A (ja) * | 1981-11-06 | 1983-05-14 | Hitachi Medical Corp | 自乗和開平計算回路 |
JPH0631990B2 (ja) * | 1984-01-07 | 1994-04-27 | カシオ計算機株式会社 | 波形の補間装置 |
EP0259514A1 (de) * | 1986-09-11 | 1988-03-16 | Deutsche ITT Industries GmbH | Digitalschaltung zur gleichzeitigen Erzeugung von digitalen Sinus- und Cosinusfunktionswerten |
JPS63186329A (ja) * | 1987-01-28 | 1988-08-01 | Nec Corp | 三角関数前処理装置 |
-
1989
- 1989-08-11 GB GB898918337A patent/GB8918337D0/en active Pending
-
1990
- 1990-08-09 AT AT90308797T patent/ATE131293T1/de active
- 1990-08-09 US US07/564,467 patent/US5146418A/en not_active Expired - Fee Related
- 1990-08-09 GB GB9017525A patent/GB2235315B/en not_active Expired - Fee Related
- 1990-08-09 EP EP90308797A patent/EP0412826B1/de not_active Expired - Lifetime
- 1990-08-09 DE DE69023979T patent/DE69023979T2/de not_active Expired - Fee Related
-
1996
- 1996-07-25 HK HK132596A patent/HK132596A/xx not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
HK132596A (en) | 1996-08-02 |
EP0412826A1 (de) | 1991-02-13 |
ATE131293T1 (de) | 1995-12-15 |
GB2235315A (en) | 1991-02-27 |
GB9017525D0 (en) | 1990-09-26 |
GB8918337D0 (en) | 1989-09-20 |
EP0412826B1 (de) | 1995-12-06 |
GB2235315B (en) | 1993-07-21 |
DE69023979D1 (de) | 1996-01-18 |
US5146418A (en) | 1992-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69030707T2 (de) | Arithmetisches Verarbeitungsgerät und dazu benütztes Verfahren | |
DE69130510T2 (de) | Arithmetisches Gerät zur Berechnung von transzendenten Elementarfunktionen | |
DE2619418C2 (de) | Einrichtung zum Umsetzen einer Binärzahl in eine Zahl Modulo M | |
DE69118465T2 (de) | Einrichtung und Verfahren zur Datenkomprimierung durch Quantisierung von in einem Binärbaum gesuchten Vektoren | |
DE3485792T2 (de) | Digitale signalverarbeitungseinrichtungen. | |
DE19839627B4 (de) | Digitaler Signalprozessor | |
DE2853560C3 (de) | Elektronische Schaltung zur Berechnung mehrerer Interpolationsgrößen bei der in der medizinischen Tomographie durchgeführten Bilderzeugung | |
DE3500316C2 (de) | ||
DE69325476T2 (de) | Abrundungsschaltung | |
DE3688600T2 (de) | Musikinstrument mit digitalem Filter mit programmierten variablen Koeffizienten. | |
DE1549584C3 (de) | Datenverarbeitungsanlage | |
DE69023979T2 (de) | Digitale Signalverarbeitung. | |
DE2706045B2 (de) | Elektronisches Tastenmusikinstrument mit Sinustabellenspeicher | |
DE2528591A1 (de) | Verfahren und vorrichtung zur analyse eines frequenzspektrums | |
DE2628471A1 (de) | Koordinatentransformationsschaltung | |
DE69423240T2 (de) | Verfahren und vorrichtung für quadratische interpolation | |
DE2736072A1 (de) | Winkelfunktionsgenerator | |
DE10013068C2 (de) | Potenzierungsoperationsvorrichtung | |
AT399236B (de) | Digitaler sinusgenerator | |
DE69808362T2 (de) | Multiplizierverfahren und Multiplizierschaltung | |
DE68926563T2 (de) | Arithmetische Einheit für logarithmische Funktionen, versehen mit Mitteln zur gesonderten Verarbeitung von Pseudodivision und -multiplikation | |
DE2500720A1 (de) | Elektronisches musikinstrument | |
DE4019646A1 (de) | Vorrichtung fuer echtzeitmultiplikation in 2er-komplement-darstellung in einem digitalen signalprozessorsystem und ein verfahren dafuer | |
EP0036074A1 (de) | Syntheseschaltung für periodische Signale, insbesondere als Teil eines Musikinstruments | |
DE3340362C2 (de) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |