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

📄 1k.m

📁 mimo systems correlation
💻 M
字号:
clear; clc;
nt = 2;                     % Number of Transmit Antennas
nr = 2;                     % Number of Receive Antennas
a = 0.1;
cap =0;
ber=0;
% dt/lambda
SNRdB = 0:1:20;             % SNR range
NB = 1000;                   % Number of Bits
runs = 1000;                % Number of Iterations
 for user=1:1:4
 d = sign(randn(1,NB));                                  % BPSK signal generator
 dc = ones(nr,1)*d;
k=0;                    % Ricean Factor (keep 0 for Rayleigh)
D=1;
cons=(1/(k+1));         % For Ricean (if k=0 does not affect)

for i=1:nt              % Correlation at the Tx
    for m=1:nt
        Rt(i,m)=cons*besselj(0,2*pi*D*abs(i-m)*a);
    end
end

for i=1:nr              % Correlation at the Rx
    for m=1:nr
        Rr(i,m)=cons*besselj(0,2*pi*abs(i-m)*a);
    end
end
SNR = (10.^(SNRdB/10));
for ii = 1:1:length(SNRdB)
   pe = 0; 
  C=0;                                                % Dummy variables intialization
   for kk = 1:1:runs
        Hw = sqrt(1/2)*randn(nr,nt) + j*sqrt(1/2)*randn(nr,nt); % White Channel Matrix
        H = (sqrt(Rr))*Hw*(sqrt(Rt));                           % Spatially Correlated Channel Matrix
        [U0,S,V0] = svd(H);                                     % Singular Value Decomposition of the Channel Matrix
        %d = sign(randn(1,NB));                                  % BPSK signal generator
        %dc = ones(nr,1)*d;                                      % Same data over two users
        Txmode = S*dc;   % H * x (channel times data)
       P=inv(S'*S)*S';
        n =  sqrt(1/2) * randn(nr,NB) * (10^((-SNRdB(ii))/10)); % Noise Signal
        y = P*Txmode + n;                                         % Received Signal
        s_tilda = sum(y)/nr;                                    % Sum of the two sequences (for averaging)
        d_tilda = sign(real(s_tilda));                          % Real part and BPSK signal
       err = sum(abs(d_tilda - d)/2);                          % Number of errors estimation
       pe = pe + err;                                          % Probability of error (sum of "runs")
        I = eye(size(H));                                       % Identity matrix
        Hherm = ctranspose(H);                                  % Hermitian of channel matrix H
        Cap = log2(det(I + (SNR(ii)/nt)*H*Hherm));              % Capacity estimation
        C = C + Cap;                                            % Capacity SUM for averaging
   end
       pe = pe/runs;                                            % Average probability of error
      BER(:,ii) = pe/length(d);                                % Bit Error Rate
       Capacity(ii) = C/runs;                                   % Average Capacity (ergodic capacity)
end

ber=BER+ber;
cap = Capacity + cap;
 end
 %figure() % PLOTS    
 hold on
semilogy(SNRdB,ber/user,'-gs')
grid on
box on
xlabel('SNR (dB)');
ylabel('BER');

                            
%semilogy(SNRdB,cap/user,'-gs')
%grid on
%box on
%xlabel('SNR (dB)');
%ylabel('Capacity');
hold on
clear; clc;
nt = 4;                     % Number of Transmit Antennas
nr = 4;                     % Number of Receive Antennas
a = 0.1;
cap =0;
ber=0;
% dt/lambda
SNRdB = 0:1:20;             % SNR range
NB = 1000;                   % Number of Bits
runs = 1000;                % Number of Iterations
 for user=1:1:4
 d = sign(randn(1,NB));                                  % BPSK signal generator
 dc = ones(nr,1)*d;
k=0;                    % Ricean Factor (keep 0 for Rayleigh)
D=1;
cons=(1/(k+1));         % For Ricean (if k=0 does not affect)

for i=1:nt              % Correlation at the Tx
    for m=1:nt
        Rt(i,m)=cons*besselj(0,2*pi*D*abs(i-m)*a);
    end
end

for i=1:nr              % Correlation at the Rx
    for m=1:nr
        Rr(i,m)=cons*besselj(0,2*pi*abs(i-m)*a);
    end
end
SNR = (10.^(SNRdB/10));
for ii = 1:1:length(SNRdB)
    pe = 0; 
  C=0;                                                % Dummy variables intialization
   for kk = 1:1:runs
        Hw = sqrt(1/2)*randn(nr,nt) + j*sqrt(1/2)*randn(nr,nt); % White Channel Matrix
        H = (sqrt(Rr))*Hw*(sqrt(Rt));                           % Spatially Correlated Channel Matrix
        [U0,S,V0] = svd(H);                                     % Singular Value Decomposition of the Channel Matrix
        %d = sign(randn(1,NB));                                  % BPSK signal generator
        %dc = ones(nr,1)*d;                                      % Same data over two users
        Txmode = S*dc;   % H * x (channel times data)
        P=inv(S'*S)*S';
        n =  sqrt(1/2) * randn(nr,NB) * (10^((-SNRdB(ii))/10)); % Noise Signal
        y = P*Txmode + n;                                         % Received Signal
        s_tilda = sum(y)/nr;                                    % Sum of the two sequences (for averaging)
        d_tilda = sign(real(s_tilda));                          % Real part and BPSK signal
        err = sum(abs(d_tilda - d)/2);                          % Number of errors estimation
        pe = pe + err;                                          % Probability of error (sum of "runs")
        I = eye(size(H));                                       % Identity matrix
        Hherm = ctranspose(H);                                  % Hermitian of channel matrix H
        Cap = log2(det(I + (SNR(ii)/nt)*H*Hherm));              % Capacity estimation
        C = C + Cap;                                            % Capacity SUM for averaging
   end
 pe = pe/runs;                                            % Average probability of error
       BER(:,ii) = pe/length(d);                                % Bit Error Rate
       Capacity(ii) = C/runs;                                   % Average Capacity (ergodic capacity)
end

ber=BER+ber;
cap = Capacity + cap;
 end
 %figure() % PLOTS    
 hold on
semilogy(SNRdB,ber/user,'-rs')
grid on
box on
xlabel('SNR (dB)');
ylabel('BER');

                            
%semilogy(SNRdB,cap/user,'-rs')
%grid on
%box on
%xlabel('SNR (dB)');
%ylabel('Capacity');
hold on
clear; clc;
nt = 10;                     % Number of Transmit Antennas
nr = 10;                     % Number of Receive Antennas
a = 0.1;
cap =0;
ber=0;
% dt/lambda
SNRdB = 0:1:20;             % SNR range
NB = 1000;                   % Number of Bits
runs = 1000;                % Number of Iterations
 for user=1:1:4
 d = sign(randn(1,NB));                                  % BPSK signal generator
 dc = ones(nr,1)*d;
k=0;                    % Ricean Factor (keep 0 for Rayleigh)
D=1;
cons=(1/(k+1));         % For Ricean (if k=0 does not affect)

for i=1:nt              % Correlation at the Tx
    for m=1:nt
        Rt(i,m)=cons*besselj(0,2*pi*D*abs(i-m)*a);
    end
end

for i=1:nr              % Correlation at the Rx
    for m=1:nr
        Rr(i,m)=cons*besselj(0,2*pi*abs(i-m)*a);
    end
end
SNR = (10.^(SNRdB/10));
for ii = 1:1:length(SNRdB)
    pe = 0; 
  C=0;                                                % Dummy variables intialization
   for kk = 1:1:runs
        Hw = sqrt(1/2)*randn(nr,nt) + j*sqrt(1/2)*randn(nr,nt); % White Channel Matrix
        H = (sqrt(Rr))*Hw*(sqrt(Rt));                           % Spatially Correlated Channel Matrix
        [U0,S,V0] = svd(H);                                     % Singular Value Decomposition of the Channel Matrix
        %d = sign(randn(1,NB));                                  % BPSK signal generator
        %dc = ones(nr,1)*d;                                      % Same data over two users
        Txmode = S*dc;   % H * x (channel times data)
       P=inv(S'*S)*S';
        n =  sqrt(1/2) * randn(nr,NB) * (10^((-SNRdB(ii))/10)); % Noise Signal
        y = P*Txmode + n;                                         % Received Signal
        s_tilda = sum(y)/nr;                                    % Sum of the two sequences (for averaging)
        d_tilda = sign(real(s_tilda));                          % Real part and BPSK signal
        err = sum(abs(d_tilda - d)/2);                          % Number of errors estimation
        pe = pe + err;                                          % Probability of error (sum of "runs")
        I = eye(size(H));                                       % Identity matrix
        Hherm = ctranspose(H);                                  % Hermitian of channel matrix H
        Cap = log2(det(I + (SNR(ii)/nt)*H*Hherm));              % Capacity estimation
        C = C + Cap;                                            % Capacity SUM for averaging
   end
  pe = pe/runs;                                            % Average probability of error
       BER(:,ii) = pe/length(d);                                % Bit Error Rate
       Capacity(ii) = C/runs;                                   % Average Capacity (ergodic capacity)
end

ber=BER+ber;
cap = Capacity + cap;
 end
 %figure() % PLOTS    
 hold on
semilogy(SNRdB,ber/user,'-bs')
grid on
box on
xlabel('SNR (dB)');
ylabel('BER');

                            
%semilogy(SNRdB,cap/user,'-bs')
%grid on
%box on
%xlabel('SNR (dB)');
%ylabel('Capacity');
hold on
legend('2by2 MIMO system','4by4 MIMO system','10by10 MIMO system','location','Northwest')

⌨️ 快捷键说明

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