signalDatastore

Datastore для набора сигналов

Описание

Использование signalDatastore объект для управления набором данных в памяти или файлов сигналов, где каждый отдельный файл помещается в памяти, но весь набор не обязательно помещается.

Создание

Описание

sds = signalDatastore(data) создает сигнальный datastore с входными сигналами в памяти, содержащимися в data.

пример

sds = signalDatastore(location) создает сигнальный datastore на основе набора MAT-файлов в location.

пример

sds = signalDatastore(___,Name,Value) задает дополнительные свойства, используя один или несколько аргументы пары "имя-значение".

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

расширить все

Входные данные в памяти, заданные как векторы, матрицы, расписания или массивы ячеек. Каждый элемент data является представителем, который выводится datastore при каждом вызове read.

Пример: {randn(100,1); randn(120,3); randn(135,2); randn(100,1)}

Файлы или папки, включенные в datastore, задаются в виде пути или DsFileSet объект.

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

    • Локальные файлы или папки - Задайте location как локальный путь к файлам или папкам. Если файлов нет в текущей папке, то локальный путь должен задавать полные или относительные пути. Файлы в подпапках указанной папки не включаются автоматически в datastore. При указании локального пути можно использовать символ подстановки (*). Этот символ указывает, что datastore включает все соответствующие файлы или все файлы в соответствующих папках.

    • Удаленные файлы или папки - Задайте location чтобы быть полными путями к файлам или папкам в качестве единого указателя ресурса (URL) формы hdfs:///path_to_file. Для получения дополнительной информации см. раздел Работа с удаленными данными.

  • DsFileSet объект - Вы также можете задать location как DsFileSet объект. Для получения дополнительной информации смотрите matlab.io.datastore.DsFileSet.

Когда location представляет папку, datastore включает только поддерживаемые форматы файлов и игнорирует любой другой формат. Чтобы задать пользовательский список расширений файлов, которые будут включены в ваш datastore, смотрите FileExtensions свойство.

Пример: 'whale.mat'

Пример: '../dir/data/signal.mat'

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

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: sds = signalDatastore('C:\dir\signaldata','FileExtensions','.csv')

Флаг включения подпапки, заданный как true или false. Задайте true включать все файлы и подпапки в каждую папку или false для включения только файлов в каждую папку.

Пример: 'IncludeSubfolders',true

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

Расширения файла сигнала, заданные как строковый скаляр, строковые массивы, вектор символов или массив ячеек векторов символов.

Если функция read не задана, 'FileExtensions' можно задать только в .mat для чтения MAT-файлов или для .csv для чтения файлов CSV. Если 'FileExtensions' опущен, по умолчанию равен .mat если в указанном местоположении есть MAT-файлы, в противном случае 'FileExtensions' по умолчанию является .csv при наличии файлов CSV в указанном расположении.

Если ни MAT-файлы, ни файлы CSV не присутствуют, signalDatastore errors out со значением по умолчанию read функция. Задайте пользовательский объект read использование ReadFcn функция для чтения файлов любого другого типа.

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

Пример: 'FileExtensions','.csv'

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

В дополнение к этим аргументам имя-значение, вы также можете задать любое из свойств на этой странице как пары "имя-значение", кроме Files свойство.

Свойства

расширить все

Данные в памяти

Имена представителей, заданные как массив ячеек. Длина имен представителей для входных данных должна равняться длине data массив ячеек. Это свойство применяется только, когда datastore содержит данные в памяти.

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

Файловые данные

Файлы, включенные в datastore, задаются как массив ячеек из строк или векторов символов. Каждый вектор символов в массиве ячеек представляет полный путь к файлу. The location аргумент в signalDatastore определяет Files при создании datastore. Это свойство применяется только, когда datastore содержит данные файла.

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

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

function data = customreader(filename)
...
end
function [data,info] = customreader(filename)
...
end
Данные сигнала выводятся в data переменная. The info переменная должна быть пользовательской структурой, содержащей пользовательскую информацию из файла. Если вам нужны дополнительные аргументы, можно включить их после filename аргумент. signalDatastore добавляется к info структурировать поле, содержащее имя файла.

Пример: @customreader

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

Альтернативные корневые пути файловой системы, заданные как разделенная разделенными запятой парами, состоящая из 'AlternateFileSystemRoots' и строковый вектор или массив ячеек. Использование 'AlternateFileSystemRoots' когда вы создаете datastore на локальной машине, но должны получить доступ и обработать данные на другой машине (возможно, другой операционной системы). Кроме того, при обработке данных с помощью Parallel Computing Toolbox™ и MATLAB® Parallel Server™, и данные хранятся на локальных машинах с копией данных, доступных на другой платформе облака или кластерных машинах, необходимо использовать 'AlternateFileSystemRoots' для связи корневых путей.

  • Чтобы связать набор корневых путей, эквивалентных друг другу, задайте 'AlternateFileSystemRoots' как строковый вектор. Для примера,

    ["Z:\datasets","/mynetwork/datasets"]

  • Чтобы связать несколько наборов корневых путей, эквивалентных datastore, задайте 'AlternateFileSystemRoots' как массив ячеек, содержащий несколько строк, где каждая строка представляет набор эквивалентных корневых путей. Задайте каждую строку в массиве ячеек как строковый вектор или массив ячеек из векторов символов. Для примера:

    • Задайте 'AlternateFileSystemRoots' как массив ячеек из строковых векторов.

      {["Z:\datasets", "/mynetwork/datasets"];...
       ["Y:\datasets", "/mynetwork2/datasets","S:\datasets"]}

    • Кроме того, задайте 'AlternateFileSystemRoots' как массив ячеек массива ячеек из векторов символов.

      {{'Z:\datasets','/mynetwork/datasets'};...
       {'Y:\datasets', '/mynetwork2/datasets','S:\datasets'}}

Значение 'AlternateFileSystemRoots' должны удовлетворять следующим условиям:

  • Содержит одну или несколько строк, где каждая строка задает набор эквивалентных корневых путей.

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

  • Корневые пути уникальны и не являются подпапками друг друга.

  • Содержит по крайней мере один корневой путь, указывающий на расположение файлов.

Для получения дополнительной информации смотрите Настройка Datastore для обработки на различных машинах или кластерах.

Пример: ["Z:\datasets","/mynetwork/datasets"]

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

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

  • Когда значение свойства является строковым скаляром, signalDatastore возвращает данные, содержащиеся в указанной переменной.

  • Когда значение свойства является строковым вектором, signalDatastore возвращает массив ячеек с данными, содержащимися в заданных переменных. В этом случае можно использовать ReadOutputOrientation свойство для задания ориентации выхода массива ячеек как столбец или строка.

Если это свойство не задано, signalDatastore считывает первую переменную в списке переменных каждого файла.

Примечание

Чтобы определить имя первой переменной в файле, signalDatastore выполните следующие шаги:

  • Для MAT-файлов:

    s = load(fileName);
    varNames = fieldnames(s);
    firstVar = s.(varNames{1});

  • Для файлов CSV:

    opts = detectImportOptions(fileName,'PreserveVariableNames',true);
    varNames = opts.VariableNames;
    firstVar = string(varNames{1});

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

Массив ячеек данных выходного сигнала, заданная как 'column' или 'row'. Это свойство задает, как ориентировать массив ячеек данных выходного сигнала после вызова на read функция, когда SignalVariableNames содержит более одного имени сигнала. ReadOutputOrientation не влияет, когда SignalVariableNames содержит только один элемент и не применяется, если SignalVariableNames не задан.

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

Пример: Ориентация массива выходных ячеек

В примере чтения нескольких переменных из файлов в Signal Datastore, data имеет выходную ориентацию по умолчанию и представляет собой массив столбцов 2 на 1:

    {1×4941 double}
    {1×4941 double}
Если вы задаете ReadOutputOrientation как 'row', затем data массив строк 1 на 2:
    {1×4941 double}    {1×4941 double}

Имя переменной, содержащей частоту дискретизации, заданное как строковый скаляр. Это свойство применяется только, когда datastore содержит данные файла.

Имя переменной, содержащей значение шага расчета, заданное как строковый скаляр. Это свойство применяется только, когда datastore содержит данные файла.

Имя переменной, содержащей вектор значений времени, заданное как строковый скаляр. Это свойство применяется только, когда datastore содержит данные файла.

Примечание

'SampleRateVariableName', 'SampleTimeVariableName', и 'TimeValuesVariableName' являются взаимоисключающими. Используйте эти свойства, когда ваши файлы содержат переменную, которая содержит временную информацию данных о сигнале. Если не указано, signalDatastore принимает, что данные сигнала не имеют информации о времени. Эти свойства недопустимы, если задано пользовательское read задана функция.

Входные и файловые данные

Значения скорости дискретизации, заданные как положительный действительный скаляр или вектор.

  • Установите значение SampleRate к скаляру, чтобы задать ту же частоту дискретизации для всех сигналов в signalDatastore.

  • Установите значение SampleRate вектор, чтобы задать разную частоту дискретизации для каждого сигнала в signalDatastore.

Количество элементов в векторе должно равняться количеству элементов в signalDatastore.

Шаги расчета значения, заданные как положительная скалярная величина, вектор, a duration скаляр, или duration вектор.

  • Установите значение SampleTime к скаляру, чтобы задать один и тот же шаг расчета для всех сигналов в signalDatastore.

  • Установите значение SampleTime вектор, чтобы задать разный шаг расчета для каждого сигнала в signalDatastore.

Количество элементов в векторе должно равняться количеству элементов в signalDatastore.

Значения времени, заданные как вектор, a duration вектор, матрица или массив ячеек.

  • Задайте TimeValues в число или duration вектор, чтобы задать одинаковые значения времени для всех сигналов в signalDatastore. Вектор должен иметь ту же длину, что и все сигналы в наборе.

  • Задайте TimeValues в число или duration матрица или массив ячеек, чтобы задать, что каждый сигнал signalDatastore имеет сигналы с одинаковыми временными значениями, но значения времени различаются от сигнала к сигналу.

    • Если TimeValues является матрицей, тогда количество столбцов равняется количеству представителей signalDatastore. Все сигналы в datastore должны иметь длину, равную количеству строк матрицы.

    • Если TimeValues является массивом ячеек, тогда количество векторов равняется количеству представителей signalDatastore. Все сигналы в представителя должны иметь длину, равную количеству элементов соответствующего вектора в массиве ячеек.

Максимальное количество файлов сигналов, возвращенных read, заданный как положительный действительный скаляр. Если вы задаете ReadSize свойство для n, такое что n > 1, каждый раз, когда вы вызываете read function, функция гласит:

  • Первая переменная первых файлов n, если sds содержит данные файла.

  • Первые < reservedrangesplaceholder1 > представители, если sds содержит данные в памяти.

Область выхода read - массив ячеек сигнальных данных при ReadSize > 1.

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

readСчитайте следующее последовательное наблюдение сигнала
readallСчитайте все сигналы от datastore
writeallЗапись datastore в файлы
previewСчитайте первое наблюдение сигнала от datastore для предварительного просмотра
shuffleShuffle-сигналы в datastore
subsetСоздайте datastore с подмножеством сигналов
partitionDatastore сигнала разбиения и возвратная секционированный фрагмент
numpartitionsОценка возврата для разумного количества разделов для параллельной обработки
resetСбросьте datastore в начальное состояние
progress Определите, сколько данных было считано
hasdataОпределите, доступны ли данные для чтения
transformПреобразуйте datastore
combineОбъедините данные из нескольких хранилищ данных
isPartitionableОпределите, является ли datastore разделяемым
isShuffleableОпределите, является ли datastore shuffleable

Примечание

isPartitionable и isShuffleable возврат true по умолчанию для signalDatastore. Можно проверить, является ли выход combine и transform являются разделяемыми или тасуемыми с помощью двух функций.

Примеры

свернуть все

Создайте сигнальный datastore, чтобы выполнить итерацию через элементы массива ячеек в памяти данных о сигнале. Данные состоят из синусоидально модулированного линейного щебета, вогнутого квадратичного щебета и управляемого напряжением генератора. Дискретизация сигналов осуществляется на частоте 3000 Гц.

fs = 3000;
t = 0:1/fs:3-1/fs;
data = {chirp(t,300,t(end),800).*exp(2j*pi*10*cos(2*pi*2*t)); ...
        2*chirp(t,200,t(end),1000,'quadratic',[],'concave'); ...
        vco(sin(2*pi*t),[0.1 0.4]*fs,fs)};
sds = signalDatastore(data,'SampleRate',fs);

В то время как datastore имеет данные, считайте каждое наблюдение из signal datastore и постройте график кратковременного преобразования Фурье.

plotID = 1;
while hasdata(sds)
    [dataOut,info] = read(sds);
    subplot(3,1,plotID)
    stft(dataOut,info.SampleRate)
    plotID = plotID + 1;
end

Figure contains 3 axes. Axes 1 with title Short-Time Fourier Transform contains an object of type image. Axes 2 with title Short-Time Fourier Transform contains an object of type image. Axes 3 with title Short-Time Fourier Transform contains an object of type image.

Укажите путь к выборочным сигналам, включенным в Signal Processing Toolbox™.

folder = fullfile(matlabroot,'examples','signal','data');

Создайте и отобразите сигнальный datastore, который указывает на указанную папку.

sds = signalDatastore(folder)
sds = 
  signalDatastore with properties:

                       Files:{
                             ' .../devel/bat/BR2021ad/build/matlab/examples/signal/data/EMGdata.mat';
                             ' .../devel/bat/BR2021ad/build/matlab/examples/signal/data/EMGindex.mat';
                             ' .../devel/bat/BR2021ad/build/matlab/examples/signal/data/HeartRates.mat'
                              ... and 44 more
                             }
                     Folders: {'/mathworks/devel/bat/BR2021ad/build/matlab/examples/signal/data'}
    AlternateFileSystemRoots: [0x0 string]
                    ReadSize: 1

