Объедините данные из нескольких хранилищ данных
объединяет два или более хранилища данных путем горизонтального конкатенации данных, возвращаемых sdsnew
= combine(sds1,sds2,...,sdsn
)read
(Audio Toolbox) вызывается функция на входных хранилищах данных.
Укажите путь к четырем сигналам, включенным в MATLAB ®. Сигналами являются записи птичьего щебета, гонга, train и брызги. Все сигналы дискретизированы на частоте 8192 Гц.
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, который вычисляет мгновенные частоты.
sds2 = transform(sds,@extractinstfreq,'IncludeInfo',true);
Потому что данные в sds2
не может горизонтально конкатенироваться с данными в 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
(Audio Toolbox) на объединенном datastore, горизонтально конкатенирует данные путем вызова read
(Audio Toolbox) на каждом входном datastore.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.