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

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

Число отводов

ло выходных

точек Число умножений Число сложений

Число отводов

Число входных точек иа секцию

Число укножеиий

Число сложений

Число умножений на точку на выходе

Число сложений иа точку иа выходе

1.33

2.78

13.33

5.06

16.26

4.63

27.22

7.69

26,37

4О80

7.72

53.70

Рис. 9.3. Характеристики некоторых алгоритмов коротких фильтр-секций. Щ 94 Характеристики некоторых реальных алгоритмов КИО-фильтров,

При желании этот алгоритм после переупорядочивания можно переписать в виде

Ъ 1 1

d, - d,

1 1 oj

<1г - <*,

Для 2-фильтр-секцин этот алгоритм оптимален; он содержит три 1 умножения и четыре сложения, не считая суммирования g + gi, связывающего отводы фильтра.

Так же можно построить и другие алгоритмы коротких секций j фильтра. Характеристики некоторых из таких алгоритмов приве- дены на рис. 9.3.

9.3. Итерирование секций фильтра

Итерируя алгоритмы для коротких секций фильтров, можно получать алгоритмы для секций фильтра большей длины, на вы- ходе которых формируются длинные блоки отсчетов. Характери-! стики таких итерированных секций фильтра затабулированы на рис. 9.4. Используя описанный в разд. 9.1 метод перекрытия с натЗ коплением, можно строить каскады произвольного числа этияГ секций фильтра, на выходе которых будет формироваться беско нечный поток данных.

В рассмотренных нами малых алгоритмах свертки не нсполь зевалось свойство коммутативности умножения чисел поля. ЛЮ- бой алгоритм линейной свертки,

Si = Е gi-A,

в котором не используется ни деление, ни свойство коммутативности умножения, в такой же мере применим к элементам кольца, как к элементам поля. Пусть, например, надо вычислить свертку матриц

S, = S G, J) .

где теперь D, представляет собой i-ю матрицу в списке из матриц, а Gi представляет собой i-ю матрицу в списке из L матриц. Построенные нами ранее алгоритмы свертки применимы в данном случае так же, как и ранее. Сложение превращается в сложение матриц, а умножение становится умножением матриц.

Построим итерацию 2-фильтр-секций для формирования секций фильтра большей длины. Малый алгоритм возьмем в виде

0 1 -f

id, - d,)

1 0

1 1 0

L Ml - Ill)

1 1

0 1

Алгоритм содержит 1,5 умножений на каждый отсчет на выходе фильтра. Его можно использовать повторно для вычисления двух отсчетов на выходе одновременно, и такое вычисление всегда будет содержать 1,5 умножений и 2 сложения на один отсчет на выходе. 2-фильтр-секция, однако, не имеет существенного значения для практических приложений, а используется для итеративного построения алгоритмов больших фильтров с 2 отводами, на выходе которых вычисляются одновременно 2 отсчетов дискретного сигнала.

Для иллюстрации идеи рассмотрим построение алгоритма вычисления четырех точек на выходе секции фильтра с четырьмя



</.

§1

Разбивая это вычисление на блоки размерности два на два получаем

</, d,

d, d

\d> d-d,

\d, d,\ id, dJ

s, =

, Si =

Теперь эта задача имеет точно такой же вид, как и предыдущая задача. Скалярные величины заменились матрицами, но алгоритм является системой тождеств и остается справедливым и в данном случае. Имеем

0 1 -]

.1 1 о

(1), - о4

Как и ранее, сумма G + Gj должна быть вычислена заранее и не влияет на оценку числа необходимых в алгоритме операций. Алгоритм содержит четыре матричных сложения и три матричных умножения. Остановимся сначала на сложениях матриц Два из них имеют вид

d, - d, d, d.

d, - d, d, - d,

d, - d, rf, - d, Л ~ d. d, - d,

Здесь имеется пять различных сложений. (Позже мы увидим, как одного из них можно избежать, так что останется только четыре сложения.) Еще здесь имеется два сложения 2-точечных векторов, выполняемых после завершения умножения; для их выполнения требуется четыре вещественных сложения.

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

Если алгоритм 4-фильтр-секции используется повторно для одновременного вычисления четырех отсчетов на выходе каждый раз, то одно из сложений пропадает, так как d, - d, в одном пакете равно dj - dj в следующем пакете.

