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

Если сигналы нестационарны, то корреляционные функции R иPменяются во времени, поэтому значения коэффициентовHopt необходимо пересчитывать по мере поступления отсчетов, т.е. в промежутке между поступлениями очередных отсчетов, что требует применения процессора с высокой вычислительной мощностью, и на практике во многих случаях может оказаться невозможным.

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

Модель фильтра Винера в matlab

Рассмотрим задачу моделирования фильтра Винера в среде MATLAB на базе рассмотренной выше схемы (см. рис. в начале лекции) и алгоритма фильтра Винера.

Полезный сигнал в этом случае представляет собой сумму двух дискретных гармоник s=sin(2*pi*0.01*k)+sin(2*pi*0.005*k).Аддитивный шум для этого входа (n1на вышеприведенной схеме) формируется как выход КИХ - фильтра с передаточной функцией, на вход которого поступает белый шум, генерируемый функциейrandn(1,N).

На другой вход фильтра (шум x[k]на схеме) подается шум, формируемый из белого шума КИХ - фильтром 3-го порядка с передаточной функцией .

Моделирование фильтра Винера в MATLAB проводится специальной функцией

B=FIRWIENER(N,X,Y), которая вычисляет системную функцию КИХ - фильтра Винера порядкаNдля сигналаXна опорном входе, задаваемого вектором X и сигнала на основном входе, определяемого вектором Y.

Скрипт – файл

k=(1:300)';

% формирование полезного сигнала

s=sin(2*pi*0.01*k)+sin(2*pi*0.005*k);

% Получение некоррелированного шума

n1=0.8*randn(300,1);

f1=[1, 0.5];% Фильтр для шума

n=filter(1,f1,n1); % Коррелированный шум на основном входе

d=s+n; % сумма сигнал и шума

% фильтр для шума на основном входе

f2=[1, -0.8, 0.4, -0.2];

x=filter(f2,1,n1); % шум на опорном входе

L=2; % порядок фильтра

fw=firwiener(L-1,x, d);% синтез (расчет) фильтра Винера

yw=filter(fw,1,x);% винеровская фильтрация шума

ew=d-yw; % Винеровская оценка полезного сигнала

%построение графиков

figure

plot(k(1:end),[ew(1:end),s(1:end),d(1:end)]);

legend('фильтр Винера','Полезный сигнал', 'Cигнал с шумом')

title('L = 2')

xlabel('Индекс времени k')

ylabel('Амплитуда')

Моделирование проведено для трех значений порядка фильтра L = 2, L = 5. При увеличении порядка фильтра как L3 возрастает его вычислительная сложность.

Ниже приведен ещё один пример моделирования фильтра Винера для полезного сигнала в виде прямоугольного импульсного сигнала. Модели шумов – прежние.

Скрипт – файл

k=(1:500)';

% формирование полезного сигнала

s2=square(.06*k,50);

% Получение некоррелированного шума

n1=0.6*randn(500,1);

f1=[1, 0.7];% Фильтр для шума

n=filter(1,f1,n1); % Коррелированный шум на основном входе

d=s2+n; % сумма сигнал и шума

% фильтр для шума на основном входе

f2=[1, -0.8, 0.4, -0.2];

x=filter(f2,1,n1); % сигнал на опорном входе

L=3; % порядок фильтра

fw=firwiener(L-1,x, d);% расчет фильтра Винера

yw=filter(fw,1,x);% винеровская фильтрация шума

ew=d-yw; % Винеровская оценка полезного сигнала

%построение графиков

figure

plot(k(300:end),[ew(300:end),s2(300:end),d(300:end)]);

legend('фильтр Винера','Полезный сигнал', 'Cигнал с шумом')

xlabel('Индекс времени k'), ylabel('Амплитуда')

Порядок фильтра =3

Порядок фильтра = 8

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