exponenta event banner

hasdata

Возвратите true, если существует больше данных в datastore

Синтаксис

Описание

пример

tf = hasdata(sds) возвращает логический 1 TRUE) если существуют доступные данные, чтобы читать из datastore, заданного sds. В противном случае это возвращает логический 0 ложь).

Примеры

свернуть все

Задайте путь к набору звуковых сигналов, включенных как 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

Figure contains 4 axes objects. Axes object 1 contains an object of type patch. Axes object 2 contains an object of type patch. Axes object 3 contains an object of type patch. Axes object 4 contains an object of type patch.

Задайте путь к четырем сигналам, включенным с 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

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

Входные параметры

свернуть все

Задайте sds как signalDatastore объект.

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

свернуть все

Индикация, если данные доступны, чтобы читать из datastore, возвратилась как true или false.

Типы данных: логический

Смотрите также

| | |

Введенный в R2020a