%% This function is used for generate test vector for digital design
% Author: lishuai
function y = data2binvector(channel_sig)
format long;
total_num = length(channel_sig);
data_wid = 16;
int_wid = 3;
frac_wid = 12;
fid1 = fopen('convert_data2binvector.txt','w');
for num_index = 1: total_num
% Get the data
data = channel_sig(num_index);
int_data = fix(data); % this function should choose the fix
frac_data = data - int_data;
% Process the interger part of data and avoid the data overflow
if int_data >= 2^int_wid
int_data = 2^int_wid-1;
% Change the frac_part to be equal to the initial_value
frac_data = 0;
for frac_index = 1:frac_wid;
frac_data = frac_data + 2^(-frac_index);
end
end
if int_data <=-2^int_wid
int_data = -2^int_wid;
% Change the frac_part to be equal to the initial_value
frac_data = +2^(-(frac_wid+2));
end
% Convert the data to complement
tmp_data = int_data + frac_data;
tmp_data = (int_data + frac_data)*2^frac_wid;
if tmp_data < 0
tmp_data = tmp_data + 2^(data_wid);
end
disp(tmp_data)
% Convert the data to binary and write the file
data_vector = dec2binvec(tmp_data, data_wid);
data_vector = fliplr(data_vector);
for bit_index = 1:data_wid
data_vec_bit = data_vector(bit_index);
fprintf(fid1,'%1d',data_vec_bit);
end
fprintf(fid1,'\n');
end
fclose(fid1);
y = 0;
fprintf('end\n');