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')

Включение подпапки отмечает в виде разделенной запятой пары, состоящей из 'IncludeSubfolders' и true или false. Задайте true включать все файлы и подпапки в каждой папке или false включать только файлы в каждой папке.

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

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

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

Если никакая функция чтения не задана, '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 cellArray. Это свойство применяется только, когда datastore содержит данные в оперативной памяти.

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

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

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

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

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

function [data,info] = customreader(filename)
...
end

Данные сигнала выводятся в data переменная. 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 возвращает массив ячеек с данными, содержавшимися в заданных переменных.

Примечание

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

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

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

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

Примечание

'SampleRateVariableName', 'SampleTimeVariableName', and'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
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

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

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

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

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

                       Files:{
                             ' .../devel/bat/BR2020bd/build/matlab/examples/signal/data/GANModel.mat';
                             ' .../devel/bat/BR2020bd/build/matlab/examples/signal/data/HeartRates.mat';
                             ' .../devel/bat/BR2020bd/build/matlab/examples/signal/data/Hello.mat'
                              ... and 26 more
                             }
    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/BR2020bd/build/matlab/examples/signal/data/tremor.csv'
                             }
    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

Задайте путь к файлам в качестве примера, включенным с 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');
plotID = 1;
while hasdata(sds) 
    [data,info] = read(sds);
    subplot(2,2,plotID)
    pspectrum(data{1},info.SampleRate,'OverlapPercent',50,'Leakage',1,'TwoSided',true,'spectrogram')
    subplot(2,2,plotID+1)
    pspectrum(data{2},info.SampleRate,'OverlapPercent',90,'Leakage',0.4,'TwoSided',true,'spectrogram')
    plotID = plotID + 2;
end

Введенный в R2020a