📄 genpn.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 + -