Считайте данные из файла 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® путь | Укажите имя файла в Пример:
'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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.