Функции выбора порядка фильтров

Вибрати мінімально необхідний порядок фільтра дозволяють такі однотипні функції пакету Signal Processing:

[n,Wn]=buttord(Wp, Ws, Rp, Rs)

[n,Wn]=cheb1ord(Wp, Ws, Rp, Rs)

[n,Wn]=cheb2ord(Wp, Ws, Rp, Rs)

[n,Wn]=ellipord(Wp, Ws, Rp, Rs)

Вхідний параметр Rp - допустимий рівень пульсацій в смузі пропускання (в децибелах), Rs - мінімально необхідне загасання в смузі затримання (в децибелах). Параметри Wp і Ws задають межі смуг пропускання і затримування (нормовані до частоти Найквіста), спосіб завдання цих параметрів залежить від типу проектованого фільтру.

Як приклад задамо дуже жорсткі вимоги до АЧХ фільтра нижніх частот - вузьку перехідну смугу, малі пульсації в смузі пропускання і велике загасання в смузі затримання - і подивимося, яким виявиться мінімальний порядок для фільтрів чотирьох стандартних типів:

function Example14_1

Wp=0.2; % кінець смуги пропускання

Ws=0.21; % початок смуги затримування

Rp=1; % пульсація АЧХ в смузі пропускання (дБ)

Rs=60; % загасання в смузі затримання (дБ)

[n,Wn]=buttord(Wp, Ws, Rp, Rs)

n =

Wn =

0.2009

[n,Wn]=cheb1ord(Wp, Ws, Rp, Rs)

n =

Wn =

0.2000

[n,Wn]=cheb2ord(Wp, Ws, Rp, Rs)

n =

Wn =

0.2100

[n,Wn]=ellipord(Wp, Ws, Rp, Rs)

n =

Wn =

0.2000

Результати показують, що для фільтра Баттерворта потрібно дуже великий порядок, порядок фільтрів Чебишева обох типів більш ніж у п'ять разів менше і, нарешті, мінімальний порядок потрібно при синтезі еліптичного фільтра.

14.4. Функції прямого синтезу рекурсивних фільтрів

Функція рrоnу дозволяє синтезувати рекурсивний фільтр за заданою імпульсної характеристиці. Синтаксис виклику функції наступний: [b, a] = prony (h, nb, na). Тут h - вектор відліків синтезуємій імпульсної характеристики, nb і nа - порядки поліномів чисельника і знаменника функції передачі рекурсивного фільтра відповідно. Повертані результати - вектори b і а коефіцієнтів поліномів чисельника і знаменника функції передачі синтезованого рекурсивного фільтра.

Як приклад спробуємо синтезувати рекурсивний фільтр 5-го порядку з КІХ трикутного виду. Щоб зменшити «хвіст» після закінчення заданого фрагмента, доповнимо задану імпульсну характеристику нулями.

function Example14_2

h=[1 2 3 4 5 4 3 2 1 zeros(1, 9)];

[b, a]=prony(h, 5, 5);

impz(b, a) % на екрані результати апроксимації трикутної імпульсної характеристики за допомогою функції prony.

Функція stmcb, аналогічно функції prony, дозволяє синтезувати рекурсивний фільтр за заданою імпульсною характеристицю. Однак вона не прагне забезпечити точний збіг початкових фрагментів імпульсних характеристик - замість цього функція мінімізує квадратичне відхилення отриманої характеристики від заданої, тобто суму квадратів модулів різниць відліків отриманої та бажаної імпульсних характеристик. Синтаксис виклику функції stmcb наступний: [b, a] = stmcb (h, nb, na, niter, ai). Тут h - вектор відліків синтезуємої імпульсної характеристики, nb і nа - порядки поліномів чисельника і знаменника функції передачі рекурсивного фільтра відповідно. Решта вхідних параметрів є необов'язковими і мають значення за замовчуванням.

Повертані результати - вектори b і а коефіцієнтів поліномів чисельника і знаменника функції передачі синтезованого рекурсивного фільтра.

Як приклад синтезуємо рекурсивний фільтр 5-го порядку з трикутною імпульсною характеристикою:

function Example14_3

h=[1 2 3 4 5 4 3 2 1 zeros(1, 9)];

[b, a]=stmcb(h, 5, 5);

impz(b, a) % на екрані результати апроксимації трикутної імпульсної характеристики за допомогою функції stmcb.

Функція firls призначена для синтезу нерекурсивних фільтрів з лінійною ФЧХ за критерієм мінімальної середньоквадратичної помилки відтворення заданої АЧХ в заданому наборі частотних смуг. При цьому помилка в різних частотних смугах може враховуватися з різними ваговими коефіцієнтами. Синтаксис виклику функції наступний:

b = fir1s(n, f, a, w, 'ftype')

Тут n - порядок розраховуємого фільтра. Параметри f і а повинні бути векторами однакової парної довжини, вони спільно визначають бажану АЧХ синтезованого фільтра. Вектор f містить значення частот, нормованих до частоти Найквіста, а вектор а - відповідні цим частотам значення АЧХ. У проміжках між заданими точками АЧХ інтерполюється за лінійним законом. Частоти у векторі f повинні утворювати неспадную послідовність.

Як приклад синтезуємо даним методом ФНЧ 32-го порядку з нормованою частотою зрізу 0,2 і початком смуги затримання на нормованої частоті 0,25:

function Example14_4

f = [0 0.2 0.25 1];

a = [1 1 0 0];

b = firls(32, f, a);

[h, w] = freqz(b);

plot(w/pi, abs(h)) % графік АЧХ

grid on

ylim([0 1.1]) % на екрані АЧХ ФНЧ, синтезовані функцією firls шляхом мінімізації середньоквадратичної помилки.

Функція fircls призначена для синтезу нерекурсивних фільтрів з лінійною ФЧХ шляхом мінімізації середньоквадратичної помилки відтворення заданої кусково-постійною АЧХ з обмеженням гранично допустимих відхилень від неї (constrained least square). Синтаксис виклику функції наступний: b = ficrls(n, f, amp, up, lo, 'design_flag').

Тут n - порядок розраховуємого фільтра (його імпульсна характеристика буде містити n + 1 ненульових відліків). Вектори f і amp спільно визначають бажану АЧХ синтезованого фільтра. Вектор f містить значення частот, нормовані до частоти Найквіста. Ці частоти повинні утворювати зростаючу послідовність, крім того, повинні виконуватися рівності f(1) = 0 і f(end) = 1. Довжина вектора amp повинна бути на одиницю менше, ніж довжина вектора f. Елементи вектора amp задають кусково-постійну АЧХ (у діапазоні частот від f(k) до f(k+1). Вивести графік синтезується АЧХ можна наступною командою:

>> stairs(f, [amp(:);amp(end)]).

Для фільтрів, коефіцієнт передачі яких на частоті Найквіста не дорівнює нулю, можливий тільки парний порядок. Якщо задати непарне n, буде розрахований фільтр на одиницю більшого порядку.

Вектори up і 1о задають верхню і нижню допустимі межі для значень АЧХ синтезованого фільтра. Ці вектори повинні мати такий же розмір, як і вектор amp. Використовуваний критерій оптимізації можна сформулювати наступним чином: шукаються коефіцієнти фільтра заданого порядку, які дають АЧХ, що лежить між 1о і up і має при цьому мінімальне середньоквадратичне відхилення від amp.

Як приклад синтезуємо ФНЧ з тими ж параметрами, що і в попередньому прикладі:

function Example14_5

f = [0 0.225 1];

a = [1 0];

lo = [0.98 -0.02]; % мінімальний коефіцієнт передачі

up = [1.02 0.02]; % максимальний коефіціент передачі

b = fircls(32, f, a, up, lo);

[h, w] = freqz(b);

plot(w/pi, abs(h)) % графік АЧХ

grid on

ylim([0 1.1]) % на екрані АЧХ ФНЧ, синтезованого шляхом мінімізації середньоквадратичної помилки з обмеженням мінімального відхилення за допомогою функції firls.

Функція remez призначена для синтезу нерекурсивних фільтрів з лінійною ФЧХ і кусково-лінійної АЧХ з можливими зонами невизначеності. Можливо також завдання довільної форми АЧХ з допомогою функції користувача. Синтаксис виклику функції наступний:

[b, delta, opt] = remez(n, f, a, w, 'ftype', {lgrid})

Тут n - порядок розраховується фільтра (його імпульсна характеристика буде містити n + 1 ненульових відліків).

Параметри f і а повинні бути векторами однакової парної довжини, вони спільно визначають бажану АЧХ синтезованого фільтра. Вектор f містить значення частот, нормовані до частоти Найквіста, а вектор а - відповідні цим частотам значення АЧХ. У проміжках між заданими точками АЧХ інтерполюється за лінійним законом. Частоти у векторі f повинні створювати суворо зростаючу послідовність (повторювані елементи не допускаються).

Питання для самоперевірки

1. Що таке функції синтезу стандартних фільтрів?

2. Що таке функції вибора порядку фільтрів?

3. Що являють собою функції рrоnу, stmcb, firls, fircls і remez?