Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

модел_лр32

.docx
Скачиваний:
0
Добавлен:
18.01.2022
Размер:
454.11 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ

ОЦЕНКА

ПРЕПОДАВАТЕЛЬ

к.т.н.,

В.А. Неннашев

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №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

Графики и таблицы

Фильтрация различных сигналов.

  1. синусоида:

  1. единичная ступенька:

  1. линейная функция:

  1. синусоида со скачками:

  1. синусоида с белым шумом:

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.

Соседние файлы в предмете Моделирование