⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lsj_mseq.m

📁 m序列是无线通信中的常用序列
💻 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 + -