Рассчитать логарифм с использованием VHDL

Я пытаюсь преобразовать значение из линейной записи в десятичную запись на FPGA.

Хотя уравнение x_dB=10*log(x_lin), конечно, хорошо известно, но я не смог реализовать его в VHDL.

Я обнаружил некоторые тождества (наиболее часто встречающиеся - arctanh), которые МОГУТ быть полезными по адресу http://en.wikipedia.org/wiki/Inverse_hyperbolic_function

Поскольку обратные гиперболические функции доступны через ЦИФРОВОЙ компьютер вращения координат (CORDIC), это кажется достаточно простым - за исключением того, что CORDIC имеет два входа (X & Y) в отличие от одного входа, требуемого логарифмом, и в этом отношении гиперболическая функция арктангенса! Как мне выяснить, что использовать для двух входных значений (x & y), учитывая, что я действительно пытаюсь сделать это журнал?

1 ответ

Ваша цель - найти натуральное бревно, используя идентификацию:

ln (w) = 2 * atanh ((w-1) / (w + 1))

Вы должны установить гиперболическую версию CORDIC в векторном режиме (y -> 0), которая оценивает atanh(y/x). Это достигается аналогично обычному CORDIC, устанавливая y в w-1 и x в w + 1 и начальный угол z в 0. После итерации результат будет в z после применения сдвига влево для умножения на 2. Обратите внимание, что Гиберболическое расширение для CORDIC требует повторения определенных итераций (4, 13, 40, ...), чтобы оно сходилось.

Когда у вас есть ln (w), вам нужно умножить на постоянную 10 / ln(10), чтобы получить логарифм по основанию 10 в дБ.

Статья Рэя Андраки дает хороший общий обзор реализаций CORDIC. Это немного затуманивает гиперболическое расширение. Эти слайды из Xilinx охватывают больше деталей гиперболического CORDIC.

Другие вопросы по тегам