Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

cos-lab4-vorontsov / метода

.pdf
Скачиваний:
7
Добавлен:
11.05.2015
Размер:
191.22 Кб
Скачать

Министерство образования Республики Беларусь УЧЕБНОЕ ЗАВЕДЕНИЕ

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

Кафедра радиотехнических систем

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к лабораторной работе

ДЛИННАЯ СВЕРТКА СИГНАЛОВ

по курсу ЦИФРОВАЯ ОБРАБОТКА СИГНАЛОВ

для студентов специальностей «Радиотехнические системы» и «Радиотехника»

МИНСК 2010

3

Цель работы

1.Изучение алгоритмов вычисления сверток сигналов

2.Изучение алгоритмов вычисления длинных непрерывных сверток сигналов.

3.Получение навыков моделирования алгоритмов цифровой обработки сигналов.

1.Краткие теоретические сведения

1.1.Линейная и циклическая свертки сигналов

Операция

линейной

свертки

двух

последовательностей

{x[k ]; k = 0,1,...M −1} и {h[k ]; k = 0,1,..., L − 1} определяется соотношением

 

 

y[m] =

L+ M −2

m = 0,1,..., L + M − 2

 

 

x[i]h[m i],

(1)

i=0

Вматричном виде линейная свертка записывается следующим образом

(для L=M=N):

 

 

y[0]

 

 

h[0]

 

y[1]

 

 

h[1]

 

 

 

 

 

 

y[2]

 

 

h[2]

 

y[3]

 

 

...

 

 

 

 

 

... = h[N -1]

 

y[N -1]

 

 

0

 

 

 

 

y[N ]

 

...

 

...

 

 

0

 

 

 

 

 

 

 

0

y[2N - 2]

 

0

0

...

h[0]

0

...

h[1]

h[0]

...

...

...

...

h[N - 2] h[N - 3]

...

h[N -1] h[N - 2]

...

...

...

...

0

0

h[N -1]

0

0

0

Например, пусть N=4, тогда

0

 

 

x[0]

0

 

 

x[1]

 

 

 

 

0

 

 

x[2]

...

 

 

x[3]

 

 

 

 

h[0]

×

x[4]

 

 

 

 

h[1]

 

...

...

 

x[N -

h[N -

 

 

 

2]

x[N -

h[N -

 

 

 

1]

x[N -

3] 2]

1]

x = [x[0], x[1], x[2], x[3]]T , h = [h[0], h[1], h[2], h[3]]T .

4

h[0]

0

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

h[1]

h[0]

0

0

 

x[0]

 

h[2]

h[1]

h[0]

0

 

 

 

 

x *h = h[3]

h[2]

h[1]

h[0]

× x[1]

 

=

 

0

h[3]

h[2]

 

 

x[2]

 

 

h[1]

 

 

 

 

 

 

 

 

 

x[3]

 

 

0

0

h[3]

h[2]

 

 

 

 

0

0

0

 

 

 

 

 

 

h[3]

 

 

 

 

 

h[0]x[0]

 

 

 

h[1]x[0] + h[0]x[1]

 

 

 

 

 

h[2]x[0] + h[1]x[1] + h[0]x[2]

 

 

 

=

 

 

 

h[3]x[0] + h[2]x[1] + h[1]x[2] + h[0]x[3]

 

 

h[3]x[1] + h[2]x[2] + h[1]x[3]

 

 

 

h[3]x[2] + h[2]x[3]

 

 

 

 

 

 

h[3]x[3]

 

 

 

 

Физической моделью линейной свертки является цифровой фильтр с конечной импульсной характеристикой.

Соотношение (1) имеет большое значение, поскольку позволяет осуществлять фильтрацию, линейную обработку сигналов и моделировать линейные системы. Применительно к этим задачам x[k ] и y[m] рассматриваются как входной и выходной сигналы системы (апериодическиие последовательности), а h[k ] - как ее импульсная характеристика. Пример такой свертки дает нерекурсивный или трансверсальный фильтр.

Циклическая свертка периодических последовательностей длины N определяется выражением

 

N −1

 

y[m] =

x[i]h[m i]mod N ,

m = 0,1,...N −1

 

i=0

 

(2)

При этом справедливы следующие соотношения: x[-n]=x[N-n] и h[-n]=h[N- n].

В матричном виде циклическая свертка записывается следующим образом:

 

y[0]

 

 

h[0]

h[1] ...

 

y[1]

 

 

h[1]

h[2] ...

 

 

 

 

 

 

 

