writeall

Запись datastore в файлы

    Описание

    пример

    writeall(sds,outputLocation) записывает данные из входа datastore sds для вывода файлов в местоположении, указанном в outputLocation. Количество файлов выхода совпадает с количеством файлов, на которые ссылается datastore.

    writeall(sds,outputLocation,Name,Value) записывает данные с дополнительными опциями, заданными одним или несколькими аргументами в виде имя-значение. Для примера, 'FilenameSuffix','norm' добавляет описательный текст 'norm' в конце всех выходных файлов.

    Примеры

    свернуть все

    Создайте сигнальный datastore, чтобы выполнить итерацию через элементы массива ячеек в памяти данных о сигнале. Массив содержит:

    • Синусоидально модулированный линейный щебет

    • Вогнутый квадратичный щебет

    • A управляемого напряжением генератора

    • Набор импульсов уменьшающейся длительности, разделенных областями колеблющейся амплитуды и колеблющейся частоты с увеличивающимся трендом

    Дискретизация сигналов осуществляется на частоте 3000 Гц.

    fs = 3000;
    t = 0:1/fs:3-1/fs;
    data = {chirp(t,300,t(end),800).*exp(2j*pi*10*cos(2*pi*2*t)); ...
            2*chirp(t,200,t(end),1000,'quadratic',[],'concave'); ...
            vco(sin(2*pi*t),[0.1 0.4]*fs,fs);
            besselj(0,600*(sin(2*pi*(t+1).^3/30).^5));};
    sds = signalDatastore(data,'SampleRate',fs);

    Создайте папку с именем Files в текущей папке. Запишите содержимое datastore в файлы. Перечислите содержимое папки. The writeall функция использует MemberNames свойство signalDatastore для присвоения имен файлам и сигналам в файлах.

    fname = 'Files';
    mkdir(fname)
    
    writeall(sds,fname)
    
    dir(fname)
    .            Member1.mat  Member3.mat  
    ..           Member2.mat  Member4.mat  
    

    Создайте datastore, который указывает на файлы в Files. Считывайте данные по одному файлу за раз. Вычислите и отобразите кратковременное преобразование Фурье каждого сигнала.

    sdfs = signalDatastore(fname,'SampleRate',fs);
    tiledlayout flow
    while hasdata(sdfs)
        nexttile
        [sg,nf] = read(sdfs);
        stft(sg,nf.SampleRate)
    end

    Figure contains 4 axes. Axes 1 with title Short-Time Fourier Transform contains an object of type image. Axes 2 with title Short-Time Fourier Transform contains an object of type image. Axes 3 with title Short-Time Fourier Transform contains an object of type image. Axes 4 with title Short-Time Fourier Transform contains an object of type image.

    Удалите Files директория, созданный ранее в примере.

    rmdir(fname,'s')

    Укажите путь к четырем сигналам, включенным в MATLAB ®. Сигналами являются записи птичьего щебета, train, брызги и женского голоса, произносящего слово «MATLAB». Первые три сигнала дискретизируются с частотой 8192 Гц, а четвертый с частотой 7418 Гц. Создайте сигнальный datastore, который указывает на указанные файлы.

    fls = ["chirp" "train" "splat" "mtlb"];
    folder = fullfile(matlabroot,"toolbox","matlab","audiovideo",append(fls,".mat"));
    
    sds = signalDatastore(folder,'SampleRateVariableName','Fs');

    Запишите спектрограммы сигналов в текстовые файлы в текущей папке с помощью writeall и writeSpectrogram функций. writeall использует MemberNames свойство signalDatastore для присвоения имен файлам и сигналам в файлах. Создайте datastore, которое указывает на файлы в текущей папке.

    writeall(sds,'.','WriteFcn',@writeSpectrogram)
    
    sdfs = signalDatastore('.');

    Считывайте данные по одному файлу за раз. Отображение спектрограммы каждого сигнала.

    tiledlayout flow
    while hasdata(sdfs)
        nexttile
        
        [d,info] = read(sdfs);
        waterfall(d(2:end,1),d(1,2:end),d(2:end,2:end)')
        
        wtf = gca;
        wtf.XDir = 'reverse';
        view(30,45)
        xlabel("{\it f} (Hz)")
        ylabel("{\it t} (s)")
        
        [~,k] = fileparts(info.FileName);
        title(k)
    end

    Figure contains 4 axes. Axes 1 with title chirp contains an object of type patch. Axes 2 with title mtlb contains an object of type patch. Axes 3 with title splat contains an object of type patch. Axes 4 with title train contains an object of type patch.

    The writeSpectrogram функция вычисляет спектрограмму входного сигнала, используя pspectrum и записывает его в MAT-файл в текущей папке. Функция задает 80% перекрытия между смежными сегментами, разрешение по времени 0,15 секунды и спектральные утечки 0,8.

    function writeSpectrogram(data,info,~)
    
        [s,f,t] = pspectrum(data,info.ReadInfo.SampleRate,'spectrogram', ...
            'TimeResolution',0.15,'OverlapPercent',80,'Leakage',0.8);
        d = [NaN t'; f s];
        
        [~,q] = fileparts(info.SuggestedOutputName);
        save(q,"d")
    
    end

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

    свернуть все

    Сигнальный datastore, заданный как signalDatastore объект. По умолчанию, когда sds содержит данные в памяти, writeall функция записывает входные данные в MAT-файлы.

    Пример: signalDatastore({randn(100,1)},'SampleRate',100) задает сигнальный datastore, содержащий один представитель, случайный сигнал, дискретизированный со скоростью 100 Гц.

    Расположение папки для записи данных, заданное как вектор символов или строковый скаляр. outputLocation может задать полный или относительный путь.

    Пример: outputLocation = '../../dir/data'

    Пример: outputLocation = "C:\Users\MyName\Desktop"

    Типы данных: char | string

    Аргументы в виде пар имя-значение

    Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

    Пример: writeall(sds,outputLocation,'FolderLayout','flatten')

    Размещения файлов в папке выхода, заданные как 'duplicate' или 'flatten'.

    • 'duplicate' - Реплицируйте структуру папки данных, на которые указывает signal datastore. Задайте 'FolderLayout' как 'duplicate' для поддержания соответствия между входом и выходным наборами данных.

    • 'flatten' - Запись всех файлов из входных в указанную выходную папку без каких-либо подпапок.

    'FolderLayout' не применяется, когда sds содержит данные в памяти.

    Типы данных: char | string

    Префикс к имени файла, заданный как вектор символов или строковый скаляр.

    writeall функция добавляет указанный префикс к именам выходных файлов. Например, этот код добавляет текущую дату в начало всех имен выходных файлов из datastore.

    prefixText = string(datetime('today'))
    writeall(imds,'C:\myFolder','FilenamePrefix',prefixText);
    

    Типы данных: char | string

    Суффикс к имени файла, заданный как вектор символов или строковый скаляр.

    writeall функция добавляет указанный суффикс к выходу именам файлов. Например, этот код добавляет описательный текст 'jpeg_70per' в конце всех имен выходных файлов из datastore.

    writeall(imds,'C:\myFolder','FilenameSuffix','jpeg_70per');

    Типы данных: char | string

    Индикатор для записи параллельно, заданный как false или true.

    По умолчанию writeall записывает последовательно. Если вы задаете UseParallel на true, затем writeall разделяет операции записи на отдельные группы и запускает группы параллельно, если:

    • Установлен Parallel Computing Toolbox™.

    • Открытый параллельный пул существует или автоматическое создание пула включено в параметрах Parallel Preferences.

    В противном случае, writeall записывает последовательно независимо от значения для UseParallel.

    Примечание

    Параллельная запись не поддерживается для CombinedDatastore объекты или хранилища данных, следующие из transform применяется к CombinedDatastore.

    Типы данных: logical

    Пользовательская функция записи, заданная как указатель на функцию. Указанная функция отвечает за создание файлов выхода. Можно использовать 'WriteFcn' аргумент имя-значение для преобразования данных или записи данных в формат файла, отличный от формата по умолчанию, даже если writeall не поддерживает непосредственно выход.

    Сигнатура функции

    Пользовательская функция записи должна принимать как минимум три входных параметров, data, writeInfo, и suggestedOutputType.

    function myWriteFcn(data,writeInfo,suggestedOutputType)
    Функция может также принимать дополнительные входы, такие как аргументы имя-значение, после первых трёх необходимых входов.

    • data содержит выходы read метод, работающий на datastore.

    • writeInfo является объектом типа matlab.io.datastore.WriteInfo с полями, перечисленными в таблице.

      ОбластьОписаниеНапечатать
      ReadInfoВторой выход read метод signalDatastorestruct
      SuggestedOutputNameПолное, глобально уникальное имя файла, соответствующее требованиям к местоположению и именованиюstring
      LocationЗаданное outputLocation передано в writeallstring
    • suggestedOutputType - предлагаемый тип выходного файла.

    Функция , взятая в качестве примера,

    Простая функция записи, которая вычисляет спектрограмму входного сигнала, используя pspectrum и записывает его в текстовый файл в текущей папке с помощью MATLAB® функция writematrix. Функция задает 80% перекрытия между смежными сегментами, разрешение по времени 0,15 секунды и спектральные утечки 0,8.

    function writeSpectrogram(data,info,~)
    
        [s,f,t] = pspectrum(data,info.ReadInfo.SampleRate,'spectrogram', ...
            'TimeResolution',0.15,'OverlapPercent',80,'Leakage',0.8);
        d = [NaN t'; f s];
        
        [~,q] = fileparts(info.SuggestedOutputName);
        writematrix(d,append(q,".txt"))
    
    end
    Использовать writeSpectrogram как функция записи для signalDatastore sds объекта, используйте эту команду.
    writeall(sds,'.','WriteFcn',@writeSpectrogram)

    Типы данных: function_handle

    См. также

    | |

    Введенный в R2021a