基于MRC,ZF,MMSE,ZF-SIC,MMSE-SIC算法实现MIMO接收性能检测,绘制误比特率~接收天线数曲线
  sighgy4X1iDp 2023年11月02日 18 0

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

在无线通信系统中,接收性能的优化是一个重要的研究领域。Vblast(垂直布置的多天线)是一种多天线技术,通过在发送端和接收端使用多个天线来提高系统的性能。然而,为了实现Vblast系统,我们需要一些先进的算法来处理多天线之间的干扰。

本文将介绍基于最大比合并(MRC)、零离子(ZF)、最小均方误差(MMSE)、零离子-干扰消除(ZF-SIC)和最小均方误差-干扰消除(MMSE-SIC)算法的Vblast接收性能检测。我们将使用这些算法来绘制误比特率-接收天线数曲线,以评估它们在不同接收天线数下的性能。

首先,我们将简要介绍这些算法的原理。MRC算法通过将来自不同天线的信号进行合并,选择最强的信号来进行解调。这样可以有效地提高信号的质量。ZF算法通过将接收到的信号与信道矩阵的逆矩阵相乘,消除了多天线之间的干扰。MMSE算法则通过最小化均方误差来优化接收信号的质量。

接下来,我们将介绍ZF-SIC和MMSE-SIC算法。这些算法在ZF和MMSE的基础上,进一步消除了多天线之间的干扰。ZF-SIC算法首先使用ZF算法进行解调,然后对解调后的信号进行干扰消除。类似地,MMSE-SIC算法首先使用MMSE算法进行解调,然后对解调后的信号进行干扰消除。这样,我们可以进一步提高接收性能。

为了评估这些算法的性能,我们将绘制误比特率-接收天线数曲线。误比特率是衡量接收信号质量的指标,它表示在接收到的信号中每个比特错误的概率。我们将在不同的接收天线数下,使用MRC、ZF、MMSE、ZF-SIC和MMSE-SIC算法进行接收,并记录误比特率。然后,我们将这些数据绘制成曲线,以比较不同算法在不同接收天线数下的性能。

通过绘制误比特率-接收天线数曲线,我们可以看到不同算法的性能差异。在接收天线数较少的情况下,MRC算法可能表现较好。随着接收天线数的增加,ZF算法的性能可能逐渐超过MRC算法。而MMSE算法则可能在更高的接收天线数下表现更好。ZF-SIC和MMSE-SIC算法可以进一步提高性能,尤其是在较高的接收天线数下。

综上所述,基于MRC、ZF、MMSE、ZF-SIC和MMSE-SIC算法的Vblast接收性能检测可以帮助我们评估不同算法在多天线系统中的性能。通过绘制误比特率-接收天线数曲线,我们可以比较不同算法在不同接收天线数下的性能差异。这些算法可以为无线通信系统的优化提供有价值的参考。



⛄ 部分代码

% 仿真五种(MRC,ZF,MMSE,ZF-SIC,MMSE-SIC) Vblast接收的检测性能,绘制误比特率~接收天线数曲线。 
% 发端初始化=============================================================== 
% 发射天线数tx,接收天线数rx,发射矩阵长度L(帧长) 
clear all;
clc;

tx=10;
rx_number=[20:20:200];
L=10000; 
Modulation='QPSK';
EbN0=5;
B=30000;Ts=1/24300; 
SNR=EbN0-10*log10(Ts*B);
% SNR=5;
% 信源A 
A=randi([0,3],tx*L,1); 
% 经过QPSK调制的V-Blast发射矩阵X 
X1=reshape(A,tx,L);
X=zeros(tx,L); 
for k=1:L
    X(:,k)=pskmod(X1(:,k),4);
end 

% 检测

% MRC======================================================================
disp('MRC');
berm=[];

for rx=rx_number
    rx
    % 快衰落Rayleigh信道H 
    H=sqrt(1/2)*(randn(rx,tx,L)+i*randn(rx,tx,L)); 
    % 均值为0方差为1的高斯白噪声n 
    n=sqrt(1/2)*(randn(rx,L)+i*randn(rx,L));
    % 未叠加噪声的接收信号R 
    R=zeros(rx,L); 
    for k=1:L
       R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k); 
    end
    
    snr=10^(SNR/10);
    R_noised=R+sqrt(1/snr)*n;
    x=[];
    
    % 逐时隙对接收符号矢量进行检测,合并得到一帧发射矩阵X的估计x 
    for t=1:L
        r=R_noised(:,t);
        HH=H(:,:,t);
        G=HH';
        y=G*r;
        xtemp=zeros(tx,1);
        for k=1:tx
            if imag(y(k))<real(y(k)) && imag(y(k))>-real(y(k))
                xtemp(k)=1;
            elseif imag(y(k))>real(y(k)) && imag(y(k))>-real(y(k))
                xtemp(k)=i;
            elseif imag(y(k))>real(y(k)) && imag(y(k))<-real(y(k))
                xtemp(k)=-1;
            elseif imag(y(k))<real(y(k)) && imag(y(k))<-real(y(k))
                xtemp(k)=-i;
            end
        end
        x=[x,xtemp];
    end
    % 从x求A的估计a 
    x1=zeros(tx,L);
    for k=1:L
        x1(:,k)=pskdemod(x(:,k),4);
    end
    a=reshape(x1,tx*L,1);
    % 比较A和a计算错值率temp_ber
    [errbit,temp_ber]=biterr(A,a,2); 
    berm=[berm,temp_ber];
