📄 1k.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 + -