DT-Fourier_Convol.HTM
ДП Фурье в конечных полях     ▲ Выше     ЧП Ферма

Свёртка и Фурье-подобные преобразования


            T-1
y[k]= x[t] h[k-tT]
          t=0
    k = 0,1,..,T-1

 



Свёртка двух сигналов
История быстрых алгоритмов ЦОС
Связь между ТЧП, ПП и ДПФ
  ПП и вычисление свёрток
  ТЧП и вычисление свёрток
  Вычисление комплексных свёрток с помощью ЧП Ферма
  Резюме сравнения ТЧП, ПП и ДПФ



 
101       Поговоримъ о странностяхъ любви.
      Иного я не смыслю разговора.
                                   А.С.Пушкинъ
                          "Гаврiилiада", 1820.

Свёртка двух сигналов.

В процессе кодирования-декодирования сигналов с использованием конечных полей приходится неоднократно вычислять произведение двух векторов (полиномов), которое принято называть свёрткой.

Свёртка — это базовая операция в ЦОС. Различают линейную, циклическую или в общем случае полевую свёртку .

Линейная (или апериодическая, или ациклическая ) свёртка   y[t]   двух векторов   x[t] и h[t]   определяется в следующей   -форме:

y[k] =
T-1
  x[t] h[k-t] , k = 0,1,...,T-1 ,
t=0
где операции над индексами — это обычные операции сложения и вычитания или иначе (что эквивалентно)
y[k] =
T-1
  h[t] x[k-t] , k = 0,1,...,T-1 .
t=0

Циклическая (или   периодическая, или   круговая, или нелинейная ) свёртка y[t]   двух векторов   x[t] и h[t]   определяется в следующей   -форме:

y[k] =
T-1
  x[t] h[ k-t T ] , k = 0,1,...,T-1 ,
t=0
где операции над индексами — это операции по модулю T. Для циклической свёртки (или ЦЦС — Цифровой Циклической Свёртки), как и для линейной, справедлива и другая эквивалентная запись
y[k] =
T-1
  h[t] x[ k-t T ] , k = 0,1,...,T-1 .
t=0

Если векторы   y[t], x[t] и h[t]   рассматривать как полиномы (или многочлены)   Y(z), X(z) и H(z) , а их элементы ("точки") — как коэффициенты при степенях неизвестного z, то в общем случае свёртка в виде произведения полиномов запишется так

Y(z) = X(z)·H(z) mod P(z) .
Линейная свёртка получается, когда полином-модуль
P(z) = zL - 1 = z2T1 - 1 ,
где L > deg( X(z) )+deg( H(z) ) . Например
L = deg( X(z) )+deg( H(z) )+1 = (T-1) + (T-1) + 1 = 2T-1 .
В этом случае приведение по модулю   P(z)   не влияет на результат   Y(z) .

Для циклической свёртки полином-модуль

P(z) = zT - 1 .
Приведение по mod zT-1 полинома Y(z) фактически приводит к периодизации всех последовательностей к периоду T, т.е. к сложению коэффициентов при zk и zk+T, что и даёт окончательный результат .

Полином   Q(z)   является делителем   P(z), если можно найти такой полином D(z), что   D(z)·Q(z)=P(z) . Полином P(z) степени T-1 называется неприводимым, если его единственные делители — это полиномы степени 0 или степени T-1. Неприводимые полиномы в полях полиномов являются аналогами простых (неделимых) чисел в кольце обычных целых чисел Z.

Полевая (или по модулю неприводимого полинома, например P(z)=z3+z+1, который порождает поле   GF(23), т.е. с учётом тождеств   z3 z+1 ,   z4 z2+z , z5 z3+z2 z+1+z2 ) свёртка   y[t]   двух векторов   x[t] и h[t]   определяется в следующей   -форме:

y[k] =
T-1
  x[t] h[ k-t ] mod (z3+z+1) , k = 0,1,...,T-1 .
t=0

Например, для трёхточечных (или трёхкомпонентных Tx=Th=T=3 ) векторов x[t] и h[t]   полиномы степени 3-1=2 запишутся так

X(z) = x2·z2 + x1·z1 + x0·z0  
H(z) = h2·z2 + h1·z1 + h0·z0 .

Тогда имеем линейную свёртку
y[k] = x[t] * h[k-t] mod (z5-1) ,
где t=0,1,...,T-1 ,
     k=0,1,...,(Tx+Th-1)-1=[0...4] .

liney0 = x0h0 ;
liney1 = x0h1−0 + x1h1−1 = x0h1 + x1h0 ;
liney2 = x0h2−0 + x1h2−1 + x2h2−2 = x0h2 + x1h1 + x2h0 ;
liney3 = x1h3−1 + x2h3−2 = x1h2 + x2h1 ;
liney4 = x2h4−2 = x2h2 .

