Всем привет! Пришло время обсудить возможное назначение умножителя с весьма странными характеристиками, входящего в структуру ЦОС-процессора TMS320c5416 из одного из прошлых выпусков.
Немного напомню о чем шла речь и что конкретно вызывает недоумение. В цифровой обработке сигналов разрядность чисел определяет шумы квантования при переходе от аналоговых величин к цифровым. Чем больше разрядов у аналого-цифрового преобразователя (АЦП), тем точнее вычисления. Однако, для большинства задач разрядности 16 бит хватает с запасом, потому как в этом случае шумы квантования оцениваются в -98 дБ по отношению к динамическому диапазону АЦП.
Динамический диапазон АЦП - это отношение между самым сильным и самым слабым сигналом, которое может быть переведено в цифровой вид без искажений.
Зачем понадобились 17-битные умножители?
Существуют задачи, где необходима повышенная разрядность отсчетов сигнала. Например, после умножения 16-битного отсчета на 16-битный коэффициент импульсной характеристики фильтра по всем правилам математики получается 32-битный результат, сохраняющий абсолютную точность.
Чтобы не терять точность на округлениях до исходного 16-битного формата (не получать шум округления) можно продолжить вычисления с 32-битными отсчетами. В этом случае сложение еще не вызовет сложностей, потому как разрядность арифметико-логического устройства (АЛУ) и регистра-аккумулятора 40 бит.
Однако, умножение теперь будет происходит по одному из следующих сценариев...
"Школьный" способ умножения
Поскольку изучаемая нами в школе таблица умножения содержала множители от 1 до 9, то и весь процесс умножения чисел с несколькими десятичными разрядами состоял из множества табличных умножений и затем сложений. В двоичном представлении все будет в точности также, однако не будем забывать, что сложения чисел происходят с переносом между разрядами:
Если схема выше вызывает подозрения, то ниже будет поясняющая немного больше:
Итого: младшие 16 бит результата умножения младших 16 бит множителей просто сносятся в результат. Остальные результаты умножения 16х16 бит складываются с переносом и составляют старшие биты результата. Как можно заметить, умножить 32-битные числа на 16-битном умножителе сложно, но вполне возможно. Необходимо большое количество дополнительных действий, среди которых будет 4 умножения 16х16 бит.
Умножение Карацубы
В свое время Анатолий Карацуба сделал нам хороший подарок в виде своего алгоритма умножения чисел.
Особенностью этого способа умножения чисел является использование всего 3-х умножений и для нашего примера необходимо выполнить 2 умножения 16х16 бит, а потом произвести умножение двух сумм 16-битных чисел. Однако, есть одно немаловажное уточнение! Суммы 16-битных чисел это 17-битные числа, потому как при сложении двоичных появляется бит переноса. В этом видео есть пояснение:
Итого: есть обоснованное предположение, что 17-битный умножитель в составе ЦОС-процессора нужен именно для экономичности умножений чисел без потери точности на округления.
Поддержите статью лайком если понравилось и подпишитесь чтобы ничего не пропускать.
Также не обойдите вниманием канал на YouTube. Подписки и лайки будут приятным ответом от аудитории.