%% Beamforming for MIMO-OFDM Systems
% This example shows how to model a point-to-point MIMO-OFDM system with
% beamforming. The combination of multiple-input-multiple-output (MIMO) and
% orthogonal frequency division multiplexing (OFDM) techniques have been
% adopted in recent wireless standards, such as 802.11x families, to
% provide higher data rate. Because MIMO uses antenna arrays, beamforming
% can be adopted to improve the received signal to noise ratio (SNR) which
% in turn reduces the bit error rate (BER).
%
% This example requires Communications Toolbox(TM).
% Copyright 2014-2022 The MathWorks, Inc.
%% Introduction
% The term MIMO is used to describe a system where multiple transmitters or
% multiple receivers are present. In practice the system can take many
% different forms, such as single-input-multiple-output (SIMO) or
% multiple-input-single-output (MISO) system. This example illustrates a
% downlink MISO system. An 8-element ULA is deployed at the base station as
% the transmitter while the mobile unit is the receiver with a single
% antenna.
%
% The rest of the system is configured as follows. The transmitter power is
% 9 watts and the transmit gain is -8 dB. The mobile receiver is stationary
% and located at 2750 meters away, and is 3 degrees off the transmitter's
% boresight. An interferer with a power of 1 watt and a gain of -20 dB is
% located at 9000 meters, 20 degrees off the transmitter's boresight.
% Initialize system constants
rng(2014);
gc = helperGetDesignSpecsParameters();
% Tunable parameters
tp.txPower = 9; % watt
tp.txGain = -8; % dB
tp.mobileRange = 2750; % m
tp.mobileAngle = 3; % degrees
tp.interfPower = 1; % watt
tp.interfGain = -20; % dB
tp.interfRange = 9000; % m
tp.interfAngle = 20; % degrees
tp.numTXElements = 8;
tp.steeringAngle = 0; % degrees
tp.rxGain = 108.8320 - tp.txGain; % dB
numTx= tp.numTXElements;
%%
% The entire scene can be depicted in the figure below.
helperPlotMIMOEnvironment(gc, tp);
%% Signal Transmission
% First, configure the system's transmitter.
[encoder,scrambler,modulatorOFDM,steeringvec,transmitter,...
radiator,pilots,numDataSymbols,frmSz] = helperMIMOTxSetup(gc,tp);
%%
% There are many components in the transmitter subsystem, such as the
% convolutional encoder, the scrambler, the QAM modulator, the OFDM
% modulator, and so on. The message is first converted to an information
% bit stream and then passed through source coding and modulation stages to
% prepare for the radiation.
txBits = randi([0, 1], frmSz,1);
coded = encoder(txBits);
bitsS = scrambler(coded);
tx = qammod(bitsS,gc.modMode,'InputType','bit','UnitAveragePower',true);
%%
% In an OFDM system, the data is carried by multiple sub-carriers that are
% orthogonal to each other.
ofdm1 = reshape(tx, gc.numCarriers,numDataSymbols);
%%
% Then, the data stream is duplicated to all radiating elements in the
% transmitting array
ofdmData = repmat(ofdm1,[1, 1, numTx]);
txOFDM = modulatorOFDM(ofdmData, pilots);
%scale
txOFDM = txOFDM * ...
(gc.FFTLength/sqrt(gc.FFTLength-sum(gc.NumGuardBandCarriers)-1));
% Amplify to achieve peak TX power for each channel
for n = 1:numTx
txOFDM(:,n) = transmitter(txOFDM(:,n));
end
%%
% In a MIMO system, it is also possible to separate multiple users spatial
% division multiplexing (SDMA). In these situations, the data stream is
% often modulated by a weight corresponding to the desired direction so
% that once radiated, the signal is maximized in that direction. Because in
% a MIMO channel, the signal radiated from different elements in an array
% may go through different propagation environments, the signal radiated
% from each antenna should be propagated individually. This can be achieved
% by setting CombineRadiatedSignals to false on the phased.Radiator
% component.
radiator.CombineRadiatedSignals = false;
%%
% To achieve precoding, the data stream radiated from each antenna in the
% array is modulated by a phase shift corresponding to its radiating
% direction. The goal of this precoding is to ensure these data streams add
% in phase if the array is steered toward that direction. Precoding can be
% specified as weights used at the radiator.
wR = steeringvec(gc.fc,[-tp.mobileAngle;0]);
%%
% Meanwhile, the array is also steered toward a given steering angle, so
% the total weights are a combination of both precoding and the steering
% weights.
wT = steeringvec(gc.fc,[tp.steeringAngle;0]);
weight = wT.* wR;
%%
% The transmitted signal is thus given by
txOFDM = radiator(txOFDM,repmat([tp.mobileAngle;0],1,numTx),conj(weight));
%%
% Note that the transmitted signal, txOFDM, is a matrix whose columns
% represent data streams radiated from the corresponding elements in the
% transmit array.
%% Signal Propagation
% Next, the signal propagates through a MIMO channel. In general, there are
% two propagation effects on the received signal strength that are of
% interest: one of them is the spreading loss due to the propagation
% distance, often termed as the free space path loss; and the other is the
% fading due to multipath. This example models both effects.
[channel,interferenceTransmitter,toRxAng,spLoss] = ...
helperMIMOEnvSetup(gc,tp);
[sigFade, chPathG] = channel(txOFDM);
sigLoss = sigFade/sqrt(db2pow(spLoss(1)));
%%
% To simulate a more realistic mobile environment, the next section also
% inserts an interference source. Note that in a wireless communication
% system, the interference is often a different mobile user.
% Generate interference and apply gain and propagation loss
numBits = size(sigFade,1);
interfSymbols = wgn(numBits,1,1,'linear','complex');
interfSymbols = interferenceTransmitter(interfSymbols);
interfLoss = interfSymbols/sqrt(db2pow(spLoss(2)));
%% Signal Reception
% The receiving antenna collects both the propagated signal as well as the
% interference and passes them to the receiver to recover the original
% information embedded in the signal. Just like the transmit end of the
% system, the receiver used in a MIMO-OFDM system also contains many
% stages, including OFDM demodulator, QAM demodulator, descrambler,
% equalizer, and Viterbi decoder.
[collector,receiver,demodulatorOFDM,descrambler,decoder] = ...
helperMIMORxSetup(gc,tp,numDataSymbols);
rxSig = collector([sigLoss interfLoss],toRxAng);
% Front-end amplifier gain and thermal noise
rxSig = receiver(rxSig);
rxOFDM = rxSig * ...
(sqrt(gc.FFTLength-sum(gc.NumGuardBandCarriers)-1)) / (gc.FFTLength);
% OFDM Demodulation
rxOFDM = demodulatorOFDM(rxOFDM);
% Channel estimation
hD = helperIdealChannelEstimation(gc, numDataSymbols, chPathG);
% Equalization
rxEq = helperEqualizer(rxOFDM, hD, numTx);
% Collapse OFDM matrix
rxSymbs = rxEq(:);
rxBitsS = qamdemod(rxSymbs,gc.modMode,'UnitAveragePower',true,...
'OutputType','bit');
rxCoded = descrambler(rxBitsS);
rxDeCoded = decoder(rxCoded);
rxBits = rxDeCoded(1:frmSz);
%%
% A comparison of the decoded output with the original message stream
% suggests that the resulting BER is too high for a communication system.
% The constellation diagram is also shown below:
ber = comm.ErrorRate;
measures = ber(txBits, rxBits);
fprintf('BER = %.2f%%; No. of Bits = %d; No. of errors = %d\n', ...
measures(1)*100,measures(3), measures(2));
%%
constdiag = comm.ConstellationDiagram('SamplesPerSymbol', 1,...
'ReferenceConstellation', [], 'ColorFading',true,...
'Position', gc.constPlotPosition);
% Display received constellation
constdiag(rxSymbs);
%%
% The high BER is mainly due to the mobile being off the steering direction
% of the base station array. If the mobile is aligned with the steering
% direction, the BER is greatly improved.
tp.steeringAngle = tp.mobileAngle;
% Steer the transmitter main lobe
wT = steeringvec(gc.fc,[tp.steeringAngle;0]);
[txBits, rxBits,rxSymbs] = helperRerunMIMOBeamformingExample(gc,tp,wT);
reset(ber);
measures = ber(txBits, r
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
一、前言 此示例展示了如何使用波束成形对点对点 MIMO-OFDM 系统进行建模。最近的无线标准(如 802.11x 系列)采用了多输入多输出 (MIMO) 和正交频分复用 (OFDM) 技术的组合,以提供更高的数据速率。由于MIMO使用天线阵列,因此可以采用波束成形来提高接收信噪比(SNR),从而降低误码率(BER)。 此示例需要通信工具箱。 二、介绍 术语MIMO用于描述存在多个发射器或多个接收器的系统。实际上,该系统可以采用许多不同的形式,例如单输入多输出(SIMO)或多输入单输出(MISO)系统。此示例说明了下行链路 MISO 系统。8 元件 ULA 部署在基站作为发射器,而移动单元是具有单个天线的接收器。 系统的其余部分配置如下。发射器功率为 9 瓦,发射增益为 -8 dB。移动接收器是固定的,位于 2750 米外,距离发射器的视线 3 度。功率为 1 瓦、增益为 -20 dB 的干扰源位于 9000 米处,与发射器的视线成 20 度。 整个场景可以用下图来描绘。
资源推荐
资源详情
资源评论
收起资源包目录
使用波束成形对点对点 MIMO-OFDM 系统进行建模.rar (11个子文件)
使用波束成形对点对点 MIMO-OFDM 系统进行建模
helperIdealChannelEstimation.m 1KB
helperCreatePilots.m 649B
helperMIMORxSetup.m 1KB
helperGetDesignSpecsParameters.m 1KB
MIMOBeamformingExample.m 10KB
helperPlotMIMOEnvironment.m 1KB
helperMIMOEnvSetup.m 1KB
helperRerunMIMOBeamformingExample.m 3KB
helperEqualizer.m 277B
MIMOBeamformingExample_HybridBF.png 47KB
helperMIMOTxSetup.m 2KB
共 11 条
- 1
珞瑜·
- 粉丝: 12w+
- 资源: 500
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页