Считайте данные из 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.SignalLabels
ans = 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.NumDataRecords
nrec = 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® path | Задайте имя файла в Пример:
|
Файл в папке | Если файл не находится в текущей папке или в папке на пути 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'
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.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.