【通信】考虑(配备大型天线阵列)和单天线用户设备的大规模 MIMO 系统附matlab代码

简介: 【通信】考虑(配备大型天线阵列)和单天线用户设备的大规模 MIMO 系统附matlab代码

1 内容介绍

由于大大提高了空间分辨率和阵列增益,大规模天线阵列的使用可以为无线系统带来能量和/或频谱效率的显着提高。大规模多输入多输出 (MIMO) 领域的最新工作表明,当基站 (BS) 上的天线数量增加时,用户信道会去相关,因此可以在用户间干扰很小的情况下实现强信号增益。由于这些结果依赖于渐近,因此研究常规系统模型在这种渐近状态下是否合理是很重要的。本文考虑了一种新的系统模型,该模型在 BS(配备大型天线阵列)和单天线用户设备 (UE) 处结合了通用收发器硬件损伤。与理想硬件的传统情况相反,我们表明硬件损伤会在信道估计精度和每个 UE 的下行链路/上行链路容量上产生有限的上限。令人惊讶的是,容量主要受 UE 的硬件限制,而大规模阵列中损伤的影响逐渐消失,用户间干扰(特别是导频污染)变得可以忽略不计。此外,我们证明了大规模 MIMO 提供的巨大自由度可用于降低发射功率和/或容忍更大的硬件损伤,从而允许使用廉价且节能的天线元件。

2 仿真代码

%This Matlab script can be used to generate Figure 4, in the article:

%

%Emil Bj鰎nson, Jakob Hoydis, Marios Kountouris, M閞ouane Debbah, 揗assive

%MIMO Systems with Non-Ideal Hardware: Energy Efficiency, Estimation, and

%Capacity Limits,?To appear in IEEE Transactions on Information Theory.

%

%Download article: http://arxiv.org/pdf/1307.2584

%

%This is version 1.0 (Last edited: 2014-08-26)

%

%License: This code is licensed under the GPLv2 license. If you in any way

%use this code for research that results in publications, please cite our

%original article listed above.

%

%Please note that the channels are generated randomly, thus the results

%will not be exactly the same as in the paper.



%Initialization

close all;

clear all;




%%Simulation parameters


rng('shuffle'); %Initiate the random number generators with a random seed

%%If rng('shuffle'); is not supported by your Matlab version, you can use

%%the following commands instead:

%randn('state',sum(100*clock));


N = 50; %Number of BS antennas


%Compute normalized channel covariance matrix R according to the exponential

%correlaton model in Eq. (17).

correlationFactor = 0.7;

R = toeplitz(correlationFactor.^(0:N-1));


%Maximal pilot length

Bmax = 10;


%Define the level of hardware impairments at the UE and BS

kappatUE = 0.05^2;

kapparBS = 0.05^2;



%Range of SNRs in simulation (we have normalized sigma2 to 1)

SNRdB = [5 30]; %In decibel scale

SNR = 10.^(SNRdB/10); %In linear scale



%%Initialize Monte Carlo simulations


%Number realizations in Monte Carlo simulations

nbrOfMonteCarloRealizations = 100000;


%Generate random realizations

h = sqrtm(R)*(randn(N,nbrOfMonteCarloRealizations)+1i*randn(N,nbrOfMonteCarloRealizations))/sqrt(2); %Generate channel realizations

etatBS = (randn(1,nbrOfMonteCarloRealizations,Bmax)+1i*randn(1,nbrOfMonteCarloRealizations,Bmax))/sqrt(2); %Generate distortion noise at transmitter (to be scaled by kappatUE)

etarUE = ( repmat(abs(h),[1 1 Bmax]) .* (randn(N,nbrOfMonteCarloRealizations,Bmax)+1i*randn(N,nbrOfMonteCarloRealizations,Bmax)))/sqrt(2); %Generate distortion noise at receiver (to be scaled by kapparBS)

nu = (randn(N,nbrOfMonteCarloRealizations,Bmax)+1i*randn(N,nbrOfMonteCarloRealizations,Bmax))/sqrt(2); %Generate receiver realizations



%Placeholders for storing simulation results

normalizedMSE_corr_distortion = zeros(length(SNR),Bmax); %Normalized MSE for estimator in Eq. (15) for fully correlated distortion noise

normalizedMSE_uncorr_distortion = zeros(length(SNR),Bmax); %Normalized MSE for estimator in Eq. (15) for uncorrelated distortion noise

normalizedMSE_ideal = zeros(length(SNR),Bmax); %Normalized MSE for LMMSE estimator with ideal hardware



%Go through SNR values

