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

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,6 умножений и 6 сложений на одну точку на выходе).

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

dl d, d,

d, d, d

d, d, d.

d d, d

d,. d, d.

d, d,.

в этом алгоритме с помощью трех дополнительных сложений сочетаются алгоритмы 3-фильтр-секции и (3, 2)-фильтр-секции, так что в общей сложности этот алгоритм прореживающей фильтрации содержит девять умножений и 26 сложений.

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

1 8, 0

Sl g, 0

8. S. .

0 Sl S,

0 So Si

&

dl =

Алгоритм записан в виде вычисления 3-точечной линейной свертки 2-точечной линейной свертки и трех дополнительных сложении сочетающих результаты этих сверток. Таким образом, paccMq тренный алгоритм прореживающей фильтрации содержит восем умножений и 26 сложений на каждые пять точек на выходе. Есл этот алгоритм использовать в методе перекрытия с суммиров нием, то для сочетания секций, каждая из которых содержит пят входных точек, потребуется еще четыре дополнительных сложи ния. Такой алгоритм будет содержать восемь умножений и 30 слЙ

За.ченим теперь {е , е, е, е, на (Sj, s s Sj, Sj) и fi, /2, /3, /4) на (dg, d di, 4, da). Тогда

gj g, 0 0

0 81 Sj 0 0

0 So Si 8, 0

,0 0 Sl 8, 0

