Загрузите базу данных ЭКГ MIT-BIH на MATLAB

Вопрос:Я работаю над обработкой сигналов ЭКГ с использованием нейронной сети, которая включает распознавание образов. Поскольку мне нужно собрать все данные из Matlab, чтобы использовать их в качестве тестового сигнала, мне трудно загрузить его в Matlab. Я использую базу данных аритмии MIT здесь. Сигнал необходимо индексировать и хранить в виде структуры данных в формате Matlab. В

Вопрос:

Я работаю над обработкой сигналов ЭКГ с использованием нейронной сети, которая включает распознавание образов.
Поскольку мне нужно собрать все данные из Matlab, чтобы использовать их в качестве тестового сигнала, мне трудно загрузить его в Matlab.
Я использую базу данных аритмии MIT здесь.

Сигнал необходимо индексировать и хранить в виде структуры данных в формате Matlab.
В настоящее время сигнал находится в формате .atr и .dat.

Как вы можете загрузить базу данных MIT-BIH Arrhythmia на Matlab?

Лучший ответ:

Вы можете использовать physionet ATM, чтобы получить файлы .mat, с которыми легче работать.

Во входной части выберите нужные провода, длину, базу данных и образец.

В панели инструментов выберите export as .mat:

Затем загрузите файл .mat,

Чтобы открыть файл в MATLAB, вот пример кода:

load (‘100m.mat’) % the signal will be loaded to «val» matrix val = (val — 1024)/200; % you have to remove «base» and «gain» ECGsignal = val(1,1:1000); % select the lead (Lead I) Fs = 360; % sampling frequecy t = (0:length(ECGsignal)-1)/Fs; % time plot(t,ECGsignal)

и вы получите

Однако, если бы вы читали файлы аннотаций для аритмий или QRS-комплексов, это было бы еще одной проблемой.

Edit

База и усиление поступают из информационного файла (второе изображение).
Этот файл предоставляет вам различную информацию о сигнале ЭКГ.

В последнем предложении говорится: “Чтобы преобразовать из необработанных единиц в физические единицы, показанные выше, вычтите” базу “и разделите на” коэффициент усиления “.

Ответ №1

Вам нужна программа rddata.m (MATLab script) из этого веб-сайта. Здесь вы можете найти здесь. rddata.m, вероятно, единственная программа, которая вам понадобится для чтения сигналов ecg. Я помню, что я использовал эту программу и базу данных не так давно.

Ответ №2

Итак, я прочитал этот ответ 3 месяца назад и удалил базу и получил. Оказывается, я полностью переместил свои R-пики в разные стороны, забив все мои результаты. Хотя я не уверен, что делать это необходимо в Matlab или нет, НЕ ДЕЛАЙТЕ ЭТО, если вы не препроцитируете свой сигнал в Matlab. Я был preprocessing мой сигнал в python, и все, что я сделал для normalizae это было

val = val/2047 % (2047 is the max volt range of signals)

и использовали фильтры масляного фильтра для удаления артефактов (диапазон 0.5hz-45hz)

КОРРЕКЦИЯ

Вырезание я выбрано от 0,5 до 45 не 5-15, как я ранее сообщал. Эта отсечка сохраняет QRS для различных аритмий, не добавляя слишком много шума.

# baseline correction and bandpass filter of signals lowpass = scipy.signal.butter(1, highfreq/(rate/2.0), ‘low’) highpass = scipy.signal.butter(1, lowfreq/(rate/2.0), ‘high’) # TODO: Could use an actual bandpass filter ecg_low = scipy.signal.filtfilt(*lowpass, x=ecg) ecg_band = scipy.signal.filtfilt(*highpass, x=ecg_low) Ответ №3

Используйте ATM, чтобы извлечь .mat, как описано Kamtal ( теперь известный Рашид).
Однако обратите внимание, что для просмотра файла .info в некоторых случаях вам нужно щелкнуть стрелку

После того, как я переместил это вперед разработчикам здесь, мы получили улучшения в документации здесь в разделе 4.

Если они все целые числа в диапазоне [-2 ^ N, 2 ^ N-1] или [0, 2 ^ N], они, вероятно, являются цифровыми. Сравните значения, чтобы узнать, находятся ли они в ожидаемом физиологическом диапазоне сигнала, который вы анализируете. Например, если в заголовке указано, что сигнал является ЭКГ, хранящимся в миливольтах, который обычно имеет амплитуду около 2 мВ, сигнал целых чисел в диапазоне от -32000 до 32000, вероятно, не дает вам физическую ЭКГ в milivolts…

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

Содержание

  1. 0-9-10 wfdb – физические единицы
  2. < 0-9-9 wfdb – аналоговые/цифровые устройства, поэтому база и коэффициент усиления по умолчанию; теперь только rawUnits=3,4 для аналоговых блоков
  3. Сравнение неправильных ответов здесь! [Устаревшие]