for m = 1:length(SNR)

   

   %Output the progress of the simulation

   disp(['SNR: ' num2str(m) '/' num2str(length(SNR))]);

   

   %Compute the pilot signal for the given SNR value

   d = sqrt(SNR(m));

   

   %Go through different pilot lengths

   for B = 1:Bmax

       

       %Compute matrix A in the LMMSE estimator (see Eq. (9))

       A_LMMSE = conj(d) * R(1:N,1:N) / (abs(d)^2*(1+kappatUE)*R(1:N,1:N) + abs(d)^2*kapparBS*diag(diag(R(1:N,1:N)))+eye(N));

       

       %Compute matrix A in the LMMSE estimator (see Eq. (9)) for ideal hardware

       A_ideal = conj(d) * R(1:N,1:N) / (abs(d)^2*R(1:N,1:N) +eye(N));

       

       

       %Placeholders for storing squared estimation errors at current SNR

       errors_corr_distortion = zeros(nbrOfMonteCarloRealizations,1);

       errors_uncorr_distortion = zeros(nbrOfMonteCarloRealizations,1);

       errors_ideal = zeros(nbrOfMonteCarloRealizations,1);

       

       %Go through all Monte Carlo realizations

       for k = 1:nbrOfMonteCarloRealizations


           %Compute received signals

           z_corr = h(1:N,k) * ( d + abs(d)*sqrt(kappatUE)*etatBS(1,k,1) ) + abs(d)*sqrt(kapparBS)*etarUE(1:N,k,1) + sum(nu(1:N,k,1:B),3)/B;

           z_uncorr = h(1:N,k) * ( d + abs(d)*sqrt(kappatUE)*sum(etatBS(1,k,1:B),3)/B ) + abs(d)*sqrt(kapparBS)*sum(etarUE(1:N,k,1:B),3)/B + sum(nu(1:N,k,1:B),3)/B;

           z_ideal = h(1:N,k) * d  + sum(nu(1:N,k,1:B),3)/B;

           

           %Compute channel estimates

           hhat_corr = A_LMMSE*z_corr;

           hhat_uncorr = A_LMMSE*z_uncorr;

           hhat_ideal = A_ideal*z_ideal;

           

           %Compute the squared norms of the channel estimation errors

           errors_corr_distortion(k) = norm(hhat_corr -  h(1:N,k)).^2/N;

           errors_uncorr_distortion(k) = norm(hhat_uncorr -  h(1:N,k)).^2/N;

           errors_ideal(k) = norm(hhat_ideal -  h(1:N,k)).^2/N;

           

       end

       

       %Compute normalized MSEs as the average of the squared norms of the

       %estimation errors over the Monte Carlo realizations

       normalizedMSE_corr_distortion(m,B) = mean(errors_corr_distortion);

       normalizedMSE_uncorr_distortion(m,B) = mean(errors_uncorr_distortion);

       normalizedMSE_ideal(m,B) = mean(errors_ideal);

       

   end

   

end




%Plot Figure 4 from the paper

figure; hold on; box on;


for m = 1:length(SNR)

   

   plot(1:Bmax,normalizedMSE_corr_distortion(m,:),'ro-','LineWidth',1);

   plot(1:Bmax,normalizedMSE_uncorr_distortion(m,:),'bd-.','LineWidth',1);

   plot(1:Bmax,normalizedMSE_ideal(m,:),'k*--','LineWidth',1);

   

end


set(gca,'YScale','log');

xlabel('Pilot Length (B)');

ylabel('Relative Estimation Error per Antenna');

legend('Fully-Correlated Distortion Noise','Uncorrelated Distortion Noise','Ideal Hardware','Location','NorthEast');

3 运行结果

4 参考文献

[1] Bjornson E ,  Hoydis J ,  Kountouris M , et al. Massive MIMO Systems With Non-Ideal Hardware: Energy Efficiency, Estimation, and Capacity Limits[J]. IEEE Transactions on Information Theory, 2013, 60(11):7112-7139.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

相关文章
|
2天前
|
监控 算法 数据安全/隐私保护
基于扩频解扩+turbo译码的64QAM图传通信系统matlab误码率仿真,扩频参数可设置
该通信系统基于MATLAB 2022a仿真,适用于高要求的图像传输场景(如无人机、视频监控等),采用64QAM调制解调、扩频技术和Turbo译码提高抗干扰能力。发射端包括图像源、64QAM调制器、扩频器等;接收端则有解扩器、64QAM解调器和Turbo译码器等。核心程序实现图像传输的编码、调制、信道传输及解码,确保图像质量和传输可靠性。
27 16
|
23天前
|
算法 5G 数据安全/隐私保护
基于MIMO系统的PE-AltMin混合预编码算法matlab性能仿真
本文介绍了基于交替最小化(AltMin)算法的混合预编码技术在MIMO系统中的应用。通过Matlab 2022a仿真,展示了该算法在不同信噪比下的性能表现。核心程序实现了对预编码器和组合器的优化,有效降低了硬件复杂度,同时保持了接近全数字预编码的性能。仿真结果表明,该方法具有良好的鲁棒性和收敛性。
34 8
|
1月前
|
算法 数据安全/隐私保护 索引
OFDM系统PAPR算法的MATLAB仿真,对比SLM,PTS以及CAF,对比不同傅里叶变换长度
本项目展示了在MATLAB 2022a环境下,通过选择映射(SLM)与相位截断星座图(PTS)技术有效降低OFDM系统中PAPR的算法实现。包括无水印的算法运行效果预览、核心程序及详尽的中文注释,附带操作步骤视频,适合研究与教学使用。
|
1月前
|
机器学习/深度学习 算法 5G
基于MIMO系统的SDR-AltMin混合预编码算法matlab性能仿真
基于MIMO系统的SDR-AltMin混合预编码算法通过结合半定松弛和交替最小化技术,优化大规模MIMO系统的预编码矩阵,提高信号质量。Matlab 2022a仿真结果显示,该算法能有效提升系统性能并降低计算复杂度。核心程序包括预编码和接收矩阵的设计,以及不同信噪比下的性能评估。
49 3
|
22天前
|
算法 数据安全/隐私保护
数字通信中不同信道类型对通信系统性能影响matlab仿真分析,对比AWGN,BEC,BSC以及多径信道
本项目展示了数字通信系统中几种典型信道模型(AWGN、BEC、BSC及多径信道)的算法实现与分析。使用Matlab2022a开发,提供无水印运行效果预览图、部分核心代码及完整版带中文注释的源码和操作视频。通过数学公式深入解析各信道特性及其对系统性能的影响。
|
2月前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
226 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
142 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
111 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
7月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度

热门文章

最新文章