Считайте данные из файла 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® путь | Укажите имя файла в Пример:
'data.edf' |
Файл в папке | Если файл находится не в текущей папке или в папке на пути MATLAB, задайте полное или относительное имя пути. Пример:
'C:\myFolder\data.edf' Пример:
'myDir\myFile.ext' |
Примечание
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: высота (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
как timetables с временами строк, соответствующими шагам расчета сигнала.
Типы данных: 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] Кемп, Боб и Иисус Оливан. European Data Format 'plus' (EDF +), стандартный формат EDF для обмена физиологическими данными. Клиническая нейрофизиология 114, № 9 (2003): 1755-1761. https://doi.org/10.1016/S1388-2457 (03) 00123-8.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.