www.gusucode.com > matlab 案例源码 matlab代码程序 > matlab/WriteAndReadComplexNumbersExample.m
%% Write and Read Complex Numbers % This example shows how to write and read complex numbers in binary files. % % The available precision values for |fwrite| do not explicitly support % complex numbers. To store complex numbers in a file, separate the real % and imaginary components and write them separately to the file. There are two ways to do this: % % * Write all real components followed by all imaginary components % * Interleave the components % % Use the approach that % allows you to read the data in your target application. %% Separate Real and Imaginary Components % Create an array that contains complex values. % Copyright 2015 The MathWorks, Inc. nrows = 5; ncols = 5; z = complex(rand(nrows, ncols), rand(nrows, ncols)) %% % Separate the complex values into real and imaginary components. z_real = real(z); z_imag = imag(z); %% Write All Real Components Follwed By Imaginary Components % Write all the real components, |z_real|, followed by all the imaginary % components, |z_imag|, to a file named |complex_adj.bin|. adjacent = [z_real z_imag]; fileID = fopen('complex_adj.bin', 'w'); fwrite(fileID,adjacent,'double'); fclose(fileID); %% % Read the values from the file using |fread|. fileID = fopen('complex_adj.bin'); same_real = fread(fileID, [nrows, ncols], 'double'); same_imag = fread(fileID, [nrows, ncols], 'double'); fclose(fileID); same_z = complex(same_real, same_imag); %% Interleave Real and Imaginary Components % An alternative approach is to interleave the real and imaginary % components for each value. |fwrite| writes values in column order, so build % an array that combines the real and imaginary parts by alternating rows. % % First, preallocate the interleaved array. interleaved = zeros(nrows*2, ncols); %% % Alternate real and imaginary data. newrow = 1; for row = 1:nrows interleaved(newrow,:) = z_real(row,:); interleaved(newrow + 1,:) = z_imag(row,:); newrow = newrow + 2; end %% % Write the interleaved values to a file named |complex_int.bin|. fileID = fopen('complex_int.bin','w'); fwrite(fileID, interleaved, 'double'); fclose(fileID); %% % Open the file for reading and read the real values from the file. The % fourth input to |fread| tells the function to skip the specified number % of bytes after reading each value. fileID = fopen('complex_int.bin'); same_real = fread(fileID, [nrows, ncols], 'double', 8); %% % Return to the first imaginary value in the file. Then, read all the % imaginary data. fseek(fileID, 8, 'bof'); same_imag = fread(fileID, [nrows, ncols], 'double', 8); fclose(fileID); same_z = complex(same_real, same_imag);