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