[0 0 g 81 8

d, 0 0 d.

0 rf 0 0

0 (/0 d

0 d, 0 rf, 0

d, 0 d, 0 d,

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

9.5. Фильтры прореживания и итерполяции

Фильтром прореживания называется КИО-фильтр, которь вычисляет только каждый г-й выходной отсчет; часто г равно или 3. Все прочие выходные отсчеты нежелательны и п(< давляются, даже если они вычисляются. Можно надеяться существование более простых алгоритмов, не вычисляющих н нужные выходные точки. Фильтр интерполяции действует npq тивоположным образом: отсчеты на выходе такого фильтра фо± мируются с большей скоростью, чем на входе. Прореживающий и интерполирующий фильтры иногда называются фильтроЯ с подавлением и фильтром с восстановлением соответственно.

Конструкции прореживающего и интерполирующего КИС, фильтров аналогичны общим конструкциям КИО-фильтров. ОА нако, их специфические особенности можно использовать дл построения более эффективных алгоритмов. В первом случа более эффективные алгоритмы можно строить из-за выбрасывав мых выходных точек, а во втором - из-за выбрасываемых вxo ных точек.

Для фильтров прореживания алгоритмы линейной свертки алгоритмы секционной фильтрации не связаны между собо описываемым теоремой 9.2.1 трансформационным принциполС Трансформационный принцип преобразует алгоритм свертки дл прореживающего фильтра в алгоритм секционной фильтрация для интерполирующего фильтра.

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



326 Гл, 9. Архитектура фильтров и

Таким же образом, алгоритм прореживающей 5-фильтр-сек ции, записываемый равенством

9,6. Автокорреляция н взаимная корреляция

So g, 8: g, О О О

О О g, g, g, g, 0

0 0 0 0

может быть трансформирован к алгорит.\1у

g>

§2

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

Следующим рассмотрим (на примере) алгоритм симметричной прореживающей фильтрации. Построим алгоритм сим.четрическогс прореживающего в отношении 2 : 1 15-фильтра. Как и в предыду щем примере, разобьем задачу на симметрическую линейнук 8-точечную свертку и симметрическую линейную 7-точечнук* свертку. Согласно теореме 9.4.3 первая из них может быть вы числена с помощью алгоритма фильтрации 8-точечного вход в фильтре с 7 отводами.

Для вычисления обеих линейных симметрических свертоь воспользуемся разработанным в предыдущем параграфе методом! Степень многочлена

т (х) = X (х - 1) (X -г 1){х- оо) (х= + 1) (х= +

+ X + 1) (х - X + I) {x + l равна 14 и, следовательно, им можно воспользоваться для по строения алгоритма линейной фильтрации 8-точечного входи в фи.тьтре с 7 отводами. В разд. 9.4 было опреде.тено число умно жени и, связанных с использованием в качестве модуля каждогч из указанных симметрических многочленов. Это приводит к об

щему числу умножений в алгоритме, равному 16. Аналогично, выбрасывая один линейный мнржитель, получаем алгоритм фильтрации 7-точечного входа в фильтре с 7 отводами, содержащий 15 умножений. Следовательно, для решения рассматриваемой задачи можно построить алгоритм, содержащий 31 умножение.

9.6. Автокорреляция

и взаимная корреляция

Выражение вида

JV-I

/ i = S gi+jdft.

4=1)

i = О.....L+N-2.

называемое корреляцией, если g совпадает с d, и взаимной корреляцией, если g и d различны, очень тесно связано со сверткой. Его можно сделать похожим на свертку, если просто прочитать одну из последовательностей в обратном порядке. В принципе, любой из рассмотренных нами методов вычисления линейной свертки годится для вычисления корреляции. Тем не менее, имеется одно практически существенное различие. Длина КИО-фильтра обычно намного меньше, чем длина фильтруемой последовательности данных, а входящий в корреляцию фильтр g (х) на самом деле представляет собой другую последовательность данных, длина которой примерно равна длине последовательности, обозначаемой многочленом d (х); часто длина записи обеих последовательностей неопределена и весьма велика - возможно, несколько сотен отсчетов. Хорошие алгоритмы разбивают g и d на секции.

Мы начнем рассмотрение с вычисления автокорреляции

1 = 0.....п/2 - 1,

возможно, опуская в сумме деление на N. В интересующих нас задачах длина N блока данных значительно больше длины п/2 блока выходных данных, так что использование для вычислений преобразования Фурье длины N было бы слишком расточительным. Разобьем сумму на части по п слагаемых в каждой из частей, и будем решать задачу, используя преобразование Фурье длины п. Запишем

2 dk.{.[n/2dk+[n/2+tt

i = 0, i = 0,

n/2-I, 1-1,



векопягШ 0 бР - <= елась к вычисление

вектора П) для / = О.....L - 1, который мы будем находить

используя БПФ, и подходящую циклическую свертку. * Определим два вида блоков длины л - один состоящий пол ностью из данных, и второй, состоящий наполовину из нулей Позже будет показано, как избегать блоков первого вида Пусть

Тогда

(О I <ii+W2, i = О, ..., п/2 - 1, ~ i = n/2, п- 1,

= 0.....л-1.

= Д d*ff4+(, < = О.....п/2 - 1.

Пусть D ) и ОС) обозначают векторы, полученные преобразова. ниемФурье из векторов d<i и g ). Тогда согласно задаче 1.10. ре*ляции РР Фурье циклической кор-

= ( = 0.....п-I,

и половина из этих компонент дает искомые нами величины

= -Ls< , , = 0, л/2-1.

Таким образом, сначала мы вычисляем вектор S.= soi Gt , А = 0.....л-1,

а затем вычисляем его обратное преобразование Фурье s и пола; гаем Ti = (I/iV) s, для < = О, п/2 - 1.

Для завершения описания алгоритма покажем, как исключит некоторые вычисления. Вместо использования БПФ для вычисле ния воспользуемся формулой

Эта формула является прямым следствием свойства задержки дл преобразования Фурье; умножение в частотной области иа в соответствует временному сдвигу на Ь позиций. Если b = n/is то это соответствует умножению D на (-1). Во временн6

области происходит сдвиг ненулевых позиций вектора d<+i) в нулевые позиции вектора d*; во временной области сумма равна gC*, II, следовательно, в частотной области сумма равна GC). Таким образом, это вычисление можно записать в виде

S.= EDi [Dl4(~l)Oi+ ]-

Алгоритм завершается вычислением обратного преобразования Фурье.

Блок-схема вычислений в окончательном виде показана на рис. 9.6. Отметим, что каждый цикл содержит только один БПФ-алгоритм, хотя в начальной точке и в последней точке алгоритма добавляется еще по одному БПФ. Таким образом, хотя вычисление одной циклической свертки содержит три преобразования Фурье, мы построили алгоритм, который в среднем на цикл содержит только одно БПФ,

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

Аналогичный метод применим и к задаче вычисления взаимной корреляции. Обе последовательности данных разобьем на отрезки, комбинируя которые в частотной области, мы уменьшаем число необходимых обратных преобразований Фурье.

Теперь на одном очень подробном примере покажем, как можно использовать другие методы в рассматриваемом способе

вычисления корреляций. Запишем корреляцию = d+tgh в матричном виде.

,1 ll-J

где г намного больше п.

Мы опишем структуру алгоритма для частного случая л = 120 и г = 10 ООО. Основываясь на некотором опыте, примем произвольное решение разбить последовательность из 120 выходных точек на четыре пакета по 30 выходных точек в каждом, и организуем вычисления, опираясь на 60-точечный БПФ-алгоритм Винограда.



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