Datastore для набора сигналов
Использование signalDatastore
объект для управления набором данных в памяти или файлов сигналов, где каждый отдельный файл помещается в памяти, но весь набор не обязательно помещается.
создает сигнальный datastore с входными сигналами в памяти, содержащимися в sds
= signalDatastore(data
)data
.
создает сигнальный datastore на основе набора MAT-файлов в sds
= signalDatastore(location
)location
.
задает дополнительные свойства, используя один или несколько аргументы пары "имя-значение".sds
= signalDatastore(___,Name,Value
)
data
- Входные данные в памятиВходные данные в памяти, заданные как векторы, матрицы, расписания или массивы ячеек. Каждый элемент data
является представителем, который выводится datastore при каждом вызове read
.
Пример: {randn(100,1); randn(120,3); randn(135,2); randn(100,1)}
location
- Файлы или папки для включения в datastoreDsFileSet
объектФайлы или папки, включенные в 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'
- Флаг включения подпапкиfalse
или 0
(по умолчанию) | true
или 1
Флаг включения подпапки, заданный как true
или false
. Задайте true
включать все файлы и подпапки в каждую папку или false
для включения только файлов в каждую папку.
Пример: 'IncludeSubfolders',true
Типы данных: logical
| double
'FileExtensions'
- Сигнальные расширения файловРасширения файла сигнала, заданные как строковый скаляр, строковые массивы, вектор символов или массив ячеек векторов символов.
Если функция 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
свойство.
Members
- Имена представителейИмена представителей, заданные как массив ячеек. Длина имен представителей для входных данных должна равняться длине data
массив ячеек. Это свойство применяется только, когда datastore содержит данные в памяти.
MemberNames
- Данные представителя сигнала["Member1"..."MemberN"]
(по умолчанию) | строковый скаляр | строковые массивыДанные представителя сигнала, заданные как строковый скаляр или строковые массивы. Длина имен представителей для входных данных должна равняться длине data
массив ячеек. Это свойство применяется только, когда datastore содержит данные в памяти.
Files
- Файлы, включенные в datastoreФайлы, включенные в datastore, задаются как массив ячеек из строк или векторов символов. Каждый вектор символов в массиве ячеек представляет полный путь к файлу. The location
аргумент в signalDatastore
определяет Files
при создании datastore. Это свойство применяется только, когда datastore содержит данные файла.
Типы данных: string
| char
| cell
ReadFcn
- Пользовательская функция чтенияread
(по умолчанию) | указатель на функциюФункция, которая читает данные, заданная как указатель на функцию. Функция должна взять имя файла как вход, а затем выводить соответствующие данные. Для примера, если customreader
является заданной функцией для чтения данных, тогда она должна иметь один из следующих шаблонов:
function data = customreader(filename) ... end
function [data,info] = customreader(filename) ... end
data
переменная. The info
переменная должна быть пользовательской структурой, содержащей пользовательскую информацию из файла. Если вам нужны дополнительные аргументы, можно включить их после filename
аргумент. signalDatastore
добавляется к info
структурировать поле, содержащее имя файла.
Пример: @customreader
Типы данных: function_handle
AlternateFileSystemRoots
- Альтернативные корневые пути файловой системыАльтернативные корневые пути файловой системы, заданные как разделенная разделенными запятой парами, состоящая из '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
SignalVariableNames
- Имена переменных в файлах сигналовИмена переменных в файлах сигналов, заданные как строковый скаляр или вектор уникальных имен. Используйте это свойство, когда ваши файлы содержат более одной переменной, и вы хотите задать имена переменных, которые содержат данные сигнала, которые вы хотите считать.
Когда значение свойства является строковым скаляром, 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 содержит данные файла, и используется функция чтения по умолчанию.
ReadOutputOrientation
- Ориентация массива выходных сигналов ячеек данных'column'
(по умолчанию) | 'row'
Массив ячеек данных выходного сигнала, заданная как '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}
SampleRateVariableName
- Имя переменной, удерживающей частоту дискретизацииИмя переменной, содержащей частоту дискретизации, заданное как строковый скаляр. Это свойство применяется только, когда datastore содержит данные файла.
SampleTimeVariableName
- Имя переменной, содержащей значение шага расчетаИмя переменной, содержащей значение шага расчета, заданное как строковый скаляр. Это свойство применяется только, когда datastore содержит данные файла.
TimeValuesVariableName
- Имя вектора переменных временных значенийИмя переменной, содержащей вектор значений времени, заданное как строковый скаляр. Это свойство применяется только, когда datastore содержит данные файла.
Примечание
'SampleRateVariableName'
, 'SampleTimeVariableName'
, и 'TimeValuesVariableName'
являются взаимоисключающими. Используйте эти свойства, когда ваши файлы содержат переменную, которая содержит временную информацию данных о сигнале. Если не указано, signalDatastore
принимает, что данные сигнала не имеют информации о времени. Эти свойства недопустимы, если задано пользовательское read
задана функция.
SampleRate
- Выборочные значения скоростиЗначения скорости дискретизации, заданные как положительный действительный скаляр или вектор.
Установите значение SampleRate
к скаляру, чтобы задать ту же частоту дискретизации для всех сигналов в signalDatastore
.
Установите значение SampleRate
вектор, чтобы задать разную частоту дискретизации для каждого сигнала в signalDatastore
.
Количество элементов в векторе должно равняться количеству элементов в signalDatastore
.
SampleTime
- Шаг расчетаduration
скалярные | duration
векторШаги расчета значения, заданные как положительная скалярная величина, вектор, a duration
скаляр, или duration
вектор.
Установите значение SampleTime
к скаляру, чтобы задать один и тот же шаг расчета для всех сигналов в signalDatastore
.
Установите значение SampleTime
вектор, чтобы задать разный шаг расчета для каждого сигнала в signalDatastore
.
Количество элементов в векторе должно равняться количеству элементов в signalDatastore
.
TimeValues
- Значения времениduration
вектор | матрица | массив ячеекЗначения времени, заданные как вектор, a duration
вектор, матрица или массив ячеек.
Задайте TimeValues
в число или duration
вектор, чтобы задать одинаковые значения времени для всех сигналов в signalDatastore
. Вектор должен иметь ту же длину, что и все сигналы в наборе.
Задайте TimeValues
в число или duration
матрица или массив ячеек, чтобы задать, что каждый сигнал signalDatastore
имеет сигналы с одинаковыми временными значениями, но значения времени различаются от сигнала к сигналу.
Если TimeValues
является матрицей, тогда количество столбцов равняется количеству представителей signalDatastore
. Все сигналы в datastore должны иметь длину, равную количеству строк матрицы.
Если TimeValues
является массивом ячеек, тогда количество векторов равняется количеству представителей signalDatastore
. Все сигналы в представителя должны иметь длину, равную количеству элементов соответствующего вектора в массиве ячеек.
ReadSize
- Максимальное количество файлов сигналов, возвращаемых read
1
(по умолчанию) | положительный действительный скалярМаксимальное количество файлов сигналов, возвращенных read
, заданный как положительный действительный скаляр. Если вы задаете ReadSize
свойство для n, такое что n > 1, каждый раз, когда вы вызываете read
function, функция гласит:
Первая переменная первых файлов n, если sds
содержит данные файла.
Первые < reservedrangesplaceholder1 > представители, если sds
содержит данные в памяти.
Область выхода read
- массив ячеек сигнальных данных при ReadSize
> 1.
read | Считайте следующее последовательное наблюдение сигнала |
readall | Считайте все сигналы от datastore |
writeall | Запись datastore в файлы |
preview | Считайте первое наблюдение сигнала от datastore для предварительного просмотра |
shuffle | Shuffle-сигналы в datastore |
subset | Создайте datastore с подмножеством сигналов |
partition | Datastore сигнала разбиения и возвратная секционированный фрагмент |
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
Укажите путь к выборочным сигналам, включенным в 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
Укажите путь к файлам примера, включенным в 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
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.