end
figure
semilogy(rx_number,berm,'*- g');
hold on

% ZF=======================================================================
disp('ZF');
berz=[];

for rx=rx_number
    rx
    % 快衰落Rayleigh信道H 
    H=sqrt(1/2)*(randn(rx,tx,L)+i*randn(rx,tx,L)); 
    % 均值为0方差为1的高斯白噪声n 
    n=sqrt(1/2)*(randn(rx,L)+i*randn(rx,L));
    % 未叠加噪声的接收信号R 
    R=zeros(rx,L); 
    for k=1:L
       R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k); 
    end
    
    snr=10^(SNR/10);
    R_noised=R+sqrt(1/snr)*n;
    x=[];
    
    % 逐时隙对接收符号矢量进行检测,合并得到一帧发射矩阵X的估计x 
    for t=1:L
        r=R_noised(:,t);
        HH=H(:,:,t);
        G=pinv(HH);
        y=G*r;
        xtemp=zeros(tx,1);
        for k=1:tx
            if imag(y(k))<real(y(k)) && imag(y(k))>-real(y(k))
                xtemp(k)=1;
            elseif imag(y(k))>real(y(k)) && imag(y(k))>-real(y(k))
                xtemp(k)=i;
            elseif imag(y(k))>real(y(k)) && imag(y(k))<-real(y(k))
                xtemp(k)=-1;
            elseif imag(y(k))<real(y(k)) && imag(y(k))<-real(y(k))
                xtemp(k)=-i;
            end
        end
        x=[x,xtemp];
    end
    % 从x求A的估计a 
    x1=zeros(tx,L);
    for k=1:L
        x1(:,k)=pskdemod(x(:,k),4);
    end
    a=reshape(x1,tx*L,1);
    % 比较A和a计算错值率temp_ber
    [errbit,temp_ber]=biterr(A,a,2); 
    berz=[berz,temp_ber];
end
semilogy(rx_number,berz,'o- b');

% MMSE=====================================================================
disp('MMSE');
bermm=[];

for rx=rx_number
    rx
    % 快衰落Rayleigh信道H 
    H=sqrt(1/2)*(randn(rx,tx,L)+i*randn(rx,tx,L)); 
    % 均值为0方差为1的高斯白噪声n 
    n=sqrt(1/2)*(randn(rx,L)+i*randn(rx,L));
    % 未叠加噪声的接收信号R 
    R=zeros(rx,L); 
    for k=1:L
       R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k); 
    end
    
    snr=10^(SNR/10);
    R_noised=R+sqrt(1/snr)*n;
    x=[];
    
    % 逐时隙对接收符号矢量进行检测,合并得到一帧发射矩阵X的估计x 
    for t=1:L
        r=R_noised(:,t);
        HH=H(:,:,t);
        G=inv(HH'*HH+(1/snr)*eye(tx))*HH';
        y=G*r;
        xtemp=zeros(tx,1);
        for k=1:tx
            if imag(y(k))<real(y(k)) && imag(y(k))>-real(y(k))
                xtemp(k)=1;
            elseif imag(y(k))>real(y(k)) && imag(y(k))>-real(y(k))
                xtemp(k)=i;
            elseif imag(y(k))>real(y(k)) && imag(y(k))<-real(y(k))
                xtemp(k)=-1;
            elseif imag(y(k))<real(y(k)) && imag(y(k))<-real(y(k))
                xtemp(k)=-i;
            end
        end
        x=[x,xtemp];
    end
    % 从x求A的估计a 
    x1=zeros(tx,L);
    for k=1:L
        x1(:,k)=pskdemod(x(:,k),4);
    end
    a=reshape(x1,tx*L,1);
    % 比较A和a计算错值率temp_ber
    [errbit,temp_ber]=biterr(A,a,2); 
    bermm=[bermm,temp_ber];
end
semilogy(rx_number,bermm,'o- r');

% ZF-SIC===================================================================
disp('ZF-SIC');
berzs=[];

for rx=rx_number
    rx
    % 快衰落Rayleigh信道H
    H=sqrt(1/2)*(randn(rx,tx,L)+i*randn(rx,tx,L));
    % 均值为0方差为1的高斯白噪声n
    n=sqrt(1/2)*(randn(rx,L)+i*randn(rx,L));
    % 未叠加噪声的接收信号R
    R=zeros(rx,L);
    for k=1:L
        R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k);
    end
    
    snr=10^(SNR/10);
    R_noised=R+sqrt(1/snr)*n;
    x=[];
    
    for t=1:L
        r=R_noised(:,t);
        HH=H(:,:,t);
        G=pinv(HH);
        S=[1:tx];
        xtemp=zeros(tx,1);
        for k=1:tx
            [wki,ki]=minnorm(G);
            y=wki*r;
            if imag(y)<real(y) && imag(y)>-real(y)
                xtemp(S(ki))=1;
            elseif imag(y)>real(y) && imag(y)>-real(y)
                xtemp(S(ki))=i;
            elseif imag(y)>real(y) && imag(y)<-real(y)
                xtemp(S(ki))=-1;
            elseif imag(y)<real(y) && imag(y)<-real(y)
                xtemp(S(ki))=-i;
            end
            r=r-sqrt(1/tx)*xtemp(S(ki))*H(:,S(ki),t);
            HH(:,ki)=[];
            S(ki)=[];
            G=pinv(HH);
        end
        x=[x,xtemp];
    end
    % 从x求A的估计a 
    x1=zeros(tx,L);
    for k=1:L
        x1(:,k)=pskdemod(x(:,k),4);
    end
    a=reshape(x1,tx*L,1);
    % 比较A和a计算错值率temp_ber 
    [errbit,temp_ber]=biterr(A,a,2); 
    berzs=[berzs,temp_ber];
