Возвратите true, если существует больше данных в datastore
Задайте путь к набору звуковых сигналов, включенных как MAT-файлы с MATLAB®.
folder = fullfile(matlabroot,'toolbox','matlab','audiovideo');
Создайте datastore сигнала, который указывает на заданную папку и имя переменной частоты дискретизации набора к Fs. Перечислите имена MAT-файлов в datastore.
sds = signalDatastore(folder,'FileExtension','.mat','SampleRateVariableName','Fs'); [~,c] = fileparts(sds.Files)
c = 7x1 cell
{'chirp' }
{'gong' }
{'handel' }
{'laughter'}
{'mtlb' }
{'splat' }
{'train' }
В то время как datastore сигнала имеет непрочитанные файлы, считайте последовательные файлы из datastore. Используйте progress функционируйте, чтобы контролировать часть чтения файлов.
while hasdata(sds) [data,info] = read(sds); fprintf('Fraction of files read: %.2f\n',progress(sds)) end
Fraction of files read: 0.14 Fraction of files read: 0.29 Fraction of files read: 0.43 Fraction of files read: 0.57 Fraction of files read: 0.71 Fraction of files read: 0.86 Fraction of files read: 1.00
Распечатайте и смотрите info структура, возвращенная последней возможностью в read функция.
info
info = struct with fields:
SampleRate: 8192
TimeVariableName: "Fs"
SignalVariableNames: "y"
FileName: "/mathworks/devel/bat/BR2021bd/build/matlab/toolbox/matlab/audiovideo/train.mat"
Задайте путь к четырем файлам, включенным с Signal Processing Toolbox™. Каждый файл содержит щебет и уровень случайной выборки, fs, в пределах от 100 - 150 Гц. Создайте datastore сигнала, который указывает на заданную папку.
folder = fullfile(matlabroot,'examples','signal','data','sample_chirps', ... ["chirp_1.mat","chirp_4.mat","chirp_9.mat","chirp_10.mat"]); sds = signalDatastore(folder,'SampleRateVariableName','fs');
Задайте функцию, которая берет выход read функционируйте и вычисляет и возвращается:
Спектрограммы щебетов.
Вектор моментов времени, соответствуя центрам оконных сегментов.
Частоты, соответствующие оценкам.
function [dataOut,infoOut] = extractSpectrogram(dataIn,info) [dataOut,F,T] = pspectrum(dataIn,info.SampleRate,'spectrogram',... 'TimeResolution',0.25,... 'OverlapPercent',40,'Leakage',0.8); infoOut = info; infoOut.CenterFrequencies = F; infoOut.TimeInstants = T; end
Вызовите transform функция, чтобы создать datastore, который вычисляет спектрограмму каждого щебета с помощью функции, которую вы задали.
sdsNew = transform(sds,@extractSpectrogram,'IncludeInfo',true);В то время как преобразованный datastore имеет непрочитанные файлы, читайте из нового datastore и визуализируйте спектрограммы в 3-мерном пространстве.
t = tiledlayout('flow'); while hasdata(sdsNew) nexttile [sig,infoOut] = read(sdsNew); waterfall(infoOut.TimeInstants,infoOut.CenterFrequencies,sig) xlabel('Frequency (Hz)') ylabel('Time (S)') view([30 70]) end

Задайте путь к четырем сигналам, включенным с MATLAB®. Сигналы являются записями щебета птицы, гонга, обучения и нащельной рейки. Все сигналы производятся на уровне 8 192 Гц.
folder = fullfile(matlabroot,'toolbox','matlab','audiovideo', ... ["chirp.mat","gong.mat","train.mat","splat.mat"]);
Создайте datastore сигнала, который указывает на заданные файлы. Каждый файл содержит переменную Fs это обозначает частоту дискретизации.
sds1 = signalDatastore(folder,'SampleRateVariableName','Fs');
Задайте функцию, которая берет выход read функционируйте и вычисляет верхние и более низкие конверты сигналов с помощью интерполяции сплайна по локальным максимумам, разделенным по крайней мере 80 выборками. Функция также возвращает шаги расчета для каждого сигнала.
function [dataOut,infoOut] = signalEnvelope(dataIn,info) [dataOut(:,1),dataOut(:,2)] = envelope(dataIn,80,'peak'); infoOut = info; infoOut.TimeInstants = (0:length(dataOut)-1)/info.SampleRate; end
Вызовите transform функция, чтобы создать второй datastore, sds2, это вычисляет конверты сигналов с помощью функции, которую вы задали.
sds2 = transform(sds1,@signalEnvelope,"IncludeInfo",true);Объедините sds1 и sds2 создайте третий datastore. Каждый вызов read функция от объединенного datastore возвращает матрицу с тремя столбцами:
Первый столбец соответствует исходному сигналу.
Вторые и третьи столбцы соответствуют верхним и более низким конвертам, соответственно.
sdsCombined = combine(sds1,sds2);
Считайте и отобразите исходные данные и верхние и более низкие конверты от объединенного datastore. Используйте extractBetween функционируйте, чтобы извлечь имя файла из пути к файлу.
tiledlayout('flow') while hasdata(sdsCombined) [dataOut,infoOut] = read(sdsCombined); ts = infoOut{2}.TimeInstants; nexttile hold on plot(ts,dataOut(:,1),'Color','#DCDCDC','LineStyle',':') plot(ts,dataOut(:,2:3),'Linewidth',1.5) hold off xlabel('Time (s)') ylabel('Signal') title(extractBetween(infoOut{:,2}.FileName,'audiovideo\','.mat')) end

sds — Datastore сигналаsignalDatastore объектЗадайте sds как signalDatastore объект.
tf — Индикация, если данные доступны в чтениеtrue | falseИндикация, если данные доступны, чтобы читать из datastore, возвратилась как true или false.
Типы данных: логический
signalDatastore | progress | subset | hasdata
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.