Імпульсна характеристика

У випадку лінійних систем з постійними параметрами для аналізу проходження будь-якого сигналу достатньо знати результат проходження елементарного імпульсу у вигляді дельта-функції. Для дискретних систем також можна ввести в розгляд одиничну імпульсну функцію

Лінійна комбінація імпульсних характеристик

називається дискретної лінійної згорткою.

10.2. Дискретна згортка і її звернення

Дискретна згортка, що є основою алгоритму дискретної фільтрації, в MATLAB обчислюється за допомогою функції conv:

z = conv(x, у);

Знаючи результат згортки і один з згортаємих векторів, можна знайти другий. Дана операція (вона називається зверненням згортки - deconvolution) зводиться до поділу поліномів. У MATLAB ця операція реалізується з допомогою функції deconv, що має наступний синтаксис: [q, r] = deconv (b, a). Тут b - результат згортки (коефіцієнти полінома-чисельника), а - один з згортаємих векторів (коефіцієнти полінома-знаменника). Вихідні параметри мають наступний сенс: q - результат ділення поліномів (частка; quotient), тобто шуканий другий вектор згортки, r - залишок (remainder) від ділення поліномів (якщо вектор b дійсно є згорткою вектора a з чим-небудь, залишок від ділення буде нульовим).

10.3. Функція дискретної фільтрації

Основна функція, що реалізує дискретну фільтрацію в MATLAB, носить ім'я filter. У найпростішому вигляді вона має такий синтаксис:

у = filter(b, а, х);

Тут b - вектор коефіцієнтів нерекурсивний частини фільтра (чисельника функції передачі), а - вектор коефіцієнтів рекурсивної частини фільтра (знаменника функції передачі), х - вхідний сигнал. Повертаємой величиною є вектор відліків вихідного сигналу фільтра. Якщо перший елемент вектора а не дорівнює 1, значення векторів b і а нормуються - діляться на а(1).

function Example10_1

x=[1 3 2];

h=[1 2 3 4];

y=conv(x, h)

y =

1 5 11 17 18 8

[q, r]=deconv(y, h)

q =

1 3 2

r =

0 0 0 0 0 0

y=filter(h,1,x)

y =

1 5 11

y=filter(h,1,[x 0 0 0])

y =

1 5 11 17 18 8

h=[1 2 3 4];

convmtx(h, 4)

ans =

1 2 3 4 0 0 0

0 1 2 3 4 0 0

0 0 1 2 3 4 0

0 0 0 1 2 3 4

10.4. Компенсація фазового зсуву

При фільтрації сигналів в ряді випадків виникає вимога збереження фазових співвідношень у вхідному сигналі. Для цього потрібно фільтр з лінійною ФЧХ або, що те ж саме, з постійною (не залежить від частоти) фазової затримкою.

Для реалізації фільтрації з нульовим фазовим зрушенням в MATLAB призначена функція filtfilt. Синтаксис виклику функції filtfilt такий же, як для функції filter: у = filtfilt (b, а, х).

Наведемо приклад, який демонструє компенсацію фазового зсуву за допомогою функції filtfilt. Створимо сигнал у вигляді прямокутного імпульсу, доповненого з обох сторін нулями:

>> s=[zeros(50, 1); ones(100,1); zeros(50, 1)];

В якості фільтра використовуємо ФНЧ Чебишева першого роду з досить сильними пульсаціями АЧХ в смузі пропускання (3 дБ) і низькою частотою зрізу (0,05 частоти Найквіста), щоб вихідний імпульс був помітно спотворений:

>> [b, a]=cheby1(5, 3, 0.05);

Обробляємо сигнал за допомогою функцій filter і filtfilt і будуємо графіки вхідного і вихідних сигналів:

function Example10_2

s=[zeros(50, 1); ones(100,1); zeros(50, 1)];

[b, a]=cheby1(5, 3, 0.05); % компенсація фазового зсуву

s1=filter(b, a, s);

s2=filtfilt(b, a, s);

plot(s)

hold on

plot(s1, '--')

plot(s2, '-.')

hold off % На екрані вхідний сигнал (суцільна лінія), результат звичайної фільтрації (пунктирна лінія) і фільтрації з компенсацією фазового зсуву (штрих-пунктирна лінія).

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

1. Що таке імпульсна характеристика?

2. У чому сутність дискретної згортки і її звернення?

3. Що таке функція дискретної фільтрації?

4. Що таке компенсація фазового зсуву