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

📄 stbc_qpsk_ber.m

📁 stbc编码qpsk调制的误码率,需要的可以下载了学习一下
💻 M
📖 第 1 页 / 共 3 页
字号:
%hold on
%该程序仿真STBC12编码,QPSK调制的误码率
%SNR upto 20 dBs
EbNo=[0:2:20];
%initialize count
idx = 1;
%N, M: number of transmit and receive antennas
K=1000;
N=1;
M=2;Num=100;
%channel_model='AWGN ';%信道模型是高斯信道
model='Rayleigh';%信道模型是Rayleigh
for SNR=EbNo
   sigma=0.5/(10^(SNR/10));  
   % Num -> number of packets
       for packet_count=1:Num
         data=randint(K*2,N);
                BIT=2;
   tx_bits=data.';
   bits_in=tx_bits;
   full_len = length(bits_in);
    % Angle [pi/4 3*pi/4 -3*pi/4 -pi/4] corresponds to 
   % Gray code vector [00 10 11 01], respectively.
   table=exp(j*[-3/4*pi 3/4*pi 1/4*pi -1/4*pi]);  % generates QPSK symbols
   table=table([0 1 3 2]+1); % Gray code mapping pattern for QPSK symbols
   inp=reshape(bits_in,2,full_len/2);
   mod_symbols=table([2 1]*inp+1);  % maps transmitted bits into QPSK symbols
   P=4;% 4 constellation points
   temp=mod_symbols;
   s=table;
%ready to transmit symbols of length 'K'
X=temp.';
fr_length=length(X);
 
% MRC
x0=X;

% form the channel matrix
%if channel_model=='AWGN    '
    Hr=ones(fr_length,M);   %如果信道是高斯信道,则执行该语句
%else
 %   %如果信道是Rayleigh信道,则执行该语句
   Hr=(randn(fr_length,M)+j*randn(fr_length,M))/sqrt(2);

%end
        

%transmission matrix   
H=reshape(Hr,fr_length,M);
Habs=sum(abs(H).^2,2);

%received signal per receiver antenna   
r1=sum(H(:,1).*x0,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));
r2=sum(H(:,2).*x0,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));

 % demodulate the received signals
z1=r1.*conj(H(:,1))+r2.*conj(H(:,2));

%uncoded(1,1)
r01=H(:,1).*x0+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));

%form estimates
for m=1:P
   d01(:,m)=abs(r01-H(:,1)*s(m)).^2; %uncoded signal
   
   %coded signals
   d1(:,m)=abs(sum(z1,2)-s(m)).^2+(-1+sum(Habs,2))*abs(s(m))^2;
end
     
% determine the minimum of estimates      

%decision for detecting uncoded
[y0,i0]=min((d01),[],2);
s0d=s(i0).';
clear d01 
     
%decision for detecting s1     
[y1,i1]=min((d1),[],2);
s1d=s(i1).';
clear d1
    
% form received symbols    
Xd=[s1d];

%determine symbol errors   
error_un(packet_count)=sum(X(:,1)~=s0d);% for uncoded
temp1=X>0;
temp2=Xd>0;
error(packet_count)=sum(sum(temp1~=temp2));% for coded
end% end of FOR loop for "packet_count"
%calculate FER, SER and BER for current idx

%for uncoded signal
SER_uncoded(idx)=sum(error_un)/(Num*K);
BER_uncoded(idx)=SER_uncoded(idx)/BIT;
FER_uncoded(idx)=SER_uncoded(idx)*K;

%for coded signal
SER(idx)=sum(error)/(Num*K);
BER(idx)=SER(idx)/BIT;
FER(idx)=SER(idx)*K;

%increment idx  
idx=idx + 1;

%str_bar=[num2str(wb) '% Completed'];
%waitbar(wb/100,h,str_bar);
%wb=wb+9.09;

end    % end of FOR loop for SNR
%semilogy(EbNo,SER,'g')
%hold on

semilogy(EbNo,BER,'<')
%legend('SER','BER')
clc
clear
hold on
%SNR upto 20 dBs
EbNo=[0:2:20];

%N, M: number of transmit and receive antennas

%N=no_tx_antennas;
N=1;
%M=no_rx_antennas;
M=4;
%initialize count
idx = 1;
Num=100;
K=1000;
%channel_model='AWGN ';%信道模型是高斯信道
model='Rayleigh';%信道模型是Rayleigh
for SNR=EbNo
   sigma=0.5/(10^(SNR/10));  

   % Num -> number of packets
       for packet_count=1:Num
