function [m] = mserial_generator(tap_set)
% m序列产生器
% 输出为m序列,未进行极性变换。
L = 2^(length(tap_set)-1)-1;
x = [zeros(1,(length(tap_set)-2)) 1];
for i = 1:1:L
m(i)=x(end);
for j= 1:1:length(tap_set)-1
sum_vector(j)=tap_set(j+1)*x(j);
end
sum_x = mod(sum(sum_vector),2);
x=[sum_x x(1:end-1)];
end
这段代码是一个用于生成m序列的函数。下面是代码的逐行解释:
-
function [m] = mserial_generator(tap_set)
- 这是函数声明,定义了一个名为
mserial_generator
的函数,它接受一个参数tap_set
,并返回一个值m
。
- 这是函数声明,定义了一个名为
-
% m序列产生器
- 这是一个注释,说明这个函数是用来生成m序列的。
-
% 输出为m序列,未进行极性变换。
- 这是一个注释,说明函数的输出是未进行极性变换的m序列。
-
L = 2^(length(tap_set)-1)-1;
- 这行代码计算了m序列的长度,
length(tap_set)
返回tap_set
中元素的个数,这个值减去1是用来表示状态寄存器的位数,然后计算出m序列的长度。
- 这行代码计算了m序列的长度,
-
x = [zeros(1,(length(tap_set)-2)) 1];
- 这行代码初始化了状态寄存器,生成一个初始值为0的数组,其长度为
length(tap_set) - 1
,然后在末尾添加了一个1,表示状态寄存器的初始状态。
- 这行代码初始化了状态寄存器,生成一个初始值为0的数组,其长度为
-
for i = 1:1:L
- 这是一个循环语句,循环从1到
L
,其中L
是m序列的长度。
- 这是一个循环语句,循环从1到
-
m(i)=x(end);
- 这行代码将当前状态寄存器的最后一个元素添加到m序列中。
-
for j= 1:1:length(tap_set)-1
- 这是一个内部循环,用来计算状态寄存器中每个位的下一个值。
-
sum_vector(j)=tap_set(j+1)*x(j);
- 这行代码计算了当前状态寄存器位
j
下一个状态的贡献,使用了tap_set
中的元素与状态寄存器中相应位的值相乘。
- 这行代码计算了当前状态寄存器位
-
sum_x = mod(sum(sum_vector),2);
- 这行代码计算了状态寄存器下一个状态的值,将所有贡献值相加后取模2,以确保结果为0或1。
-
x=[sum_x x(1:end-1)];
- 这行代码更新了状态寄存器的值,将新计算得到的状态添加到状态寄存器的最前面,然后移除原来状态寄存器的最后一个元素,以便在下一次迭代中更新。
整体上,这段代码通过迭代更新状态寄存器的值,并根据特定的规则计算每个状态寄存器位的下一个状态,从而生成m序列。