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

Обзор

В этом примере показано, как исследовать и тестировать проекты с фиксированной точкой, распределяя тесты между многими компьютерами параллельно. В примере используется parfor цикл, чтобы проверить точность алгоритма QRS детектора. Для выполнения параллельных симуляций требуется лицензия Parallel Computing Toolbox™.

Setup

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

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-Loops для исследования проекта

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

Этот скрипт настраивает тестируемую систему и инициализирует массивы, которые будут содержать результаты за пределами parfor-цикл. Затем он использует цикл parfor, чтобы проверить каждую запись параллельно. The 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 загрузка и сохранение необходимых данных. Для получения дополнительной информации об ограничениях смотрите Parallel for-Loops (parfor) (Parallel Computing Toolbox).

Описание тестируемой системы

Тестируемая система в этом примере проверяет простой детектор QRS, который измеряет временным различием между обнаружениями QRS для вычисления частоты сердечных сокращений. The test_heart_rate_detector_in_parallel скрипт передает записи ЭКГ в алгоритм обнаружения.

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

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

      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
Следующий график является примером, когда алгоритм детектора идентифицирует ложные срабатывания из-за шума в записи.

Примечание

  • Все записи ЭКГ, используемые в этом примере, измеряли на любительском оборудовании.

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

  • Аннотации на этих записях врачами не проверялись.

Ссылки

[1] Patrick S. Hamilton, Open Source ECG Analysis Software (OSEA), E.P. Limited, Somerville, MA, http://www.eplimited.com, 2002.

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

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

[4] Джордж Б. Муди, «Оценка анализаторов ЭКГ», WaveForm DataBase Applications Guide, Harvard-MIT Division of Health Sciences and Technology, Cambridge, MA, WFDB10.5.23, 13 марта 2014.

[5] Ida Laila binti Ahmad, Masnani binti Mohamed, Norul Ain binti Ab Ghani, «Разработка концептуального демонстратора для комплексного обнаружения QRS с использованием комбинированных алгоритмов», 2012

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