Считывание данных из файла EDF/EDF +
считывает файл в расписание с дополнительными параметрами, заданными одним или несколькими аргументами пары имя-значение.data = edfread(filename,Name,Value)
[ также возвращает аннотации, присутствующие в записях данных.data,annotations] = edfread(___)
Считывание данных из EDF-файла example.edf в расписание. Файл содержит два сигнала, ECG и ECG2. Каждый сигнал содержит шесть записей данных, и каждая запись данных имеет длительность 10 секунд.
tt = edfread('example.edf')tt=6×2 timetable
Record Time ECG ECG2
___________ _______________ _______________
0 sec {1280x1 double} {1280x1 double}
10 sec {1280x1 double} {1280x1 double}
20 sec {1280x1 double} {1280x1 double}
30 sec {1280x1 double} {1280x1 double}
40 sec {1280x1 double} {1280x1 double}
50 sec {1280x1 double} {1280x1 double}
Создание edfinfo объект, содержащий информацию о example.edf. Убедитесь, что сигналы имеют ожидаемые имена. Извлеките частоты дискретизации сигналов с помощью свойств объекта DataRecordDuration и NumSamples.
info = edfinfo('example.edf');
info.SignalLabelsans = 2x1 string
"ECG"
"ECG2"
fs = info.NumSamples/seconds(info.DataRecordDuration)
fs = 2×1
128
128
Постройте график первой записи первого сигнала. Дополнительные сведения о доступе к данным в таблицах см. в разделе Доступ к данным в таблицах.
recnum = 1;
signum = 1;
t = (0:info.NumSamples(signum)-1)/fs(signum);
y = tt.(signum){recnum};
plot(t,y)
legend(strcat("Record ",int2str(recnum),", Signal ",info.SignalLabels(signum)))
hold onИзвлеките и постройте пятую запись второго сигнала.
recnum = 5;
signum = 2;
t = (0:info.NumSamples(signum)-1)/fs(signum);
y = tt.(signum){recnum};
plot(t,y, ...
'DisplayName',strcat("Record ",int2str(recnum),", Signal ",info.SignalLabels(signum)))
hold off
xlabel('t (seconds)')
Создание edfinfo объект для получения информации о EDF-файле example.edf. Извлеките количество записей и имена переменных, содержащихся в файле.
info = edfinfo('example.edf');
nrec = info.NumDataRecordsnrec = 6
vars = info.SignalLabels
vars = 2x1 string
"ECG"
"ECG2"
Считывание второй и пятой записей, соответствующих переменной ECG2. Возвращает сигналы в виде расписаний с временами строк, соответствующими временам выборки сигнала. Выразить информацию о времени как datetime массивы.
data = edfread('example.edf', ... 'SelectedDataRecords',[2 5],'SelectedSignals',"ECG2", ... 'DataRecordOutputType','timetable','TimeOutputType','datetime')
data=2×1 timetable
Record Time ECG2
____________________ __________________
10-Oct-2020 12:02:28 {1280x1 timetable}
10-Oct-2020 12:02:58 {1280x1 timetable}
Измените имя времени строки на "Date and Time" и имя переменной для "Electrocardiogram".
data.Properties.DimensionNames = ["Date and Time" "Variables"]; data.Properties.VariableNames = "Electrocardiogram"; data
data=2×1 timetable
Date and Time Electrocardiogram
____________________ __________________
10-Oct-2020 12:02:28 {1280x1 timetable}
10-Oct-2020 12:02:58 {1280x1 timetable}
filename - Имя файла EDF или EDF +Имя файла EDF или EDF +, заданного как вектор символа или скаляр строки.
В зависимости от расположения файла, filename может принимать одну из этих форм.
Местоположение | Форма |
|---|---|
| Текущая папка или папка на пути MATLAB ® | Укажите имя файла в Пример:
|
Файл в папке | Если файл находится не в текущей папке или в папке на пути MATLAB, укажите полный или относительный путь. Пример:
Пример:
|
Примечание
edfread не поддерживает файлы EyeLink ® EDF.
Типы данных: char | string
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'SelectedSignals',["Thorax" "Abdomen"],'SelectedDataRecords',[2 7],'TimeOutputType','datetime' инструктирует edfread для считывания второй и седьмой записей данных, соответствующих Thorax и Abdomen сигналы и возвращают временную информацию как datetime массивы.'SelectedSignals' - Наименования читаемых сигналовИмена считываемых сигналов, указанных как разделенная запятыми пара, состоящая из 'SelectedSignals' и строковый вектор или клеточный массив символьных векторов.
'SelectedSignals' должен быть подмножеством имен сигналов, содержащихся в файле. Чтобы получить имена всех сигналов в файле, создайте edfinfo объект и используйте SignalLabels собственность.
Если этот аргумент не указан, edfread считывает все сигналы в файле.
Пример: Оба ["Thorax 1" "Abdomen 3"] и {'Thorax 1' 'Abdomen 3'} определить Thorax 1 и Abdomen 3 в качестве сигналов для чтения из файла.
Типы данных: char | string
'SelectedDataRecords' - Индексы читаемых записей1:height(edfread(filename)) (по умолчанию) | вектор положительных целых чиселИндексы читаемых записей, указанные как разделенная запятыми пара, состоящая из 'SelectedDataRecords' и вектор положительных целых чисел. Целые числа в векторе должны быть уникальными и строго увеличивающимися.
'SelectedDataRecords' должен быть подмножеством записей данных, содержащихся в файле. Чтобы узнать, сколько записей в файле, создайте edfinfo объект и используйте NumDataRecords собственность. Либо прочтите весь файл и используйте функцию MATLAB. height.
Если этот аргумент не указан, edfread считывает все записи данных в файле.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
'DataRecordOutputType' - Тип вывода данных'vector' (по умолчанию) | 'timetable'Тип вывода данных, указанный как разделенная запятыми пара, состоящая из 'DataRecordOutputType' и либо 'vector' или 'timetable'.
'vector' - Вернуть сигналы в data в качестве векторов.
'timetable' - Вернуть сигналы в data в качестве расписаний с временами строк, соответствующими временам выборки сигнала.
Типы данных: char | string
'TimeOutputType' - Тип вывода времени'duration' (по умолчанию) | 'datetime'Тип выходного сигнала времени, указанный как разделенная запятыми пара, состоящая из 'TimeOutputType' и либо 'duration' или 'datetime'.
Типы данных: char | string
data - Выходные данныеВыходные данные, возвращаемые в виде расписания. Каждая строка data соответствует записи и каждой переменной data соответствует сигналу.
Если 'DataRecordOutputType' указывается как 'vector', сегмент сигнала для каждой записи данных возвращается в виде вектора.
Если 'DataRecordOutputType' указывается как 'timetable', сегмент сигнала для каждой записи данных возвращается в виде расписания с временами строк, соответствующими временам выборки сигнала.
Время каждой строки data содержит время начала соответствующей записи данных.
Если 'TimeOutputType' имеет значение 'duration'время начала каждой записи относительно времени начала записи файла.
Если 'TimeOutputType' имеет значение 'datetime', время начала каждой записи - абсолютное время начала.
annotations - Записи аннотацийЗапись аннотаций, возвращаемых в виде расписания. Расписание содержит следующие переменные:
Onset - время, в которое произошла аннотация. Тип данных Onset зависит от значения, указанного для 'TimeOutputType'.
Annotations - строка, содержащая текст аннотации.
Duration - скаляр длительности, указывающий длительность события, описанного аннотацией. Если в файле не указана продолжительность аннотации, эта переменная возвращается как NaN.
[1] Кемп, Боб, Алпо Вярри, Агостиньо К. Роза, Ким Д. Нильсен и Джон Гейд. «Простой формат обмена оцифрованными полиграфическими записями». Электроэнцефалография и клиническая нейрофизиология 82, № 5 (май 1992): 391-93. https://doi.org/10.1016/0013-4694 (92) 90009-7.
[2] Кемп, Боб и Иисус Оливан. «Европейский формат данных» плюс «(EDF +), аналогичный EDF стандартный формат для обмена физиологическими данными». Клиническая нейрофизиологическая 114, № 9 (2003): 1755-1761. https://doi.org/10.1016/S1388-2457 (03) 00123-8.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.