Перейти к содержанию
    

Округление результатов

PS Все таки, советую не парится, и сделать обычное округление (не просто усечение, а с учетом значения отбрасываемой части, как я выше написал).

Это так ?

reg15 <= signed(reg(31 downto 16)) + reg(15)

 

Так в основном и поступают. Можно по вкусу и дизеринг(рандомизацию преслувутую) сделать, но в FPGA обычно не до дизеринга - логику всегда найдется на что-то более значимое потратить...

 

И всё таки как эту рандомизацию делают: в биты на уровне собственных шумов лабуду слчайную подмешивают ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это так ?

reg15 <= signed(reg(31 downto 16)) + reg(15)

И всё таки как эту рандомизацию делают: в биты на уровне собственных шумов лабуду слчайную подмешивают ?

Все правильно поняли.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все правильно поняли.

 

Значит, подводя итоги:

 

1. Определяю эффективную разрядность акк, либо 32b(ннапример) + log2(N) (n -тапсы), либо подовая max значение при заданных коэфф. (в каждый тап всунуть по макс. значению и складывать и двигать сока надо, всмысле сколько боевых значений, например 1000) ? И кстати какой способ лучше ?

 

2. Далее беру с акк фиксированное к-во старших бит, предварительно округлив или рандомизировать,

например, (37 downto 22), акк - 38 и значащие биты - 16.

 

И ВСЁ ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эффективную разрядность аккумулятора нужно определить следующим образом. Фактически нужно вычислить максимальное число, которое возможно на выходе фильтра. Абсолютная величина этого чилса вычисляется как сумма модулей всех коэффициентов фильтра, умноженная на максимальную амплитуду сигнала. Возмите от него логарифм по основанию 2 и получите число разрядов, плюс 1 на знак. Тут вас ожидает маленькая радость. Например, если разрядность произведения равна 32, и имеется 64 произведения, которые нужно сложить, то аккумулятор должен иметь 38 рязрдов. Но вот эффективных для КИХ фильра получается обычно меньше, т.к. коэффициенты фильтра по краям сильно меньше. Что же касается битов, которые необходимо брать, то тут нужно представлять характер сигнала с которым работаете. В лоб - это старшие занчимые биты сумматора. При этом младшие биты можно либо откидывать, либо округлять если это необходимо. Если пик-фактор выходного сигнала небольшой, то именно эти биты и нужно брать. Но если величина пик-фактора сигнала на выходе большая, то можно брать и не старшие разряды, а например сдвинуться на несколько разрядов вправо. При этом возможны переполнения, которые следует обрабатывать.

Вот пример обработки переполнения:

 

if ((AccumI(20 downto 17) = "0000") or (AccumI(20 downto 17) = "1111")) then

QI<=AccumI(17 downto 0);

else

if (AccumI(20) = '1') then

QI<="100000000000000000";

else

QI<="011111111111111111";

end if;

end if;

 

Здесь из аккумулятора берутся младшие биты.

Не забывайте, что при такой обработке происходит компрессия сигнала.

 

Кстати, и не забывайте еще одно, при знаковом перемножении 14 разрядного числа на 18 разрядное, результат будет иметь 31 разряд а не 32. 32 рязряда получатся только в том случае если вы перемножаете два максимальных по модулю отрицательных числа, т.е. для данного примера это числа "1000000000000" и "100000000000000000". Как правило до такого не доводят. Т.е. если вы например работаете с 12 рязрядным сигналом, то максимально положительное число 2047, и как правило делают так, что и максимальное отрицательное число тоже -2047.

Изменено пользователем Михаил_K

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...