Для тех же полиномов имеем циклическую свёртку
y[k] = x[t] * h[k-t] mod (z3-1) ,
где t,k=0,1,...,T-1=[0...2] .
cycley0 = x0h0 + x1h0−13 + x2h0−23 = x0h0 + x1h2 + x2h1 = liney0 + liney3 ;
cycley1 = x0h1 + x1h1−13 + x2h1−23 = x0h1 + x1h0 + x2h2 = liney1 + liney4 ;
cycley2 = x0h2 + x1h2−13 + x2h2−23 = x0h2 + x1h1 + x2h0 = liney2 .

Для тех же полиномов имеем полевую свёртку
y[k] = x[t] * h[k-t] mod (z3+z+1)
где t,k=0,1,...,T-1=[0...2] .

GFy0 = liney0 + liney3 ;
GFy1 = liney1 + liney3 + liney4 ;
GFy2 = liney2 +             liney4 .

Заметим, что при определении линейной и циклической свёрток, в отличие от операций над индексами, на операции умножения и сложения элементов векторов не налагается никаких ограничений; в частности, они могут выполняться по модулю M, где M — простое число. В этом случае компоненты вектора y[k] могут вычисляться над простым полем Галуа GF(M).

Если циклическая свёртка y[t] двух векторов x[t] и h[t] , заданых на абелевой группе H, определена в числовом поле или в кольце (с единицей), то она изоморфна соответствующим дискретным χ-преобразованиям, так что, например, ДП Фурье можно вычислять через циклическую свёртку, а свёртку — через прямое и обратное ДП Фурье:

y[t] = x[t] * h[t] = оДПФ( ДПФ( x[t] ) · ДПФ( h[t] ) )
или через прямое и обратное ЧП Ферма, или через ТЧП Гаусса.

Линейная свёртка широко применяется при ЦОС над полями комплексных и вещественных чисел. При кодировании сообщений X(z) циклическими кодами каждое закодированное сообщение (или кодовое слово) Y(z) находится как произведение полиномов (свёртка векторов)

Y(z) = X(z) · H(z) mod (zT-1) ,
где H(z) — порождающий полином кода. Эту циклическую свёртку можно вычислять сначала как линейную, а затем привести по модулю полинома (zT-1).

NB. Главная задача — научиться правильно вычислять свёртку целочисленных сигналов по быстрым алгоритмам именно в целых числах, не переходя в поле комплексных чисел, но так, чтобы результаты были сравнимы с вычислениями в поле комплексных чисел.


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

История быстрых алгоритмов ЦОС.

Историю быстрых алгоритмов (БА) обработки сигналов принято отсчитывать с момента, когда в 1965 г. Кули и Тьюки опубликовали свой БА вычисления дискретного преобразования Фурье (БА ДПФ или БПФ) по смешанному основанию (при разложении длины вектора N=N1N2... на любые множители, но на примере основания 2, т.е. для длины N=2v, когда N1=N2=...=2 ), хотя на самом деле эта история началась намного раньше. Просто эта статья появилась в нужный момент и была написана авторитетными специалистами, поэтому она послужила катализатором применения методов ЦОС. Вскоре было замечено, что БПФ-алгоритмы могут служить удобным способом для вычисления свёрток и цифровой фильтрации, так что для них имеется множество приложений, и поэтому работа Кули и Тьюки стала широко известной. Лишь по прошествии несколько лет было осознано, что другой БПФ-алгоритм, сильно отличающийся от алгоритма Кули-Тьюки, был разработан ещё раньше Гудом (1958) и Томасом (1963) для случая разложения длины N=N1N2... на взаимно-простые множители. В своё время публикация БПФ-алгоритма Гуда-Томаса прошла почти незамеченной.

Неблагоприятным следствием популярности БПФ-алгоритма Кули-Тьюки явилось широкое распространение мнения о том, что практично применять ДПФ лишь при длине вектора, равной степени двух, т.е. N=2v . Это привело к тому, что БПФ-алгоритмы стали диктовать параметры применяемых устройств вместо того, чтобы приложения диктовали выбор подходящего алгоритма БПФ. На самом деле хорошие БПФ-алгоритмы существуют практически для любой длины вектора N.

Спустя 10 лет, развивая подход Гуда-Томаса, Виноград (1976) опубликовал свой более эффективный, но и на много более сложный БПФ-алгоритм (БА Винограда для ДПФ или АВПФ), сводящий вычисление ДПФ к вычислению коротких свёрток (с числом умножений в 5 раз меньшим, чем в алгоритме Кули-Тьюки).

