Скачиваний:
74
Добавлен:
16.04.2013
Размер:
1.1 Mб
Скачать

Лабораторная работа №3

Линейные дискретные фильтры. Синтез КИХ-фильтров по заданной частотной характеристике.

Введение

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

1. Синтезировать нерекурсивный симметричный фильтр порядка 2N с заданной в таблице вариантов полосой пропускания (см. (8) и (9)). Построить амплитудно-частотную и фазочастотную характеристики. Сравнить полученную АЧХ с идеальной

Нерекурсивный симметричный фильтр можно получить при помощи формул (8) и (9), что и было проделано мной в этом задании. Файл Filter1.m генерирует коэффициенты b такого фильтра по идеальной АЧХ. Запускаем файл task1.m и видим пример работы функции Filter1 для нескольких значений N (Порядок фильтра = 2*N):

Стоит отметить, что сейчас и впредь мы будем выводить по два графика для АЧХ: один в обычных координатах, другой в логарифмических. Дело в том, что в обычных координатах мы хорошо видим поведение функции в полосе пропускания, а в логарифмических координатах – в полосе подавления. При больших порядках фильтра сложно оценить какой из сгенерированных фильтров лучше приближает идеальную АЧХ в полосе подавления (где K(w) = 0 в идеальном случае), на логарифмических графиках мы ясно видим – чем график ниже, тем лучше приближение.

Также, здесь мы представили график ФЧХ, как и полагается, φ(w) лежит в пределах от –pi до pi. ФЧХ мы строили при помощи функции MATLAB freqz, которая принимает на вход коэффициенты b и выдаёт ЧХ, далее –angle(freqz(…)) даёт нам ФЧХ.

Приведём теперь графики для случая N = 11:

Как видим, ситуация не особо улучшилась, на первом графике мы всё равно видим “всплеск” в участке перехода АЧХ от 1 к 0. Это связано с тем, что наша функция мгновенно изменяет своё значения в точках перехода из 1 в 0 (и наоборот), поэтому, нужно сначала приблизить нашу идеальную ЧХ какой-либо реальной ЧХ (где переход осуществляется плавно), и уже по ней строить фильтр, чем мы и будем заниматься далее.

2. Синтезировать нерекурсивный симметричный фильтр порядка 2N с заданной в таблице вариантов полосой пропускания, используя процедуру firpm пакета MATLAB (для версий MATLAB 6.5 и ниже следует использовать процедуру remez). Построить амплитудно-частотную и фазочастотную характеристики. Сравнить полученную АЧХ с идеальной

Сейчас мы выясним, как MATLAB справляется с задачей аппроксимации, которую мы описали выше. Для этого воспользуемся скриптом task2.m. Мы используем функцию Filter1_2, для того чтобы сгенерировать коэффициенты bn фильтра. Получаем следующие результаты:

Для N = 11 имеем:

На графиках АЧХ чёрная полоса внизу – это полоса подавления из таблицы, полоса пропускания представлена всей областью, где идеальная АЧХ = 1. Как видно из эксперимента, дела обстоят куда лучше, чем в прошлом случае. При увеличении порядка фильтра мы получаем равномерное приближение к идеальной АЧХ (В данном случае полоса неопределённости слишком большая, поэтому мы видим “наклон” реальной АЧХ в этой области).

Далее мы реализуем алгоритм синтеза фильтра, АЧХ которого равномерно приближает реальную АЧХ и сравним АЧХ этого фильтра со всеми предыдущими.

3. Реализовать в MATLAB функцию синтеза фильтра. С помощью реализованной функции синтезировать фильтр того же порядка, что и в п. 1. Сравнить полученную АЧХ с идеальной и с АЧХ, найденной в п. 1

Функция Filter2 принимает на вход 3 аргумента – полосу подавления, полосу пропускания и N, где 2*N – порядок фильтра.

Распишем алгоритм работы Filter2:

1. Делим весь интервал 0 до pi на (N + 1) частей, и выбираем точки w(n) как середины этих отрезков.

2. Смотрим, какие из этих точек не попадают ни в полосу пропускания, ни в полосу подавления, обозначаем их W, их к-во – M.

3. Далее строим функцию M переменных, назовём её F, из следующих соображений:

Формируем приближённую к K0(w) АЧХ K1(w) так:

K1(w) = 1 во всех w, попавших в полосу пропускания.

K1(w) = 0 во всех w, попавших в полосу подавления.

K1(w) = W в остальных w.

Таким образом K1(W) сформирована, используя Filter1 генерируем фильтр и находим его K(w).

Наша функция F будет представлять собой максимальную разницу по модулю между K(w) и K0(w) в точках w(n), где K0(w) = 1 и где K0(w) = 0.

4. Возникает вопрос, как найти эту разницу наиболее быстро? Можно конечно перебирать все точки, где K0(w) = 0/1 с фиксированным шагом, но из вида формул (8) и (9) видно, что наибольшие значения наша сгенерированная K(w) будет принимать в точках pi*j/(N + 1), j=0…N.

На рисунке представлена часть идеальной АЧХ, синяя черта указывает полосу пропускания, а красная – полосу подавления. Зелёный линии – сама идеальная АЧХ. Снизу представлено разбиение отрезка на N частей. Кружочки – это отсчёты w(n), а треугольники – это те точки, в которых мы будем сравнивать значения K0(w) и K(w). Заметим, что границы полосы подавления и полосы пропускания также входят в рассмотрение.

Проводя сравнения в этих точках мы находим наибольшую разницу и принимаем её за значение нашей функции F(W).

