dsp.BinaryFileWriter

Запишите данные к двоичным файлам

Описание

dsp.BinaryFileWriter Система object™ пишет многоканальные данные сигнала в двоичный файл. Если заголовок не пуст, то заголовок предшествует данным сигнала. Объект задает имя файла и структуру заголовка. В первый раз, когда вы пишете в файл, объект пишет заголовок, сопровождаемый по условию. На последующих вызовах объект пишет остающиеся данные. Если заголовок пуст, то никакой заголовок не записан.

Объект может записать данные с плавающей точкой и целочисленные данные. Чтобы записать символьные данные и данные фиксированной точки, смотрите Запись и Считанные Символьные Данные и Запись и Считанные Данные Фиксированной точки. Входные данные могут быть действительными или комплексными. Когда данные являются комплексными, объект пишет данные как чередованные действительные и мнимые компоненты. Для примера смотрите Запись и Считанные Данные Фиксированной точки. По умолчанию средство записи использует порядок байтов хост-машины. Чтобы изменить порядок байтов, можно использовать swapbytes функция. Для примера смотрите Порядок байтов Изменения Данных Перед Записью.

Записывать данные к двоичному файлу:

  1. Создайте dsp.BinaryFileWriter объект и набор его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?.

Создание

Описание

writer = dsp.BinaryFileWriter создает объект средства записи двоичного файла, writer, использование свойств по умолчанию.

пример

writer = dsp.BinaryFileWriter(fname) устанавливает Filename свойство к fname.

writer = dsp.BinaryFileWriter(fname,Name,Value) с Filename установите на fname и каждое свойство Name установите на заданный Value. Незаданные свойства имеют значения по умолчанию.

Пример: writer = dsp.BinaryFileWriter('myFilename.bin','HeaderStructure',struct('field1',1:10,'field2',single(1)));

Свойства

развернуть все

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и release функция разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.

Имя файла, в который объект пишет данные в виде вектора символов или строкового скаляра. Необходимо задать полный путь для файла.

Заголовок, чтобы записать в начале файла в виде структуры. Структура может иметь произвольное число полей. Каждое поле структуры должно быть действительной матрицей встроенного типа. Например, если HeaderStructure установлен в struct('field1',1:10,'field2',single(1)), объект пишет заголовок, сформированный 10 значениями с двойной точностью, (1:10), сопровождаемый одним значением одинарной точности, single(1). Если вы не задаете заголовок, объект устанавливает это свойство на пустую структуру, struct([]).

Использование

Синтаксис

Описание

пример

writer(data) записывает данные к двоичному файлу в упорядоченном по строкам формате. Каждый вызов алгоритма пишет элементы data в конце файла. В первом вызове алгоритма объект пишет заголовок сначала, сопровождаемый по условию. Если заголовок пуст, то никакой заголовок не записан.

Входные данные могут быть действительными или комплексными. Для комплексных данных чередованы действительные и мнимые части. Например, если данные равняются [1 2; 3 4]+1j*[5 6; 7 8], затем объект пишет элементы как 1 5 2 6 3 7 4 8.

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

развернуть все

Данные, которые будут записаны в двоичный файл в упорядоченном по строкам формате в виде вектора или матрицы. Объект написал данные в упорядоченном по строкам формате. Например, если входным массивом является [1 2 4 5; 8 7 9 2], объект пишет данные как [1 2 4 5 8 7 9 2].

Входные данные могут быть действительными или комплексными. Для комплексных данных чередованы действительные и мнимые части. Например, если данные равняются [1 2; 3 4]+1j*[5 6; 7 8], затем объект пишет элементы как [1 5 2 6 3 7 4 8].

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
Поддержка комплексного числа: Да

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

свернуть все

Создайте двоичный файл с пользовательским заголовком с помощью dsp.BinaryFileWriter Системный объект. Запишите данные к этому файлу. Считайте заголовок и данные с помощью dsp.BinaryFileReader Системный объект.

Запишите данные

Задайте заголовок файла как структуру со следующими полями:

  • DataType устанавливают на double.

  • Набор сложности к false.

  • FrameSize (количество строк в матрице данных) набор к 150.

  • NumChannels (количество столбцов в матрице данных) набор к 1.

Создайте dsp.BinaryFileWriter объект с помощью этого заголовка. Объект пишет заголовок сначала, сопровождаемый по условию, к ex_file.bin. Данные являются шумным синусоидальным сигналом. Просмотрите данные в осциллографе времени.

L = 150;
header = struct('DataType','double','Complexity',false,'FrameSize',L,'NumChannels',1);
writer = dsp.BinaryFileWriter('ex_file.bin','HeaderStructure',header);

sine = dsp.SineWave('SamplesPerFrame',L);
scopewriter = timescope(1,'YLimits',[-1.5 1.5],'SampleRate',...
    sine.SampleRate,'TimeSpanSource','Property','TimeSpan',1);