end
semilogy(rx_number,berzs,'s- b');

% MMSE-SIC=================================================================
disp('MMSE-SIC')
bermms=[];

for rx=rx_number
    rx
    % 快衰落Rayleigh信道H
    H=sqrt(1/2)*(randn(rx,tx,L)+i*randn(rx,tx,L));
    % 均值为0方差为1的高斯白噪声n
    n=sqrt(1/2)*(randn(rx,L)+i*randn(rx,L));
    % 未叠加噪声的接收信号R
    R=zeros(rx,L);
    for k=1:L
        R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k);
    end
    
    snr=10^(SNR/10);
    R_noised=R+sqrt(1/snr)*n;
    x=[];
    
    for t=1:L
        r=R_noised(:,t);
        HH=H(:,:,t);
%         G=pinv(HH);
        G=inv(HH'*HH+(1/snr)*eye(tx))*HH';
        S=[1:tx];
        xtemp=zeros(tx,1);
        for k=1:tx
            [wki,ki]=minnorm(G);
%             w=inv(HH'*HH+(1/snr)*eye(tx-k+1))*HH';
%             y=w(ki,:)*r;
            y=wki*r;
            if imag(y)<real(y) && imag(y)>-real(y)
                xtemp(S(ki))=1;
            elseif imag(y)>real(y) && imag(y)>-real(y)
                xtemp(S(ki))=i;
            elseif imag(y)>real(y) && imag(y)<-real(y)
                xtemp(S(ki))=-1;
            elseif imag(y)<real(y) && imag(y)<-real(y)
                xtemp(S(ki))=-i;
            end
            r=r-sqrt(1/tx)*xtemp(S(ki))*H(:,S(ki),t);
            HH(:,ki)=[];
            S(ki)=[];
%             G=pinv(HH);
            G=inv(HH'*HH+(1/snr)*eye(tx-k))*HH';
        end
        x=[x,xtemp];
    end
    % 从x求A的估计a 
    x1=zeros(tx,L);
    for k=1:L
        x1(:,k)=pskdemod(x(:,k),4);
    end
    a=reshape(x1,tx*L,1);
    % 比较A和a计算错值率temp_ber 
    [errbit,temp_ber]=biterr(A,a,2); 
    bermms=[bermms,temp_ber];   
end
semilogy(rx_number,bermms,'s- r');

grid on
legend('MRC','ZF','MMSE','ZF-SIC','MMSE-SIC'); 
xlabel('接收天线数'); 
ylabel('误比特率(BER)'); 
title('blast检测比较')

⛄ 运行结果

基于MRC,ZF,MMSE,ZF-SIC,MMSE-SIC算法实现MIMO接收性能检测,绘制误比特率~接收天线数曲线_无人机

⛄ 参考文献

[1]杨敬畏.大规模MIMO系统的检测算法研究[D].杭州电子科技大学[2023-08-14].

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料

🍅 仿真咨询

1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面

卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

2.图像处理方面

图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

3 路径规划方面

旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

4 无人机应用方面

无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

5 无线传感器定位及布局方面

传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

6 信号处理方面

信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

7 电力系统方面

微电网优化、无功优化、配电网重构、储能配置

8 元胞自动机方面

交通流 人群疏散 病毒扩散 晶体生长

9 雷达方面

卡尔曼滤波跟踪、航迹关联、航迹融合


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
sighgy4X1iDp