y[2]

 

=

h[2]

h[3] ...

 

...

 

 

...

... ...

 

 

 

 

 

 

 

 

 

 

 

h[0] ...

y[N -

1]

h[N -1]

h[N -1]

 

x[0]

 

 

 

 

 

 

 

 

h[0]

 

x[N -

1]

 

h[1]

 

× x[N - 2]

...

 

 

...

 

 

 

 

 

 

 

 

 

h[N -

 

 

x[1]

 

 

2]

 

 

 

5

Например для x = [x[0], x[1], x[2], x[3]]T , h = [h[0], h[1], h[2], h[3]]T

y[0]

h[0]

h[1]

h[2]

 

 

 

 

 

y[1]

 

= h[1]

h[2]

h[3]

y[2]

h[2]

h[3]

h[0]

 

 

 

h[0]

h[1]

y[3]

h[3]

h[3] x[0]

h[0] × x[3] . h[1] x[2]

h[2] x[1]

Вычисление линейной свертки через циклическую. Для вычисления линейной свертки двух последовательностей длины N1 и N2 можно воспользоваться алгоритмом вычисления циклической свертки, но при этом исходные данные последовательности следует дополнить нулевыми отсчетами так, чтобы их длина стала равной (N1 + N2 - 1), и рассматривать их как периодические. Например: пусть свертываемые последовательности

имеют вид x = [x[0], x[1], x[2], x[3]]T и

h = [h[0], h[1], h[2], h[3]]T , L=M=N=4,

дополним их нулями до длины L+M-1=7 и вычислим циклическую свертку

h[0]

h[1]

h[2]

h[3]

0

0

0

 

 

x[0]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h[1]

h[2]

h[3]

0

0

0

h[0]

 

 

0

 

 

h[2]

h[3]

0

0

0

h[0]

h[1]

 

 

0

 

 

 

 

 

 

 

 

 

 

 

×

 

 

 

=

h[3]

0

0

0

h[0]

h[1]

h[2]

 

0

 

 

0

0

0

h[0]

h[1]

h[2]

 

 

 

 

 

 

 

 

h[3]

 

x[3]

 

 

0

0

h[0]

h[1]

h[2]

h[3]

0

 

 

x[2]

 

 

0

h[0]

h[1]

h[2]

h[3]

0

0

 

 

 

 

 

 

 

 

 

x[1]

 

 

 

 

 

 

h[0]x[0]

 

 

 

 

 

 

 

 

 

 

 

 

h[1]x[0] + h[0]x[1]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h[2]x[0] + h[1]x[1] + h[0]x[2]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

h[3]x[0] + h[2]x[1] + h[1]x[2] + h[0]x[3]

 

 

 

 

 

 

 

 

h[3]x[1] + h[2]x[2] + h[1]x[3]

 

 

 

 

 

 

 

 

 

 

h[3]x[2] + h[2]x[3]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h[3]x[3]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Согласно теореме о свертке, циклическая свертка может быть вычислена через дискретные преобразования Фурье:

y[m] =

1

N −1

im , m = 0,1,..., N −1

[ X (i)H (i)]W

 

 

N i=0

 

 

6

 

 

(3)

где W = exp(− j

) ,

X (i), H (i) - Фурье-образы соответственно

 

 

N

 

последовательностей x[k ]

и h[k ] .

На рис.1 показан пример выполнения циклической свертки с явлением затягивания двух периодически повторяющихся последовательностей. На рис .2 показана апериодическая свертка двух прямоугольных импульсов.

Различие линейной и циклической свертки состоит в следующем. Затягивание, характерное для процесса линейной свертки, приводит к «перекрытию» в случае периодической свертки. Поэтому, когда требуется

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

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

1.2.Алгоритм вычисления свертки длинных последовательностей по методу «перекрытия с накоплением»

Пусть дана L- точечная импульсная h[m] (рис.4,а). Она свертывается с длинной последовательностью данных x[k] (рис.4,б). Чтобы получить свертку, выделим N отсчетов данных из x(k), образуя «кадр», который может быть использован в качестве входного массива N- точечного ДПФ (рис. 4, в). Наложим на N ограничение N>L. Поскольку используется ДПФ, кадр необходимо рассматривать как один период периодической функции x1[t] (рис. 4,г).

С помощью ДПФ вычислим преобразование N- точечной последовательности, образованной дополнением (N-L) нулями L- точечной импульсной характеристики. Этим достигается периодическое продолжение h[k], т.е. получение функции h1[k] (рис. 4, д).

