Классификация сигналов ЭКГ в Simulink с помощью глубокого обучения

Этот пример показывает, как использовать вейвлет и нейронную сеть для глубокого обучения в модели Simulink(R) для классификации сигналов ECG. Этот пример использует предварительно обученную сверточную нейронную сеть из примера Classify Time Series Using Wavelet Analysis and Глубокое Обучение Wavelet Toolbox™, чтобы классифицировать сигналы ECG на основе изображений из CWT данных временных рядов. Для получения информации о обучении смотрите Классификация временных рядов с использованием Wavelet Analysis и Глубокое Обучение (Wavelet Toolbox).

Описание данных ЭКГ

Этот пример использует данные ЭКГ из базы данных PhysioNet. Он содержит данные трех групп людей:

  1. Люди с сердечной аритмией (ARR)

  2. Лица с застойным сердечным отказом (ХСН)

  3. Люди с нормальными синусовыми ритмами (NSR)

Он включает 96 записей от лиц с АРР, 30 записей от лиц с ХСН и 36 записей от лиц с СМП. The ecg_signals MAT-файл содержит тестовые данные ЭКГ в формате временных рядов. Классификатор изображений в этом примере различает ARR, CHF и NSR.

Алгоритмический рабочий процесс

Показан блок алгоритмического рабочего процесса модели Simulink.

Модель Simulink глубокого обучения ECG

Показана модель Simulink для классификации сигналов ECG. Когда модель запускается, Video Viewer блок отображает классифицированный сигнал ЭКГ.

open_system('ecg_dl_cwtMDL');

Подсистема предварительной обработки ЭКГ

The ECG Preprocessing подсистема содержит MATLAB Function блок, который выполняет CWT для получения скалограммы сигнала ECG и затем обрабатывает скалограмму для получения изображения. Он также содержит Image Classifier блок из Deep Learning Toolbox™, который загружает предварительно обученную сеть из trainedNet.mat и выполняет предсказание для классификации изображений на основе SqueezeNet глубокое обучение CNN.

open_system('ecg_dl_cwtMDL/ECG Preprocessing');

The ScalogramFromECG функциональный блок определяет функцию, вызываемую ecg_to_scalogram что:

  • Использует 65536 выборок данных ЭКГ двойной точности в качестве входных данных.

  • Создайте представление временной частоты из данных ECG путем применения преобразования Вейвлета.

  • Получите скалограмму из коэффициентов вейвлета.

  • Преобразовать скалограмму в изображение размера (227 227 3).

Сигнатура функции ecg_to_scalogram показан.

type ecg_to_scalogram
function ecg_image  = ecg_to_scalogram(ecg_signal)

% Copyright 2020 The MathWorks, Inc.

persistent jetdata;
if(isempty(jetdata))
    jetdata = colourmap(128,'single');
end
% Obtain wavelet coefficients from ECG signal
cfs = cwt_ecg(ecg_signal);  
% Obtain scalogram from wavelet coefficients
image = ind2rgb(im2uint8(rescale(cfs)),jetdata);
ecg_image = im2uint8(imresize(image,[227,227]));

end

Постобработка ЭКГ

The ECG Postprocessing Блок MATLAB function задает label_prob_image функция, которая находит метку для скалограммного изображения на основе наивысшего счета от счетов, опережаемой классификатором изображений. Он выводит скалограммное изображение с наложенной меткой и доверием.

type label_prob_image
function final_image = label_prob_image(ecg_image, scores, labels)

% Copyright 2020 The MathWorks, Inc.

scores = double(scores);
% Obtain maximum confidence 
[prob,index] = max(scores);
confidence = prob*100;
% Obtain label corresponding to maximum confidence
label = erase(char(labels(index)),'_label');
text = cell(2,1);
text{1} = ['Classification: ' label];
text{2} = ['Confidence: ' sprintf('%0.2f',confidence) '%'];
position = [135 20 0 0; 130 40 0 0];
final_image = insertObjectAnnotation(ecg_image,'rectangle',position,text,'TextBoxOpacity',0.9,'FontSize',9);

end

Запуск симуляции

Чтобы проверить алгоритм и отобразить метки и оценку достоверности тестового сигнала ЭКГ, загруженного в рабочую область, запустите симуляцию.

set_param('ecg_dl_cwtMDL', 'SimulationMode', 'Normal');
sim('ecg_dl_cwtMDL');

Генерация кода

С помощью GPU Coder™ можно ускорить выполнение модели на графических процессорах NVIDIA ® и сгенерировать код CUDA ® для модели. Для получения дополнительной информации смотрите Генерацию кода для модели Глубокое Обучение Simulink для классификации сигналов ECG (GPU Coder).

Очистка

Закройте модель Simulink.

close_system('ecg_dl_cwtMDL/ECG Preprocessing');
close_system('ecg_dl_cwtMDL');