В этом примере показано, как использовать вейвлет-преобразования и сеть глубокого обучения в модели Simulink (R) для классификации сигналов ЭКГ. В этом примере используется предварительно обученная сверточная нейронная сеть из временного ряда Classify Using Vavelet Analysis and Deep Learning примера вейвлет- Toolbox™ для классификации сигналов ЭКГ на основе изображений из CWT данных временного ряда. Сведения об обучении см. в разделе Классификация временных рядов с использованием вейвлет-анализа и глубокого обучения (инструментарий вейвлет).
В этом примере используются данные ЭКГ из базы данных PhysioNet. Он содержит данные от трех групп людей:
Лица с сердечной аритмией (ARR)
Лица с застойной сердечной недостаточностью (CHF)
Лица с нормальными синусовыми ритмами (СМП)
Она включает 96 записей от лиц с ARR, 30 записей от лиц с CHF и 36 записей от лиц с NSR. ecg_signals MAT-файл содержит тестовые данные ЭКГ в формате временных рядов. Классификатор изображения в этом примере различает ARR, CHF и NSR.
Показана блок-схема алгоритмического рабочего процесса модели Simulink.

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

ECG Preprocessing подсистема содержит MATLAB Function блок, который выполняет CWT для получения скалограммы сигнала ЭКГ, а затем обрабатывает скалограмму для получения изображения. Он также содержит Image Classifier блок из Toolbox™ глубокого обучения, который загружает предварительно подготовленную сеть из trainedNet.mat и выполняет прогнозирование для классификации изображений на основе глубокого обучения SqueeeNet CNN.
open_system('ecg_dl_cwtMDL/ECG Preprocessing');

ScalogramFromECG функциональный блок определяет функцию, называемую ecg_to_scalogram что:
Использует 65536 выборок данных ЭКГ с двойной точностью в качестве входных данных.
Создайте представление временной частоты из данных ЭКГ, применив вейвлет-преобразование.
Получение скалограммы из вейвлет-коэффициентов.
Преобразуйте скалограмму в изображение размера (227-by-227-by-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
ECG Postprocessing Функциональный блок MATLAB определяет 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');

С помощью графического процессора Coder™ можно ускорить выполнение модели на графических процессорах NVIDIA ® и создать код CUDA ® для модели. Дополнительные сведения см. в документе Создание кода для модели симулятора глубокого обучения для классификации сигналов ЭКГ (кодер графического процессора).
Закройте модель Simulink.
close_system('ecg_dl_cwtMDL/ECG Preprocessing'); close_system('ecg_dl_cwtMDL');