exponenta event banner

объединиться

Объединение данных из нескольких хранилищ данных

Описание

пример

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

Figure contains 4 axes. Axes 1 contains 3 objects of type line. Axes 2 contains 3 objects of type line. Axes 3 contains 3 objects of type line. Axes 4 contains 3 objects of type line.

Укажите путь к файлам примеров, включенным в 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

Figure contains 4 axes. Axes 1 with title Fres = 17.8854 Hz, Tres = 93.2203 ms contains 2 objects of type image, line. Axes 2 with title Fres = 17.3141 Hz, Tres = 96.2963 ms contains 2 objects of type image, line. Axes 3 with title Fres = 18.037 Hz, Tres = 92.437 ms contains 2 objects of type image, line. Axes 4 with title Fres = 16.6729 Hz, Tres = 100 ms contains 2 objects of type image, line.

Входные аргументы

свернуть все

Объединяемые хранилища данных сигналов, указанные как две или более запятых signalDatastore объекты.

Выходные аргументы

свернуть все

Новое хранилище данных с объединенными данными, возвращенное как CombinedDatastore объект.

Запрос read (Audio Toolbox) в объединенном хранилище данных, горизонтально объединяет данные, вызывая read (Audio Toolbox) на каждом входном хранилище данных.

Представлен в R2020a