个人主页:研学社的博客
欢迎来到本博客❤️❤️
博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
本文目录如下:
目录
1 概述
2 运行结果
3 Matlab代码实现
4 参考文献
本文 说明 了 如何 在 大规模 MIMO 通信 系统 的 发射 端 采用 混合 波束 成形, 同时 使用 多 用户 和 单 用户 系统 的 技术。该示例采用全通道探测来确定发射机的通道状态信息。它将所需的预编码划分为数字基带和模拟RF组件,对多用户和单用户系统使用不同的技术。简化的全数字接收器可恢复多个传输的数据流,以突出显示通信系统的常见品质因数,即EVM和BER。
该示例采用基于散射的空间信道模型,该模型考虑了发射/接收空间位置和天线方向图。还提供更简单的静态扁平MIMO通道,用于链路验证目的。
对高数据速率和更多用户容量的需求不断增长,因此需要更有效地使用可用频谱。多用户 MIMO (MU-MIMO) 允许基站 (BS) 发射器使用相同的时频资源与多个移动站 (MS) 接收器同时通信,从而提高频谱效率。大规模MIMO允许BS天线元件的数量达到数十或数百个,从而也将小区中的数据流数量增加到一个很大的值。
下一代 5G 无线系统使用毫米波 (mmWave) 频段来利用其更宽的带宽。5G系统还部署了大规模天线阵列,以减轻毫米波频段的严重传播损耗。
与当前的无线系统相比,毫米波频段的波长要小得多。虽然这允许阵列在同一物理尺寸内包含更多元件,但为每个天线元件提供一个发射-接收(TR)模块或RF链的成本要高得多。混合收发器是一种实用的解决方案,因为它们在RF中使用模拟波束成形器和在基带域中使用数字波束成形器的组合,RF链少于发射元件的数量[1]。
本例使用多用户MIMO-OFDM系统,突出显示发射端所需预编码对其数字基带和RF模拟组件的分区。本例以相控阵MIMO-OFDM预编码示例中突出显示的系统为基础,展示了发送端预编码矩阵的制定及其在MIMO-OFDM系统中的应用。
-----------------------------------------
Identification between order 2 and 20
-----------------------------------------
>> main
----- Execution Summary -----
Number of users: 4
Number of independent data streams per user: [3 2 1 2]
numSTS: 8
Number of BS transmit antennas: 64
Number of receive antennas, per user: [12 8 4 8]
Number of bits per sub carrier: 4
Modulation: 16QAM
Number of OFDM data symbols: 10
maxRange: 1000
Frequency: 28000000000
Maximum Sample Rate: 100000000
Channel type: Scattering
Noise figure: 8
Number of rays for Frf: 500
-----------------------------
User 1
RMS EVM (%) = 0.38361
BER = 0.00000; No. of Bits = 9354; No. of errors = 0
User 2
RMS EVM (%) = 1.0311
BER = 0.00000; No. of Bits = 6234; No. of errors = 0
User 3
RMS EVM (%) = 2.1462
BER = 0.00000; No. of Bits = 3114; No. of errors = 0
User 4
RMS EVM (%) = 1.0024
BER = 0.00000; No. of Bits = 6234; No. of errors = 0
>>
>>
-----------------------------------------
Identification between order 2 and 20
-----------------------------------------
>> main
----- Execution Summary -----
Number of users: 4
Number of independent data streams per user: [3 2 1 2]
numSTS: 8
Number of BS transmit antennas: 64
Number of receive antennas, per user: [12 8 4 8]
Number of bits per sub carrier: 4
Modulation: 16QAM
Number of OFDM data symbols: 10
maxRange: 1000
Frequency: 28000000000
Maximum Sample Rate: 100000000
Channel type: Scattering
Noise figure: 8
Number of rays for Frf: 500
-----------------------------
User 1
RMS EVM (%) = 0.38361
BER = 0.00000; No. of Bits = 9354; No. of errors = 0
User 2
RMS EVM (%) = 1.0311
BER = 0.00000; No. of Bits = 6234; No. of errors = 0
User 3
RMS EVM (%) = 2.1462
BER = 0.00000; No. of Bits = 3114; No. of errors = 0
User 4
RMS EVM (%) = 1.0024
BER = 0.00000; No. of Bits = 6234; No. of errors = 0
>>
>>
部分代码:
% Multi-user system with single/multiple streams per user
prm.numUsers = 4; % Number of users
prm.numSTSVec = [3 2 1 2]; % Number of independent data streams per user
prm.numSTS = sum(prm.numSTSVec); % Must be a power of 2
prm.numTx = prm.numSTS * 8; % Number of BS transmit antennas (power of 2)
prm.numRx = prm.numSTSVec * 4; % Number of receive antennas, per user (any >= numSTSVec)
% Each user has the same modulation
prm.bitsPerSubCarrier = 4; % 2: QPSK, 4: 16QAM, 6: 64QAM, 8: 256QAM
prm.numDataSymbols = 10; % Number of OFDM data symbols
% MS positions: assumes BS at origin
% Angles specified as [azimuth;elevation] degrees
% az in range [-180 180], el in range [-90 90], e.g. [45;0]
maxRange = 1000; % all MSs within 1000 meters of BS
prm.mobileRanges = randi([1 maxRange], 1, prm.numUsers);
prm.mobileAngles = [rand(1, prm.numUsers) * 360 - 180; ...
rand(1, prm.numUsers) * 180 - 90];
prm.fc = 28e9; % 28 GHz system
prm.chanSRate = 100e6; % Channel sampling rate, 100 Msps
prm.ChanType = 'Scattering'; % Channel options: 'Scattering', 'MIMO'
prm.NFig = 8; % Noise figure (increase to worsen, 5-10 dB)
prm.nRays = 500; % Number of rays for Frf, Fbb partitioning
%% DEFINE OFDM MODULATION PARAMETERS USEDS FOR THE SYSTEM %%%%%%%%%%%%%%%
prm.FFTLength = 256;
prm.CyclicPrefixLength = 64;
prm.numCarriers = 234; % Number of carries
prm.NullCarrierIndices = [1:7 129 256-5:256]'; % Guards and DC
prm.PilotCarrierIndices = [26 54 90 118 140 168 204 232]';
nonDataIdx = [prm.NullCarrierIndices; prm.PilotCarrierIndices];
prm.CarriersLocations = setdiff((1:prm.FFTLength)', sort(nonDataIdx));
numSTS = prm.numSTS;
numTx = prm.numTx;
numRx = prm.numRx;
numSTSVec = prm.numSTSVec;
codeRate = 1/3; % same code rate per user
numTails = 6; % number of termination tail bits
prm.numFrmBits = numSTSVec.* (prm.numDataSymbols * prm.numCarriers * ...
prm.bitsPerSubCarrier * codeRate) - numTails;
prm.modMode = 2 ^ prm.bitsPerSubCarrier; % Modulation order
% Account for channel filter delay
numPadSym = 3; % number of symbols to zeropad
prm.numPadZeros = numPadSym* (prm.FFTLength + prm.CyclicPrefixLength);
%% DEFINE TRANSMITE AND RECEIVE ARRAYS AND %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% POSITIONAL PARAMETERS FOR THE SYSTEM %%%%%%%%%%%%%%%%%%%%
prm.cLight = physconst('LightSpeed');
prm.lambda = prm.cLight / prm.fc;
% Get transmit and receive array information
[isTxURA, expFactorTx, isRxURA, expFactorRx] = helperArrayInfo(prm, true);
部分理论来源于网络,如有侵权请联系删除。
[1] Molisch, A. F., et al. "Hybrid Beamforming for Massive MIMO: A Survey." IEEE Communications Magazine, Vol. 55, No. 9, September 2017, pp. 134-141.