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

📄 mlbs_ch.m

📁 matlab code for spread spectrumusing M george algo
💻 M
字号:
function [bitseries,nextstnum]=mlbs_ch(log2N,bitno,startnum)
%MLBS   Maximum length binary sequence (pseudo-random binary sequence, PRBS).
%
%       [bitseries,nextstnum]=MLBS(log2N,bitno,startnum)
%
%       Output arguments:
%       bitseries = generated bit series (values +1,-1).
%           Column vector, length: bitno, default length: 2^log2N-1
%       nextstnum = startnum to be used if continued sequence generation
%           follows.  
%
%       Input arguments:
%       log2N = bit length of the shift register: integer number 2<=log2N<=30
%       bitno = number of bits to be generated (length of bitseries)
%           default: 2^log2N-1
%       startnum = (optional) digital equivalent of the start value of the
%           shift register, considered as a regular binary number containing
%           0-s and 1-s.  1<=startnum<2^log2N
%
%       Usage: [bitseries,nextstnum]=mlbs(log2N,bitno,startnum);
%       Example: bitseries=mlbs(10);
%
%       See also: DIBS.

%       Algorithm:
%         K. R. Godfrey, ed.: Perturbation Signals for System Identification.
%         Englewood Cliffs, Prentice-Hall, 1993.

%       Copyright (c) I. Kollar, 1990-96
%       Copyright (c) Vrije Universiteit Brussel, Dienst ELEC, 1990-96
%       All rights reserved.
%       Last modified: 04-Oct-1996

if rem(log2N,1)~=0, error('log2N is not integer'), end
%
if nargin<2, bitno=[]; end
if isempty(bitno), bitno=2^log2N-1; end
if bitno>2^log2N-1
  disp('WARNING! bitno exceeds maximum length of PRBS in mlbs')
end
if bitno<0, error('negative value of bitno'), end
%
if nargin<3, startnum=[]; end
if isempty(startnum), startnum=2^log2N-1; end
%
if (startnum<1)|(startnum>=2^log2N), error('startnum out of range'), end
startnum=round(rem(abs(startnum-1),2^log2N-1))+1;
stn=startnum; reg=zeros(log2N,1);
for i=1:log2N
  reg(i)=rem(stn,2); stn=(stn-reg(i))/2; 
end
zind=find(reg==0); reg(zind)=-1*ones(length(zind),1); %values +1,-1
%
if     log2N==2, multind=[1,2];
elseif log2N==3, multind=[2,3];
elseif log2N==4, multind=[3,4];
elseif log2N==5, multind=[3,5];
elseif log2N==6, multind=[5,6];
elseif log2N==7, multind=[4,7];
elseif log2N==8, multind=[4,5,6,8];
elseif log2N==9, multind=[5,9];
elseif log2N==10, multind=[7,10];
elseif log2N==11, multind=[9,11];
elseif log2N==12, multind=[6,8,11,12];
elseif log2N==13, multind=[9,10,12,13];
elseif log2N==14, multind=[4,8,13,14];
elseif log2N==15, multind=[14,15];
elseif log2N==16, multind=[4,13,15,16];
elseif log2N==17, multind=[14,17];
elseif log2N==18, multind=[11,18];
elseif log2N==19, multind=[14,17,18,19];
elseif log2N==20, multind=[17,20];
elseif log2N==21, multind=[19,21];
elseif log2N==22, multind=[21,22];
elseif log2N==23, multind=[18,23];
elseif log2N==24, multind=[17,22,23,24];
elseif log2N==25, multind=[22,25];
elseif log2N==26, multind=[20,24,25,26];
elseif log2N==27, multind=[22,25,26,27];
elseif log2N==28, multind=[25,28];
elseif log2N==29, multind=[27,29];
elseif log2N==30, multind=[7,28,29,30];
else error(sprintf('log2N=%.0f is not allowed',log2N))
end
bitseries=zeros(bitno,1);
for i=1:bitno
  bitseries(i)=-prod(reg(multind));
  reg=[bitseries(i);reg(1:log2N-1)];
  %if (rem(i,100)==0)|(i==2^log2N-1)
    %fprintf('mlbs ready with %.0f bits of %.0f\n',i,2^log2N-1)
  %end
end
nextstnum=sum((reg/2+1/2).*(2.0.^[0:log2N-1]'));
%
%end of mlbs
%%%%%%%%%%%%%%%%%%%%%%%% end of mlbs %%%%%%%%%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

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