Исследование проекта фиксированной точки параллельно

Обзор

Этот пример показывает, как исследовать и протестировать проекты фиксированной точки путем распределения тестов на многих компьютерах параллельно. Пример использует цикл parfor, чтобы протестировать точность алгоритма детектора QRS.

Настройка

Чтобы запустить этот пример, скопируйте файлы в качестве примера в локальную рабочую директорию.

copyfile(fullfile(matlabroot,'help','toolbox','fixpoint', 'examples',...
'parallel_examples','heart_rate_detector'))

В вашей локальной рабочей директории откройтесь и выполнение тестовый файл, который запускает пример.

edit test_heart_rate_detector_in_parallel.m
test_heart_rate_detector_in_parallel

Используя параллельные циклы for для исследования проекта

Как стандартный for - цикл, parfor - цикл выполняет серию операторов в области значений значений. Используя команду parfor, можно настроить параллельный for - цикл в коде, чтобы исследовать проекты фиксированной точки путем распределения тестов на многих компьютерах. В цикле parfor итерации цикла выполняются параллельно, который может обеспечить лучшую производительность, чем стандартный for - циклы.

Этот скрипт настраивает систему под тестом и инициализирует массивы, которые будут содержать результаты за пределами parfor - цикл. Это затем использует цикл parfor, чтобы протестировать каждую запись параллельно. parfor - цикл загружает данные, запускает систему, затем классифицирует и сохраняет результаты параллельно. Когда parfor - концы цикла, скрипт отображает результаты. Для получения дополнительной информации о системе, протестированной в этом примере, см. Описание Системы Под Тестом.

%% Run test of records in database in parallel
record_names = {'ecg_01','ecg_02','ecg_03','ecg_04','ecg_05','ecg_06',...
    'ecg_07','ecg_08','ecg_09','ecg_10','ecg_11','ecg_12','ecg_13'};
 
%% Set up the system under test
data_type = 'fixedwrap';
T = heart_rate_detector_types(data_type);
[mex_function_name,Fs_target] = setup_heart_rate_detector(record_names,data_type,T);
 
%% Initialize array to contain results 
results_file_names = cell(size(record_names));
 
%% Test each record in the database in parallel
parfor record_number = 1:length(record_names);
    % Load data
    record_name = record_names{record_number};
    [ecg,tm,ann,Fs] = load_ecg_data(record_name,Fs_target);
    
    % Run system under test
    detector_outputs = run_heart_rate_detector(mex_function_name,ecg,T);
    
    % Classify results
    [qrs_struct,qrs_stats] = classify_qrs(ann, Fs, detector_outputs);
    
    % Save results
    results_file_names{record_number} = save_heart_rate_data(...
        mex_function_name,record_name,...
        data_type,ecg,tm,ann,Fs,...
        detector_outputs,...
        qrs_struct,qrs_stats);
 
end
 
%% Display results
display_ecg_results(record_names, results_file_names);

Поскольку итерации цикла должны быть абсолютно независимы друг от друга, вы не можете вызвать save и команды load непосредственно в parfor - цикл. Можно, однако, вызвать функции, которые вызывают эти команды. В этом примере функции load_ecg_data и save_heart_rate_data загружают и сохраняют необходимые данные. Для получения дополнительной информации об ограничениях смотрите Параллельные циклы for (parfor) (Parallel Computing Toolbox).

Описание системы под тестом

Система под тестом в этом примере тестирует простой детектор QRS, который измеряет разницу во времени между обнаружениями QRS, чтобы вычислить сердечный ритм. Скрипт test_heart_rate_detector_in_parallel передает записи ECG алгоритму обнаружения.

Следующий график является примером, когда алгоритм детектора правильно идентифицирует обнаружения QRS, чтобы вычислить heartbeat.

Алгоритм обнаружения упрощен для этого примера. Исследование графиков и результатов, которые отображены, когда выполнения в качестве примера показывает, что алгоритм не всегда очень точен.

      Record    #QRS      TP      FP      FN     DER      Se      +P
      ecg_01     253     195       1      58   23.32   77.08   99.49
      ecg_02     133     133      18       0   13.53  100.00   88.08
      ecg_03      94      94       1       0    1.06  100.00   98.95
      ecg_04      92      91       0       1    1.09   98.91  100.00
      ecg_05      93      91       1       2    3.23   97.85   98.91
      ecg_06     131     131      22       0   16.79  100.00   85.62
      ecg_07     174     173       2       0    1.15  100.00   98.86
      ecg_08     117     116      10       1    9.40   99.15   92.06
      ecg_09     137     137       1       0    0.73  100.00   99.28
      ecg_10      96      96       3       0    3.13  100.00   96.97
      ecg_11      73      73       1       0    1.37  100.00   98.65
      ecg_12     146     145      71       0   48.63  100.00   67.13
      ecg_13     144     144       5       0    3.47  100.00   96.64
      Totals    1683    1619     136      62   11.76   96.31   92.25


Legend:
   #QRS: Total number of QRS Complexes
   TP:   Number of true positive
   FP:   Number of false positive
   FN:   Number of false negative
   DER:  Detection error rate in percent
   Se:   Sensitivity in percent
   +P:   Positive prediction in percent
Следующий график является примером, когда алгоритм детектора идентифицирует ложные положительные стороны из-за шума в записи.

Примечание

  • Все записи ECG, используемые в этом примере, были измерены на оборудовании человека, увлеченного своим хобби.

    Можно использовать Физиосетевую базу данных записанных физиологических сигналов сделать подобный анализ самостоятельно.

  • Аннотации на эти записи не были проверены врачами.

Ссылки

[1] Патрик С. Гамильтон, аналитическое программное обеспечение ECG с открытым исходным кодом (OSEA), E.P. Ограниченный, Сомервилл, MA, http://www.eplimited.com, 2002.

[2] Гари Д Клиффорд, Франсиско Асуахе и Патрик Э. Макшарри. Передовые методы и инструменты для анализа данных ECG, дома Artech, 2006.

[3] Американский Национальный Стандарт ANSI/AAMI EC38:2007 Медицинское электрическое оборудование — Часть 2-47: Конкретные требования для безопасности, включая существенную производительность, амбулаторных электрокардиографических систем, Ассоциации для Продвижения Медицинского Инструментирования, 2008.

[4] Джордж Б. Муди, "оценивая ECG Анализаторы", приложения базы данных WaveForm ведут, деление MIT Гарварда медицинских наук и технологии, Кембриджа, MA, WFDB10.5.23, 13 марта 2014.

[5] Ида Лайла binti Ахмад, Masnani binti Мохамед, Norul Ain binti Аб Гани, "Разработка Демонстранта Концепции для Обнаружения Комплекса QRS с помощью Объединенных Алгоритмов", 2 012 IEEE Международная конференция EMBS по вопросам Биоинженерии и Наук, Лангкави, 17-го - 19-го декабря 2012.

[6] Р. Хэрикумэр, С.Н. Шивэпприя, "Анализ алгоритма обнаружения QRS для сердечных отклонений — анализ", международный журнал мягкого вычисления и разработки (IJSCE), ISSN: 2231–2307, объем 1, выпуск 5, ноябрь 2011.