exponenta event banner

signalDatastore

Хранилище данных для сбора сигналов

Описание

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

Создание

Описание

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

пример

sds = signalDatastore(location) создает хранилище данных сигнала на основе коллекции MAT-файлов в location.

пример

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

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

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

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

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

Файлы или папки, включенные в хранилище данных, указанные как путь или DsFileSet объект.

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

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

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

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

Когда location представляет собой папку, хранилище данных включает только поддерживаемые форматы файлов и игнорирует любой другой формат. Чтобы указать пользовательский список расширений файлов для включения в хранилище данных, см. раздел 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

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

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

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

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

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

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

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

Свойства

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

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

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

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

Данные файла

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

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

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

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

Пример: @customreader

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

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

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

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

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

    • Определить 'AlternateFileSystemRoots' в виде массива ячеек строковых векторов.

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

    • Либо укажите 'AlternateFileSystemRoots' как массив ячеек массива ячеек символьных векторов.

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

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

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

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

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

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

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

Пример: ["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});

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

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

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

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

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

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

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

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

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

Примечание

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

Данные в памяти и файлы

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

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

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

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

Значения времени выборки, указанные как положительный скаляр, вектор, duration скаляр или duration вектор.

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

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

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

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

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

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

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

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

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

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

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

Выходные данные read является массивом ячеек сигнальных данных, когда ReadSize > 1.

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

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

Примечание

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

Примеры

свернуть все

Создайте хранилище данных сигнала для итерации через элементы массива ячеек в памяти данных сигнала. Данные состоят из синусоидально модулированного линейного чирпа, вогнутого квадратичного чирпа и генератора, управляемого напряжением. Сигналы дискретизируются при 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);

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

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.

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

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

Создание и отображение хранилища данных сигнала, указывающего на указанную папку.

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

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

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

Создание хранилища данных сигнала, указывающего на .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

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

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

Установите ReadSize свойство для 2 для одновременного чтения данных из двух файлов. Каждый read возвращает массив ячеек, в котором первая ячейка содержит первую переменную первого считанного файла, а вторая ячейка содержит первую переменную из второго файла. В то время как хранилище данных содержит данные, отображаются имена переменных, считанных в каждой 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

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

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

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

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

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

Создайте хранилище данных сигнала, указывающее на указанную папку. Каждый файл содержит несколько переменных с различными именами. Скаляр в каждом файле представляет частоту выборки. Определите пользовательскую функцию чтения, которая считывает все переменные в файле как структуру и возвращает переменную в dataOut и информацию о переменных в infoOut. 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);

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

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.

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

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

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

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

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

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