Впервые БА для коротких свёрток были построены Агарвалом и Кули (1977) на основе остроумных догадок, а не общего метода. Общий метод построения БА для свёртки описал Виноград (1978), доказав при этом важные теоремы неулучшаемости оценок для числа умножений (т.е оценок мультипликативной сложности БА) для данных из полей комплексных и вещественных чисел. Однако, Агарвал и Кули указали в (1977), основанный на КТО (китайской теореме об остатках), метод разделения задачи вычисления длинных свёрток на подзадачи вычисления коротких свёрток. Их метод в сочетании с алгоритмами Винограда для коротких свёрток, даёт хорошие результаты (в смысле эффективности по числу умножений).

Самая ранняя идея того, что мы называем БА, появилась намного раньше, чем БПФ-алгоритмы. Алгоритм Левинсона для решения систем линейных уравнений с тёплицевыми матрицами был опубликован в 1947 году (т.е. до эры распространения компьютеров). Несмотря на чрезвычайную важность этого алгоритма в обработке сейсмических данных, литература по алгоритму Левинсона многие годы не пересекалась с публикациями по алгоритмам БПФ. В то время исследователи не делали попыток отделить собственно вычислительную процедуру (алгоритм Левинсона) от задачи фильтрации, к решению которой он применялся, или алгоритм Витерби от задачи поиска пути на дереве, или вычислительную процедуру БПФ от задачи вычисления ДПФ.

В статье Гуд пишет: «Одномерные ДПФ могут быть преобразованы в многомерные либо с помощью китайско-руританского метода (Гуд-Томас), либо с помощью "реакционного" метода (Кули-Тьюки), применяемого значительно чаще... Ссылки Кули и Тьюки (1965) на мою статью (1958) были несколько преувеличены, так как создали впечатление, что оба метода почти идентичны. Их метод больше напоминает методы Рунге (1905) и Даниельсона-Ланцоша (1942), работы которых в целом ускользнули от внимания океанографов, специалистов по рентгеновской кристаллографии и многих других исследователей, часто использующих гармонический и спектральный анализ. Указанные авторы писали свои работы до эры ЭВМ и в этом смысле опередили своё время, хотя БПФ был бы полезен уже в течение последних 100 лет.»

Различные вариации БПФ-алгоритма Кули-Тьюки появлялись и ранее во многих обличьях. По существу та же самая идея используется для построения многолучевой плоско-фазированной радиолокационной антенны и известна под названием матрицы Батлера (Butler, 1961).

Гуд пишет: «Иейтс (F.Yates, 1937) придумал простой алгоритм, использующий только сложения и вычитания, для вычисления взаимодействий в 2n-факторном эксперименте. То, что алгоритм Иейтса можно рассматривать как многомерное ДПФ по mod 2 (т.е. как ДП Адамара) было отмечено Гудом (1953). В статье 1958 Гуд показал, что этот алгоритм может быть обобщён применительно к любому многомерному ДПФ и даже к более общим преобразованиям.»

Конечно, хочется упомянуть и о других значительных событиях в истории БА ЦОС, таких как, появление в 1969 БПФ Рейдера для простых N через ЦС, в 1979 появились ПП Нуссбаумера, в 1980 БПФ Капорина и его развитие в 1984 Уэнгом, в 1984 опубликован БПФ Split-Radix, в 1984 и в 1986 — ТА БПФ2 Григоряна и многое чего ещё. После пионерской и не очень понятой в своё время публикации Рейдера (1969), воспринимавшейся современниками скорее как курьёз, не сразу но всё же теоретики в 70-х обратили свои взоры на конечные числовые поля и их место в ЦОС. Поэтому в конце 70-х и в 80-е годы уже было много статей о ТЧП в конечных модулярных полях и кольцах.


 
Всё познаётся в сравнении
                            Поговорка

Связь между ТЧП, ПП и ДПФ.

Наличие тесной связи между циклической свёрткой (ЦС) и ДПФ, т.е. их изоморфизм, постепенно привели к пониманию того, что ДПФ — это лишь представитель широкого класса дискретных преобразований (ДП), обладающих свойством циклической свёртки (СвЦС). Чтобы ДП вектора длины N обладало СвЦС (или было изоморфно ЦС), необходимо существование корня из 1 степени N и элемента N1 в поле значений входного вектора и его спектра (т.е. разложения входного вектора по базису ортогональных функций). В самом деле, у ДПФ корнем из 1 порядка N является комплексная экспонета W при входных и выходных данных над полем комплексных чисел (причём N — любое целое).

