exponenta event banner

writeall

Запись хранилища данных в файлы

    Описание

    пример

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

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

    Примеры

    свернуть все

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

    • Синусоидально модулированный линейный чирп

    • Вогнутая квадратичная чирпа

    • Генератор, управляемый напряжением

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

    Сигналы дискретизируются при 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 в текущей папке. Запишите содержимое хранилища данных в файлы. Перечислите содержимое папки. writeall функция использует MemberNames имущество signalDatastore для присвоения имен файлам и сигналам в файлах.

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

    Создание хранилища данных, указывающего на файлы в 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 ®. Сигналы представляют собой записи щебетания птицы, поезда, шлейфа и женского голоса, говорящего слово «MATLAB». Первые три сигнала дискретизируются на частоте 8192 Гц, а четвертый - на частоте 7418 Гц. Создайте хранилище данных сигнала, указывающее на указанные файлы.

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

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

    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.

    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

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

    свернуть все

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

    Пример: signalDatastore({randn(100,1)},'SampleRate',100) указывает хранилище данных сигнала, содержащее один элемент, случайный сигнал, дискретизированный на частоте 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' - реплицировать структуру папок данных, на которые указывает хранилище данных сигнала. Укажите 'FolderLayout' как 'duplicate' для поддержания соответствия между входным и выходным наборами данных.

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

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

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

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

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

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

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

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

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

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

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

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

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

    • Установлен Toolbox™ параллельных вычислений.

    • Существует открытый параллельный пул или включено автоматическое создание пула в окне Настройки параллельного пула (Parallel Preferences).

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

    Примечание

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

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

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

    Подпись функции

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

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

    • data содержит выходные данные read способ работы с хранилищем данных.

    • 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