Main Content

omphybweights

Compute hybrid beamforming weights using orthogonal matching pursuit

Description

[wpbb,wprf] = omphybweights(chanmat,ns,ntrf,at) returns the hybrid precoding weights wpbb and wprf for the channel matrix chanmat. The weights are computed using an orthogonal matching pursuit algorithm. ns is the number of independent data streams propagated through the channel. ntrf specifies the number of RF chains in the transmit array. at is a collection of possible analog weights for wprf. Together, the precoding weights approximate the optimal full digital precoding weights of chanmat.

[wpbb,wprf,wcbb,wcrf] = omphybweights(chanmat,ns,ntrf,at,nrrf,ar) also returns the hybrid combining weights wcbb and wcrf. The input nrrf specifies the number of RF chains in the receive array. ar is a collection of possible analog weights for wcrf.

example

[___] = omphybweights(chanmat,ns,ntrf,at,nrrf,ar,npow) also specifies the noise power npow in each receive antenna element. All subcarriers are assumed to have the same noise power.

Examples

collapse all

Assume an 8-by-4 MIMO system with four RF chains in a transmit array and two RF chains in a receive array. Show that the hybrid weights can support transmitting two data streams simultaneously.

Specify the positions of the transmitters and receivers in uniform line arrays.

txpos = (0:7)*0.5;
rxpos = (0:3)*0.5;

Construct the channel matrix.

chanmat = scatteringchanmtx(txpos,rxpos,10);

Specify the number of transmit and receive RF chains.

ntrf = 4;
nrrf = 2;

Specify two data streams.

ns = 2;

Set up the steering vector dictionaries for the transmitting and receiving arrays.

txdict = steervec(txpos,-90:90);
rxdict = steervec(rxpos,-90:90);

Compute the precoding and combining weights.

[Fbb,Frf,Wbb,Wrf] = omphybweights(chanmat,ns,ntrf,txdict,nrrf,rxdict);

Calculate the effective channel matrix from the weights. A diagonal effective channel matrix indicates the capability of simultaneous transmission of multiple data streams.

chan_eff = Fbb*Frf*chanmat*Wrf*Wbb
chan_eff = 2×2 complex

   1.0000 - 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   1.0000 - 0.0000i

Input Arguments

collapse all

Channel response matrix, specified as an Nt-by-Nr matrix or a complex-valued L-by-Nt-by-Nr array where

  • Nt is the number of elements in the transmitting array.

  • Nr is the number of elements in the receiving array.

  • L is the number of subcarriers.

Data Types: double | single
Complex Number Support: Yes

Number of independent data streams propagated through the channel, specified as a positive integer.

Data Types: double | single

Number of RF chains in the transmit array, specified as a positive integer.

Data Types: double | single

Collection of possible analog weights for transmit array for wprf, specified as a complex-valued matrix or array.

  • When chanmat is an Nt-by-Nr matrix, at is a complex-valued Nt-by-P matrix. Each column represents a vector of analog weights.

  • When chanmat is an L-by-Nt-by-Nr array, at is a complex-valued L-by-Nt-by-P array. at has L pages and in each page is a matrix of Nt rows. Each column represents a vector of analog weights.

  • Nt is the number of elements in the transmitting array.

  • Nr is the number of elements in the receiving array.

  • L is the number of subcarriers.

  • P is the number of vectors of analog weights in the collection.

Data Types: double | single
Complex Number Support: Yes

Number of RF chains in the receive array, specified as a positive integer.

Data Types: double | single

Collection of possible analog weights for receive array wcrf, specified as a complex-valued matrix or array.

  • When chanmat is an Nt-by-Nr matrix, ar is a complex-valued Nr-by-Q matrix. Each column represents a vector of analog weights.

  • When chanmat is an L-by-Nt-by-Nr array, ar is a complex-valued Nr-by-Q-by-L array. Each page is an Nr-by-Q matrix. Each column represents a vector of analog weights.

  • Nt is the number of elements in the transmitting array.

  • Nr is the number of elements in the receiving array.

  • L is the number of subcarriers.

  • Q is the number of vectors of analog weights in the collection.

Data Types: double | single
Complex Number Support: Yes

Noise power in each receive antenna element, specified as a nonnegative scalar. All subcarriers have the same noise power.

Data Types: double | single

Output Arguments

collapse all

Hybrid baseband precoding weights, returned as a complex-valued matrix or array.

  • When chanmat is an Nt-by-Nr matrix, wpbb is a complex-valued Ns-by-Ntrf matrix.

  • When chanmat is an L-by-Nt-by-Nr array, wpbb is a complex-valued L-by-Ns-by-Ntrf array.

  • Ns is the number of independent data streams specified by the ns argument.

  • Ntrf is the number of RF chains in the transmit array specified by the ntrf argument.

  • L is the number of subcarriers.

Hybrid RF precoding weights, returned as a complex-valued matrix or array.

  • When chanmat is an Nt-by-Nr matrix, wprf is a complex-valued Ntrf-by-Nt matrix.

  • When chanmat is an L-by-Nt-by-Nr array, wprf is a complex-valued L-by-Ntrf-by-Nt array.

  • Nt is the number of elements in the transmitting array.

  • Ntrf is the number of RF chains in the transmit array specified by the ntrf argument.

  • L is the number of subcarriers.

Hybrid baseband combining weights, returned as a complex-valued matrix or array.

  • When chanmat is an Nt-by-Nr matrix, wcbb is a complex-valued Nrrf-by-Ns matrix.

  • When chanmat is an L-by-Nt-by-Nr array, wcbb is a complex-valued L-by-Nrrf-by-Ns array.

  • Ns is the number of independent data streams specified by the ns argument.

  • Nrrf is the number of RF chains in the receive array specified by the nrrf argument.

  • L is the number of subcarriers.

Hybrid RF combining weights, returned as a complex-valued matrix or array.

  • When chanmat is an Nt-by-Nr matrix, wcrf is a complex-valued Nr-by-Nrrf matrix.

  • When chanmat is an L-by-Nt-by-Nr array, wcrf is a complex-valued L-by-Nr-by-Nrrf array.

  • Nt is the number of elements in the transmitting array.

  • Nrrf is the number of RF chains in the receive array specified by the nrrf argument.

  • L is the number of subcarriers.

More About

collapse all

Precoding Weights

The matrix product of the precoding weights wpbb x wprf approximates the optimal full digital precoding weights of the channel matrix chanmat.

Combining Weights

The combining weights wcbb and wcrf, together with the precoding weights, diagonalize the channel into independent subchannels. The matrix product wpbb x wprf x chanmat x wcrfx wcbb is approximately diagonal.

Algorithms

collapse all

Precision

This function supports single and double precision floating point values for input arguments. If the input arguments are single precision, the outputs are single precision. If the input arguments are double precision, the outputs are double precision.

References

[1] Ayach, Omar El et al. "Spatially Sparse Precoding in Millimeter Wave MIMO Systems" IEEE Trans on Wireless Communications. Vol. 13, No. 3, March 2014.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2019b