5. Далее, минимизируем F(W) с помощью fmincon и, таким образом, находим коэффициенты b(n). Фильтр построен.

Файл task3.m демонстрирует работу функции Filter2. Приведём результат его работы для нескольких значений N:

На этих графиках мы видим все 4 функции:

  1. АЧХ из первого пункта (Filter1)

  2. АЧХ Filter2

  3. АЧХ firpm

  4. Идеальную АЧХ

Пурпурным цветом на графиках отмечены полосы подавления и пропускания. Также, task3.m выдаёт следующее:

Compare to ideal |K0(w)| using C norm:

My usual |K0(w)|: 0.999986

My optimal |K0(w)|: 0.516416

MATLAB |K0(w)|: 0.518148

Compare to ideal |K0(w)| using l2 norm:

My usual |K0(w)|: 32.219334

My optimal |K0(w)|: 16.917708

MATLAB |K0(w)|: 17.075124

Это сравнение АЧХ 1,2,3 с идеальной АЧХ по двум нормам: C и l2.

Сравнение по норме C даёт “локальную оценку”, т.е показывает наибольшее отклонение, а сравнение по норме l2 даёт “глобальную оценку”, т.е показывает накопительную сумму всех отклонений.

Как мы видим, для N = 5 самым лучшим оказался фильтр “My optimal”, у него лучшие показатели по обеим оценкам.

Возьмём теперь N побольше, скажем N = 11:

Compare to ideal |K0(w)| using C norm:

My usual |K0(w)|: 0.999787

My optimal |K0(w)|: 0.544039

MATLAB |K0(w)|: 0.507668

Compare to ideal |K0(w)| using l2 norm:

My usual |K0(w)|: 32.163428

My optimal |K0(w)|: 11.643814

MATLAB |K0(w)|: 11.370899

Здесь, как мы видим, лучше всех справился фильтр “MATLAB”, хотя это только благодаря наиболее хорошему приближению в неопределённой области, например, как видно из логарифмического графика, “My optimal” приближает лучше (немного лучше) в полосе подавления.

Возьмём теперь N = 49:

Compare to ideal |K0(w)| using C norm:

My usual |K0(w)|: 0.999970

My optimal |K0(w)|: 0.726496

MATLAB |K0(w)|: 0.503477

Compare to ideal |K0(w)| using l2 norm:

My usual |K0(w)|: 28.619496

My optimal |K0(w)|: 13.305049

MATLAB |K0(w)|: 7.972620

Здесь “My optimal” проигрывает куда серьёзнее, но это только потому, что “My optimal”’у безразлично поведение функции в неопределённой области, когда как “MATLAB” её плавно переводит из одной области в другую. Если отвлечься от заданных в варианте значений полос пропускания и подавления, а взять, скажем полосу пропускания = 0..0.7*pi и полосу подавления = 0.73*pi..pi, т.е уменьшить неопределённую полосу, и запустить task3.m ещё раз, то получим:

Compare to ideal |K0(w)| using C norm:

My usual |K0(w)|: 0.998198

My optimal |K0(w)|: 0.507662

MATLAB |K0(w)|: 0.499508

Compare to ideal |K0(w)| using l2 norm:

My usual |K0(w)|: 12.215603

My optimal |K0(w)|: 5.475364

MATLAB |K0(w)|: 5.536973

Теперь “My optimal” выигрывает по норме l2. Да и по норме C тоже не намного уступает.

4. Проверить, удовлетворяет ли фильтр, синтезированный в п. 3, требованиям для неравномерности полос пропускания и подавления при заданных параметрах e0 и e1. Определить минимальный порядок фильтра (2N), удовлетворяющего данным требованиям

Скрипт task4.m находит минимальный порядок такого фильтра, генерируя на каждом шаге фильтр большего порядка и сверяя ошибки с e0 и e1. Запустим task4.m, получим:

Minimum order (2N) is: 20

Т.е N = 10, порядок = 20.

5. С помощью синтезированного в п. 3 фильтра обработать сигналы x(t) = sin(w*t) для указанных в таблице вариантов значений w . Определить задержку a гармонического колебания на выходе фильтра (см. (10))

Вместо того чтобы ограничиваться значениями w, данными в варианте, мы прогоним w от 0 до pi и представим результат в виде ролика, на котором будет наглядно видно, что происходит с обработанным сигналом, когда его частота постепенно увеличивается. Чтобы просмотреть ролик, достаточно запустить файл task5.m или можно просмотреть уже записанный ролик filter.wmv. task5.m также выводит приближённо вычисленный порядок фильтра, например, для N = 10 он выводит:

Calculated order is 22

task5.m просто вычисляет отставание преобразованного сигнала от исходного с точностью 0.001, это отставание равно N по (10).

6. С помощью синтезированного в п. 3 фильтра провести фильтрацию тестового изображения. Для этого профильтровать последовательно каждую строку, затем каждый столбец изображения. Объяснить полученный результат

Для этого воспользуемся файлом task6.m, пример его вывода:

Профильтрованное изображение в первую очередь отличается тем, что смещено относительно левого верхнего угла на N пикселей, что следует из (10). Более того, если присмотреться, то на профильтрованном изображении смазаны мелкие детали (т.е высокие частоты), при тех полосах пропускания и подавления, что даны в нашем варианте, сложно увидеть разницу, поэтому возьмём полосу пропускания = 0..0.5pi, а полосу подавления = 0.6pi..pi. Получим:

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

Воробьёв. С. МП-40

Соседние файлы в папке report