📄 lsj_mseq.m
字号:
function [mseq] = lsj_mseq(n)
%-------------------------------------------------------------------------------------------------
% [mseq] = lsj_mseq(n)
% 本程序用来产生一个寄存器长度n为2~12的m序列,生成的m序列长度为N=2^n-1。
% 所选用的m序列的本原特征多项式结构为:(摘自朱近康《CDMA通信技术》<ISBN:7-115-09428-4>中的表4.2)
% n 本原特征多项式结构
% 2 [1,2]
% 3 [1,3]
% 4 [1,4]
% 5 [2,5]
% 6 [1,6]
% 7 [3,7]
% 8 [2,3,4,8]
% 9 [4,9]
% 10 [3,10]
% 11 [2,11]
% 12 [3,4,7,12]
%
% Setup Time: 2004-6-2. Author: Forest Loo. CopyRight@2004-2008
%-------------------------------------------------------------------------------------------------
IndexAlert = 0;
if abs(n-round(n)) > 10^(-12), %检查n,如果n不是整数,则报错
IndexAlert = 1; %设置报警标记
disp(' '); disp('Error 01 !!!!!!!!!!!!!!!!');
disp('n 不是整数'); disp(' ');
end;
if ((n<2)|(n>12)), %检查n,如果n不是2~12之间的整数,则报错
IndexAlert = 1; %设置报警标记
disp(' '); disp('Error!!!!!!!!!!!!!!!!');
disp('n 超出范围'); disp(' ');
end;
if IndexAlert==0,
N = 2^n-1; % m序列的周期长度
coef = zeros([1,n]); % 系数矢量
xreg = zeros([n,1]); % 寄存器寄存状态矢量
mseq = zeros([N,1]); % m序列
if n== 2, coef = [1,1]; end; % [1,2]
if n== 3, coef = [1,0,1]; end; % [1,3]
if n== 4, coef = [1,0,0,1]; end; % [1,4]
if n== 5, coef = [0,1,0,0,1]; end; % [2,5]
if n== 6, coef = [1,0,0,0,0,1]; end; % [1,6]
if n== 7, coef = [0,0,1,0,0,0,1]; end; % [3,7]
if n== 8, coef = [0,1,1,1,0,0,0,1]; end; % [2,3,4,8]
if n== 9, coef = [0,0,0,1,0,0,0,0,1]; end; % [4,9]
if n==10, coef = [0,0,1,0,0,0,0,0,0,1]; end; % [3,10]
if n==11, coef = [0,1,0,0,0,0,0,0,0,0,1]; end; % [2,11]
if n==12, coef = [0,0,1,1,0,0,1,0,0,0,0,1]; end; % [3,4,7,12]
xreg(n) = 1;
for k=1:N,
mseq(k) = xreg(n);
a = mod( coef * xreg , 2);
for r=0:(n-2), %移位寄存器移动一位,注意这里的赋值顺序
xreg(n-r) = xreg(n-r-1);
end;
xreg(1) = a;
end;
%将{0,1}序列变为{±1}序列。
TempArray01 = round(2*mseq-1);
mseq = TempArray01;
% 检查校验程序————经过校验,n=2~12时,生成的m序列没有问题。
FlagCheck = 0; %校验开关标志
if FlagCheck == 1,
Sum_mseq = sum(mseq) %伪随机序列的和
R = zeros([1,N]); %伪随机序列的周期自相关函数(PACF)
R(1) = mseq' * mseq;
for k=2:N,
R(k) = 0;
for p=1:N,
R(k) = R(k) + mseq(p)*mseq(mod((p+k-1-1),N)+1);
end;
end;
TempArray02 = -1 * ones(size(R));
TempArray02(1) = N;
Temp02 = max(abs(TempArray02-R))
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -