Главная ->  Вычислительные алгоритмы 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [ 31 ] 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

Глава 6

ВЫЧИСЛЕНИЯ В СУРРОГАТНЫХ ПОЛЯХ

Часто задачу вычисления в заданном поле можно вложить в другое поле, произвести там необходимые вычисления, а затем ответ вернуть в заданное поле. Целесообразность такого перехода может мотивироваться различными причинами. Может оказаться, что в новом поле необходимые вычисления выполнить легче, и это уменьшает объем работ или упрощает реализацию вычислений. Иногда электронные компоненты для вычислений в некотором поле доступнее, чем для заданного поля, и тогда, если требуемые вычисления допускают подходящую переформулировку, резоннее перейти в эго поле. Возможны ситуации, когда желательно разработать стандартный вычислительный модуль обработки больших массивов данных и использовать его при решении разнообразных задач для обработки дискретных сигналов. Подгонка одного типа вычислений к другому может осуществляться тогда с целью стандартизации.

Другой важной причиной использования суррогатных полей является улучшение точности вычислений. Вычисления в полях Галуа не содержат погрешностей округления и поэтому всегда г точны. Если задачу вычисления в поле вещественных или комп- , лексных чисел удастся погрузить в поле Галуа, то это может при- j вести к увеличению точности результата. В большинстве задач,] обработки дискретных сигналов можно ограничиться вычисле- ниями с фиксированной запятой; обычно оказывается достаточной! 16-битовая арифметика с фиксированной запятой. Если поле! Галуа достаточно велико, чтобы содержать 16-битовые целые! числа, то в его пределах можно правильно осуществлять многие! целочисленные операции, если только результаты не выходят! за пределы 16-битовых целых чисел.

6.1. Свертка в суррогатных полях

Свертка в поле вещественных чисел часто может быть зам нена сверткой в подходящем поле Галуа. В реальных задача! вещественные числа записываются в виде конечного числа д& сятичных или двоичных знаков; в цифровой обработке сигнале

обычно используется запись с фиксированной запятой. Двоичное представление с конечным числом знаков может ограничиваться 12 или 16 битами. При вычислениях можно предполагать, что двоичная точка находится справа - все числа являются целыми. Сдвиг двоичной точки во входных данных с целью включения остальных случаев является очень простым делом. Итак, линейную свертку

S (X) = g (X) d (X)

в поле вещественных чисел мы заменяем сверткой в кольце целых чисел. Для этого нужно только входные данные интерпретировать как целые числа. Внешний вид уравнения, описывающего свертку, не меняется, но операции приобретают смысл стандартной целочисленной арифметики. Затем уравнение в кольце целых чисел можно погрузить в подходящее поле Галуа, скажем, простое поле Галуа, GF (р), если простое число р достаточно велико. Если все входящие в свертку целые числа положительны, то задающее простое поле GF (р) простое число р должнЬ быть столь большим, чтобы выходные коэффициенты свертки не превосходили р - 1. Тогда выполняется сравнение

S (хУ е (х) d (х) (modp),

и условие вычислений по модулю р излишне. Если Sj могут принимать и отрицательные значения, то задающее простое поле GF (р) простое число р надо выбирать так, чтобы Si попадали в диапазон - (р - 1)/2 < Sj < (р - 1)/2. Тогда отрицательные целые числа могут быть представлены положительными целыми числами в интервале от (р + 1)/2 до р - 1.

Свертка в поле Галуаможет быть вычислена любым из пригодных в данном поле методов. Некоторые прямые методы рассматриваются в следующем разделе. Можно также воспользоваться преобразованием Фурье в данном поле и теоремой о свертке. На рис. 6.1 приводится сравнение такого вычисления в поле Галуа и в поле комплексных чисел. Мы видим, что на обеих сторонах рисунка выписаны одинаковые уравнения, хотя, конечно, заложенные в них арифметики различны.

Так как циклическая свертка в поле Галуа приводит к тому же самому ответу, что и циклическая свертка в кольце целых чисел, то использование преобразования Фурье данного поля Галуа также приводит к правильному ответу. Так как арифметикой поля GF (р) является арифметика по модулю р, то переполнения по модулю р в промежуточных вычислениях роли не играют, но могут оказаться существенными в выходных вычислениях; если р выбрано достаточно большим, то переполнения в выходных данных невозможны.



1У4 1л. ь. Вычисления в суррогатных поляя

6.1. Свертка в суррогатных полях

Выиисление ивлоиислеиной сввргт

Процедура i: Вложение целых иисел 6 С ; арифметика поляС

Процедура 2: Вложение целых чисел в 6F(p),

арифметика поля 6F\P).

S. = 0,D,


Рис.

six)

6.i. Сравнение двух процедур свертки.

six)

В качестве примера рассмотрим вычисление 5-точечной циклической свертки,

S W = g W d W (mod X - 1).

Выберем простое р равным 31 и будем работать в поле GF (31). Это по.те подходит к рассматриваемой задаче посто.чьку, поскольку нам известно, что коэффициенты свертки s (х) не превосходят 30. Для реально возникающих задач поле GF (31) слишком мало и мы его выбрали только для примера.

Так как 5 делит р - 1 = 30, то в данном поле существует преобразование Фурье длины 5. Ядром преобразования можно

выбрать элемент 2, так как его порядок равен 5. Пусть d = 2, rfi = 6, dj = 4, d3 = 4, d, = 0, go = 3, gi = 0,igj = 2, g, - 1, g4 = 2.

5-точечное преобразование вектора d задается равенствами