Процесс итерации носит вполне общий характер. Если п четно, то матрица алгоритма п-фильтр-секции разбивается на четыре ((п/2) X (п/2))-блока. Используя теперь алгоритм 2. фильтр-секции, построим алгоритм п-фильтр-секции в виде трехкратного обращения к алгоритму (п/2)-фильтр-секции. При этом число дополнительных сложений, необходимых для вычисления матрицы Dl - D , равно п - 1, а число дополнительных сложений, необходимых для вычисления матрицы Dj - Dj, равно п/2. Это происходит потому, что все рассматриваемые матрицы являются теплицевыми ((п/2) X (п/2))-матрицами. Для вычисления матрицы Dl- Do надо выполнить вычитания только в первой строке и левом столбце. Некоторые из полученных при этом величин повторяются в матрице Dg - Di, так что для вычисления последней требуется только п/2 вычитаний. Если алгоритм используется в режиме повторения, то некоторые из ранее вычисленных величин повторяются, так что для вычисления каждой нз матриц Dl - D и Dj - Dj в каждом новом пакете требуется только п/2 сложений. Еще и дополнительных сложений требуется в выходном векторе. Подводя итог, получаем, что если алгоритм (п/2)-фильтр-секции содержит М умноженийг и А сложений, то построенный описанным образом алгоритм п-фильтр-секции будет содержать ЪМ умножений и 2п + 3.4 сложений.

Если п = 2 , то эта процедура может быть проитерирована; алгоритм 2 -фильтр-секции строится из алгоритмов г--фильтр-секции, которые, в свою очередь, строятся из алгоритмов 2 --фильтр-секции и т. д. Число умножений в таком алгоритме равно 3 = n , а число сложений описывается рекурсией А (п) = = 2п + ЗЛ (п/2) при Л (1) = 0.

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

отводами (4-фильтр-секции). В матричном виде это вычисление записывается равенством



QUCAO Число

умножений вложений

Алгоритм # i

Прямое исполыоВоние 16-точвчной фильтрации

Алгоритм # 2

Прямое использование 8 точек 8-тоиечной соильтрации

Алгоритм # J

\ъ-кратнь1й вызов 8-Фильтр~секцйй\

&точея\-нратный Вызов -фильтр-сенции\

точки Алгоритм #

Прямое использование А-точечной фильтрации

\з-нратный вызов в-фильтр-се>гчии\

8 точек \з-кратный вызов 4-Фильтр-сенции\

it точно\3-кратный вызов 2-ФОЛьтр-сеиции

[Прямое использование 2-точечной фильтрации

Алгоритм # S

\3-кратный вызов 8~азильтр-ееяции\

8точек \3-кратный вызов фильтр-секцйй\

тонкиХЗ-кратный вызов 2-фильтр-сеггци/

Прямое использование 2-точечной филыпрации

Рис. 9.5. Некоторые алгоритмы 16-точечных КИО-фильтров.

Если я достаточно велико, то рассматриваемый алгоритм с умножениями становится хуже алгоритма, основанного на БПФ и содержащего О (я log я) умножений. Значение я,для которого это происходит, можно сдвинуть, если итеративный алгоритм по основанию два заменить итеративным алгоритмом по основанию четыре, содержащим в своей начальной форме семь умножений. Тогда число умножений растет как 7 = я-*°.

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

Алгоритм 1. Выходы фильтра вычисляются стандартным способом. Алгоритм содержит 16х 16 = 256 умножений и 16х 15 = . = 240 сложений.

Алгоритм 2. Алгоритм 2-фильтр-секции, в котором для вычисления выходов трех секций с 8 отводами используется любой подходящий алгоритм и 4x8 дополнительных сложений. Если выходы трех фильтров с 8 отводами вычисляются стандартным способом, то каждый из них требует 8x8 = 64 умножений и 8x7 = 56 сложений. В общей сложности получаем алгоритм с 3x64 = 192 умножениями и 32 4- 3x56 = 200 сложениями.

Алгоритм 3. Алгоритм 2-фильтр-секции используется для сведения к трем 8-фильтр-секциям, каждая из которых реализуется в виде 4x4 = 16 сложений и трехкратного использования 4-фильтр-секций. Если каждая 4-фильтр-секция реализуется стандартным алгоритмом фильтрации, содержащим 16 умножений и 12 сложений, то такой алгоритм 16-фильтр-секции в общей сложности содержит 32 -- Зх 16 -f 9х 12 = 188 сложений и 9Х 16 = = 144 умножения.

Алгоритм 4 получается из алгоритма 3 модификацией алгоритмов для 4-фильтр-секций, в которой они заменены 4X2 = 8 дополнительными сложениями и трехкратным использованием алгоритма 2-фильтр-секции. Таким образом, этот алгоритм 16-фильтр-секции содержит 32 4-3x16-1-9x8 = 152 сложения и 27-KpaiHoe вычисление 2-фильтр-секции. Стандартный алгоритм 2-фильтр-секции содержит два умножения и четыре сложения, так что в общей сложности получаем 152 -f 27x2 = 206 сложений и 27x4 = 108, умножений.

Алгоритм 5 получается итеративным использованием 2-фильтр-секции на всех этапах; такой алгоритм содержит 260 сложений и 81 умножение.

Нельзя сказать, какой из этих алгоритмов предпочтительнее других. Только детальный анализ алгоритма в контексте его применения может сказать, что, например, алгоритм с 206 сложениями и 108 умножениями предпочтительнее, чем алгоритм с 260 сложениями и 81 умножениями. Все что мы можем сделать, это предложить конструктору различные альтернативы.

9.4. Симметрические

и кососимметрические фильтры

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



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