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