Manipulacia s cislami v two's component zapise

Daniel Valuch daniel.valuch@wanadoo.fr
Neděle Květen 21 20:28:11 CEST 2006


Zdravim,
koli potvrdeniu mojej hypotezy by som sa chcel spytat na nezavisly nazor :-)
Uz som spominal to delenie vo VHDL, dnes som sa s tym trochu hral a 
snazil sa to nejak zoptimalizovat. Este raz pripomeniem ulohu: na vstupe 
su 16 bitove vzorky (signed) z ktorych potrebujem vypocitat priemer. 
Pocet vzoriek moze byt 1 az 4095 (12 bitov). Pocet vzoriek sa u kazdeho 
vypoctu meni, ale kolko ich je vzdy viem. Vysledna presnost mi staci 
rovnaka ako je kazda vzorka t.j. 16 bitov. Cele snazenie tohoto cvicenia 
je motivovane nahradou sirokej delicky (27 bitov : 12 bitov) ovela 
jednoduchsou nasobickou 16x16.

Teraz moja uvaha (vid obrazok 
http://dvaluch.web.cern.ch/dvaluch/temp/division.pdf):
- ked uvazujem 16 bitove vzorky a chcem ich spocitat tak s kazdym 
zdvojnasobenim poctu vzoriek sa prida jeden bit, t.j. pre 2-3 vzorky 
potrebujem 17 bitov, 4-7 18 bitov a tak dalej az po 4095 vzoriek kde je 
potrebnych 27 bitov.
- moj napad - mozno scestny. Kedze je pozadovana vysledna presnost 
rovnaka ako presnost vstupnej vzorky teoreticky viem rotaciou posunut 
vstupne cislo o prislusny pocet bitov do prava aby som vstupne cislo 
skratil na 16 bitov (vid obrazok)
- toto cislo potom vynasobim koeficientom 1/N (z vyhladavacej tabulky). 
Kedze som posunom uz vydelil prislusne cislo mocninami dvojky ostane mi 
vzdy uz len koeficient z rozsahu 0.5 az 1. V realnom systeme je este 
vynasobeny vhodnou konstantou aby som vyuzil plny dynamicky rozsah 
nasobicky (32767).
- vynasobenim 16x16 cisiel dostanem 32 bitovy vysledok z ktoreho zahodim 
spodnych 16 bitov a mam vysledok

Otazky:
- bude tento algoritmus fungovat?
- su popisane operacie korektne ak uvazujem ze cisla mam v tvare signed 
(two's complement)?

Dik,
balu




Další informace o konferenci Hw-list