Рис.4. Збільшений графік помилки від часу до зміни характеристик системи.
Однак RLS-алгоритм з експоненціальним забуванням (який має можливість відстежувати зміни статистичних властивостей оброблюваного сигналу) відмінно впорався зі зміною характеристик системи, і навіть з меншим перехідним процесом, ніж LMS. Це підтверджують підсумкові імпульсні характеристики фільтрів (рис.3, праворуч) - характеристики LMS-фільтра і RLS з експоненціальним забуванням добре збігаються з експоненціально затухаючими коливаннями імпульсної характеристики аналізованої системи (рис.6), а характеристика RLS-фільтра виглядає випадковим набором значень.
Якщо збільшити графіки помилки фільтрації після зміни характеристик системи (рис.6), то можна бачити, що алгоритм RLS з експоненціальним забуванням, як і колись, дає меншу помилку, ніж LMS-алгоритм. Алгоритм RLS на даному етапі ми не розглядаємо, оскільки його помилку видно на рис.3, і вона не порівнянна з помилками інших алгоритмів.
Рис.5. Збільшений графік помилки фільтрації після стрибкоподібної зміни характеристик системи
Рис.6. Імпульсна характеристика системи
Висновки
Виконана робота показала, що алгоритм LMS непогано справляється як зі стаціонарним сигналом, так і з сигналом з мінливими характеристиками. Алгоритм RLS в «чистому» вигляді дає відмінні результати по стаціонарному сигналом, однак зі зміною характеристик системи впоратися не здатний. Алгоритм RLS з експоненціальним забуванням відмінно справляється з обома вищепереліченими сигналами і показує набагато менший перехідний процес і меншу помилку в порівнянні з іншими розглянутими алгоритмами.
Однак не варто забувати, що RLS алгоритми вимагають набагато більше обчислювальних потужностей, ніж LMS (2,5N2 + 4N пар операцій «множення-складання» в порівнянні з N + 1 пар операцій на кожному кроці для LMS ).
Відповідно, можна зробити висновок, що для випадків, що не вимагають високої точності, найзручніше використовувати алгоритм LMS. Якщо ж потрібна висока точність і досить обчислювальних потужностей, краще підійдуть RLS-алгоритми. Крім того, потрібно пам'ятати, що RLS-алгоритм в «чистому» вигляді можна застосовувати тільки в системах зі стаціонарним сигналом. Якщо ж характер сигналу може змінюватися, необхідно використовувати RLS-алгоритм з експоненціальним забуванням.
Програми
Додаток 1
Реалізація адаптивних фільтрів в MATLAB
Для початку формуємо вхідний і вихідний сигнали ідентифікованої системи:=randn (2000,1); % дискретний білий гаусів шум
t=0: 31;=exp (-t/5). * cos (t * pi/2); % Імпульсна характеристика системи
% генеруємо першу половину вихідного сигналу
[y (1: 1000), state]=filter (b, 1, x (1: 1000));
% генеруємо другу половину вихідного сигналу (+1001: 2000)=filter (-b, 1, x (+1001: 2000), state);
Далі створимо об'єкти адаптивних фільтрів за допомогою відповідних конструкторів. Для LMS-алгоритму попередньо розрахуємо значення коефіцієнта?, Вибравши його в два рази меншим граничного значення, обумовленого формулою (15), а для RLS-алгоритму з експоненціальним забуванням візьмемо?=0,6. Для усіх інших параметрів використовуємо значення за замовчуванням:
% створюємо об'єкти LMS- і RLS-адаптивних фільтрів
N=32; % Довжина фільтрів=1/N/var (y); % розмір кроку для LMS_lms=adaptfilt.lms (N, mu); % Створення об'єкта для LMS_rls=adaptfilt.rls (N); % Створення об'єкта для RLS_erls=adaptfilt.rls (N, 0.6); % Створення об'єкта для RLS з експоненціальним забуванням
Тепер реалізуємо фільтрацію за допомогою функції filter. Відповідно до рис.2, а вхідний сигнал адаптивного фільтра збігається з вхідним сигналом досліджуваної системи (x), а зразковий сигнал - це вихідний сигнал системи (y):
% реалізуємо фільтрацію:
[y_lms, e_lms]=filter (ha_lms, x, y);
[y_rls, e_rls]=filter (ha_rls, x, y);
[y_erls, e_erls]=filter (ha_erls, x, y);
Тепер побудуємо імпульсну характеристику системи (рис.3) і графіки залежності сигналу помилки від часу, а також виведемо на екран імпульсні характеристики фільтрів, отримані на момент завершення обробки сигналу (рис.4):
% будуємо графіки:
subplot (3,2,1) (e_lms) ( LMS error ) ([0 2000 - 6 6]) (3,2,2) (ha_lms.coefficients) ( LMS impulse response ) (3,2,3) (e_rls) ( RLS error ) ([0 +2000 - 6 6]) (3,2,4) (ha_rls.coeffic...