Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Lektsia_6.doc
Скачиваний:
193
Добавлен:
11.03.2016
Размер:
413.7 Кб
Скачать

Демонстрация matlab алгоритма рмнк: rlsdemo.Mdl

В среде MATLABимеется ряд демонстраций, связанных с адаптивными фильтрами. Среди них - rlsdemo.mdl . Эта демонстрация создана в среде пакетаSignal Processing Blocksetи иллюстрирует использование рекурсивного алгоритма наименьших квадратов (RLS) для компенсации шума во входном сигнале. Структурная схема: базовым элементом здесь является блок RLS Filter с его входами и параметрами. На входInputфункции подается основной (reference) сигнал, на вход желаемого сигналаDesired- смесь сигнала с шумом. Адаптивный фильтр с алгоритмом РНК на основе подстройки коэффициентов фильтра формирует выходной сигнал, компенсирующий шум в полезном сигнале.

Пример установки параметров блока RLS Filter (открытие - двойной clickпо блоку).

Приложение 1

%% Адаптивное подавление шума с помощью функции adaptfilt.rls

% Для компенсации шума в гармоническом сигнале

% используется стандартный метод РНК

% Формирование и вывод графика гармонического сигнала

signal = sin(2*pi*0.055*(0:500-1)');

subplot(411)

plot(0:length(signal)-1,signal);

grid;

title('Полезный гармонический сигнал');

% Формирование и вывод графика шума

nvar = 1.5; % Дисперсия шума

noise = randn(500,1)*nvar; % Генерирование белого шума

subplot(412)

plot(0:499,noise);

legend('Шум');

grid;

% Формирование шума с помощью КИХ - фильтра

nfilt = fir1(31,0.5); % Получение фильтра 31-го порядка

fnoise = filter(nfilt,1,noise); % Фильтрация белого шума

d = signal+fnoise; % Получение "желаемого" сигнала: сигнал + шум

subplot(413)

plot(0:length(d)-1,d);

grid;

legend('Желаемый вход: сигнал + шум ');

% Инициализация параметров адаптивного РНК- фильтра

M =32; % Число коэффициентов фильтра

lam = 0.98; % Коэффициент забывания

delta = 0.1; % Константа инициализации

w0 = zeros(M,1); % Нулевой начальный вектор коэффициентов

P0 = (1/delta)*eye(M,M); % Инициализация обратной АКФ матрицы

Zi = zeros(M-1,1); % Нулевое начальное состояние фильтра

% Конструирование адаптивного РНК - фильтра

Hadapt = adaptfilt.rls(M,lam,P0,w0,Zi);

Hadapt.PersistentMemory = false;

% Фильтрация адаптивным фильтром

[y,e] = filter(Hadapt,noise,d);

% Вывод графиков исходного "чистого сигнала" и результата фильтрации

subplot(414)

plot(0:499,signal(1:500),0:499,e(1:500)); grid;

axis([0 500 -4 4]);

title('Исходный сигнал и сигнал ошибки');

legend('Исходный сигнал','Сигнал ошибки');

Приложение 2.

% Моделирование задачи идентификации

% КИХ - системы

K = 20; % Число усредняемых реализаций

x = zeros(1000,K);

d = x; % Инициализация переменных

h = fir1(31,0.5); % КИХ - система для идентификации

% Это оконный фильтр 31-го порядка с частотой среза 0,5

x = filter(1,[1 -0.5],sign(randn(size(x))));

n = 0.1*randn(size(x)); % случайный шум

d = filter(h,1,x)+n; % желаемый сигнал

L =32; % длина адаптивного фильтра

mu = 0.005; % размер шага сходимости

M = 5; % коэффициент прореживания отсчетов

h = adaptfilt.lms(L,mu);

% Вычисление кривой обучения фильтра МНК

[mse,meanH,Hsim,traceKsim] = msesim(h,x,d,M);

nn = M:M:size(x,1);

subplot(2,1,1);

semilogy(nn,mse); grid

title(' Кривая обучения МНК, число реализаций K = 20');

xlim([0 size(x,1)])

% Инициализация фильтра РНК

M =32; % Число коэффициентов фильтра

lam = 0.98; % Коэффициент взвешивания

delta = 0.1; % Константа инициализации

w0 = zeros(M,1); % Нулевой начальный вектор коэффициентов

P0 = (1/delta)*eye(M,M); % Инициализация обратной АКФ матрицы

Zi = zeros(M-1,1); % Нулевое начальне состояние фильтра

% Конструирование адаптивного РНК - фильтра

Hrls = adaptfilt.rls(M,lam,P0,w0,Zi);

% Вычисление кривой обучения фильтра РНК

[mse1,meanH1,Hsim1,traceKsim1] = msesim(Hrls,x,d,1);

%nn1 = M:M:size(x,1);

nn1 = 1:1:size(x,1);

subplot(2,1,2);

semilogy(nn1,mse1); grid

title(' Кривая обучения РНК, число реализаций K = 20');

xlim([0 size(x,1)])

Приложение 3.

% Моделирование задачи идентификации

% КИХ - системы

K = 10; % Число усредняемых реализаций

x = zeros(300,K);

d = x; % Инициализация переменных

h = fir1(15,0.7); % КИХ - система для идентификации

% Это оконный фильтр 15-го порядка с частотой среза 0,7

x = filter(1,[1 -0.5],sign(randn(size(x))));

n = 0.1*randn(size(x)); % случайный шум

d = filter(h,1,x)+n; % желаемый сигнал

% Инициализация фильтра РНК

M =16; % Число коэффициентов фильтра

lam = 0.98; % Коэффициент взвешивания

delta = 0.1; % Константа инициализации

w0 = zeros(M,1); % Нулевой начальный вектор коэффициентов

P0 = (1/delta)*eye(M,M); % Инициализация обратной АКФ матрицы

Zi = zeros(M-1,1); % Нулевое начальное состояние фильтра

% Конструирование адаптивного РНК - фильтра

Hrls = adaptfilt.rls(M,lam,P0,w0,Zi);

% Вычисление кривой обучения фильтра РНК

[mse1,meanH1,Hsim1,traceKsim1] = msesim(Hrls,x,d,1);

nn1 = 1:1:size(x,1);

subplot(2,1,1);

semilogy(nn1,mse1);

title(' Кривая обучения РНК, число реализаций K = 10');

xlim([0 size(x,1)])

G0 = sqrt(.1)*eye(16); % Инициализация корреляционной матрицы

lam = 0.99; % Qr RLS коэффициент забывания

Hqr = adaptfilt.qrdrls(M,lam,G0);

%[y,e] = filter(h,x,d);

[mse2,meanH2,Hsim2,traceKsim2] = msesim(Hqr,x,d,1);

nn1 = 1:1:size(x,1);

subplot(2,1,2);

semilogy(nn1,mse1);

title(' Кривая обучения QR - РНК, число реализаций K = 10');

xlim([0 size(x,1)])

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