Объединение данных из нескольких хранилищ данных
объединяет два или более хранилищ данных путем горизонтального объединения данных, возвращенных sdsnew = combine(sds1,sds2,...,sdsn)read (Audio Toolbox), вызываемая в хранилищах входных данных.
Укажите путь к четырем сигналам, входящим в состав MATLAB ®. Сигналы являются записями птичьего чирпа, гонга, поезда и шлейфа. Все сигналы дискретизируются на частоте 8192 Гц.
folder = fullfile(matlabroot,'toolbox','matlab','audiovideo', ... ["chirp.mat","gong.mat","train.mat","splat.mat"]);
Создайте хранилище данных сигнала, указывающее на указанные файлы. Каждый файл содержит переменную 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 для создания второго хранилища данных, sds2, которая вычисляет огибающие сигналов, используя определенную функцию.
sds2 = transform(sds1,@signalEnvelope,"IncludeInfo",true);Объединиться sds1 и sds2 создайте третье хранилище данных. Каждый вызов read функция из объединенного хранилища данных возвращает матрицу с тремя столбцами:
Первый столбец соответствует исходному сигналу.
Второй и третий столбцы соответствуют верхней и нижней оболочкам соответственно.
sdsCombined = combine(sds1,sds2);
Считывание и отображение исходных данных и верхней и нижней конвертов из объединенного хранилища данных. Используйте 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

Укажите путь к файлам примеров, включенным в Toolbox™ обработки сигналов. Каждый файл содержит чирп и случайную частоту дискретизации в диапазоне от 100 до 150 Гц.
folder = fullfile(matlabroot,'examples','signal','data','sample_chirps');
Создайте хранилище данных сигнала, которое указывает на указанную папку и задает имена переменных частоты дискретизации.
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 для создания нового хранилища данных, вычисляющего мгновенные частоты.
sds2 = transform(sds,@extractinstfreq,'IncludeInfo',true);Потому что данные в sds2 не является горизонтально совместимым с данными в sds, преобразовать данные в sds в массивы ячеек.
sds1 = transform(sds,@(x) {x});Объединиться sds1 и sds2. Если в объединенном хранилище данных имеются непрочитанные файлы, считывайте из нового хранилища данных и визуализируйте спектрограммы. Наложение мгновенных частот на спектрограммы.
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 - Новое хранилище данных сигнала с объединенными даннымиCombinedDatastore объектНовое хранилище данных с объединенными данными, возвращенное как CombinedDatastore объект.
Запрос read (Audio Toolbox) в объединенном хранилище данных, горизонтально объединяет данные, вызывая read (Audio Toolbox) на каждом входном хранилище данных.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.