
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра биотехнических систем
отчет
по лабораторной работе №5
по дисциплине «Методы обработки и анализа биомедицинских сигналов и данных»
Тема: АДАПТИВНЫЙ ФИЛЬТР СЕТЕВОЙ НАВОДКИ
Вариант 6
Студенты гр. 7501 |
|
Попадьина А.О. |
|
|
Исаков А.О. |
Преподаватель |
|
Калиниченко А. Н. |
Санкт-Петербург
2019
Цель работы: исследование адаптивного цифрового фильтра сетевой наводки 50 Гц.
Основные теоретические положения
Сетевая наводка с частотой 50 Гц, является одной из наиболее распространенных помех, характерных для биомедицинских сигналов. В настоящей работе предлагается исследовать адаптивный цифровой режекторный фильтр, предназначенный для устранения этой помехи.
Принцип действия данного фильтра основан на использовании известного тригонометрического соотношения:
.
Если интерпретировать величину θ как текущее время, а величину δ – как интервал между отсчетами дискретного сигнала, то можно преобразовать приведенное выше выражение к виду:
,
где ai1, ai и ai+1 – последовательные отсчеты синусоидального сигнала, а C = 2 cos δ – константа. Другими словами, эта формула позволяет предсказать очередное значение синусоиды (ai+1) по двум предыдущим (ai–1 и ai).
Алгоритм адаптивной фильтрации, постоянно анализируя сигнал, постепенно настраивается на имеющуюся в нем синусоидальную составляющую и вычитает ее из сигнала. Одним из важнейших параметров алгоритма является шаг адаптации, определяющий скорость настройки фильтра и качество фильтрации.
Практическая часть
Исходные данные:
Вариант |
Fd, Гц |
A |
tmax, c |
Имя файла |
7 |
360 |
12 |
0,9 |
R5_07.txt |
Задание 1: программа, реализующая алгоритм адаптивной фильтрации, исследование работы алгоритма на тестовом сигнале
1) Адаптивная фильтрация fs50
Код программы:
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
end
2) Главная программа
Код программы:
%тестовый сигнал
clc;
clear all;
close all;
Fs=360;
A=12;
tmax=0.9;
F=50;
T=1/Fs;
t=0:T:tmax-T;
global hAxes1 hAxes2 hAxes3 hEda
x=load('R5_07.txt');
x0=300;
y0=20;
w0=900;
h0=700;
x1=50;
y1=500;
w1=600;
h1=150;
dy=50;
w2=20;
h2=17;
w3=100;
figure('Color',[1 1 1],'Position',[x0,y0,w0,h0]);
hAxes1=axes('Units','pixels','Position',[x1,y1,w1,h1]);
hTxta=uicontrol('Style','text','String','Исходный сигнал','Position',[x1,y1+h1,w3,h2],'BackgroundColor',[1 1 1]);
hAxes2=axes('Units','pixels','Position',[x1,y1-dy-h1,w1,h1]);
hTxta=uicontrol('Style','text','String','Отфильтрованный сигнал','Position',[x1,y1-dy,w3,h2],'BackgroundColor',[1 1 1]);
hAxes3=axes('Units','pixels','Position',[x1,y1-2*dy-2*h1,w1,h1]);
hTxta=uicontrol('Style','text','String','Компенсирующий сигнал','Position',[x1,y1-2*dy-h1,w3,h2],'BackgroundColor',[1 1 1]);
hTxta=uicontrol('Style','text','String','da=','Position',[x1+w1+dy,y1-h1,w2,h2],'BackgroundColor',[1 1 1]);
hEda=uicontrol('Style','edit','Position',[x1+w1+dy+w2,y1-h1,2*w2,h2],'BackgroundColor',[1 1 1],'HorizontalAlignment','left');
hBtn=uicontrol('Style','pushbutton','String','Filter','Position',[x1+w1+dy+w2,y1-h1-dy,2*w2,h2],'Callback','filter');
3) Фильтр
Код программы:
%тестовый
global hAxes1 hAxes2 hAxes3 hEda
%исходный
x=A*sin(2*pi*F*t);
axes(hAxes1);
plot(t,x);
grid minor;
str=get(hEda,'String');
da=str2num(str);
y=fs50(x,Fs,da);
%отфильтрованный
axes(hAxes2);
TT=0.9/(length(x));
time=0:TT:tmax-TT;
plot(time,y);
grid minor;
%компенсирующий
for i=1:length(x)
a(i)=x(i)-y(i);
end
axes(hAxes3);
TT=0.9/(length(x));
time=0:TT:tmax-TT;
plot(time,a);
grid minor;
Подобранные значения шага адаптации, при котором полное подавление помехи достигается за время, соответствующее:
-
25% от длины фрагмента сигнала – da=0.2, t=0,225c – Рис. 1.
Рис. 1. Работа программы при da=0.2
-
50% от длины фрагмента сигнала – da=0.097, t=0,45c – Рис. 2.
Рис. 2. Работа программы при da=0.097
-
75% от длины фрагмента сигнала – da=0.064, t=0,675c – Рис. 3.
Рис. 3. Работа программы при da=0.064
Задание 2: фильтрация фрагмента ЭКГ, содержащего сетевую наводку, подбор значения шага адаптации
1) Копия программы «Адаптивная фильтрация fs50» (см. Задание 1) для сигнала ЭКГ
Код программы:
%ЭКГ
clc;
clear all;
close all;
Fs=250;
global hAxes1 hAxes2 hAxes3 hEda
x=load('R5_07.txt');
x0=300;
y0=20;
w0=900;
h0=700;
x1=50;
y1=500;
w1=600;
h1=150;
dy=50;
w2=20;
h2=17;
w3=100;
figure('Color',[1 1 1],'Position',[x0,y0,w0,h0]);
hAxes1=axes('Units','pixels','Position',[x1,y1,w1,h1]);
hTxta=uicontrol('Style','text','String','Исходный сигнал','Position',[x1,y1+h1,w3,h2],'BackgroundColor',[1 1 1]);
hAxes2=axes('Units','pixels','Position',[x1,y1-dy-h1,w1,h1]);
hTxta=uicontrol('Style','text','String','Отфильтрованный сигнал','Position',[x1,y1-dy,w3,h2],'BackgroundColor',[1 1 1]);
hAxes3=axes('Units','pixels','Position',[x1,y1-2*dy-2*h1,w1,h1]);
hTxta=uicontrol('Style','text','String','Компенсирующий сигнал','Position',[x1,y1-2*dy-h1,w3,h2],'BackgroundColor',[1 1 1]);
hTxta=uicontrol('Style','text','String','da=','Position',[x1+w1+dy,y1-h1,w2,h2],'BackgroundColor',[1 1 1]);
hEda=uicontrol('Style','edit','Position',[x1+w1+dy+w2,y1-h1,2*w2,h2],'BackgroundColor',[1 1 1],'HorizontalAlignment','left');
hBtn=uicontrol('Style','pushbutton','String','Filter','Position',[x1+w1+dy+w2,y1-h1-dy,2*w2,h2],'Callback','filter_ekg');
2) Модернизированный вариант программы «Главная программа» (см. Задание 1) для сигнала ЭКГ
Код программы:
%ЭКГ
global hAxes1 hAxes2 hAxes3 hEda
T=1/Fs;
t=0:T:1-T;
%исходный
axes(hAxes1);
plot(t,x);
grid minor;
ylim([-120 120]);
str=get(hEda,'String');
da=str2num(str);
y=fs50(x,Fs,da);
%отфильтрованный
axes(hAxes2);
plot(t,y);
grid minor;
ylim([-120 120]);
%компенсирующий
for i=1:length(x)
a(i)=x(i)-y(i);
end
axes(hAxes3);
plot(t,a);
grid minor;
ylim([-120 120]);
Полученные в результате работы программ графики: Рис. 4:
Рис. 4. Полученные графики
Шаг адаптации da, при котором достигается полное подавление помехи, равен 2
Выводы:
-
Адаптивными называются фильтры, принцип действия которого основан на использовании известного тригонометрического соотношения:
.
Алгоритм адаптивной фильтрации, постоянно анализируя сигнал, постепенно настраивается на имеющуюся в нем синусоидальную составляющую и вычитает ее из сигнала.
-
АЧХ режекторного фильтра:
На большей части частотного диапазона коэффициент передачи фильтра примерно равен единице. При частотах, близких к 50 Гц, фильтр имеет резкий провал АЧХ (полосу задержки) шириной около 1 Гц. Такой вид АЧХ соответствует режекторному фильтру с частотой режекции 50 Гц.
-
Шаг адаптации – время адаптации фильтра к фильтрации сигнала.
-
Добротность режекторного фильтра
-
АЧХ гребенчатого фильтра, в отличие от режекторного, имеет вид:
-
При больших значениях Δa фильтр настраивается очень быстро, но заметно искажает полезный сигнал. С уменьшением Δa искажения сигнала становятся меньше, но растет время настройки. Эмпирически выведенное выражение V = 150 Δa характеризует зависимость от величины Δa скорости адаптации фильтра V, которая определяется как среднее изменение амплитуды помехи в процессе адаптации, измеренное в числе единиц диапазона АЦП, приходящихся на единицу времени.
-
а
-
Выражение, связывающее между собой сигналы y(i)=x(i)-a
-
Отсчеты выходного сигнала y(i)=x(i)-a
-
Чтобы данный адаптивный режекторный фильтр работал в США, нужно изменить частоту режекции на 60 Гц, получаем формулу C=2*cos(2*pi/(Fs/60));