Последовательность h1[k] свертывается с x1[t] умножением в частотной области:

 

 

Y1(n) = X1(n)H1(n),

 

(4)

где

 

 

N −1

 

 

 

 

 

(n) =

 

= 0,1,..., N −1

 

X

1

x [k ]W nk

, n

(5)

 

 

1

 

 

 

 

 

 

k =0

 

 

 

и

7

 

 

 

(n) =

N −1

 

 

 

 

n = 0,1,..., N − 1.

 

 

H

h [k ]W nk

,

 

(6)

 

1

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

k

=0

 

 

 

 

 

 

Применив обратное ДПФ, получим

 

 

 

 

 

 

y [m] =

1

N −1

 

 

 

 

(n)]W nk

 

m = 0,1,..., N −1.

 

[ X

1

(n)H

,

(7)

 

1

 

N n=0

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Если в выражение (7) подставить два выражения (5) и (6) и применить

свойство ортогональности, то можно получить

m

N −1

 

y1[m] = h1[i] x1[m i] +

h1[i] x1[N + m i] .

(8)

i =o

i=m+1

 

Учитывая, что N положено больше, чем L, рассмотрим случай, когда m=L-

1:

y1[L −1] =

L−1

 

N −1

 

 

 

h1[i]x1[L −1 − i] +

h1[i]x1[N

+ L −1

+ i] .

(9)

 

i =0

 

i= L

 

 

 

Здесь

 

 

 

 

 

 

h1[L] = h1[L + 1] = ... = h1[N −1] = 0 ,

 

 

 

так что вторая сумма исчезает, и

L−1

 

 

 

 

 

y1[L −1] =

 

 

 

 

 

h1[i]x1[L −1 − i] .

 

 

(10)

 

 

i =0

 

 

 

 

Это точное выражение, определяющее (L-1)- й выходной отсчет фильтра с L отводами. Члены y1[L], y1[L+1],…,y 1[N-1] по той же причине корректны.

Рассмотрим теперь первые (L-1) выходных отсчетов. Все они содержат ложные члены, вызванные наложением и определяемые второй суммой в выражении (9). Из– за этого они некорректны и должны быть отброшены

(рис. 4, е, ж).

Следующий этап включает выделение второго N- точечного кадра, выбираемого так, что его первые (L-1) значений идентичны последним (L-1) отсчетам предыдущего кадра (рис. 4, з). Это необходимо в силу того, что в начале следующей N- точечной свертки снова будет (L-1) ложный отсчет, которые должны быть отброшены.

Корректная часть первой свертки возвращается в память (рис. 4, и). Поскольку, по крайней мере N отсчетов, взятых из x(k), больше не будут использоваться, отфильтрованные данные, полученные в результате первой свертки, могут быть помещены в те же ячейки памяти, которые содержали первый обработанный кадр. Таким образом, весь процесс фильтрации может быть выполнен с «замещением», и в этом случае потребности в памяти определяются необходимостью хранения лишь первоначальных данных.

Стыковка корректных частей от первой и второй сверток, и получение полной свертки, показаны на рис. 4, к.

8

k
k
k
x1[t]

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

2.2 Алгоритм вычисления свертки длинных последовательностей по методу «перекрытия с накоплением»

Пусть дана L- точечная импульсная h[m] (рис.4,а). Она свертывается с длинной последовательностью данных x[k] (рис.4,б). Чтобы получить свертку, выделим N отсчетов данных из x(k), образуя «кадр», который может быть использован в качестве входного массива N- точечного ДПФ (рис. 4, в). Наложим на N ограничение N>L. Поскольку используется ДПФ, кадр необходимо рассматривать как один период периодической функции (рис. 4,г).

x1 (k)

x2 (k )

k

 

k x(k) = x1 (k) * x2 (k)

k

Перекрытие вызванное затягиванием

x1 (k)

x2 (k )

x(k) = x1 (k) * x2 (k)

Период

Рис. 1

Рис.2

x1 (k )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2 (k )

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x(k) = x1 (k) * x2 (k)

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 3

 

 

 

 

 

9

h(m)

0

L −1

m

 

x(k )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

N −1

x1 (k )

N точекN точекN точек

h1 (k)

y1 (m)

k

k

k

L −1 ложных значений

m

 

 

N L + 1 корректных значений

 

 

 

 

0

L

N −1

0

N −1

 

Перекрытие из L-1 точек, позволяющее в дальнейшем отбросить L-1 значений свертки

0

N −1

 

L-1 значений отбрасываемых

y(m)

при стыковке первой (ж) и

второй (и) сверток

 

0

m

Рис. 4

10

С помощью ДПФ вычислим преобразование N- точечной последовательности, образованной дополнением (N-L) нулями L- точечной импульсной характеристики. Этим достигается периодическое продолжение h[k], т.е. получение функции h1[k] (рис. 4, д.).

Последовательность h1[k] свертывается с x1[t] умножением в частотной области:

 

 

 

Y1 (n) = X1 (n)H1 (n) ,

(4)

где

 

 

N −1

 

 

 

 

 

 

 

 

 

 

X1 (n) = x1[k]W nk ,

 

n = 0,1,..., N −1

(5)

 

 

 

k =0

 

 

 

и

 

 

N −1

 

 

 

 

 

 

 

 

 

 

H1 (n) = h1[k]W nk ,

 

n = 0,1,..., N −1

(6)

 

 

 

k =0

 

 

 

Применив обратное преобразование ДПФ, получим

 

 

 

1

N −1

 

 

 

y1

(m) =

[ X1 (n)H1 (n)]W

nk ,

m = 0,1,..., N − 1

(7)

 

 

 

N n=0

 

 

 

Если в выражение (7) подставить два выражения (5) и (6) и применить

свойство ортогональности, то можно получить

m

N −1

 

y1 (m) = h1 (i)x1[m i] +

h1[i]x1[N + m i]

(8)

i=0

i=m+1

 

Учитывая, что N положено больше, чем L, рассмотрим случай, когда m=L-l :

L−1

N −1

 

y1 (L −1) = h1 (i)x1[L −1− i] + h1[i]x1[N + L −1+ i] .

(9)

i=0

i=L

 

Здесь

 

 

h1[L] = h1[L +1] = ... = h1[N −1] = 0 ,

 

так что вторая сумма исчезает, и

 

 

L−1

 

 

y1 (L −1) = h1 (i)x1[L −1− i] .

(10)

i=0

 

 

Это точное выражение, определяющее (L-1)- и выходной отсчет

фильтра с L отводами. Члены

 

 

y1[L], y1[L +1],..., y1[N −1]по той же причине корректны.

Рассмотрим теперь

первые (L-1) выходных отсчетов. Все они содержат ложные члены, вызванные наложением и определяемые второй суммой в выражении (9). Из-за этого они некорректны и должны быть отброшены (рис. 4, е, ж).

Следующий этап включает выделение второго N- точечного кадра, выбираемого так, что его первые (L-1) значений идентичны последним (L-1) отсчетам предыдущего кадра (рис. 4, з). Это необходимо в силу того, что в начале следующей N- точечной свертки снова будет (L-1) ложный отсчет, которые должны быть отброшены.

11

Корректная часть первой свертки возвращается в память (рис. 4, и). Поскольку, по крайней мере, N отсчетов, взятых из x(k), больше не будут использоваться, отфильтрованные данные, полученные в результате первой свертки, могут быть помещены в те же ячейки памяти, которые содержали первый обработанный кадр. Таким образом, весь процесс фильтрации может быть выполнен с «замещением», и в этом случае потребности в памяти определяются необходимостью хранения лишь первоначальных данных.

Стыковка корректных частей от первой и второй сверток, и получение полной свертки, показаны на рис. 4, к.

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

= [1,0,1,-1,4,-4,1,0]T , импульсная

Пример. Задан вектор данных x

характеристика фильтра определяется вектором h = [1,-1]T , требуется вычислить линейную свертку с помощью алгоритма перекрытия с накоплением.

Модель фильтра имеет вид

0,1,−4,4,−1,1,0,1

 

 

 

Z −1

 

 

Z −1

 

 

 

 

 

h[0] = 1

 

 

 

 

 

 

h[1] = 1

×

 

 

×

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y[n] = x[n] − x[n −1] = 1,−1,1,−2,5,−8,5,−1,0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I.Подготовительные операции.

Параметры алгоритма: L=2, N= 4, перекрытие = L-1 =1. Разбивка на

= [-1,4,-4,1]T ,

= [1,0,0,0]T . Последний кадр дополняется

кадры x

= [1,0,1,-1]T , x 2

x

3

1

 

 

 

 

нулями до нужного размера. Вычисление спектра Фурье импульсной

характеристики H = [W4nk ]× h = [0, (1+ j),2, (1- j)]T .

12

Соседние файлы в папке cos-lab4-vorontsov