GoldLow.m
上传用户:pjcrystal
上传日期:2007-08-24
资源大小:5k
文件大小:1k
源码类别:

matlab例程

开发平台:

Matlab

  1. %Gold序列产生器
  2. %L=15,31,63,127
  3. function [codes]=GoldLow(L,Numcodes)
  4. n=log2(L+1);
  5. if n==4
  6.     f=[1,0,0,1;1,1,0,0];%2*4%生成多项式系数
  7. elseif n==5
  8.     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
  9. elseif n==6
  10.     f=[1,0,0,0,0,1;1,1,0,0,1,1;1,0,1,1,0,1;...
  11.         1,1,0,0,0,0;1,1,1,0,0,1;1,1,0,1,1,0;];%6*6
  12. elseif n==7
  13.     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;...
  14.         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
  15. else
  16.     display('error!L is an invalid number');
  17.     return;
  18. end
  19. fsize=size(f);%size(a)是求对应a的维数
  20. nrow=fsize(1);
  21. m=ones(nrow,L+n-1);
  22. for i=1:L-1
  23.     mf=m(:,i:i+n-1);
  24.     m(:,i+n)=diag(rem(mf*f',2));%rem中元素都除以2的余数,最后取矩阵的对角线元素
  25. end
  26. pairs=(nrow-1)*nrow/2;
  27. Sumcodes=pairs*L+nrow;
  28. if Numcodes>Sumcodes
  29.     display('error!The needed number of codes is too large.Propose to increase L');
  30.     return
  31. end
  32. c=zeros(Numcodes,L);
  33. Sum=0;
  34. for ii=1:nrow-1
  35.     for jj=ii+1:nrow
  36.         for j=1:L
  37.             Sum=Sum+1;
  38.             c(Sum,:)=m(ii,1:L)+periodshift(m(jj,1:L),0,j-1);
  39.             if Sum==Numcodes
  40.                 c=rem(c,2);
  41.                 codes=2*c(1:Numcodes,:)-1;
  42.                 break
  43.             end
  44.             if Sum==Numcodes break;end
  45.         end
  46.         if Sum==Numcodes break;end
  47.     end
  48.     if Sum<Numcodes
  49.         c(Sumcodes-nrow+1:Sumcodes,:)=m(:,1:L);
  50.         c=rem(c,2);
  51.         codes=2*c(1:Numcodes,:)-1;
  52.     end
  53.     codes=codes'
  54.     %CDMA扩频码生成器
  55. end