GoldLow.m
资源名称:Rake.rar [点击查看]
上传用户:pjcrystal
上传日期:2007-08-24
资源大小:5k
文件大小:1k
源码类别:
matlab例程
开发平台:
Matlab
- %Gold序列产生器
- %L=15,31,63,127
- function [codes]=GoldLow(L,Numcodes)
- n=log2(L+1);
- if n==4
- f=[1,0,0,1;1,1,0,0];%2*4%生成多项式系数
- elseif n==5
- f=[1,0,0,1,0;1,1,1,1,0;1,1,0,1,1;1,0,1,0,0;1,0,1,1,1;1,1,1,0,1];%6*5
- elseif n==6
- f=[1,0,0,0,0,1;1,1,0,0,1,1;1,0,1,1,0,1;...
- 1,1,0,0,0,0;1,1,1,0,0,1;1,1,0,1,1,0;];%6*6
- elseif n==7
- f=[1,1,0,0,1,0,1;1,1,1,0,1,1,1;1,0,0,0,0,0,1;1,0,1,0,0,1,1;...
- 1,1,1,0,0,1,0;1,1,1,1,0,1,1;1,1,0,0,0,0,0;1,1,0,1,0,0,1];%8*7
- else
- display('error!L is an invalid number');
- return;
- end
- fsize=size(f);%size(a)是求对应a的维数
- nrow=fsize(1);
- m=ones(nrow,L+n-1);
- for i=1:L-1
- mf=m(:,i:i+n-1);
- m(:,i+n)=diag(rem(mf*f',2));%rem中元素都除以2的余数,最后取矩阵的对角线元素
- end
- pairs=(nrow-1)*nrow/2;
- Sumcodes=pairs*L+nrow;
- if Numcodes>Sumcodes
- display('error!The needed number of codes is too large.Propose to increase L');
- return
- end
- c=zeros(Numcodes,L);
- Sum=0;
- for ii=1:nrow-1
- for jj=ii+1:nrow
- for j=1:L
- Sum=Sum+1;
- c(Sum,:)=m(ii,1:L)+periodshift(m(jj,1:L),0,j-1);
- if Sum==Numcodes
- c=rem(c,2);
- codes=2*c(1:Numcodes,:)-1;
- break
- end
- if Sum==Numcodes break;end
- end
- if Sum==Numcodes break;end
- end
- if Sum<Numcodes
- c(Sumcodes-nrow+1:Sumcodes,:)=m(:,1:L);
- c=rem(c,2);
- codes=2*c(1:Numcodes,:)-1;
- end
- codes=codes'
- %CDMA扩频码生成器
- end