m_sequence_generator.m

来自「matlab-使用移位寄存器生成m序列(CDMA系统)」· M 代码 · 共 54 行

M
54
字号
%<matlab> 使用移位寄存器生成m序列
%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                        %
%   该函数根据输入的扩频因子生成相应的M序列,       %
%  其中扩频因子限制在2的3次幂到2的12次幂之间。    %
%                                                                        %  
%%%%%%%%%%%%%%%%%%%%%%%%%%
function Sequence = m_sequence_generator(SF)
SFlog2 = log2(SF);
if rem(SFlog2,1) ~= 0         % rem函数进行mod运算,此处检验SFlog2是否为整数
    error('扩频序列SF必须是2的整数次幂!'); % 即检验扩频因子是否为2的整数次幂
end
%%
switch SFlog2
    case 3
        R = 3; instate = zeros(1,3); instate(R) = 1;    
        %instate为寄存器状态,由于寄存器不能存在全0状态,故设置相应的位为1
        N = 2^R - 1; generator = [1 1 3];
        %N为寄存器级数,generator为本原多项式,对应有连接器的位置
    case 4
        R = 4; instate = zeros(1,4); instate(R) = 1;
        N = 2^R - 1; generator = [1 1 4];
    case 5
        R = 5; instate = zeros(1,5); instate(R) = 1;
        N = 2^R - 1; generator = [1 2 5];
    case 6
        R = 6; instate = zeros(1,6); instate(R) = 1;
        N = 2^R - 1; generator = [1 1 6];
    case 7 
        R = 7; instate = zeros(1,7); instate(R) = 1;
        N = 2^R - 1; generator = [1 3 7];
    case 8
        R = 8; instate = zeros(1,8); instate(R) = 1;
        N = 2^R - 1; generator = [1 2 3 4 8];
    case 9
        R = 9; instate = zeros(1,9); instate(R) = 1;
        N = 2^R - 1; generator = [1 4 9];
    case 10
        R = 10; instate = zeros(1,10); instate(R) = 1;
        N = 2^R - 1; generator = [1 3 10];
    case 11
        R = 11; instate = zeros(1,11); instate(R) = 1;
        N = 2^R - 1; generator = [1 2 11];
    case 12
        R = 12; instate = zeros(1,12); instate(R) = 1;
        N = 2^R - 1; generator = [1 1 4 6 12];
    otherwise
        error('SF必须是2的整数次幂, 大于等于2^8并且小于等于2^12.')
end
%%
[Sequence] = ...           % 调用线性反馈移位寄存器产生扩频m序列
    linear_feedback_shift_register(R,N,instate,generator);     
 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?