Оь= S2 (ii, А = 0, 4;

для вектора g имеют место аналогичные соотношения. В матричной записи соответственно имеем

D. О,

Таким образом, компоненты векторов-преобразований даются равенствами

Do = 16, Dj = 0, = 5, D, = 29, = 22,

G = 8, Gi = 20, Gj = 22, G3 = 0, Gj = 27.

Перемножая и Gj, для S, получаем;

S, = 4, S, = 0, = 17, S3 = 0, Sj = 5.

Так как 5-25 = 1 в поле GF (31), то = 25. Стедовательно, обратное преобразование Фурье задается равенством

i ! Г

Й 4 2

2 \Ь 4

- /4

(fl 2 л

4 S If-

определяющим окончательный результат. Непосредственное вычисление этой свертки в кольце целых чисел дает тот же результат. Если мы выберем большие входные компоненты, то некоторые компоненты свертки окажутся больше 30. В этом случае вычисление св.фтки в GF (31) приведет к переполнению выходных компонент и даст неправильный результат. Тогда нужно использовать большее поле; в практических приложениях полезны поля, содержащие по меньшей мере 2° элементов.

Если длина слова слишком велика для поля желаемой мощности, то можно воспользоваться китайской теоремой об остатках и работать с вычетами целых чисел, разбивая таким образом длинные слова на короткие подслова. Это использование китайской тео-



ремы об остатках отличается от ее предыдущего использования при построении переупорядочивания линейного потока данных в таблицу. Теперь она используется только для разбиения самих чисел, не затрагивая индексацию данных: данные следуют в своем естественном порядке. Новые свертки, конечно, можно вычислять, используя опять китайскую теорему об остатках, но на сей раз, в отличие от предыдущего, она будет использоваться для вновь сформированных многочленов и их индексов.

Пусть si обозначает вычет s, (mod mi) для г взаимно простых

целых чисел mi, mj..... m,. Тогда

-1 i = О.....L + N - I,

sl = (modm,).

1 = 0, ... , Г,

где gY = gi (mod mi) и = di (mod mi). По китайской теореме об остатках величины Sj восстанавливаются по вычетам sl -Следовательно, вычисление свертки, содержащей большие целые числа, мы свели к вычислению г сверток, содержащих малые целые числа. Для вычисления этих составляющих сверток можно пользоваться уже описанными способами или быстрыми алгоритмами вычисления сверток в кольце целых чисел.

6.2. Числовые преобразования Ферма

Простейший вид алгоритмы вычисления преобразования Фурье имеют в полях Галуа вида GF {2 + 1), которые действительно являются полями, если р = 2 -f 1 - простое число. Известно, что число 2 -Ь 1 не является простым, если т не равно степени двух. Однако обратное утверждение неверно, так как число 2 + 1 является составным. Но при m = 2, 4, 8 и 16 число 2 -f 1 является простым, равным соответственно 5, 17, 257 и 65 537. Это множество целых чисел известно под названием простых чисел Ферма. Если q - простое число Ферма, то в поле GF (q) число q - 1 и любой его делитель равны некоторой степени двойки. Преобразование Фурье

Vft = Ё * = 0.....п-1,

определено, если п делит 2 и существует элемент ш порядка п ). Таким образом, в поле GF (2 + 1) определены преобразования Фурье длин 2 , 2, 2 , 2 2. Используя алгоритм Кули- Тьюки, преобразование Фурье в поле GF (2 + 1) можно пред-

ставить в виде последовательности преобразований по основанию два. для реализации которой требуется всего лишь примерно (л/2) logs, п умножений и (я,2) log. п сложений.

Преобразования длины 32 и меньше в поле (2-f 1) делаются на самом деле намного проще. Это обусловлено тем, что порядок элемента 2 в этом поле равен 32. Чтобы увидеть это, достаточно заметить, что 2 -f 1 = О в поле GF {2 + 1). Следовательно, 2 = -1 и 2 = 1. Преобразование Фурье записывается в виде

Vs = Е 2 oi, к = 0.....31,

и умножение в данной арифметической системе сводится просто к циклическому сдвигу, так как представляет собой умножение на степени двойки. Такое преобразование вычисляется чрезвычайно просто, но длина 32 слишком мала для многих приложений.

В общем случае простого числа Ферма 2 + 1 порядок элемента 2 в поле GF (2 + 1) равен 2т, так что 2 может быть использовано в качестве ядра преобразования длины 2т. Для построения j]peo6pa30BaHHH Фурье длины 4т можно воспользоваться ядром > 2. В этих полях, как легко проверить возведением в квадрат и использованием соотношения 2 = -1, выполняется равенство у 2 = 2 (2 * - 1). Поэтому каждая степень элемента > 2 имеет вид 2 ± 2.

Например, преобразование Фурье длины 64 в поле GF (2 + 1) записывается в виде

k = Q, 63.

} Такое преобразование Фурье называют часто числовым преобразованием Ферма. - Прим. перев.

Если для этого вычисления воспользоваться БПФ-алгоритмом Кулн-Тьюки по основанию два, то все умножения на константы будут умножениями на чнсла вида 2 i 2* и, следовательно, могут быть реализованы как пара циклических сдвигов и вычитание. В общем случае поля GF {2 + 1) преобразование Фурье длины большей чем 2 всегда содержит нетривиальные умножения. Число этих умножений можно уменьшить сведением БПФ-алгоритма Кули-Тьюки в форму многомерного преобразования, в каждом из измерений которого используется не более чем 2т-точечное преобразование.

Например, рассмотрим !024-точечное преобразование в поле

{2 + п.

1023

= £ к = 0..... 1023,

где 0) - элемент порядка 1024, который можно полагать равным п , где л - примитивный элемент поля. Элемент 3 в поле



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [ 31 ] 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73