% we are interested in transmitting 'K' SYMBOLS not bits. Hence, K*2 for QPSK
% etc.
               data=randint(K*2,N);
                    BIT=2;
                    tx_bits=data.';
%[temp s P]=tx_modulate(tx_bits,modulation);
   bits_in=tx_bits;
   full_len = length(bits_in);
    % Angle [pi/4 3*pi/4 -3*pi/4 -pi/4] corresponds to 
   % Gray code vector [00 10 11 01], respectively.
   table=exp(j*[-3/4*pi 3/4*pi 1/4*pi -1/4*pi]);  % generates QPSK symbols
   table=table([0 1 3 2]+1); % Gray code mapping pattern for QPSK symbols
   inp=reshape(bits_in,2,full_len/2);
   mod_symbols=table([2 1]*inp+1);  % maps transmitted bits into QPSK symbols
   P=4;% 4 constellation points
   temp=mod_symbols;
   s=table;
%ready to transmit symbols of length 'K'
X=temp.';
fr_length=length(X);
 
% MRC
x0=X;

% form the channel matrix
%if channel_model=='AWGN    '
 %   Hr=ones(fr_length,M);
%else
    Hr=(randn(fr_length,M)+j*randn(fr_length,M))/sqrt(2);
%end
        

%transmission matrix   
H=reshape(Hr,fr_length,M);
Habs=sum(abs(H).^2,2);

%received signal per receiver antenna   
 r1=sum(H(:,1).*x0,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));
 r2=sum(H(:,2).*x0,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));
 r3=sum(H(:,3).*x0,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));
 r4=sum(H(:,4).*x0,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));
 
% demodulate the received signals
z1=r1.*conj(H(:,1))+r2.*conj(H(:,2))+r3.*conj(H(:,3))+r4.*conj(H(:,4));

%uncoded(1,1)
r01=H(:,1).*x0+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));

%form estimates
for m=1:P
   d01(:,m)=abs(r01-H(:,1)*s(m)).^2; %uncoded signal
   
   %coded signal
   d1(:,m)=abs(sum(z1,2)-s(m)).^2+(-1+sum(Habs,2))*abs(s(m))^2;
end

% determine the minimum of estimates      

%decision for detecting uncoded
[y0,i0]=min((d01),[],2);
s0d=s(i0).';
clear d01 
     
%decision for detecting s1     
[y1,i1]=min((d1),[],2);
s1d=s(i1).';
clear d1
    
% form received symbols    
Xd=[s1d];

%determine symbol errors   
error_un(packet_count)=sum(X(:,1)~=s0d);% for uncoded
temp1=X>0;
temp2=Xd>0;
error(packet_count)=sum(sum(temp1~=temp2));% for coded
       end% end of FOR loop for "packet_count"
%calculate FER, SER and BER for current idx

%for uncoded signal
SER_uncoded(idx)=sum(error_un)/(Num*K);
BER_uncoded(idx)=SER_uncoded(idx)/BIT;
FER_uncoded(idx)=SER_uncoded(idx)*K;

%for coded signal
SER(idx)=sum(error)/(Num*K);
BER(idx)=SER(idx)/BIT;
FER(idx)=SER(idx)*K;
  
%increment idx  
idx=idx + 1;

end% end of FOR loop for SNR
%semilogy(EbNo,SER,'-.')
%hold on
semilogy(EbNo,BER,'+')
%legend('SER','BER')
clc
clear
hold on
%SNR upto 20 dBs
EbNo=[0:2:20];

%N, M: number of transmit and receive antennas

%N=no_tx_antennas;
N=2;
%M=no_rx_antennas;
 M=1;
%initialize count
idx = 1;
K=1000;  %符号数
Num=100;
%channel_model='AWGN ';%信道模型是高斯信道
model='Rayleigh';%信道模型是Rayleigh

for SNR=EbNo

  sigma=0.5/(10^(SNR/10));  

% Num -> number of packets
       for packet_count=1:Num
% we are interested in transmitting 'K' SYMBOLS not bits. Hence, K*2 for QPSK
% etc.      
                    data=randint(K*2,N);
                    BIT=2;
               
