www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Basics: multiplication overflow


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend Freunde,


ich arbeite gerade an einem Vektorprozessor (SIMD). Da habe ich ein 
Problem mit der Multiplikation. Ich habe 16-bit Daten. Die 
Multiplikation passt in 32-bit Bereich. Ich habe aber nur 16-bit zur 
Verfügung. D.h. die Multiplikation liefert nur die LSBs als Ergebnis und 
im Falle eines Overflows erfolgt wrap-around.

Was kann ich an der Stelle machen? Ich habe mit Schiebe-Operatoren 
versucht. Aber die Ergebnisse waren trotzdem nicht richtig :-(

Zum veranschaulichen des Problems:

short A1,A2,B1,B2;
int A,B;

Packing erfolgt hier:
A = (A1,A2);
B = (B1,B2);


C = mul(A,B);

C sieht so aus: C = (A1*B1,A2*B2)

Ich hoffe, das ist verständlich.

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Architektur kenne ich leider nicht. Aber im Notfall sollte 
Folgendes gehen:
zu berechnen: x * y

x = 256 * a + b // x und y in je zwei 8-Bit-Werte zerlegen
y = 256 * c + d

x * y = (256 * a + b) * (256 * c + d)
      = 65536 * a * c + 256 * (a * d + b * c) + b * d
      = a*c << 16 + (a*d + b*c) << 8 + b*d
(hoffe, ich habe mich nicht vertippt)

d.h. du formst die 16x16-Multiplikation in vier 8x8-Multiplikationen und 
ein paar Addidionen um.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Kai,


danke für die schnelle Antwort. Ist das aber nicht rechenintensiv? Ich 
soll bei meiner Aufgabe Leistungsverbrauch minimieren, d.h. Arbeitzyklen 
reduzieren. Deshalb musste ich den Vektorprozessor nehmen, weil ja auf 
eine Datenmenge parallel die gleiche Operation angewendet werden kann 
(SIMD).

Ich probiere deine Lösung und schau, wie das Ergebnis aussieht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.