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

📄 one_user.m

📁 TD-SCDMA
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%2007.3.2 JD程序,场景:基站和1用户单天线,TD下行
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
clc
global gl;

myCst=[1+j,1-j,-1+j,-1-j]; %the constellation
myMap=[3,2,1,0];

subframe=5;
minperusertotalenth=22000;
minlen=floor(minperusertotalenth/(44*subframe));  
peruserlenth=minlen*44*subframe;
minDB=-5;maxDB=5;
  for snr=minDB:maxDB
      snr
      error = 0 ;

    for lenth=1:minlen*subframe     
        gl.gu = zeros(1,4);
        m=1;ka=1;N=44;w=4;Q=16;
        
        h1(1,:) =  Rayleigh_Doppler_multiPath(2000,120,0,0.000675,0.00078125,1.28,[0,781,1563,2344],[0,-3,-6,-9]);

        d1 = 2*randint(44,1)-1 + i * (2*randint(44,1)-1);%数字表示用户号,如:d1表示要考察的用户数据
        sp1 = d1*ovsf(1);%加OVSF

        sp = zeros(44,16);
        sp = sp1;%干扰形成

        s = zeros(864,1);
      for idx = 1:22
          s((idx-1)*16+1:idx*16) = sp(idx,:);%装到第一个数据区1-352
      end
      for idx = 23:44
          s((idx-23)*16+1+496:(idx-22)*16+496) = sp(idx,:);%装到第二个数据区497-848
      end
        s(361:488)= 2*midamble_1;%装midamble
        e1(1,:) = s'.*h1(1,:);
        power=0;
      for i=1:864
          tempp=e1(1, i);
          power=power+tempp*tempp';
      end;
        power_s = power/864;
        tempp=10^(snr/10);
        sigma=sqrt(power_s/tempp);
        n1 = normrnd(0,sigma,1,864) + j*normrnd(0,sigma,1,864);
        x1_t(1,:) = e1(1,:) + n1%加噪
        r_mid1(1,:) = x1_t(1,361:491);%取midamble码,有w-1个延迟

        x11 = zeros(1,355);%
        x11(1,:) = x1_t(1,1:355);%取第一个数据区数据(1-352),有3个延迟
        x1_1 = x11(1,:)';

        x12 = zeros(1,355);
        x12(1,:)=x1_t(1,497:851);%取第二个数据区数据(497-848),有3个延迟
        x1_2 = x12(1,:)';

        a1 = a_mid_1;%信道估计
        b1 = inv(a1'*a1)*a1';
        gl.gu(1,:)=(b1*r_mid1(1,:)')';


        a= A_gen_1;%联合检测
        h=a'*a;
        digh=diag(diag(h));
        dighinv=inv(digh);
        mt=chol(h);
        hinv=inv(mt);
        htinv=inv(mt');
        s_zf1=hinv*htinv*digh*dighinv*a'*x1_1;
        s_zf2=hinv*htinv*digh*dighinv*a'*x1_2;

        rs1 = zeros(44,1);%接收端信号比较
      for i = 1:22
          rs1(i) = s_zf1(i);
          rs1(i+22) = s_zf2(i);
      end

      for k=1:44
          zcast_mom=(rs1(k)-myCst).*conj(rs1(k)-myCst);%判断是接近A还是-A
          [temp,myIndex]=min(zcast_mom);
          index=[myMap(myIndex)];
          dst(k)=index;
      end;

      for k=1:44
          cast_mom=(d1(k)-myCst).*conj(d1(k)-myCst)%判断是接近A还是-A
          [c_temp,c_myIndex]=min(cast_mom);
          index=[myMap(c_myIndex)];
          ss(k)=index;
      end;
  
        err_num=0;
      for n=1:44
          if ss(n)~=dst(n)
             err_num=err_num+1;
          end;
      end;
        error = error + err_num; 
        clear m ka N w Q h1 d1 sp sp1 s e1 power tempp power_s sigma x1_t r_mid1 n1 idx...
              x11 x1_1 x12 x1_2 a1 b1 gl.gu s_zf1 s_zf2 ry1 ry2 a h digh dighinv mt hinv htinv ...
              rs1 i kk  ss dst index zcast_mom myIndex cast_mom temp c_temp c_myIndex k n gu;
    end;
   myBER((snr-minDB)+1,:)=error;
  end;
EsN0=[minDB:1:maxDB]
BER=myBER.'

%Draw curves for the results,Eb/N0
figure(1)
semilogy(EsN0,myBER/(1*peruserlenth),'*-');%k=1表示一个用户
xlabel('Es/N0 in dB');
ylabel('bit error rate');
grid

⌨️ 快捷键说明

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