www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Vektormultiplizierer

Autor: Gast (Gast)
Datum: 08.04.2008 11:12

Hi Leute,


ich bin's wieder mit meinem Vektorprozessor :-)

Ich habe ein Problem mit der Multiplikation. Ich bin jetzt dahinter
gekommen, was der Multiplizierer macht. Das ist ein 16-bit
Multiplizierer. Wenn ich 16x16-bit multipliziere, liefert er mir nur die
LBSs. Ich will aber die MSBs. Wenn ich das um 16-bit nach rechts
schiebe, bekomme ich Müll.

Hier der Code:


 for (i=0;i<vecEl-1;i++{
      resVec[i] = (aVec[i]*bVec[i]);
      resVec[i] = resVec[i]>>16; //shift by 16, to keep the MSB-part
 }

Ich habe das mit diesen Werten in Hex probiert:

Vec1= 0x837;Vec2=0x5b7f;

Das Ergebnis vom Multiplizierer ist: a049

Der erwartete Wert ist: 2efa049. Wie zu sehen ist, nur die unteren Bits
wurden geliefert.

Wenn ich das um 16 Stellen nach rechts schiebe, ist das Ergebnis:
ffffffff


Was ist daran falsch?

Ich danke euch für eure Hilfe!
Autor: Detlef _a (detlef_a)
Datum: 08.04.2008 13:08

resVec ist 16Bit breit? Ergebnis 32 Bit breit zwischenspeichern.

      int32_t verdammt_breit ;
      verdammt_breit = (aVec[i]*bVec[i]);
      resVec[i] =verdammt_breit >>16; //shift by 16, to keep the
MSB-part

Cheers
Detlef
Autor: Gast (Gast)
Datum: 08.04.2008 13:20

Hi,

das kann aber nicht sein. vecRes ist kein skalarer Wert. vecRes ist 32
breit aber unterteilt in einen Vektor, in 16bit. Die obere Hälfte
enthält das Ergebnis von vecA(1)*vecB(1) und die untere Hälfte
vecA(2)*vecB(2).

Ich verstehe das garnicht mehr. Ich bin fast dabei diesen Prozessor
aufzugeben :-(
Autor: Detlef _a (detlef_a)
Datum: 08.04.2008 15:09

Gast wrote:

> Hi,
>
> vecRes ist kein skalarer Wert. vecRes ist 32
> breit aber unterteilt in einen Vektor, in 16bit.

Häh? Wie issn der definiert, mail mal den kompletten Code. Neulich hieß
vecRes auch noch resVec !?

> Ich verstehe das garnicht mehr. Ich bin fast dabei diesen Prozessor
> aufzugeben :-(

Der Prozessor ist völlig unschuldig, der tut, was Du ihm sagst.

Cheers
Detlef
Autor: Gast (Gast)
Datum: 08.04.2008 15:21

Hi Detlev,


der Prozessor ist in einer anderen Sprache geschrieben. Da wird andere
Syntax verwendet. Ich habe den Fehler jetzt. Ich musste nur das Ergebnis
in 32-bit casten (wie du das empfohlen hattest) und dann shiften. Jetzt
ist alles korrekt.



Ich danke dir herzlichst!
Autor: 6645 (Gast)
Datum: 14.04.2008 19:55

Sonst gaebe es fuer das naechste Mal noch'n Simulator....

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net