МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра БТС
отчет
по лабораторной работе №5
по дисциплине «Методы обработки и анализа
биомедицинских сигналов и данных»
Тема: «АДАПТИВНЫЙ ФИЛЬТР СЕТЕВОЙ НАВОДКИ»
Вариант № 1
Студенты гр. 7501 |
|
Басалай К.А. Фалевская А.А. |
Преподаватель |
|
Калиниченко А.Н. |
Санкт-Петербург
2019
Цель работы: исследование адаптивного цифрового фильтра сетевой наводки 50 Гц.
Задание на выполнение работы
• Подготовить программу, реализующую алгоритм адаптивной фильтрации и исследовать его работу на тестовом сигнале.
• Выполнить фильтрацию фрагмента ЭКГ, содержащего сетевую наводку, и подобрать наилучшее значение шага адаптации.
Отчет по выполненной работе
Исследование адаптивного фильтра на тестовом сигнале
Текст программы адаптивной фильтрации (fs50.m):
function y=fs50(x,Fs,da)
a=0
a1=0
ax=0
C=2*cos(2*pi/(Fs/50));
N=length(x);
x1=x(1);
for i=1:N
dy=(x(i)-a)-(x1-a1);
if dy~=0
if dy>0
a=a+da
else
a=a-da
end
end
y(i)=x(i)-a;
ax=a;
a=a*C-a1;
a1=ax;
x1=x(i);
end
Текст головной программы (П1):
clc
clear all
close all
global hAxes1 hAxes2 hAxes3 hEda hBtn
x0=400;
y0=200;
w0=700;
h0=500;
figure('Color',[1 1 1],'Position',[x0,y0,w0,h0])
x1=50;
y1=50;
dy=30;
w=450;
h=120;
hAxes1=axes('Units','pixels','Position',[x1,y1,w,h]);
hAxes2=axes('Units','pixels','Position',[x1,y1+h+dy,w,h]);
hAxes3=axes('Units','pixels','Position',[x1,y1+2*h+2*dy,w,h]);
x2=550;
y2=250;
w2=30;
h2=15;
hTxta=uicontrol('Style','text','String','da=',...
'Position',[x2,y2,w2,h2],'Backgroundcolor',[1 1 1]);
hEda=uicontrol('Style','edit','Position',[x2+w2,y2,w2,h2],...
'Backgroundcolor',[1 1 1],'HorizontalAlignment','left');
hBtn=uicontrol('Style','pushbutton','String','Filter',...
'Position',[x2,y2-30,w2,h2],'Callback','filt_progr');
Текст программы, вызываемой по кнопке «Filter» (П2):
global hAxes1 hAxes2 hAxes3 hEda hBtn
% вывод синусоиды
Fs=500;
F=50;
A=50;
tmax=0.5;
T=1/Fs;
t=0:T:tmax-T;
s=A*sin(2*pi*F*t);
axes(hAxes3);
plot(t,s);
grid minor;
% отфильтрованный
str=get(hEda,'String');
da=str2num(str);
y=fs50(s,Fs,da);
axes(hAxes2);
plot(t,y);
grid minor;
% компенсирующий
for i=1:length(s)
a(i)=s(i)-y(i);
end
axes(hAxes1);
plot(t,a);
grid minor;
П олученные графические окна:
Адаптивная фильтрация сетевой наводки в ЭКГ
Текст головной программы (П1):
clc
clear all
close all
global hAxes1 hAxes2 hAxes3 hEda hBtn
x0=400;
y0=200;
w0=700;
h0=500;
figure('Color',[1 1 1],'Position',[x0,y0,w0,h0])
x1=50;
y1=50;
dy=30;
w=450;
h=120;
hAxes1=axes('Units','pixels','Position',[x1,y1,w,h]);
hAxes2=axes('Units','pixels','Position',[x1,y1+h+dy,w,h]);
hAxes3=axes('Units','pixels','Position',[x1,y1+2*h+2*dy,w,h]);
x2=550;
y2=250;
w2=30;
h2=15;
hTxta=uicontrol('Style','text','String','da=',...
'Position',[x2,y2,w2,h2],'Backgroundcolor',[1 1 1]);
hEda=uicontrol('Style','edit','Position',[x2+w2,y2,w2,h2],...
'Backgroundcolor',[1 1 1],'HorizontalAlignment','left');
hBtn=uicontrol('Style','pushbutton','String','Filter',...
'Position',[x2,y2-30,w2,h2],'Callback','filt_progr2');
Текст программы, вызываемой по кнопке «Filter» (П2):
global hAxes1 hAxes2 hAxes3 hEda hBtn
% вывод сигнала
x=load('R5_01.txt');
Fs=250;
N=length(x);
tmax=N/Fs;
T=1/Fs;
t=0:T:tmax-T;
axes(hAxes3);
plot(t,x);
grid minor;
% отфильтрованный
str=get(hEda,'String');
da=str2num(str);
y=fs50(x,Fs,da);
axes(hAxes2);
plot(t,y);
grid minor;
% компенсирующий
for i=1:N
a(i)=x(i)-y(i);
end
axes(hAxes1);
plot(t,a);
grid minor;
П олученное графическое окно:
Выводы:
В ходе выполнения данной лабораторной работы был исследован адаптивный фильтр сетевой наводки 50 Гц. Была проведена фильтрация тестовой синусоиды с заданными параметрами, а также фильтрация сигнала ЭКГ. В ходе работы было создано графическое окно, содержащее графики сигнала, отфильтрованного и компенсированного сигналов.
Важнейшим параметром алгоритма является шаг адаптации da, значение которого определяет скорость настройки фильтра и качество фильтрации. Мы смогли убедиться в этом на практике, подбирая значения шага адаптации, при котором подавление помехи достигается за время, соответствующее заданному времени от длины фрагмента сигнала (25, 50, 75%). Чем больше значение da, тем скорее подавляется помеха.