There are different antenna gain-combining methods. They are as follows.
1. Equal gain combining (EGC)
2. Maximum ratio combining (MRC)
3. Selective combining (SC)
4. Root mean square gain combining (RMSGC)
5. Zero-Forcing (ZF) Combining
1. Equal gain combining method
We add the correlated data streams from different antennas in the equal gain combining method. Then we multiply the resultant data with (1/(number of antennas))
For example, for two antenna gain-combining
If the received symbols are y1 and y2, then
Equal combing gain,
y_egc = 0.5 * (y1 + y2)
2. Maximum ratio combining method
3. Selective combining method
4. Root mean square gain combining method.
We first take the square of individual data stream in the root mean square combining method. Then we sum them. And finally, we take the square root values of the composite data streams. This method shows the near-optimal performance as the maximum ratio combining, as some researcher claims.
5. Zero Forcing Combining
Zero Forcing is a linear combining technique used in MIMO systems to nullify inter-stream interference by inverting the channel. It works under the assumption of perfect channel knowledge (CSI).
The idea:
- Given:
- Want to recover:
-
Multiply both sides by
(or
pinv(H)
in MATLAB) - Result:
It forces , effectively "undoing" the channel.
MATLAB Code for Zero Forcing Combining
clc; clear; close all;
%% Parameters
Nt = 4; % Transmit antennas
Nr = 4; % Receive antennas
numBits = 1e4; % Number of bits per stream
SNRdB = 0; % SNR in dB
numRuns = 100; % Number of independent runs for averaging
%% Precompute noise standard deviation
noiseSigma = 10^(-SNRdB / 20);
%% Accumulator for total errors
totalErrors = 0;
for run = 1:numRuns
% Generate random bits for each run
bits = randi([0 1], Nt, numBits); % Size: [4 x 10000]
txSymbols = 1 - 2 * bits; % BPSK: 0→+1, 1→-1
% Generate random Rayleigh fading channel (4x4)
H = (randn(Nr, Nt) + 1j * randn(Nr, Nt)) / sqrt(2);
% Generate AWGN noise
noise = noiseSigma * (randn(Nr, numBits) + 1j * randn(Nr, numBits)) / sqrt(2);
% Received signal
y = H * txSymbols + noise;
% Zero Forcing equalizer
W_zf = pinv(H);
rxSymbols = W_zf * y;
% BPSK demodulation
rxBits = real(rxSymbols) < 0;
% Count errors
totalErrors = totalErrors + sum(rxBits(:) ~= bits(:));
end
%% Final BER
BER = totalErrors / (Nt * numBits * numRuns);
fprintf('Average BER over %d runs for 4x4 MIMO ZF at %d dB SNR: %.5f\n', numRuns, SNRdB, BER);
web('https://www.salimwireless.com/search?q=antenna%20combining%20methods', '-browser');