Тогда теоретико-числовые преобразования (ТЧП) можно рассматривать как аналоги ДПФ, определённые в поле или в кольце целых чисел по модулю некоторого целого числа. Тоже самое и N-точечные полиномиальные преобразования   (ПП), т.е. произведения двух полиномов (многочленов) степени   N-1   по модулю третьего полинома P(z), где z — КОРЕНЬ из 1 в поле коэффициентов при степенях полиномов, — это аналоги ДПФ в кольце полиномов.

Фактически   ТЧП   являются даже частными случаями   ПП , в которых   (b+1)-битовые слова (т.е. элементы поля или кольца) рассматриваются как полиномы. Это особенно очевидно для T=2b=2n+1-точечных ПП, определённых по модулю полинома

P(z) = zb + 1 = z2n + 1 .

Такие ПП вычисляют   T=2b=2n+1-точечную   ЦС, компонентами которой являются слова-полиномы степени   b=2n, т.е. с   (2n+1) коэффициентами. Если 2n+1   входных полиномов — T точек ЦС — определены как   (b+1)=(2n+1)-битовые слова, то ПП (и ЦС) сводится к вычислению   2n+1-точечных   ЧП Ферма по модулю

Fn = 2b+1 = 22n+1
с КОРНЕМ из 1   root=2   порядка   T=2b=2n+1 .

Например, пусть

Fn=F4=224+1=216+1=2b+1 , b=2n=24=16 , T=2b=2·16=32 , root=2 .

Тогда 17-ти битовые слова, т.е. элементы поля по модулю числа Ферма F4 , можно рассматривать как полиномы степени (17-1)=16. Для вычисления 32-х точечной ЦС с компонентами (точками) в виде 17-битных слов-полиномов используется 32-х точечное ЧП Ферма по основанию 2 с базовым элементом в преобразовании root=2 , что позволяет обойтись без умножений, т.к. умножения на степени   root=2   эквивалентны сдвигам .

P.S. На самом деле при вычислениях по модулю чисел Ферма используются не  (b+1)-битовые  слова (хотя это так по определению), а — b-битовые слова (что реально соответствует размеру арифметического регистра компьютера — 8, 16, 32, 64), в то время как последний   (b+1)-й   бит хранится в отдельном байте. Смотри об этом в разделе "(A-1)-арифметика".


ПП и вычисление свёрток.

Поскольку ПП аналогичны ДПФ, которые определены в кольце полиномов, то они по существу эквивалентны многомерным ДПФ-m и поэтому применяются преимущественно для решения многомерных задач. Для некоторых приложений, например, для вычисления (NхN)-точечных свёрток, ПП оптимальны в том смысле, что могут порождать алгоритмы с числом умножений, которое нельзя уменьшить чисто алгебраическими методами.

ПП обеспечивают эффективные средства отображения двумерных свёрток и 2мДПФ в одномерные свёртки и ДПФ, которые в свою очередь, можно вычислять с помощью различных методов, таких, как БПФ, ТЧП, алгоритмы коротких свёрток. Тем самым порождается большое разнообразие алгоритмов, среди которых всегда можно найти компромис между числом умножений и сложений, чтобы использовать их в конкретных приложениях. Особенно интерсен случай, когда преобразуемые последовательности имеют общий множитель в обоих измерениях. В этих случаях ПП обеспечивают существенную экономию в числе арифметических операций по сравнению с более традиционными вычислительными методами.

По-видимому, наиболее интересны те ПП, размерность которых равна степени 2, т.е. N=2v . Эти преобразования имеют структуру, подобную БПФ, и поэтому могут программироваться аналогичным образом. Комбинируя эти ПП с традиционными алгоритмами БПФ для вычисления одномерных свёрток, произведений полиномов и ДПФ, можно получать двумерные алгоритмы, которые основаны на простоте метода БПФ и обеспечивают существенное уменьшение числа операций.


ТЧП и вычисление свёрток.

Для вычисления свёрток существует достаточно большой выбор ТЧП. С точки зрения числа арифметических операций наиболее привлекательны ТЧП, которые вычисляются без умножений посредством алгоритма типа БПФ и при заданной длине машинного слова b=2n-бит допускают максимально возможные длины преобразований. В практических задачах этим требованиям полностью удовлетворяют ЧП Ферма и комплексные преобразования по модулю псевдочисел Мерсена.

Максимальные длины преобразуемых последовательностей, в которых отсутствует операция умножения, для ЧП Ферма по модулю