for i = 1:1000
    data = sine() + 0.01*randn(L,1);
    writer(data);
    scopewriter(data)
end

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

release(writer);

Считайте данные

Считайте данные из двоичного файла, ex_file.bin, использование dsp.BinaryFileReader объект. Файл содержит данные о заголовке, сопровождаемые фактическими данными. Объект считывает двоичные данные, пока конец файла не достигнут. Задайте заголовок читателю, использующему HeaderStructure свойство объекта читателя.

Если точный заголовок не известен на стороне читателя, необходимо, по крайней мере, задать прототип заголовка. Таким образом, количество полей, и тип данных, размер и сложность каждого поля в прототипе должны соответствовать с данными о заголовке, записанными в двоичный файл. Когда readHeader функция считывает данные из двоичного файла, функция извлекает информацию о заголовке на основе того, как поля заданы в прототипе заголовка. Например, полевой набор заголовка к 'double' на средстве записи сторона может быть задана как любая строка 6 символов на стороне читателя. readHeader функционируйте читает это поле как строку 6 символов от двоичного файла, который соответствует с 'double'.

headerPrototype = struct('DataType','datype','Complexity',false,'FrameSize',1,'NumChannels',10);
reader = dsp.BinaryFileReader(...
    'ex_file.bin',...
    'HeaderStructure',headerPrototype);
headerReader = readHeader(reader)
headerReader = 

  struct with fields:

       DataType: 'double'
     Complexity: 0
      FrameSize: 150
    NumChannels: 1

Данные о заголовке извлечены readHeader функция присвоена соответствующим свойствам reader объект.

reader.IsDataComplex = headerReader.Complexity;
reader.DataType = headerReader.DataType;
reader.NumChannels = headerReader.NumChannels;
reader.SamplesPerFrame = headerReader.FrameSize;

Инициализируйте осциллограф на стороне читателя, чтобы просмотреть извлеченные данные о двоичном файле.

scopereader = timescope(1,'YLimits',[-1.5 1.5],'SampleRate',...
    sine.SampleRate,'TimeSpanSource','Property','TimeSpan',1);

Данные считаны в один канал (столбец), содержащий несколько систем координат, где каждая система координат имеет 150 выборок. Просмотрите данные в осциллографе времени.

while ~isDone(reader)
    out = reader();
    scopereader(out)
end
release(reader);
release(scopereader);

Установите читателя считывать данные в системах координат размера 300. Проверьте, что данные считали соответствия данные, записанные в файл.

reader.SamplesPerFrame = 300;
while ~isDone(reader)
    out = reader();
    scopereader(out)
end
release(reader);

Даже когда читатель считывает данные с различным форматом кадра, выходом в оба раза соответствия осциллографов точно.

Используйте dsp.BinaryFileReader Система object™, чтобы считать данные из двоичного файла в упорядоченном по строкам формате.

Запишите данные

Запишите матричный A к двоичному файлу Matdata.bin использование dsp.BinaryFileWriter объект. Объект пишет заданный заголовок, сопровождаемый по условию.

Заголовок имеет следующий формат:

  • DataType устанавливают на double.

  • Набор сложности к false.

  • FrameSize (количество строк в матрице данных) набор к 3.

  • NumChannels (количество столбцов в матрице данных) набор к 4.

A = [1 2 3 8; 4 5 6 10; 7 8 9 11];
header = struct('DataType','double','Complexity',false,'FrameSize',3,'NumChannels',4);
writer = dsp.BinaryFileWriter('Matdata.bin','HeaderStructure',header);
writer(A);

Выпустите средство записи так, чтобы читатель мог получить доступ к данным.

release(writer);

Считайте данные

Задайте заголовок с помощью HeaderStructure свойство объекта читателя. Если точный заголовок не известен, необходимо, по крайней мере, задать прототип заголовка. Таким образом, количество полей, и тип данных, размер и сложность каждого поля в прототипе должны соответствовать с данными о заголовке, записанными в двоичный файл. dsp.BinaryFileReader возразите читает двоичный файл Matdata.bin пока конец файла не достигнут. Сконфигурируйте Системный объект, чтобы считать данные в 4 канала с каждым каналом, содержащим 5 выборок. Каждый цикл итерации читает канал (или система координат) данных.

headerPrototype = struct('DataType','double','Complexity',false,'FrameSize',5,'NumChannels',4);
reader = dsp.BinaryFileReader('Matdata.bin','HeaderStructure',headerPrototype,'NumChannels',4,...
    'SamplesPerFrame',5);
while ~isDone(reader)
    out = reader();
    display(out)
end
out = 5×4

     1     2     3     8
     4     5     6    10
     7     8     9    11
     0     0     0     0
     0     0     0     0

