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

📄 ubpsk6tr13.m

📁 根据TD-SCDMA系统的特点
💻 M
字号:
close all
clear all
randn('state',sum(100*clock))
  
A=1;
ES=A*A;
Eb=ES;
minTestLength=100000;
maxTestlength=100000000;
index=1;

% bpsk modulate
matrix0=ones(6,1);
smatrix=diag(exp([i*2*pi/64 i*2*pi*18/64 i*2*pi*23/64 i*2*pi*39/64 i*2*pi*46/64 i*2*pi*57/64]));
matrix1=smatrix*matrix0;
matrix2=smatrix^2*matrix0;
matrix3=smatrix^6*matrix0;
matrix4=smatrix^22*matrix0;
matrix5=smatrix^24*matrix0;
matrix6=smatrix^44*matrix0;
matrix7=smatrix^60*matrix0;
matrix8=smatrix^64*matrix0;

% matrix2=matrix1';



for EbN0=1:15;
N0=10^(-EbN0/10);
noiseRoot=sqrt(N0/2);
errorCount=0;
testCount=0;
n=0;
length=0;


while(1)
    
% Generate the Rayleigh fading channel 
h0=(randn(1)+j*randn(1))*sqrt(0.5);
% Noise generate

for nn=1:6
n(nn)=(randn(1)+j*randn(1))*noiseRoot;
end


% Soure matrix
 
  % matrix=ones(8,1);
  
% Generate Unitray Matrix 
 
 % S_matrix=diag(exp([i*pi*2/256 i*pi*2*5/256 i*pi*2*16/256 i*pi*2*36/256 i*pi*2*57/256 i*pi*2*105/256 i*pi*2*151/256 i*pi*2*253/256]));
 % 8 rows 1 columns 

 % Transmit source matrix
 
 src=randn(1,3)>0;
 number=[4 2 1]*src'+1;
 % x=A*(2*src-1);
 % max_matrix=zeros(1,4)
 % Transmit matrix
   switch number
       case 1   
            Tmatrix=matrix1;
       case 2
            Tmatrix=matrix2;
       case 3
            Tmatrix=matrix3;
       case 4
            Tmatrix=matrix4;
       case 5
           Tmatrix=matrix5;
       case 6
           Tmatrix=matrix6;
       case 7
           Tmatrix=matrix7;
       case 8
           Tmatrix=matrix8;
       end
 
 % Receive matrix
 
 Recematrix=zeros(6,1);
      for m=1:6
      Recematrix(m)=h0*Tmatrix(m)+n(m);
      end

 
 % Decision
 
        TR1=trace( Recematrix'*(matrix1)*(matrix1)'*Recematrix);
        TR2=trace( Recematrix'*(matrix2)*(matrix2)'*Recematrix);
        TR3=trace( Recematrix'*(matrix3)*(matrix3)'*Recematrix);
        TR4=trace( Recematrix'*(matrix4)*(matrix4)'*Recematrix);
        TR5=trace( Recematrix'*(matrix5)*(matrix5)'*Recematrix);
        TR6=trace( Recematrix'*(matrix6)*(matrix6)'*Recematrix);
        TR7=trace( Recematrix'*(matrix7)*(matrix7)'*Recematrix);
        TR8=trace( Recematrix'*(matrix8)*(matrix8)'*Recematrix);
        % min matrix
       
        max_matrix=[TR1 TR2 TR3 TR4 TR5 TR6 TR7 TR8];
        
        % deceision
        [y mmm]=max(max_matrix);
        
        dst=de2bi(mmm-1,3,'left-msb');
   
        error=xor(src,dst);
        errorCount=errorCount+sum(error);
        testCount=testCount+3;
        if(testCount<minTestLength)
            continue;
        end
        tempBER=errorCount/testCount;

         %test if the test length is large enough
        if(tempBER>0)
            thresholdTestLength=100/(tempBER);
        else
            thresholdTestLength=maxTestLength;
        end
        
        %Stop current EbN0 test when the test threshold is reached
        if(testCount>=thresholdTestLength)
            myTestLength(index)=testCount;
            Es=Eb/2;
            myEsN0(index)=10*log10(Es/N0)
            myEbN0(index)=EbN0
            myBER(index)=tempBER
            index=index+1;
            break;
        end
    end
end

%Draw curves for the results,Eb/N0
figure(1)
semilogy(myEbN0,myBER,'*-');
xlabel('Eb/N0 in dB');
ylabel('bit error rate');
grid 

%Draw curves for the results, Es/N0
% figure(2)
% semilogy(myEsN0,myBER,'+-');
% xlabel('Es/N0 in dB');
% ylabel('bit error rate');
% grid 

 
 
 
 
 
 
 

⌨️ 快捷键说明

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