edfwrite

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

    Описание

    Создайте edfwrite объект для записи или изменения файла European Data Format (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] Chan, Adrian D.C., and Geoffrey C. Green. 2007. Myoelectric Control Development Toolbox (неопр.) (недоступная ссылка). Документ, представленный на 30-й конференции Канадского общества медицинской и биологической инженерии, Торонто, Канада, 2007 год.

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

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

    См. также

    Приложения

    Объекты

    Функции

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

    Введенный в R2021a