%% Write and Read Binary Files in Simulink
% Create a binary file with a custom header using the 
% <docid:dsp_ref#bve9jr5-1 Binary File Writer> block. 
% Write data to this file. Read the header and data using the 
% <docid:dsp_ref#bvevpo_-1 Binary File Reader> block.

%% Write the Data
% Specify the file header in the *File header* parameter of the 
% |Binary File Writer| block as |struct('A',[1 2 3 4],'B','x7')|. The block 
% writes the header first, followed by the data to the |ex_file.bin| file. 
% The data is a noisy sine wave signal with a frequency of 100 Hz containing 
% 1000 samples per frame. The sample rate of the signal is 1000 Hz. Set the 
% *Time span* of the *Time Scope* block to 1 second. 
%%
% Open the model.
writeModel = 'writeData';
open_system(writeModel)

%%
% Run the model to write the data to |ex_file.bin|. Alternatively, view the 
% data in a time scope.
sim(writeModel)

%% Read the Data
% Read the data in |ex_file.bin| file using the |Binary File Reader| block.
% The data is read as a single channel (column) containing multiple frames,
% where each frame has 1000 samples. View the data in a time scope.
%%
% Specify the header using the *File header* parameter in the reader. If
% the exact header is not known, you must at least specify the prototype of
% the header, that is, its size and data type. In this example, the header
% prototype is |struct('A',[0 0 0 0],'B','-0')| which has the same format
% as the header structure.
%%
% Open the model.
readModel = 'readData';
open_system(readModel)
%%
% Run the model to read the data. Alternatively, view the data in a time 
% scope.
sim(readModel)

%%
% The output data in both the timescopes matches exactly. Once the processing
% is complete, close the models.
close_system(readModel);
close_system(writeModel);

%% 
% Copyright 2012 The MathWorks, Inc.