Считайте данные из 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 (edfreadFileName )) (значение по умолчанию) | вектор из положительных целых чиселИндексы записей, чтобы читать в виде разделенной запятой пары, состоящей из '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' — Time тип выхода'duration' (значение по умолчанию) | 'datetime'data — Выходные данныеВыходные данные, возвращенные как расписание. Каждая строка data соответствует записи и каждой переменной data соответствует сигналу.
Если 'DataRecordOutputType' задан как 'vector', сегмент сигнала для каждой записи данных возвращен как вектор.
Если 'DataRecordOutputType' задан как 'timetable', сегмент сигнала для каждой записи данных возвращен как расписание с временами строки, соответствующими, чтобы сигнализировать о шагах расчета.
Каждый раз строки data содержит время начала соответствующей записи данных.
Если 'TimeOutputType' установлен в 'duration', время начала каждой записи относительно времени начала записи файла.
Если 'TimeOutputType' установлен в 'datetime', время начала каждой записи является абсолютным временем начала.
annotations — Аннотации записиАннотации записи, возвращенные как расписание. Расписание содержит эти переменные:
Onset — Время, в которое произошла аннотация. Тип данных Onset зависит от значения, заданного для 'TimeOutputType'.
Annotations — Строка, которая содержит текст аннотации.
Duration — Скаляр длительности, который указывает на длительность события, описанного аннотацией. Если файл не задает длительность аннотации, эта переменная возвращена как NaN.
[1] Грубая шерсть, Боб, Alpo Värri, Агостиньо К. Роза, Ким Д. Нильсен и Джон Гаде. “Простой Формат для Exchange Оцифрованных Полиграфических Записей”. Электроэнцефалография и Клиническая Нейрофизиология 82, № 5 (май 1992): 391–93. https://doi.org/10.1016/0013-4694 (92) 90009-7.
[2] Грубая шерсть, Боб и Иисус Оливэн. "Европейский Формат данных 'плюс' (EDF +), EDF, Подобная Стандартный формат для Exchange Физиологических Данных". Клиническая Нейрофизиология 114, № 9 (2003): 1755–1761. https://doi.org/10.1016/S1388-2457 (03) 00123-8.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.