модел_лр32
.docx
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ
|
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
к.т.н., |
|
|
|
В.А. Неннашев |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №2
|
МЕДИАННАЯ ФИЛЬТРАЦИЯ И СГЛАЖИВАНИЕ
|
по дисциплине: КОМПЬЮТЕРНАЯ ГРАФИКА |
РАБОТУ ВЫПОЛНИЛА
СТУДЕНТКА ГР. № |
|
|
|
|
|
|
номер группы |
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2021
Цель работы: ознакомиться с методикой моделирования и цифровой обработки сигналов для отбраковки ошибочных данных с помощью пакета MATLAB.
Вариант № 2.
Часть 1.
Листинг программы
clear, clc
close all
%% часть 1
T = 5; % длительность
tau = 0.1; % шаг по времени
t = 0:tau:T; % набор значений времени
% графики отфильрованных сигналов
s1 = sin(2*pi/2.5*t); % синусоида
fm1 = filt_median(s1); % отфильтрованный сигнал
fp1 = filt_porog1(s1);
figure, plot(t,s1,'.-k', t, fm1, t, fp1)
grid on
title('—инусоида')
legend('сигнал', 'мед.фильтр', 'порог.фильтр')
s2 = ones(size(t)); % единичный сигнал
s2(t<=1) = 0; % обнул€ем начало
fm2 = filt_median(s2); % отфильтрованный сигнал
fp2 = filt_porog1(s2);
figure, plot(t,s2,'.-k', t, fm2, t, fp2)
grid on
legend('сигнал', 'мед.фильтр', 'порог.фильтр')
ylim([-0.5 1.5])
title('—тупенька')
s3 = -2 + 3*t; % возрастающий сигнал
fm3 = filt_median(s3); % отфильтрованный сигнал
fp3 = filt_porog1(s3);
figure, plot(t,s3,'.-k', t, fm3, t, fp3)
grid on
legend('сигнал', 'мед.фильтр', 'порог.фильтр')
title('¬озрастающий сигнал')
n1 = zeros(size(t)); % заготовка из нулей
n1([10,20,30]) = [5, -3, 4]; % мгновенные скачки
sn1 = s1 + n1;
fnm1 = filt_median(sn1); % отфильтрованный сигнал
fnp1 = filt_porog1(sn1);
figure, plot(t,sn1,'.-k', t, fnm1, t, fnp1)
grid on
legend('сигнал', 'мед.фильтр', 'порог.фильтр')
title('—инусоида с мгновенными скачаками')
n2 = randn(size(t)); % белый шум
sn2 = s1 + 0.1*n2;
fnm2 = filt_median(sn2); % отфильтрованный сигнал
fnp2 = filt_porog1(sn2);
figure, plot(t,sn2,'.-k', t, fnm2, t, fnp2)
grid on
legend('сигнал', 'мед.фильтр', 'порог.фильтр')
title('—инусоида с белым шумом')
pn = dsp.ColoredNoise('Color','pink','SamplesPerFrame',length(t)); % создаем объект шума, 1 семпл равен длинне массива времени
n3 = pn()'; % розовый шум (1 семпл), транспонируем чтобы ориентаци€ совпадала с t
sn3 = s1 + 0.1*n3;
fnm3 = filt_median(sn3); % отфильтрованный сигнал
fnp3 = filt_porog1(sn3);
figure, plot(t,sn3,'.-k', t, fnm3, t, fnp3)
grid on
legend('сигнал', 'мед.фильтр', 'порог.фильтр')
title('—инусоида с розовым шумом')
Функция для медианной фильтрации:
function y = filt_median(x)
% медианный фильтр с окном k=3
y = zeros(size(x));
for i = 1:length(x)
if (i-1)>=1 & (i+1)<=length(x)
y(i) = median( x(i-1:i+1) );
elseif (i-1)<1
y(i) = median( x(i:i+1) );
elseif (i+1)>length(x)
y(i) = median( x(i-1:i) );
end
end
end
Функция для пороговой фильтрации нулевого порядка:
function y = filt_porog0(x)
% пороговый фильтр с экстраполяцией нулевого порядка
eps = 0.1; % порог
y = zeros(size(x));
y(1) = x(1); % первое значение так и оставляем
for i = 2:length(x)
delta = abs( x(i)-x(i-1) );
if delta < eps
y(i) = x(i);
else
y(i) = x(i-1);
end
end
end
Функция для пороговой фильтрации первого порядка:
function y = filt_porog1(x)
% пороговый фильтр с экстраполяцией первого порядка
eps = 0.1; % порог
y = zeros(size(x));
y(1) = x(1); % первое значение так и оставляем
for i = 2:length(x)
delta = abs( x(i)-x(i-1) );
if delta < eps
y(i) = x(i);
elseif (i-2) < 1 % если вышли за пределы массива
y(i) = x(i-1);
else
y(i) = 2*x(i-1)-x(i-2);
end
end
end
Графики и таблицы
Фильтрация различных сигналов.
синусоида:
единичная ступенька:
линейная функция:
синусоида со скачками:
синусоида с белым шумом:
6) синусоида с розовым шумом:
Часть 2.
Листинг программы
%% часть 2
c1 = 1;
c2 = -1;
c3 = 0;
c4 = 0;
% заданный сигнал:
x = c1*exp(-t) + c2*exp(-2*t) + c3*sin(t) + c4*cos(t);
xfm = filt_median(x); % отфильтрованный сигнал
xfp = filt_porog0(x);
figure, plot(t,x,'.-k', t, xfm, t, xfp)
grid on
legend('сигнал', 'мед.фильтр', 'порог.фильтр')
title('«аданный сигнал до и после фильтрации')
% значений сигнала и фильтраций:
disp(' t x med porog')
disp([t', x', xfm', xfp'])
Фильтрация сигнала:
Рисунок 1 – сигнал до и после фильтрации
Таблица значений сигнала до и после фильтрации:
Вывод
Мы ознакомились с методикой моделирования и цифровой обработки сигналов для отбраковки ошибочных данных с помощью пакета MATLAB.