HE/preHESymbolEqualize.m

46 lines
1.6 KiB
Mathematica
Raw Normal View History

2024-03-30 16:35:40 +08:00
function [y,csi] = preHESymbolEqualize(x,chanEst,noiseVar,varargin)
%preHESymbolEqualize Pre-HE fields frequency domain channel equalization
%
% [Y,CSI] = preHESymbolEqualize(X,CHANEST,NOISEVAR) performs
% minimum-mean-square-error (MMSE) frequency domain equalization using
% the signal input X, the channel estimate, CHANEST, and noise variance
% NOISEVAR.
%
% Y is an estimate of the transmitted frequency domain signal and is of
% size Nst-by-Nsym, where Nst represents the number of carriers
% (frequency domain) and Nsym represents the number of symbols (time
% domain). It is complex when either X or CHANEST is complex, or is real
% otherwise.
%
% CSI is a real matrix of size Nst-by-Nr containing the soft channel
% state information.
%
% X is a real or complex array containing the frequency domain signal to
% equalize. It is of size Nst-by-Nsym-by-Nr, where Nr represents the
% number of receive antennas.
%
% CHANEST is a real or complex array containing the channel estimates for
% each carrier. It is of size Nst-by-1-by-Nr.
%
% NOISEVAR is a nonnegative scalar representing the noise variance.
%
% [Y,CSI] = preHESymbolEqualize(...,NUMSUBCHANNELS) merged demodulated
% symbols and channel estimates for each subchannel before equalization.
% Copyright 2018-2020 The MathWorks, Inc.
%#codegen
if nargin>3
numSubchannels = varargin{1};
else
numSubchannels = 1;
end
% Treat each 20 MHz subchannel as a receive antennas for diversity
[symMerge,chanMerge] = wlan.internal.mergeSubchannels(x,chanEst,numSubchannels);
% Equalize
[y,csi] = helperSymbolEqualize(symMerge,chanMerge,noiseVar);
end