Укажите путь к файлу для выборок сигнала, включенных в Signal Processing Toolbox™.

folder = fullfile(matlabroot,'examples','signal','data');

Создайте сигнальный datastore, который указывает на .csv файлы в указанной папке.

sds = signalDatastore(folder,'FileExtensions','.csv')
sds = 
  signalDatastore with properties:

                       Files:{
                             ' .../devel/bat/BR2021ad/build/matlab/examples/signal/data/tremor.csv'
                             }
                     Folders: {'/mathworks/devel/bat/BR2021ad/build/matlab/examples/signal/data'}
    AlternateFileSystemRoots: [0x0 string]
                    ReadSize: 1

Укажите путь к четырем файлам примера, включенным в Signal Processing Toolbox™.

folder = fullfile(matlabroot,'examples','signal','data', ...
         ["INR.mat","relatedsig.mat","spots_num.mat","voice.mat"]);    

Установите ReadSize свойство к 2 для чтения данных из двух файлов за раз. Каждый read возвращает массив ячеек, где первая камера содержит первую переменную первого считанного файла, а вторая камера содержит первую переменную из второго файла. Пока datastore имеет данные, отображайте имена переменных, считанных в каждом read.

sds = signalDatastore(folder,'ReadSize',2);
while hasdata(sds)
    [data,info] = read(sds);
    fprintf('Variable Name:\t%s\n',info.SignalVariableNames)
end
Variable Name:	Date
Variable Name:	s1
Variable Name:	year
Variable Name:	fs

Задайте путь к трем сигналам, включенным в Signal Processing Toolbox™.

  • The strong.mat файл содержит три переменные: her, him и fs.

  • The slogan.mat файл содержит три переменные: hotword, phrase и fs.

  • The Ring.mat файл содержит две переменные: y и F s.

fld = ["strong.mat","slogan.mat","Ring.mat"];
folder = fullfile(matlabroot,'examples','signal','data',fld);

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

function [dataOut,infoOut] =   MyCustomRead(filename)
    fText = importdata(filename);
    value = struct2cell(fText);
    dataOut = {};
    for i = 1:length(value)
        if isscalar(value{i}) == 1
            infoOut.SampleRate = value{i};
        else
            dataOut{end+1} = value{i};
        end
    end
end
sds = signalDatastore(folder,'ReadFcn',@MyCustomRead);

В то время как datastore имеет непрочитанные файлы, считайте из datastore и вычислите краткосрочные преобразования Фурье сигналов.

while hasdata(sds)
    [data,infoOut] = read(sds);
    fs = infoOut.SampleRate;
    figure
    for i = 1:length(data)
        if length(data)>1
        subplot(2,1,i)
        end
        stft(data{i},fs)   
    end
end

Figure contains 2 axes. Axes 1 with title Short-Time Fourier Transform contains an object of type image. Axes 2 with title Short-Time Fourier Transform contains an object of type image.

Figure contains 2 axes. Axes 1 with title Short-Time Fourier Transform contains an object of type image. Axes 2 with title Short-Time Fourier Transform contains an object of type image.

Figure contains an axes. The axes with title Short-Time Fourier Transform contains an object of type image.

Укажите путь к файлам примера, включенным в Signal Processing Toolbox™. Каждый файл содержит два сигнала и случайную частоту дискретизации fs от 3000 до 4000 Гц.

  • Первый сигнал, x1, является выпуклым квадратичным щебетом.

  • Второй сигнал, x2, является щебетом с синусоидально изменяющимся содержимым частоты.

folder = fullfile(matlabroot,'examples','signal','data','dataset');

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

sds = signalDatastore(folder,'SignalVariableNames',['x1';'x2'],'SampleRateVariableName','fs');

tiledlayout flow
while hasdata(sds) 
    [data,info] = read(sds);
    nexttile
    pspectrum(data{1},info.SampleRate,'spectrogram','TwoSided',true)
    nexttile
    pspectrum(data{2},info.SampleRate,'spectrogram','TwoSided',true)
end

Figure contains 4 axes. Axes 1 with title Fres = 40.9017 Hz, Tres = 62.754 ms contains an object of type image. Axes 2 with title Fres = 40.9017 Hz, Tres = 62.754 ms contains an object of type image. Axes 3 with title Fres = 40.9023 Hz, Tres = 62.753 ms contains an object of type image. Axes 4 with title Fres = 40.9023 Hz, Tres = 62.753 ms contains an object of type image.

Введенный в R2020a