Каждая система координат out содержит системы координат матричного A, сопровождаемый нулями, чтобы завершить систему координат. Исходный матричный A содержит 4 канала с 3 выборками в каждом канале. Читатель сконфигурирован, чтобы считать данные в 4 канала с каждым каналом, содержащим 5 выборок. Поскольку существует недостаточно выборок, чтобы завершить систему координат, объект читателя добавляет нули в конце каждой системы координат.

Создайте dsp.BinaryFileWriter объект, который пишет в файл с именем myfile.dat. Нет никакого заголовка. Данные являются комплексными.

writer = dsp.BinaryFileWriter('myfile.dat');
data = [1 2 3 4]+1i*[5 6 7 8];
writer(data);
release(writer);

Считайте данные с помощью dsp.BinaryFileReader Система object™. Чтобы просмотреть данные в формате, это записано в файл, установите IsDataComplex свойство к false. Объект читателя считывает данные как последовательность чисел подряд главный формат. Установите SamplesPerFrame к 1 и NumChannels к 8.

reader = dsp.BinaryFileReader('myfile.dat','SamplesPerFrame',1,...
    'NumChannels',8);
s = struct([]);
reader.HeaderStructure = s;
dataRead = reader();

Вы видите, что действительные и мнимые компоненты исходных данных демонстрационные чередованный.

display(dataRead);
dataRead = 1×8

     1     5     2     6     3     7     4     8

dsp.BinaryFileWriter и dsp.BinaryFileReader Системные объекты не поддерживают запись и чтение данных фиксированной точки. Как обходное решение, можно записать сохраненный целочисленный фрагмент fi данные, считанные данные и использование это значение, чтобы восстановить fi данные.

Запишите данные фиксированной точки

Создайте fi объект представлять 100 случайных чисел со знаком размером слова 14 и дробной длиной 12. Запишите сохраненный целочисленный фрагмент fi возразите против файла данных myFile.dat. Встроенным типом данных является int16, который может быть вычислен с помощью class(storeIntData).

data = randn(100,1);
fiDataWriter = fi(data,1,14,12);
storeIntData = storedInteger(fiDataWriter);

writer = dsp.BinaryFileWriter('myFile.dat');
writer(storeIntData);

Выпустите средство записи так, чтобы читатель мог получить доступ к данным.

release(writer);

Считайте данные фиксированной точки

Задайте читателя, чтобы считать хранимые целочисленные данные как int16 данные с 100 выборками на систему координат данных. Реальное значение номера фиксированной точки может быть представлено с помощью 2(-fractionLength)(storedInteger). Если вы знаете размер слова со знаком и дробную длину данных фиксированной точки, можно восстановить fi использование данных fi(realValue,signedness,wordLength,fractionLength). В этом примере данные подписываются с размером слова 14 и дробной длиной 12.

reader = dsp.BinaryFileReader('Filename','myFile.dat','SamplesPerFrame',100,...
    'DataType','int16');
data = reader();
fractionLength = 12;
wordLength = 14;
realValue = 2^(-fractionLength)*double(data);

fiDataReader = fi(realValue,1,wordLength,fractionLength);

Проверьте, что данные средства записи совпадают с данными читателя.

isequal(fiDataWriter,fiDataReader)
ans = logical
   1

dsp.BinaryFileWriter и dsp.BinaryFileReader Системные объекты не поддерживают запись и чтение символов. Как обходное решение, данные о символе броска к одному из встроенных типов данных и записи целочисленные данные. После того, как читатель считывает данные, преобразуйте данные в символ с помощью char функция.

Запишите символьные данные

Бросьте символ в uint8 использование cast функция. Запишите данные броска в файл данных myFile.dat.

data = 'binary_file';
castData = cast(data,'uint8');
writer = dsp.BinaryFileWriter('myFile.dat');
writer(castData);

Выпустите средство записи так, чтобы читатель мог получить доступ к данным.

release(writer);

Считайте uint8 Данные

Сконфигурируйте читателя, чтобы считать данные броска как uint8 данные.

reader = dsp.BinaryFileReader('myFile.dat','DataType','uint8','SamplesPerFrame',11);
readerData = reader();
charData = char(readerData);

Проверьте, что данные средства записи совпадают с данными читателя. По умолчанию читатель возвращает данные в упорядоченном по столбцам формате.

strcmp(data,charData.')
ans = logical
   1

По умолчанию, dsp.BinaryFileWriter Система object™ использует порядок байтов хост-машины. Чтобы изменить порядок байтов, используйте swapbytes функция.

Запишите числовой массив в myfile.dat использование dsp.BinaryFileWriter объект. Прежде, чем записать данные, измените порядок байтов данных с помощью swapbytes функция.

data = [1 2 3 4 2 2];
swapData = swapbytes(data);
writer = dsp.BinaryFileWriter('myfile.dat');
writer(swapData);

Расширенные возможности

Введенный в R2017b