exponenta event banner

edfwrite

Создание или изменение файла EDF или EDF +

    Описание

    Создание edfwrite объект для записи или изменения файла европейского формата данных (EDF) или EDF +.

    Создание

    Описание

    edfw = edfwrite(filename) создает edfwrite для существующего файла EDF или EDF +, указанного filename.

    edfw = edfwrite(filename,hdr,sigdata) создает edfwrite объект и новый файл EDF или EDF + с данными сигнала ,sigdata. Свойства файла задаются в структуре заголовка. hdr.

    edfw = edfwrite(filename,hdr,annotationslist) создает edfwrite объект и новый файл EDF или EDF + с аннотациями ,annotationslist.

    edfw = edfwrite(filename,hdr,sigdata,annotationslist) создает edfwrite и новый файл EDF или EDF + с данными сигнала и аннотациями.

    пример

    edfw = edfwrite(___,Name,Value) Задает свойства с помощью аргументов «имя-значение». Можно указать DataRecordTimes, AnnotationsEncoding, и InputSampleType.

    Входные аргументы

    развернуть все

    Имя файла EDF или EDF +, заданного как вектор символа или скаляр строки.

    В зависимости от расположения файла, filename может принимать одну из этих форм.

    Местоположение

    Форма

    Текущая папка или папка на пути MATLAB ®

    Укажите имя файла в filename.

    Пример: 'data.edf'

    Файл в папке

    Если файл находится не в текущей папке или в папке на пути MATLAB, укажите полный или относительный путь.

    Пример: 'C:\myFolder\data.edf'

    Пример: 'myDir\myFile.ext'

    Примечание

    edfwrite не поддерживает файлы EyeLink ® EDF.

    Типы данных: char | string

    Подробные данные заголовка, указанные как структура. Посмотрите edfheader для получения дополнительной информации.

    Типы данных: struct

    Данные сигнала, заданные как числовая матрица с одним или несколькими столбцами или массив ячеек числовых векторов.

    Типы данных: double | cell

    Аннотации, указанные как расписание, содержащее следующие переменные:

    • Onset - время, в которое произошла аннотация, выраженное в виде длительности, указывающей количество секунд, прошедших с момента начала файла. Использовать Onset для указания rowTimes в расписании.

    • Annotations - строка, содержащая текст аннотации.

    • Duration - скаляр длительности, указывающий длительность события, описанного аннотацией. Если в файле не указана продолжительность аннотации, эта переменная возвращается как NaN.

    Типы данных: table

    Свойства

    развернуть все

    Свойства файла

    Это свойство доступно только для чтения.

    Имя файла, возвращаемое как строковый скаляр.

    Пример: "ecg_20200411_120.edf"

    Типы данных: string

    Тип файла, возвращенный как "EDF" или "EDF+".

    Типы данных: string

    Это свойство доступно только для чтения.

    Дата последнего изменения, возвращенная в виде строкового скаляра с датой и временем последнего изменения файла.

    Пример: "11-Apr-2020 15:38:37"

    Это свойство доступно только для чтения.

    Размер файла в байтах, возвращаемый как целочисленный скаляр.

    Пример: 4040992

    Типы данных: double

    Свойства заголовка

    Это свойство доступно только для чтения.

    Версия формата данных, возвращенная как "0".

    Типы данных: string

    Это свойство доступно только для чтения.

    Детали идентификации пациента, возвращенные как строковый скаляр. Реквизиты идентификации пациента могут включать идентификатор пациента, пол или пол, дату рождения в 'dd-MMM-yyyy' формат и имя.

    Пример: "X F X 120 04-JUL-1982"

    Типы данных: string

    Это свойство доступно только для чтения.

    Запись идентификационных данных, возвращаемых в виде строкового скаляра. Идентификационные данные записи могут включать в себя дату и время ее начала, идентификатор техника, сделавшего запись, и идентификатор оборудования, сделавшего запись.

    Пример: "Startdate 04-JUL-1982 X X X"

    Типы данных: string

    Это свойство доступно только для чтения.

    Дата начала записи, возвращенная как строковый скаляр в 'dd.MM.yy' формат.

    Пример: "04.07.82"

    Типы данных: string

    Это свойство доступно только для чтения.

    Время начала записи, возвращенное как скаляр строки в 'HH.mm.ss' формат.

    Пример: "17.16.37"

    Типы данных: string

    Это свойство доступно только для чтения.

    Размер заголовка в байтах, возвращаемый как целочисленный скаляр. HeaderBytes задается значением (256 + NumSignals × 256) байт. Первые 256 байт соответствуют статическому заголовку и требуются для всех файлов EDF и EDF +. Другие байты зависят от количества сигналов, присутствующих в записях данных.

    Пример: 2048

    Типы данных: double

    Это свойство доступно только для чтения.

    Информация о прерывании EDF +, возвращенная как"EDF+C" или "EDF+D" для файлов, совместимых с EDF +.

    • "EDF+C" - Запись является непрерывной: Нет прерываний и все записи данных являются непрерывными, так что время начала каждой записи данных совпадает с временем начала предыдущей записи плюс ее продолжительность.

    • "EDF+D" - Запись прерывается с перерывами между последовательными записями данных.

    Для файлов, не совместимых с EDF +, это свойство является пустой строкой ("").

    Типы данных: string

    Это свойство доступно только для чтения.

    Количество записей данных в файле, возвращаемое в виде целочисленного скаляра.

    Примечание

    Если filename не соответствует EDF, NumDataRecords может иметь значение -1 когда число записей данных неизвестно. Если filename соответствует EDF, NumDataRecords должно быть задано положительное целое число. Если filename имеет Reserved установлено в непустую строку и NumDataRecords установить в значение -1, edfinfo выдает ошибку.

    Типы данных: double

    Это свойство доступно только для чтения.

    Длительность каждой записи данных, возвращаемая как скаляр длительности.

    Типы данных: duration

    Это свойство доступно только для чтения.

    Количество сигналов в файле, возвращаемое в виде целочисленного скаляра.

    Типы данных: double

    Время начала каждой записи данных, возвращаемое в виде вектора длительности. DataRecordTimes должен быть указан для файла EDF + с прерывистыми временами начала записи. Вектор должен быть равен по длине NumDataRecords.

    Типы данных: duration

    Свойства сигнала

    Это свойство доступно только для чтения.

    Имена сигналов, возвращаемые как строковый вектор длины NumSignals.

    ["Thorax 1";"Abdomen 3"]

    Типы данных: string

    Это свойство доступно только для чтения.

    Сведения о преобразователе, возвращаемые как строковый вектор длины NumSignals. Каждый элемент TransducerTypes содержит сведения о преобразователе, используемом для получения соответствующего сигнала в SignalLabels.

    Пример: ["AgAgCl electrodes";"thermistor"]

    Типы данных: string

    Это свойство доступно только для чтения.

    Единицы данных сигнала, возвращаемые как строковый вектор длины NumSignals. Каждый элемент PhysicalDimensions содержит единицы измерения, используемые для выражения значений соответствующего сигнала в SignalLabels.

    Пример: ["uV";"mV"]

    Типы данных: string

    Это свойство доступно только для чтения.

    Минимальное физическое значение сигнала, возвращаемое в виде числового вектора длины NumSignals. Каждый элемент PhysicalMin содержит минимальное физическое значение соответствующего сигнала в SignalLabels.

    Типы данных: double

    Это свойство доступно только для чтения.

    Максимальное физическое значение сигнала, возвращаемое в виде числового вектора длины NumSignals. Каждый элемент PhysicalMax содержит максимальное физическое значение соответствующего сигнала в SignalLabels.

    Типы данных: double

    Это свойство доступно только для чтения.

    Минимальное цифровое значение сигнала, возвращаемое в виде числового вектора длины NumSignals. Каждый элемент DigitalMin содержит минимальное цифровое значение соответствующего сигнала в SignalLabels.

    Типы данных: double

    Это свойство доступно только для чтения.

    Максимальное цифровое значение сигнала, возвращаемое в виде числового вектора длины NumSignals. Каждый элемент DigitalMax содержит максимальное цифровое значение соответствующего сигнала в SignalLabels.

    Типы данных: double

    Это свойство доступно только для чтения.

    Единицы данных сигнала, возвращаемые как строковый вектор длины NumSignals. Каждый элемент Prefilter содержит подробную информацию о фильтрах, если таковые имеются, используемых для предварительной обработки соответствующего сигнала в SignalLabels.

    Пример: ["HP:10Hz LP:80Hz N:60Hz";"HP:0.1Hz LP:90Hz N:60Hz"]

    Типы данных: string

    Это свойство доступно только для чтения.

    Число выборок в сигнале, возвращаемое в виде числового вектора длины NumSignals. Каждый элемент NumSamples содержит количество выборок в соответствующем сигнале в SignalLabels.

    Типы данных: double

    Это свойство доступно только для чтения.

    Дополнительная информация о сигнале, возвращаемая в виде строкового вектора длины NumSignals. Каждый элемент SignalReserved содержит дополнительную информацию, если она имеется, о соответствующем сигнале в SignalLabels.

    Типы данных: string

    Входной тип выборки данных сигнала, возвращаемых как "digital" или "physical". Функция по умолчанию: "digital" и записывает данные сигнала в файл без цифрового масштабирования. Если 'InputSampleType' имеет значение "physical", то edfwrite применяет цифровое масштабирование к данным сигнала.

    Типы данных: string

    Свойства аннотации

    Это свойство доступно только для чтения.

    Аннотации, присутствующие в записях сигналов, возвращаемые в виде расписания, содержащего следующие переменные:

    • Onset - время, в которое произошла аннотация, выраженное в виде длительности, указывающей количество секунд, прошедших с момента начала файла.

    • Annotations - строка, содержащая текст аннотации.

    • Duration - скаляр длительности, указывающий длительность события, описанного аннотацией. Если в файле не указана продолжительность аннотации, эта переменная возвращается как NaN.

    Типы данных: table

    Формат кодирования, используемый для записи аннотаций в файл, возвращаемый как "US-ASCII", "UTF-8", или "LATIN1".

    Типы данных: string

    Функции объекта

    addAnnotationsДобавление аннотаций в файл EDF или EDF +
    addSignalsДобавление новых сигналов в файл EDF или EDF +
    deleteAnnotationsУдаление аннотаций из файла EDF или EDF +
    deleteSignalsУдаление сигналов из файла EDF или EDF +
    modifyAnnotationsИзменение аннотаций в файле EDF или EDF +
    modifyHeaderИзменение подробных данных заголовка файла EDF или EDF +
    modifySignalsИзменение сигналов в файле EDF или EDF +

    Примеры

    свернуть все

    Груз EMGdata.mat в рабочую область. Файл содержит восемь каналов данных поверхностной электромиографии (ЭМГ) [1], записанных с восьми мышц рук. Данные доступны на www.sce.carleton.ca/faculty/chan/index.php?page=matlab. Частота дискретизации составляет 1000 Гц. Постройте график сигналов.

    load EMGdata
    
    fs = 1000;
    t = 0:1/fs:(size(data,1)-1)/fs;
    stackedplot(t,data)

    Figure contains an object of type stackedplot.

    Пачки повышенной амплитуды сигнала соответствуют различным движениям предплечья, которые длятся по 3 секунды. EMGindex.mat содержит тип движения и начальный индекс (образец) каждого движения в двух переменных: motion и start_index. Типы движения:

    1. Открыть рукой

    2. Закрыть рукой

    3. Сгибание запястья

    4. Расширение запястья

    5. Супинация

    6. Пространа

    7. Отдых

    Загрузите данные в рабочую область.

    load EMGindex

    Создайте расписание аннотаций.

    1. Использовать Onset для указания времени строки. Onset содержит начальный индекс каждого движения в секундах.

    2. Annotations указывает типы движения в виде строкового массива.

    3. Duration определяет продолжительность каждого движения в секундах.

    Onset = seconds(start_index./fs);
    Annotations = string(motion);
    Duration = seconds(ones(length(Onset),1)*3);
    
    annotationslist = timetable(Onset,Annotations,Duration);

    Использовать edfheader для создания структуры заголовка для файла EDF + и установки свойств. Посмотритеedfheader для получения дополнительной информации.

    hdr = edfheader("EDF+");
    hdr.NumDataRecords = 1;
    hdr.DataRecordDuration = seconds(length(data(:,1))/fs);
    hdr.NumSignals = 8;
    hdr.SignalLabels = ["F1" "F2" "F3" "F4" "F5" "F6" "F7" "B1"];
    hdr.PhysicalDimensions = repelem("mV",8);
    hdr.PhysicalMin = min(data);
    hdr.PhysicalMax = max(data);
    hdr.DigitalMin = [-32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768];
    hdr.DigitalMax = [32767 32767 32767 32767 32767 32767 32767 32767];

    Запишите файл EDF +, содержащий структуру заголовка, данные сигнала и аннотации. Укажите тип входного образца какphysical. Файл сохраняется в текущей рабочей папке.

    edfw = edfwrite("armEMG.edf",hdr,data,annotationslist,'InputSampleType',"physical");

    Отображение информации о файле.

    edfinfo("armEMG.edf")
    ans = 
      edfinfo with properties:
    
                  Filename: "armEMG.edf"
               FileModDate: "21-Apr-2021 04:48:14"
                  FileSize: 4803836
                   Version: "0"
                   Patient: "1234567 F 21-Apr-2021 Patient_1"
                 Recording: "Startdate 21-Apr-2021 MW_1234567 MW_Inv_01 MW_Eq_01"
                 StartDate: "21.04.21"
                 StartTime: "04.48.13"
               HeaderBytes: 2560
                  Reserved: "EDF+C"
            NumDataRecords: 1
        DataRecordDuration: 300.03 sec
                NumSignals: 8
              SignalLabels: [8x1 string]
           TransducerTypes: [8x1 string]
        PhysicalDimensions: [8x1 string]
               PhysicalMin: [8x1 double]
               PhysicalMax: [8x1 double]
                DigitalMin: [8x1 double]
                DigitalMax: [8x1 double]
                 Prefilter: [8x1 string]
                NumSamples: [8x1 double]
            SignalReserved: [8x1 string]
               Annotations: [28x2 timetable]
    
    

    Для просмотра сигналов и аннотаций, хранящихся в файле, можно использовать EDF File Analyzer. Используйте Signal Separation возможность разделения сигналов для лучшей визуализации.

    Удалите файл EDF +. Прокомментируйте этот код, если вы хотите сохранить файл.

    delete armEMG.edf

    Совет

    • Чтобы создать файл EDF +, содержащий только аннотации, укажитеNumDataRecords и NumSignals как 0, DataRecordDuration как скаляр длительности со значением 0и все свойства сигнала как пустые.

    • Запустите приложение EDF File Analyzer для визуализации сигналов в файле EDF или EDF +.

    Ссылки

    [1] Чан, Адриан, округ Колумбия, и Джеффри С. Грин. 2007. «Набор средств разработки миоэлектрического управления». Документ, представленный на 30-й конференции Канадского общества медицинской и биологической инженерии, Торонто, Канада, 2007.

    [2] Кемп, Боб, Алпо Вярри, Агостиньо К. Роза, Ким Д. Нильсен и Джон Гейд. «Простой формат обмена оцифрованными полиграфическими записями». Электроэнцефалография и клиническая нейрофизиология 82, № 5 (май 1992): 391-93. https://doi.org/10.1016/0013-4694 (92) 90009-7.

    [3] Кемп, Боб и Иисус Оливан. «Европейский формат данных» плюс «(EDF +), аналогичный EDF стандартный формат для обмена физиологическими данными». Клиническая нейрофизиологическая 114, № 9 (2003): 1755-1761. https://doi.org/10.1016/S1388-2457 (03) 00123-8.

    См. также

    Приложения

    Объекты

    Функции

    Внешние веб-сайты

    Представлен в R2021a