0-9-10 wfdb – физические единицы

Мы говорим, что сигналы находятся в “физических единицах”, когда значения используются для представления фактических значений реальной жизни как можно ближе, хотя очевидно, что все на компьютере является цифровым и дискретным, а не аналоговым и непрерывным. Это включает в себя наши драгоценные 64-битные значения двойной точности с плавающей запятой, но это так близко, что мы можем получить и уже очень близко к фактическим физическим значениям, поэтому мы называем их “физическими”.

Например, если 15-битовый сигнал собран через устройство захвата, Physionet, скорее всего, сохранит его как 16-битный сигнал. Каждый 16-разрядный блок сохраняет целое значение между -2 ^ 15 и 2 ^ 15-1, и с использованием коэффициента усиления и смещения, указанного в заголовке для каждого канала, исходный физический сигнал может быть отображен для обработки.

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

% rawUnits % A 1×1 integer (default: 0). Returns tm and signal as vectors % according to the following values: % rawUnits=0 — Uses Java Native Interface to directly fetch data, returning signal in physical units with double precision. % rawUnits=1 -returns tm ( millisecond precision only! ) and signal in physical units with 64 bit (double) floating point precision % rawUnits=2 -returns tm ( millisecond precision only! ) and signal in physical units with 32 bit (single) floating point precision % rawUnits=3 -returns both tm and signal as 16 bit integers (short). Use Fs to convert tm to seconds. % rawUnits=4 -returns both tm and signal as 64 bit integers (long). Use Fs to convert tm to seconds.

rawUnits=1, rawUnits=2 используют также физические единицы.
rawUnits=3, rawUnits=4 снова использовать аналого-цифровые единицы, где вам нужно удалить базу и усилить.
Если вы используете rawUnits=1 или rawUnits=2, вам нужно настроить для базы и усиления, где base = 1024 и gain = 200

# Kamtal method in considering base and gain load(‘201m.mat’); val = (val — 1024)/200; % you have to remove «base» and «gain» ECGsignal = val(1,16:950); % select the lead (Lead I)

Смотрите файл .info ниже, где вы можете получить base и gain. Существует также единица mV, которая предполагает, что значения должны быть близки к 2 после операций с базовым коэффициентом усиления.

< 0-9-9 wfdb – аналоговые/цифровые устройства, поэтому база и коэффициент усиления по умолчанию; теперь только rawUnits=3,4 для аналоговых блоков

После выбора ATM вы сможете увидеть список, в котором вы можете выбрать файл .info после экспорта, как описано в ответе Kamtal.
Файл .info указывает, чтобы перед использованием использовать так называемую базу и коэффициент усиления.

Source: record mitdb/201 Start: [00:02:10.000] val has 2 rows (signals) and 3600 columns (samples/signal) Duration: 0:10 Sampling frequency: 360 Hz Sampling interval: 0.002777777778 sec Row Signal Gain Base Units 1 MLII 200 1024 mV 2 V1 200 1024 mV To convert from raw units to the physical units shown above, subtract ‘base’ and divide by ‘gain’.

Сравнение неправильных ответов здесь! [Устаревшие]

Калмал (теперь называемый Рашидом) отвечает о старой системе wfdb, которая использовала цифровые устройства без удаления базы и усиления

# Kamtal method in considering base and gain load(‘201m.mat’); val = (val — 1024)/200; % you have to remove «base» and «gain» ECGsignal = val(1,16:950); % select the lead (Lead I) # Method without considering base and gain load(‘201m.mat’); ECGsignal2 = val(1,16:950); # imshow(imoverlay(ECGsignal, ECGsignal2, uint8([255,0,0])))

и вы получите разницу между моим методом и его методом

Ответ №4

Существует учебник по использованию Matlab для чтения данных. учебник для пользователя Matlab

  • установите “WFDB Toolbox для Matlab” по ссылке выше. Добавьте папку инструментария в путь в Matlab.

  • Загрузите сигнал ЭКГ. Обязательно загрузите ‘.atr’, ‘.dat’ and ‘.hea’ вместе для сигнала, с которым вы должны иметь дело.

  • Команда в Matlab выглядит следующим образом:

    [tm,signal,Fs]=rdsamp( filename , 1 ) ;
    [ann,type]=rdann( filename , ‘atr’ ) ;

    Примечание: для сигнала “101” его имя равно “101”. И вы можете проверить подробную информацию о rdsamp и rdann из учебника.

Ответ №5

просто используйте его

A=input(‘Enter Variable: ‘,’s’); load(A); a=(val(1,:)); b=fir1(100,[0.1,0.25],’stop’); y2=filter(b,1,a); figure; plot(y2);

Оцените статью
Добавить комментарий