Запись хранилища данных в файлы
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

Удалить 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

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
sds - Хранилище данных сигналаsignalDatastore объектХранилище данных сигнала, указанное как signalDatastore объект. По умолчанию, когда sds содержит данные в памяти, writeall функция записывает входные данные в MAT-файлы.
Пример: signalDatastore({randn(100,1)},'SampleRate',100) указывает хранилище данных сигнала, содержащее один элемент, случайный сигнал, дискретизированный на частоте 100 Гц.
outputLocation - Расположение папки для записи данныхРасположение папки для записи данных, указанное как вектор символа или скаляр строки. 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')'FolderLayout' - Расположение файлов в папке вывода'duplicate' (по умолчанию) | 'flatten'Расположение файлов в папке вывода, указанное как 'duplicate' или 'flatten'.
'duplicate' - реплицировать структуру папок данных, на которые указывает хранилище данных сигнала. Укажите 'FolderLayout' как 'duplicate' для поддержания соответствия между входным и выходным наборами данных.
'flatten' - Запись всех файлов из входных данных в указанную папку вывода без вложенных папок.
'FolderLayout' не применяется, когда sds содержит данные в памяти.
Типы данных: char | string
'FilenamePrefix' - Префикс к имени файлаПрефикс имени файла, заданный как вектор символа или скаляр строки.
writeall добавляет указанный префикс к именам выходных файлов. Например, этот код добавляет текущую дату к началу всех имен выходных файлов из хранилища данных.
prefixText = string(datetime('today')) writeall(imds,'C:\myFolder','FilenamePrefix',prefixText);
Типы данных: char | string
'FilenameSuffix' - суффикс к имени файлаСуффикс к имени файла, определяемый как вектор символа или скаляр строки.
writeall функция добавляет указанный суффикс к именам выходных файлов. Например, этот код добавляет описательный текст 'jpeg_70per' в конце всех имен выходных файлов из хранилища данных.
writeall(imds,'C:\myFolder','FilenameSuffix','jpeg_70per');
Типы данных: char | string
'UseParallel' - Индикатор для параллельной записиfalse или 0 (по умолчанию) | true или 1Индикатор для параллельной записи, указанный как false или true.
По умолчанию writeall записывает в последовательном формате. Если установить UseParallel кому true, то writeall разделяет операции записи на отдельные группы и выполняет группы параллельно, если:
Установлен Toolbox™ параллельных вычислений.
Существует открытый параллельный пул или включено автоматическое создание пула в окне Настройки параллельного пула (Parallel Preferences).
В противном случае writeall записывает в последовательном формате независимо от значения для UseParallel.
Примечание
Параллельная запись не поддерживается для CombinedDatastore объектов или хранилищ данных, являющихся результатом transform применено к CombinedDatastore.
Типы данных: logical
'WriteFcn' - Пользовательская функция записиПользовательская функция записи, заданная как дескриптор функции. Указанная функция отвечает за создание выходных файлов. Вы можете использовать 'WriteFcn' аргумент «имя-значение» для преобразования данных или записи данных в формат файла, отличный от формата по умолчанию, даже если writeall не поддерживает формат вывода напрямую.
Пользовательская функция записи должна принимать не менее трех входных аргументов, data, writeInfo, и suggestedOutputType.
function myWriteFcn(data,writeInfo,suggestedOutputType)data содержит выходные данные read способ работы с хранилищем данных.
writeInfo является объектом типа matlab.io.datastore.WriteInfo с полями, перечисленными в таблице.
| Область | Описание | Напечатать |
|---|---|---|
ReadInfo | Второй выход read способ signalDatastore | struct |
SuggestedOutputName | Полное, глобально уникальное имя файла, отвечающее требованиям к расположению и именованию | string |
Location | Указанное outputLocation передано в writeall | string |
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
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.