Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Быстрые алгоритмы арифметики в полях Галуа?
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
andrex
Здравствуйте!

Мне пока известно лишь то, что умножение в GF(2^8) реализуется сложением индексов и с использованием таблицы.
Буду благодарен за любую информацию о других существующих алгоритмах.
_Pasha
Цитата(andrex @ Feb 25 2009, 16:24) *
 умножение в GF(2^8)

Чего так сложно? Умножение над GF(2^8) эквивалентно взятию самого младшего байта произведения 
andrex
Цитата(_Pasha @ Feb 25 2009, 18:46) *
Чего так сложно? Умножение над GF(2^8) эквивалентно взятию самого младшего байта произведения 

Что-то у меня так не получается. Например, в матлабе gf(10, 8)*gf(10, 8) = 68. Как это получить предлагаемым Вами способом?
_Pasha
Цитата(andrex @ Feb 25 2009, 17:37) *
 Например, в матлабе

gf(x,m) 
Цитата
Создает массив элементов конечного поля из матрицы x. Конечное поле имеет 2^m элементов


Я же говорил о перемножении двух чисел в поле 2^8
andrex
Цитата(_Pasha @ Feb 25 2009, 19:51) *
gf(x,m) 

Я же говорил о перемножении двух чисел в поле 2^8

Значит, наверно, я непонятно выразился.
Имеем поле GF(2^8), основанное на полиноме x^8 + x^4 + x^3 + x^2 + 1.
Нужен алгоритм быстрого перемножения чисел из этого поля. Собственно, в приведенном примере ( gf(10, 8)*gf(10, 8) = 68 ) показано, что требуется сделать.

Кстати, насколько я понимаю, в данном случае матлабовская функция gf(x,m) делает x элементом поля GF(2^m), и по умолчанию использует приведенный выше полином.
kons
А что тут придумаешь? Таблично.
- анализ на a==0 или b==0
- берем логарифм a (для GF(2^10) - таблица 1024xshort)
- по той же таблице - логарифм b
- сумма по модулю 2^10-1
- антилогарифм (другая таблица, тоже 1024xshort)
Способы ускорения:
- часто требуется умножать массив на константу, ее логарифм взять заранее, далее - иметь спецфункцию GF_mul_exp(GF_val a, GF_log B )
- чтобы не тратить время на проверки равенства 0 и взятие по модулю - иметь расширенную вчетверо таблицу антилогарифмов:
log(0)=2*2^N, таблица расширена просто: exp(2^N...2*2^N-2) = exp(1...2^N-1), при x>2*2^N-2 exp(x)=0
andrex
Цитата(kons @ Feb 28 2009, 17:57) *
А что тут придумаешь? Таблично.

Спасибо, в общем-то так и делаю.
kons
Цитата(andrex @ Feb 28 2009, 16:12) *
Спасибо, в общем-то так и делаю.

А в чем проблема? Что может быть быстрее таблицы, особенно если избавиться от добавочных проверок? Как вариант - храните элементы в логарифмическом представлении. Но тогда складывать по таблицам придется - шило на мыло...
evg123
Есть книга Морелос-Сарагоса "Искусство помехоустойчивого кодирования", есть сайт
http://the-art-of-ecc.com
Там куча примеров программ работы с полями Галуа (БЧХ, Рид-Соломон)
По полиному генерируются две таблицы - основная и логарифмическая и имеются две простые функции сложения и умножения, которые обращаются к этим таблицам.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.