-
1. Data: 2015-03-25 15:06:53
Temat: Mnożenie liczb w kodzie U2
Od: s...@g...com
Witam,
Robię demodulator AM na FPGA i mam pewien dylemat przy miksowaniu.
Mam dwie 12-to bitowe liczby ze znakiem (U2). Pakuję to do multiplikatora i na
wyjściu generuje mi 24-bitowy iloczyn C=A*B. Problem jest w tym, że jedna z tych
liczb, powiedzmy B=sin(omega*t) jest reprezentowana jako liczba 12-bitowa z zakresu
<-2048,+2047>.Tymczasem wiadomo, że sinus jako funkcja przyjmuje wartości <-1,+1>. Na
wyjściu tego miksera potrzebuję jednak tylko 12 bitów najbardziej znaczących. Które
bity teraz z tych 24 wybrać? Gdyby to było w naturalnym kodzie binarnym, nie było by
sprawy. A w U2, to mi się już samemu we łbie miksuje :))
-
2. Data: 2015-03-25 15:49:08
Temat: Re: Mnożenie liczb w kodzie U2
Od: "J.F." <j...@p...onet.pl>
Użytkownik napisał w wiadomości
>Robię demodulator AM na FPGA i mam pewien dylemat przy miksowaniu.
>Mam dwie 12-to bitowe liczby ze znakiem (U2). Pakuję to do
>multiplikatora i na wyjściu generuje mi 24-bitowy iloczyn C=A*B.
>Problem jest w tym, że jedna z tych liczb, powiedzmy B=sin(omega*t)
>jest reprezentowana >jako liczba 12-bitowa z zakresu
><-2048,+2047>.Tymczasem wiadomo, że sinus jako funkcja przyjmuje
>wartości <-1,+1>.
I tu mamy pewien problem z liczba +1, ktora niewatpliwie wystepuje.
>Na wyjściu tego miksera potrzebuję jednak tylko 12 bitów najbardziej
>znaczących. Które bity teraz z >tych 24 wybrać? Gdyby to było w
>naturalnym kodzie binarnym, nie było by sprawy. A w U2, to mi się już
>samemu we łbie >miksuje :))
Jesli sygnal tez ma zakres +/-2047, to uzyteczny wynik masz na bitach
22:11 (z 23:0)
11 uzytecznych bitow jednej liczby plus 11 uzytecznych bitow z drugiej
liczby daje nam 22 bity wyniku mnozenia (21:0).
Ale znak tez jest uzyteczny i trzeba go w wyniku zawrzec.
A on sie w U2 duplikuje na dwoch najstarszych bitach.
Tylko trzeba przemyslec co z tym +/-1, czy jak kto woli 2048.
A w ogole to w FPGA mozesz sobie jakis ciekawszy multiplikator
zrobic - np taki co policzy wynik 12 bit i to beda od razu najstarsze
bity.
Albo w ogole znaki osobno policzy...
J.
-
3. Data: 2015-03-25 18:08:44
Temat: Re: Mnożenie liczb w kodzie U2
Od: Piotr Wyderski <p...@n...mil>
s...@g...com wrote:
> Mam dwie 12-to bitowe liczby ze znakiem (U2). Pakuję to do multiplikatora i na
wyjściu generuje mi 24-bitowy
> iloczyn C=A*B. Problem jest w tym, że jedna z tych liczb, powiedzmy
B=sin(omega*t) jest reprezentowana jako
> liczba 12-bitowa z zakresu <-2048,+2047>.Tymczasem wiadomo, że sinus
jako funkcja przyjmuje wartości <-1,+1>.
> Na wyjściu tego miksera potrzebuję jednak tylko 12 bitów najbardziej
znaczących. Które bity teraz z tych 24 wybrać?
Co drugi... ;-)
Jeżeli masz k*sin(t)*A, to przez jakie k należy podzielić?
Zrób tak, by Twój sinus przyjmujował wartości wartości
z przedziału (-1,1), np. mnożąc go przez 0,999..9 i problem
będzie trywialny: górne 12 bitów.
Pozdrawiam, Piotr
-
4. Data: 2015-03-25 18:10:31
Temat: Re: Mnożenie liczb w kodzie U2
Od: Piotr Wyderski <p...@n...mil>
J.F. wrote:
> Tylko trzeba przemyslec co z tym +/-1, czy jak kto woli 2048.
Pozbyć się przez skalowanie.
> A w ogole to w FPGA mozesz sobie jakis ciekawszy multiplikator zrobic -
> np taki co policzy wynik 12 bit i to beda od razu najstarsze bity.
> Albo w ogole znaki osobno policzy...
Ale po co, skoro dziś standardem są gotowe sprzętowe bloki
mnożące 18x18 bitów?
Pozdrawiam, Piotr
-
5. Data: 2015-03-25 18:50:03
Temat: Re: Mnożenie liczb w kodzie U2
Od: s...@g...com
W dniu środa, 25 marca 2015 15:49:12 UTC+1 użytkownik J.F. napisał:
> Użytkownik napisał w wiadomości
> >Robię demodulator AM na FPGA i mam pewien dylemat przy miksowaniu.
> >Mam dwie 12-to bitowe liczby ze znakiem (U2). Pakuję to do
> >multiplikatora i na wyjściu generuje mi 24-bitowy iloczyn C=A*B.
> >Problem jest w tym, że jedna z tych liczb, powiedzmy B=sin(omega*t)
> >jest reprezentowana >jako liczba 12-bitowa z zakresu
> ><-2048,+2047>.Tymczasem wiadomo, że sinus jako funkcja przyjmuje
> >wartości <-1,+1>.
>
> I tu mamy pewien problem z liczba +1, ktora niewatpliwie wystepuje.
>
> >Na wyjściu tego miksera potrzebuję jednak tylko 12 bitów najbardziej
> >znaczących. Które bity teraz z >tych 24 wybrać? Gdyby to było w
> >naturalnym kodzie binarnym, nie było by sprawy. A w U2, to mi się już
> >samemu we łbie >miksuje :))
>
> Jesli sygnal tez ma zakres +/-2047, to uzyteczny wynik masz na bitach
> 22:11 (z 23:0)
Jakby się dało, to bym Ci wysłał mejlem dużego browara. Działa! Dzięki!
-
6. Data: 2015-03-25 18:53:15
Temat: Re: Mnożenie liczb w kodzie U2
Od: s...@g...com
W dniu środa, 25 marca 2015 18:10:31 UTC+1 użytkownik Piotr Wyderski napisał:
> J.F. wrote:
>
> > Tylko trzeba przemyslec co z tym +/-1, czy jak kto woli 2048.
>
> Pozbyć się przez skalowanie.
>
> > A w ogole to w FPGA mozesz sobie jakis ciekawszy multiplikator zrobic -
> > np taki co policzy wynik 12 bit i to beda od razu najstarsze bity.
> > Albo w ogole znaki osobno policzy...
>
> Ale po co, skoro dziś standardem są gotowe sprzętowe bloki
> mnożące 18x18 bitów?
>
Jak po co? Sygnał z ADC mam 12-to bitowy i tyle. A generator IP i tak wykorzystuje te
sprzętowe multiplikatory 18x18.
-
7. Data: 2015-03-25 19:54:33
Temat: Re: Mnożenie liczb w kodzie U2
Od: Piotr Wyderski <p...@n...mil>
s...@g...com wrote:
> Jak po co?
Po co Jarek chce to rzeźbić ręcznie, skoro ma makroblok...
> A generator IP i tak wykorzystuje te sprzętowe multiplikatory 18x18.
Toteż...
Pozdrawiam, Piotr
-
8. Data: 2015-03-26 14:10:48
Temat: Re: Mnożenie liczb w kodzie U2
Od: "J.F." <j...@p...onet.pl>
Użytkownik "Piotr Wyderski" napisał w wiadomości grup
s...@g...com wrote:
>> Jak po co?
>Po co Jarek chce to rzeźbić ręcznie, skoro ma makroblok...
>> A generator IP i tak wykorzystuje te sprzętowe multiplikatory
>> 18x18.
>Toteż...
Zeby mozna bylo uzyc tanszej kosci, zeby mniej pradu zzeralo, zeby te
multpikatory do wazniejszych zadan wykorzystac itp :-)
Mnozenie zmiennoprzecinkowych robi sie nieco inaczej niz calkowitych,
o ile oczywiscie Stachowi to odpowiada.
J.
-
9. Data: 2015-03-26 17:43:42
Temat: Re: Mnożenie liczb w kodzie U2
Od: Piotr Wyderski <p...@n...mil>
J.F. wrote:
> Zeby mozna bylo uzyc tanszej kosci
Nawet najtańsze Spartany to mają, to dziś standard.
> zeby mniej pradu zzeralo
Pajęczynka z logiki programowalnej od _sprzętowego_ bloku
mnożącego przy porównywalnej liczbie bitów? :-)
> zeby te multpikatory do wazniejszych zadan wykorzystac itp :-)
Ale ich jest dużo... :-)
> Mnozenie zmiennoprzecinkowych robi sie nieco inaczej niz calkowitych
Akurat mnożenie to się robi tak samo (+suma wykładników), to
z dodawaniem i odejmowaniem są problemy, bo trzeba wyrównywać mantysy.
Pozdrawiam, Piotr