Скачиваний:
34
Добавлен:
08.04.2022
Размер:
3 Кб
Скачать
%Объявление функции
function Listbox()
global Haxes_2 Haxes_3 Haxes_5 Haxes_6 Hbtn Hlist t c EEG dy fname
r = get(Hlist,'Value')-1;
if r==0
    axes(Haxes_2)
    hold off
    for i=1:c
        plot(t, EEG(:,i)-i*dy);
        xlim([0,5]);
        title(fname)
        xlabel('t,c')
        ylabel('U, мкВ')
        hold on
    end
    cla(Haxes_3);
    cla(Haxes_5);
    cla(Haxes_6);
    return
else
    %Рассчет фильтра
    Fs=250;
    Fc=[1 4;4 8;8 13;14 30]; % Граничные частоты ритмов
    Ord=fix(4*Fs/(Fc(r,1)+3));    % Выбор порядка фильтра
    df1=Fc(r,1)/5;    % Первая (левая) частота среза АЧХ
    Fstop1 = Fc(r,1)-0.7*df1;    % Конец первой полосы задержки
    Fpass1 = Fc(r,1)+0.3*df1;    % Начало полосы пропускания
    df2=Fc(r,2)/5;    % Вторая (правая) частота среза АЧХ
    Fpass2 = Fc(r,2)-0.3*df2;    % Конец полосы пропускания
    Fstop2 = Fc(r,2)+0.7*df2;    % Начало второй полосы задержки
    Wstop1 = 1;    % Коэффициент АЧХ фильтра
    Wpass    = 1;    % Коэффициент АЧХ фильтра
    Wstop2 = 1;    % Коэффициент АЧХ фильтра
    b=firls(Ord, [0 Fstop1 Fpass1 Fpass2 Fstop2 Fs/2]/(Fs/2),...
        [0 0 1 1 0 0], [Wstop1 Wpass Wstop2]);    % Расчет фильтра
    %Построение в поле 5 амплитудно-частотную характеристику фильтра
    df=0.2;    % Шаг по частоте
    Nf=fix((Fs/2)/df);    % Число отсчетов для расчета АЧХ
    [h,w]=freqz(b,1,Nf);    % Расчет АЧХ
    Fmax=50;    % Максимальная частота АЧХ
    Nmax=fix(Fmax/df);    % Число отсчетов для вывода АЧХ
    axes(Haxes_5)    % Активизация поля 5
    plot(w(1:Nmax)/(2*pi)*Fs, abs(h(1:Nmax)))% Построение АЧХ
    title('АЧХ фильтра')
    xlabel('f,Гц')
    ylabel('|H(f)|')
    %Постройте в поле 6 импульсную характеристику фильтра
    axes(Haxes_6)    % Активизация поля 6
    stem(b,'.')    % Построение импульсной характеристики
    title('Импульсная характеристика')
    xlabel('n')
    ylabel('x(n)')
    %Выполните фильтрацию ЭЭГ
    EEG_F=filter(b,1,EEG);
    %Выполните компенсацию вносимой фильтром задержки:
    N=length(EEG_F(:,1));    % Число отсчётов ЭЭГ
    D=fix(Ord/2);    % Определение числа тактов задержки
    EEG_F(1:N-D,:)=EEG_F(D+1:N,:);    % Начальный участок
    for i=1:c
        EEG_F(N-D+1:N,i)=EEG_F(N,i);    % Компенсация задержки
    end
    %Очистите поле 2, заново выведите исходные ЭЭГ и на том же графике
    cla(Haxes_2);
    axes(Haxes_2)
    for i=1:c
        %plot(t, EEG(:,i)-i*dy,t,EEG_F(:,i)-i*dy,'Color','r');
        plot(t, EEG(:,i)-i*dy,'Color','b');
        hold on
        plot(t,EEG_F(:,i)-i*dy,'Color','r');
        xlim([0,5]);
        title(fname)
        xlabel('t,c')
        ylabel('U, мкВ')
    end
    
    Var(1,:)=var(EEG);    % Дисперсия исходной ЭЭГ
    Var(2,:)=var(EEG_F);    % Дисперсия фильтрованной ЭЭГ
    axes(Haxes_3);    % Активизация поля 3
    barh(Var','group');    % Построение столбиковой диаграммы
    title('Оценка дисперсии ЭЭГ до и после фильтрации')
    set(Haxes_3,'YDir','Reverse')    % Изменение порядка по вертикали
    
end
Соседние файлы в папке Лаба 12