Объедините данные от нескольких datastores
объединения два или больше хранилища данных путем горизонтальной конкатенации данных, возвращенных sdsnew
= combine(sds1,sds2,...,sdsn
)read
функция обратилась к входным хранилищам данных.
Задайте путь к четырем сигналам, включенным с 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
Задайте путь к файлам в качестве примера, включенным с Signal Processing Toolbox™. Каждый файл содержит щебет и уровень случайной выборки в пределах от 100 - 150 Гц.
folder = fullfile(matlabroot,'examples','signal','data','sample_chirps');
Создайте datastore сигнала, который указывает на заданную папку и определяет имена переменных частоты дискретизации.
sds = signalDatastore(folder,'SampleRateVariableName','fs');
Задайте функцию, которая берет выход read
функция и использование pspectrum
функционируйте, чтобы оценить спектр мощности сигнала. Используйте оценку, чтобы вычислить мгновенную частоту. Функция также возвращает вектор моментов времени, соответствуя центрам оконных сегментов и частот, соответствующих спектральным оценкам, содержавшимся в спектрограммах сигналов.
function [dataOut,infoOut] = extractinstfreq(dataIn,info) [P,F,T] = pspectrum(dataIn,info.SampleRate,'spectrogram',... 'TimeResolution',0.1,'OverlapPercent',40,'Leakage',0.8); dataOut = {instfreq(P,F,T)'}; infoOut = info; infoOut.CenterFrequencies = F; infoOut.TimeInstants = T; end
Вызовите transform
функция, чтобы создать новый datastore, который вычисляет instantantaneous частоты.
sds2 = transform(sds,@extractinstfreq,'IncludeInfo',true);
Поскольку данные в sds2
не горизонтально concatenable с данными в sds
, преобразуйте данные в sds
в массивы ячеек.
sds1 = transform(sds,@(x) {x});
Объедините sds1
и sds2
. В то время как объединенный datastore имеет непрочитанные файлы, читайте из нового datastore и визуализируйте спектрограммы. Наложите мгновенные частоты на спектрограммах.
sdsCombined = combine(sds1,sds2); sdsSubset = subset(sdsCombined,[1,4,9,10]); plotID = 1; while hasdata(sdsSubset) subplot(2,2,plotID) [sig,info] = read(sdsSubset); pspectrum(sig{:,1},info{:,2}.SampleRate,'spectrogram', ... 'TimeResolution',0.1,'OverlapPercent',40,'Leakage',0.8) hold on plot(info{:,2}.TimeInstants',sig{:,2}) plotID = plotID + 1; end
sds1,sds2,...,sdsn
— Хранилища данных сигнала, чтобы объединитьсяsignalDatastore
объектыХранилища данных сигнала, чтобы объединиться в виде двух или больше разделенных от запятой signalDatastore
объекты.
sdsnew
— Новый datastore сигнала с объединенными даннымиCombinedDatastore
объектНовый datastore с объединенными данными, возвращенными как CombinedDatastore
объект.
Вызов read
на объединенном datastore, горизонтально конкатенирует данные путем вызова read
на каждом входном datastore.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.