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) Свойства наборов с помощью аргументов name-value. Можно задать DataRecordTimes, AnnotationsEncoding, и InputSampleType.

    Входные параметры

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

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

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

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

    Форма

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

    Задайте имя файла в 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

    Свойства

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

    File Properties

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

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

    Пример: "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

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

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

    Пример: "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 в рабочую область. Файл содержит восемь каналов поверхностной электромиографии (EMG) данные [1] зарегистрированный от восьми мышц рук. Данные доступны в www.sce.carleton.ca/faculty/chan/index.php? page=matlab. Частота дискретизации составляет 1 000 Гц. Постройте сигналы.

    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: "25-Aug-2021 09:09:29"
                  FileSize: 4803836
                   Version: "0"
                   Patient: "1234567 F 25-Aug-2021 Patient_1"
                 Recording: "Startdate 25-Aug-2021 MW_1234567 MW_Inv_01 MW_Eq_01"
                 StartDate: "25.08.21"
                 StartTime: "09.09.28"
               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-й Конференции канадской Medical & Biological Engineering Society, Торонто, Канада, 2007.

    [2] Грубая шерсть, Боб, Alpo Värri, Агостиньо К. Роза, Ким Д. Нильсен и Джон Гаде. “Простой Формат для Exchange Оцифрованных Полиграфических Записей”. Электроэнцефалография и Клиническая Нейрофизиология 82, № 5 (май 1992): 391–93. https://doi.org/10.1016/0013-4694 (92) 90009-7.

    [3] Грубая шерсть, Боб и Иисус Оливэн. "Европейский Формат данных 'плюс' (EDF +), EDF, Подобная Стандартный формат для Exchange Физиологических Данных". Клиническая Нейрофизиология 114, № 9 (2003): 1755–1761. https://doi.org/10.1016/S1388-2457 (03) 00123-8.

    Смотрите также

    Приложения

    Объекты

    Функции

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

    Введенный в R2021a