自适应MSER波束形成辅助接收机的MATLAB仿真
Posted fpga和matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自适应MSER波束形成辅助接收机的MATLAB仿真相关的知识,希望对你有一定的参考价值。
目录
一、理论基础
运用波束形成技术,利用麦克风阵列估计指定方向上的混有噪声和干扰的期望信号。这些麦克风阵元位于不同的空间位置,对声波进行空间采样,然后对采样信号进行处理以衰减干扰信号并提取期望信号。这样就得到一个特定的阵列空间响应,其主瓣指向期望信号而对干扰进行陷波。
自适应波束形成能够分离在相同载波频率上传输的用户信号,因此提供了在空分多址场景中支持多用户的实用手段。此外,为了进一步提高可实现的带宽效率,高吞吐量正交幅度调制QAM方案在许多无线网络标准中变得流行,特别是在最近的WiMax标准中。多天线辅助多用户系统的自适应波束形成辅助检测其采用高阶QAM信令。
传统上,最小均方误差(MMSE)自适应波束形成辅助接收机的设计被认为是最先进的。然而,最近工作[1]提出了一种新的波束形成辅助最小符号误码率(MSER)设计并且证明了这种MSER设计提供了显著的性能增强,在可实现的符号错误率方面超过标准MMSE设计。该MSER波束形成设计在此贡献中得到充分发展。特别是MSER的自适应实现详细研究了波束形成算法,即最小符号误码率算法。在仿真中评估了所提出的自适应MSER波束形成方案,并与自适应MMSE波束形成基准。
该算法的流程和理论公式如下:
二、MATLAB程序
clc;
clear;
close all;
warning off;
SNR_set = [10:1:24];
BER = 1;
nRx = 4;
nTx = 3;
frame_length = 1000;
Bers = [];
%论文table 2
alpha = [0,-70,65,32];
SIR = [0,0,0,0];
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 < 500000
index = index+1;
for kk=1:nTx
bits(kk,:) = round(rand(1,frame_length));
symbols(kk,:) = qammod(bits(kk,:),16);
end
%transmit signal
s = symbols;
u = reshape(s,nTx,nRx,length(s)/nRx);
%Channel
h = 1/sqrt(2)*[randn(nRx,nTx,length(s)/nRx) + j*randn(nRx,nTx,length(s)/nRx)];
for ij = 1:nTx
p(:,ij,:) = h(:,ij,:).*exp(j*alpha(ij)*pi/180);
end
%mmse beamforming
WK = [];
WK2 = [];
w = [];
LMS = zeros(1,length(s)/nRx);
dt = [];
for i=1:length(s)/nRx
for ii = 1:length(SIR)
u2(:,ii) = u(:,ii,i)*10^(SIR(ii)/10);
end
XN(:,:,i)= awgn(u2,SNR,'measured');
%定义接收信号
w(:,:,i) = inv(p(:,:,i)*p(:,:,i)'+2*delta2^2*eye(nRx))*p(:,1,i);
Nsb = nRx;
M = nRx;
r =(2*sqrt(M)-2)/sqrt(M);
if i == 1
WK = w(:,:,i)'*p(:,:,i);
dt = -0.0001*[ones(1,Nsb)]';
else
bk = bits(1,nRx*(i-2)+1:nRx*(i-1));
bk = 2*bk-1;
x1_ = bk;
p1 = p(:,1,i);
yr = real(yhat(:,:,i-1));
cr = real(w(:,:,i));
for iii = 1:Nsb
l = iii;
ul = 2*l-sqrt(M) - 1;
Rtiii = exp(-(yr(iii) - cr(iii)*(ul-1))^2/(2*delta2^2))*((yr(iii) - cr(iii)*(ul-1))*w(:,:,i) - x1_(iii) + (ul-1)*p1);
end
PER= r/(2*Nsb*sqrt(2*pi)*delta2) * (Rt1 + Rt2 + Rt3 + Rt4);
yi = imag(yhat(:,:,i-1));
ci = imag(w(:,:,i));
for iii = 1:Nsb
q = iii;
uq = 2*q-sqrt(M) - 1;
Itiii = exp(-(yi(iii) - ci(iii)*(uq-1))^2/(2*delta2^2))*((yi(iii) - ci(iii)*(uq-1))*w(:,:,i) + sqrt(-1)*x1_(iii) + (uq-1)*p1);
end
PEI= r/(2*Nsb*sqrt(2*pi)*delta2) * (It1 + It2 + It3 + It4);
PEB= PER + sqrt(-1)*PEI;
for is = 1:length(PEB)
if isnan(abs(PEB(is))) == 1
PEB(is) = 1;
end
end
WWt(:,i-1) = PEB;
if i>3
fai=max(min((abs(WWt(:,i-1)).^2)./(abs(WWt(:,i-2)).^2),1),0);
else
fai=ones(nRx,1);
end
dt = fai.*dt - PEB;
miu = 5e-6;
WK = WK + miu*[dt(1:nTx)]';
end
WK = WK/(max(abs(WK)));
yhat(:,:,i) = WK*XN(:,:,i);
R1 = real(yhat(:,:,i));
I1 = imag(yhat(:,:,i));
s_hat(:,:,i)= qamdemod(R1+sqrt(-1)*I1,16);
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([10,40,1.0001e-6,1]);
ylabel('BER');
xlabel('SNR');
grid on
% save r2ber.mat SNR_set Bers
三、仿真结论
仿真结果如下:
提出了一种用于多天线辅助的自适应MSER波束形成技术采用高通量QAM信令的多用户通信系统。已经证明了MSER波束形成设计可以在可实现系统的SER方面提供比标准MMSE设计显著的性能增强。它已经还已经证明,MSER波束形成设计提供了更高的用户容量与传统的MMSE波束形成相比,在远近传感器中更为鲁棒设计已经使用称为LSER技术的随机梯度自适应算法实现了MSER波束形成解决方案的自适应实现。模拟研究结果清楚地表明,自适应LSER波束形成能够:在快速衰落条件下成功运行,其性能始终优于自适应LMS波束形成基准。
A01-14
以上是关于自适应MSER波束形成辅助接收机的MATLAB仿真的主要内容,如果未能解决你的问题,请参考以下文章