F5=225+1=2b+1=232+1
с 32-битными словами (точнее с 33-битными) равны 128. Следовательно, ЧП Ферма наиболее пригодны для вычисления свёрток короткой и средней длины на тех компьютерах, у которых операция умножения требует значительно больше времени, чем операция сложения, и при том условии, что требуется высокая точность результата. Особо интересно применение ЧП Ферма (и других ТЧП) для обработки специфических данных, например таких, как фазовые углы, которые в силу своей природы определены по модулю некоторого целого. В этом случае нет необходимости для предотвращения переполнения масштабировать входные данные (т.е. умножать их на множитель КВАНТ), т.к. входные и выходные вектора определены в одном и том же диапазоне (или числе бит).

Во всех других случаях во избежании переполнения (т.е. получения результата не соответствующего вычислениям в обычной арифметике) входной вектор масштабируется так, чтобы число битов у него было менее половины числа битов для вектора выходных данных. Тогда для получения правильного результата при ТЧП приходится использовать машинные слова, длина которых в битах примерно вдвое больше, чем при использовании других методов (например, БПФ). Однако, если учесть, что для вычисления вещественных (целочисленных) ЦС при ТЧП используется вещественная, а не комплексная арифметика, как у БПФ, то можно условно считать, что и аппаратурные затраты примерно одинаковы.

Сравнение БПФ и ЧП Ферма обсуждалось в . Было показано, что свёртка длиной от 32 до 2048 отсчётов с помощью ЧП Ферма при длине слова 32 бита вычисляется примерно в 2-4 раза быстрее (на универсальной ЭВМ), чем посредством эффективных программ БПФ. При этом свёртки длиной более 128 вычислялись с помощью 2мЧПФ.


Вычисление комплексных свёрток с помощью ЧП Ферма.

Рассмотрим комплексную свёртку yre + jyim , определённую по модулю Fn

yre[k] + jyim[k] =
T-1
  (xre[k] + jxim[k]) (hre[ k-t T] + jhim[ k-t T]) mod Fn ,
t=0
где k=0,...,T-1 и j=√-1=2b/2.

Обычно эту комплексную свёртку вычисляют посредством 4-х вещественных свёрток:

yre[k] =
T-1
  xre[k] hre[ k-t T]
t=0
T-1
  xim[k] him[ k-t T]
t=0
  mod Fn ,
yim[k] =
T-1
  xre[k] him[ k-t T]
t=0
+
T-1
  xim[k] hre[ k-t T]
t=0
  mod Fn ,

Покажем, что вычисление yre[k] + jyim[k] можно выполнить с помощью только двух вещественных свёрток, воспользовавшись специальным свойством для j=√-1 в некоторых кольцах целых чисел. В кольце целых по модулю числа Ферма   Fn = 2b+1 ,   b — чётное ,   2b -1 mod Fn , так что   2b/2 -1 mod Fn . Тогда комплексную целочисленную свёртку можно вычислить с помощью двух вспомогательных вещественных свёрток   a[k] и b[k]:

a[k] =
T-1
  (xre[k] + 2b/2 xim[k]) (hre[ k-t T] + 2b/2 him[ k-t T]) mod Fn ,
t=0
b[k] =
T-1
  (xre[k] − 2b/2 xim[k]) (hre[ k-t T] − 2b/2 him[ k-t T]) mod Fn .
t=0

Теперь комплексная свёртка восстанавливается так
yre[k] =           ( a[k] + b[k] )/2   mod Fn ,
yim[k] = − 2b/2 ( a[k] − b[k] )/2   mod Fn .

NB. Следовательно, этот метод обеспечивает вычисление ЦС при помощи ЧП Ферма с двумя умножениями на один комплексный отсчёт вместо четырёх в обычном случае.


Резюме сравнения ТЧП, ПП и ДПФ.

NB. Таким образом, ПП и ТЧП являются как бы ДПФ, которые определены в конечных полях и кольцах, элементы которых соответственно — полиномы или целые. Основное их преимущество по сравнению с ДПФ для комплексных данных состоит в том, что в конечных полях или кольцах можно определить корни из 1, которые имеют простое представление, что позволяет исключить из вычислений операции умножения, а комплексную арифметику заменить на вещественную (для ПП) или на арифметику по модулю целого (для ТЧП).


 

Три дела, однажды начавши, трудно кончить:
1) вкушать хорошую пищу;
2) беседовать с другом, возвратившимся из похода
 и
3) чесать, где чешется.
                                  Козьма Прутков
                           "Мысли и афоризмы",45.

ДП Фурье в конечных полях     ▲ В начало текущей     ЧП Ферма






Последнее обновление 16.09.2013

© 2005 г., Александр Тимофеев, г.Харьков, Украина, eMail: atimopheyev@yahoo.com