tx_bits=data.';
temp=[];
temp1=[];
for i=1:N
%i=2
   % [temp1 s P]=tx_modulate(tx_bits(i,:),modulation);
   %%%%%%%%%%%%%%%
   bits_in(i,:)=tx_bits(i,:);
   full_len = length(bits_in(i,:));
    % Angle [pi/4 3*pi/4 -3*pi/4 -pi/4] corresponds to 
   % Gray code vector [00 10 11 01], respectively.
   table=exp(j*[-3/4*pi 3/4*pi 1/4*pi -1/4*pi]);  % generates QPSK symbols
   table=table([0 1 3 2]+1); % Gray code mapping pattern for QPSK symbols
   inp=reshape(bits_in(i,:),2,full_len/2);
   mod_symbols=table([2 1]*inp+1);  % maps transmitted bits into QPSK symbols
   P=4;% 4 constellation points
   temp1=mod_symbols;
   s=table;
   %%%%%%%%%%%%%%%%%%%%%%%%
    temp=[temp; temp1];
    temp1=0;
end
%ready to transmit symbols of length 'K'
X=temp.';
fr_length=length(X);
 
% block coding-Alamouti
 x0=X(:,1);% required to verify a 1x1 system
 x1=X;
 x2(:,1)=-conj(X(:,2));
 x2(:,2)=conj(X(:,1));
 

 % form the channel matrix
 for n=1:N
  %   if channel_model=='AWGN    '
   %      Hr(n,:,:)=ones(fr_length,N);
    % else
         Hr(n,:,:)=(randn(fr_length,N)+j*randn(fr_length,N))/sqrt(2);
     %end
 end

 

%transmission matrix   
H=reshape(Hr(n,:,:),fr_length,N);
Habs(:,n)=sum(abs(H).^2,2);

%received signal per receiver antenna   
 r1=sum(H.*x1,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));
 r2=sum(H.*x2,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));
  
% demodulate the received signals
 z1=r1.*conj(H(:,1))+conj(r2).*H(:,2);
 z2=r1.*conj(H(:,2))-conj(r2).*H(:,1);

%uncoded(1,1)
 r01=H(:,1).*x0+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));
     
%form estimates
for m=1:P
   d01(:,m)=abs(r01-H(:,1)*s(m)).^2; %uncoded signal
%coded signals       
   d1(:,m)=abs(sum(z1,2)-s(m)).^2+(-1+sum(Habs,2))*abs(s(m))^2;
   d2(:,m)=abs(sum(z2,2)-s(m)).^2+(-1+sum(Habs,2))*abs(s(m))^2;
end
     
% determine the minimum of estimates      
     
%decision for detecting uncoded
      [y0,i0]=min((d01),[],2);
      s0d=s(i0).';
      
      clear d01 
      
%decision for detecting s1     
      [y1,i1]=min(d1,[],2);
      s1d=s(i1).';
      
      clear d1
%decision for detecting s2     
      [y2,i2]=min(d2,[],2);
      s2d=s(i2).';
      
      clear d2

% form received symbols    
      Xd=[s1d s2d];
%determine symbol errors   
error_un(packet_count)=sum(X(:,1)~=s0d);% for uncoded
temp1=X>0;
temp2=Xd>0;
error(packet_count)=sum(sum(temp1~=temp2));% for coded
       end% end of FOR loop for "packet_count"

%calculate FER, SER and BER for current idx

%for uncoded signal
  SER_uncoded(idx)=sum(error_un)/(Num*K);
  BER_uncoded(idx)=SER_uncoded(idx)/BIT;
  FER_uncoded(idx)=SER_uncoded(idx)*K;

% for coded signals
  SER(idx)=sum(error)/(Num*K);
  BER(idx)=SER(idx)/BIT;
  FER(idx)=SER(idx)*K;
  
%increment idx  
  idx=idx + 1; 
end% end of FOR loop for SNR
%semilogy(EbNo,SER,'g')
%hold on
semilogy(EbNo,BER,'>')
%legend('SER','BER')
clc
clear
hold on
%SNR upto 20 dBs
EbNo=[0:2:20];

%N, M: number of transmit and receive antennas

%N=no_tx_antennas;
%M=no_rx_antennas;
N=2;
M=2;
%initialize count
idx = 1;
 Num=100;
K=1000;
for SNR=EbNo

  sigma=0.5/(10^(SNR/10));  

  % Num -> number of packets
       for packet_count=1:Num
 
% we are interested in transmitting 'K' SYMBOLS not bits. Hence, K*2 for QPSK
% etc.
                data=randint(K*2,N);
                BIT=2;
           
tx_bits=data.';
temp=[];
temp1=[];
for i=1:N
   % [temp1 s P]=tx_modulate(tx_bits(i,:),modulation);
   bits_in(i,:)=tx_bits(i,:);
   full_len = length(bits_in(i,:));
   %%%%%%%%%%%%%%%%%%%5
  % function [mod_symbols,table, P] = tx_modulate(bits_in, modulation)

⌨️ 快捷键说明

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