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

📄 genpn.m

📁 生成PN序列(伪随机噪声序列)
💻 M
字号:
% Tx_GenPN:生成保护间隔填入序列

function [mseq pn]=Tx_GenPN(PNNum)
% 函数说明:
% 先生成m阶伪随机序列,再加上前扩展和后扩展
% 222221111100000002222211111 其中11111000000022222为一个完整的m序列
% 第二种加法是直接把生成好的复制到头部
% 输入:
% PN序列长度
% 输出:
% 保护间隔填入序列

switch(PNNum)
    case 4
        % == 2阶m序列 == %
        m=2;                        % m序列阶数
        mLen=2^m-1;                 % m序列长度
        registers=[randint(1,m-1) 1]; % 寄存器初始化,避免全0
        for i=1:1:mLen             % 序列长度应大于2^m-1
                mseq(i)=registers(m);
                tmp=xor(registers(m),registers(m-1)); % 反馈逻辑: connections=[1 1 1];    连线,即本原多项式x^2+x+1
                registers(2:m)=registers(1:m-1);      % 线性移位
                registers(1)=tmp;                     % 反馈
        end
        %PN=[mseq(mLen-2:end) mseq mseq(1:2)];         % 前后扩展
        pn=[0 mseq];                           % 直接复制 
    case 8
        % == 3阶m序列 == %
        m=3;                        % m序列阶数
        mLen=2^m-1;                 % m序列长度
        registers=[randint(1,m-1) 1]; % 寄存器初始化,避免全0
        for i=1:1:mLen             % 序列长度应大于2^m-1
                mseq(i)=registers(m);
                tmp=xor(registers(m),registers(m-1)); % 反馈逻辑: connections=[1 0 1 1];    连线,即本原多项式x^3+x+1
                registers(2:m)=registers(1:m-1);      % 线性移位
                registers(1)=tmp;                     % 反馈
        end
        %PN=[mseq(mLen-4:end) mseq mseq(1:4)];         % 前后扩展
        pn=[0 mseq];                           % 直接复制
    case 16
        % == 4阶m序列 == %
        m=4;                        % m序列阶数
        mLen=2^m-1;                 % m序列长度
        registers=[randint(1,m-1) 1]; % 寄存器初始化,避免全0
        for i=1:1:mLen             % 序列长度应大于2^m-1
                mseq(i)=registers(m);
                tmp=xor(registers(m),registers(m-1)); % 反馈逻辑: connections=[1 0 0 1 1];    连线,即本原多项式x^4+x+1
                registers(2:m)=registers(1:m-1);      % 线性移位
                registers(1)=tmp;                     % 反馈
        end
        %PN=[mseq(mLen-8:end) mseq mseq(1:8)];         % 前后扩展
        pn=[0 mseq];                           % 直接复制
    case 32
        % == 5阶m序列 == %
        m=5;                        % m序列阶数
        mLen=2^m-1;                 % m序列长度
        registers=[randint(1,m-1) 1]; % 寄存器初始化,避免全0
        for i=1:1:mLen             % 序列长度应大于2^m-1
                mseq(i)=registers(m);
                tmp=xor(registers(m),registers(m-2)); % 反馈逻辑: connections=[1 0 0 1 0 1];    连线,即本原多项式x^5+x^2+1
                registers(2:m)=registers(1:m-1);      % 线性移位
                registers(1)=tmp;                     % 反馈
        end
        %PN=[mseq(mLen-16:end) mseq mseq(1:16)];         % 前后扩展
        pn=[0 mseq];                           % 直接复制
    case 64
        % == 6阶m序列 == %
        m=6;                        % m序列阶数
        mLen=2^m-1;                 % m序列长度
        registers=[randint(1,m-1) 1]; % 寄存器初始化,避免全0
        for i=1:1:mLen             % 序列长度应大于2^m-1
                mseq(i)=registers(m);
                tmp=xor(registers(m),registers(m-1)); % 反馈逻辑: connections=[1 0 0 0 0 1 1];   连线,即本原多项式x^6+x+1
                registers(2:m)=registers(1:m-1);      % 线性移位
                registers(1)=tmp;                     % 反馈
        end
        %PN=[mseq(mLen-32:end) mseq mseq(1:32)];         % 前后扩展
        pn=[0 mseq];                           % 直接复制
    case 128
        % == 7阶m序列 == %
        m=7;                        % m序列阶数
        mLen=2^m-1;                 % m序列长度
        registers=[randint(1,m-1) 1]; % 寄存器初始化,避免全0
        for i=1:1:mLen             % 序列长度应大于2^m-1
                mseq(i)=registers(m);
                tmp=xor(registers(m),registers(m-3)); % 反馈逻辑: connections=[1 0 0 0 1 0 0 1];   连线,即本原多项式x^7+x^3+1
                registers(2:m)=registers(1:m-1);      % 线性移位
                registers(1)=tmp;                     % 反馈
        end
        %PN=[mseq(mLen-64:end) mseq mseq(1:64)];       % 前后扩展
        pn=[0 mseq];                           % 直接复制
    case 256
        % == 8阶m序列 == %
        m=8;                        % m序列阶数
        mLen=2^m-1;                 % m序列长度
        registers=[randint(1,m-1) 1]; % 寄存器初始化,避免全0
        for i=1:1:mLen             % 序列长度应大于2^m-1
                mseq(i)=registers(m);
                tmp=xor(xor(registers(m),registers(m-2)),xor(registers(m-3),registers(m-4))); % 反馈逻辑: connections=[1 0 0 0 1 1 1 0 1];   连线,即本原多项式x^8+x^4+x^3+x^2+1
                registers(2:m)=registers(1:m-1);      % 线性移位
                registers(1)=tmp;                     % 反馈
        end
        %PN=[mseq(mLen-128:end) mseq mseq(1:128)];       % 前后扩展
        pn=[0 mseq];                           % 直接复制
    otherwise
        disp('输入PN长度不正确,用全1序列代替');
        mseq=ones(1,PNNum);                           % 输入PN长度不正确,用全1序列代替
        pn=ones(1,PNNum);                             % 输入PN长度不正确,用全1序列代替

end

%PN=sqrt(2)*(2*PN-1);                                            % BPSK调制,PN的平均功率为信号平均功率的2倍
pn=2*pn-1;


        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        

⌨️ 快捷键说明

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