📄 interleav_matrix.m
字号:
function [int_interleaving_array] = interleav_matrix( int_interleaving_buffer )
%
% 生成满足S—距离特性的伪随机交织器;
%
% 本程序完成对S-随机交织器的设计,经过运算把每个信息序列所要交换到的地址记录
% 在交织数组中,在接收信息序列时,按所记录的交织数组中的内容进行操作。
%
% [int_interleaving_array] = interleav_matrix( int_interleaving_buffer ) 返回随机交织器;
%
%
% 作者: 王丽
% $版本: 1.00 $ $日期: 03.12.2005$
% 测试int_interleaving_buffer的长度;
N = length(int_interleaving_buffer);
% 将int_interleaving_array置空;
int_interleaving_array = [];
% 对int_interleaving_array进行判断,如果长度 <= N,进行int_interleaving_array的设计;
while ( length( int_interleaving_array ) ~= N )
% 对各个数组重新进行初始化;
% 将int_interleaving_array置空;
int_interleaving_array = [];
% 生成int_number_array,长度为N,存储1--N这N个整数;
int_number_array = [1:N];
% 生成int_refuse_array,使其长度为N,内容为空;
int_refuse_array = [];
% 对数字数组的长度进行判断,不为空时,继续对交织器进行设计;
while length( int_number_array ) > 0
% 产生随机数;
% 测量数组int_number_array的长度;
n = length(int_number_array);
% 从1至N这N个数字中随机获取一个下标subscipt;
subscript = floor( n * rand + 1 );
% 从这个下标所表示的位置提取所选的随机数int_random_num;
int_rand_num = int_number_array( subscript );
% 将int_number_array中最后一个值存入该数组的subscript位置;
int_number_array( subscript ) = int_number_array( n );
% 对int_number_array重新赋值,使其长度为N-1;
if n == 1
int_number_array = [];
else
int_number_array = int_number_array( 1:n-1 );
end
% 测试其S-距离特性;
% 设定判断距离S = [(N/2)^0.5]-1;
s = floor( (N/2)^0.5 ) - 1;
% 初始化flag的值;
flag = 1;
% 如果int_interleaving_array的长度小于s,将s设为int_interleaving_array的长度。
len = length(int_interleaving_array);
if len < s
s = len;
end
% 如果int_number_array的长度不大于2*s,s的值减半;
if n <= 2 * s
s = floor( n/2 );
end
% 将int_rand_num与int_interleaving_array中的最后S个值进行比较;
for i = 0:s-1
% 对标志位flag进行设定;
if abs( int_interleaving_array ( len - i ) - int_rand_num ) <= s
% 如果距离小于s,则flag置0,跳出循环;
flag = 0;
break;
end
end
% 标志位为0,记入拒绝数组;
if flag == 0
int_refuse_array = int_rand_num;
else
%将此随机数记入交织数组;
int_interleaving_array = [int_interleaving_array,int_rand_num];
end
% 对拒绝数组进行处理;
if length( int_refuse_array ) > 0
% 将拒绝数组中的数字记入int_number_array;
int_number_array = [int_number_array,int_refuse_array];
% 清空拒绝数组;
int_refuse_array = [];
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -