RTV forum PL | NewsGroups PL

Jak prawidłowo wybierać bity z 24-bitowego iloczynu w kodzie U2 dla demodulatora AM?

Mnożenie liczb w kodzie U2

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak prawidłowo wybierać bity z 24-bitowego iloczynu w kodzie U2 dla demodulatora AM?

Guest

Wed Mar 25, 2015 4:06 pm   



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 Smile)

J.F.
Guest

Wed Mar 25, 2015 4:06 pm   



Użytkownik napisał w wiadomości
Quote:
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.

Quote:
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 Smile)

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.

Piotr Wyderski
Guest

Wed Mar 25, 2015 6:08 pm   



stchebel@gmail.com wrote:

Quote:
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... Wink
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

Piotr Wyderski
Guest

Wed Mar 25, 2015 6:10 pm   



J.F. wrote:

Quote:
Tylko trzeba przemyslec co z tym +/-1, czy jak kto woli 2048.

Pozbyć się przez skalowanie.

Quote:
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

Guest

Wed Mar 25, 2015 7:50 pm   



W dniu środa, 25 marca 2015 15:49:12 UTC+1 użytkownik J.F. napisał:
Quote:
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 Smile)

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!

Guest

Wed Mar 25, 2015 7:53 pm   



W dniu środa, 25 marca 2015 18:10:31 UTC+1 użytkownik Piotr Wyderski napisał:
Quote:
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.

Piotr Wyderski
Guest

Wed Mar 25, 2015 7:54 pm   



stchebel@gmail.com wrote:

Quote:
Jak po co?

Po co Jarek chce to rzeźbić ręcznie, skoro ma makroblok...

Quote:
A generator IP i tak wykorzystuje te sprzętowe multiplikatory 18x18.

Toteż...

Pozdrawiam, Piotr

J.F.
Guest

Thu Mar 26, 2015 2:10 pm   



Użytkownik "Piotr Wyderski" napisał w wiadomości grup
stchebel@gmail.com wrote:
Quote:
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.

Piotr Wyderski
Guest

Thu Mar 26, 2015 5:43 pm   



J.F. wrote:

Quote:
Zeby mozna bylo uzyc tanszej kosci

Nawet najtańsze Spartany to mają, to dziś standard.

Quote:
zeby mniej pradu zzeralo

Pajęczynka z logiki programowalnej od _sprzętowego_ bloku
mnożącego przy porównywalnej liczbie bitów? :-)

Quote:
zeby te multpikatory do wazniejszych zadan wykorzystac itp Smile

Ale ich jest dużo... :-)

Quote:
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

elektroda NewsGroups Forum Index - Elektronika Polska - Jak prawidłowo wybierać bity z 24-bitowego iloczynu w kodzie U2 dla demodulatora AM?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map