signalDatastore

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

Описание

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

Создание

Описание

пример

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

пример

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

пример

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

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

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

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

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

Файлы или папки включены в datastore в виде FileSet объект, как пути к файлам, или как DsFileSet объект.

  • FileSet объект — можно задать location как FileSet объект. Определение местоположения как FileSet объект приводит к более быстрому времени создания для хранилищ данных по сравнению с определением пути или DsFileSet объект. Для получения дополнительной информации смотрите matlab.io.datastore.FileSet.

  • Путь к файлу — можно задать один путь к файлу как вектор символов или строковый скаляр. Можно задать несколько путей к файлам как массив ячеек из символьных векторов или массив строк.

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

Файлы или папки могут быть локальными или удаленными:

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

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

Когда вы задаете папку, 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

Типы данных: логический | double

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

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

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

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

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

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

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

Свойства

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

Данные в оперативной памяти

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

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

Данные о файле

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

Типы данных: 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" когда вы создаете 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 содержит данные о файле, и функция чтения по умолчанию используется.

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

В Чтении Несколько Переменных из Файлов в примере 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 скаляр или a 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 функция, функциональные чтения:

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

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

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

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

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

Примечание

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

Примеры

свернуть все

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

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 имеет данные, считайте каждое наблюдение из 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 objects. Axes object 1 with title Short-Time Fourier Transform contains an object of type image. Axes object 2 with title Short-Time Fourier Transform contains an object of type image. Axes object 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:{
                             ' .../BR2021bd/build/matlab/examples/signal/data/BufferedHumanactivity.mat';
                             ' .../devel/bat/BR2021bd/build/matlab/examples/signal/data/EMGdata.mat';
                             ' .../devel/bat/BR2021bd/build/matlab/examples/signal/data/EMGindex.mat'
                              ... and 49 more
                             }
                     Folders: {'/mathworks/devel/bat/BR2021bd/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/BR2021bd/build/matlab/examples/signal/data/tremor.csv'
                             }
                     Folders: {'/mathworks/devel/bat/BR2021bd/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™.

  • 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);

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

В то время как 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 objects. Axes object 1 with title Short-Time Fourier Transform contains an object of type image. Axes object 2 with title Short-Time Fourier Transform contains an object of type image.

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

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

Задайте путь к файлам в качестве примера, включенным с Signal Processing Toolbox™. Каждый файл содержит два сигнала и уровень случайной выборки fs в пределах от 3 000 - 4 000 Гц.

  • Первый сигнал, 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 objects. Axes object 1 with title Fres = 40.9017 Hz, Tres = 62.754 ms contains an object of type image. Axes object 2 with title Fres = 40.9017 Hz, Tres = 62.754 ms contains an object of type image. Axes object 3 with title Fres = 40.9023 Hz, Tres = 62.753 ms contains an object of type image. Axes object 4 with title Fres = 40.9023 Hz, Tres = 62.753 ms contains an object of type image.

Введенный в R2020a