1.软件版本
matlab2013b
2.本算法理论知识
3.部分源码
clc;
clear;
close all;
warning off;
SNR_set = [0:1:12];
BER = 1;
nRx = 10;
nTx = 10;
frame_length = 1000;
Bers = [];
%论文table 2
alpha = [0,10,-15,30,-45,50,60,-55,-35,-60];
for SNR = SNR_set;
N0 = 1/(10^(SNR/10));
delta2 = N0;
error_count = 0;
bit_count = 0;
index = 0;
ERR_NUM = [];
tmps = 0;
while error_count < 50000
index = index+1;
for kk=1:nTx
bits(kk,:) = round(rand(1,frame_length));
%QPSK
symbols(kk,:) = -2*(pskmod(bits(kk,:),4)-(0.5+sqrt(-1)*0.5));
end
%transmit signal
s = symbols;
u = reshape(s,nRx,nTx,length(s)/nTx);
%Channel
h = 1/sqrt(2)*[randn(nRx, nTx,length(s)/nTx) + j*randn(nRx,nTx,length(s)/nTx)];
for ij = 1:nTx
p(:,ij,:) = h(:,ij,:).*exp(j*alpha(ij)*pi/180);
end
%mmse beamforming
WK = [];
WK2= [];
w = [];
for i=1:length(s)/nTx
n = sqrt(N0/2)*(randn(nTx,nRx)+1j*randn(nTx,nRx));
XN(:,:,i)= u(:,:,i) + n;
%定义接收信号
w(:,:,i) = inv(p(:,:,i)*p(:,:,i)'+2*delta2^2*eye(nRx))*p(:,1,i);
if i == 1
WK = w(:,:,i)'*p(:,:,i);
else
bk = bits(1,nTx*(i-2)+1:nTx*(i-1));
bk = 2*bk-1;
pn = 2^delta2;
yr = real(yhat(:,:,i-1));
miu = 0.0000001;
WK = WK + miu*(sign(bk)/(2*sqrt(2*pi)*pn)).*exp(-yr.^2/(2*pn^2))*(XN(:,:,i));
end
WK = WK/(max(abs(WK)));
yhat(:,:,i) = WK*XN(:,:,i);
R1 = real(yhat(:,:,i))<0;
I1 = imag(yhat(:,:,i))<0;
s_hat(:,:,i)= pskdemod(R1+sqrt(-1)*I1,4);
end
s_hat1 = squeeze(s_hat);
recovered_bits = reshape(s_hat1,1,length(s));
ERR_NUM = sum(recovered_bits ~= bits(1,:));
%异常错误不进行统计
if index <= 200
tmps = tmps + ERR_NUM;
else
if ERR_NUM/(tmps/200) < 20
SNR
error_count
error_count = error_count + ERR_NUM;
bit_count = bit_count + frame_length;
end
end
end
%Calculate the BER
BER = error_count/bit_count;
Bers = [Bers,BER];
end
error_count
bit_count
figure;
semilogy(SNR_set,Bers,'b-o');
axis([0,30,1e-6,1]);
ylabel('BER');
xlabel('SNR');
grid on
% save r4.mat SNR_set Bers
4.仿真分析
5.参考文献
[1] Chen S , Hanzo L , Ahmad\T N N . adaptive minimum bit error rate beamforming assisted receiver for wireless communications[J]. 2017.A21-06