jsdmbbweights

Create MU-MIMO baseband precoding weights

Since R2023a

Syntax

``wpbb = jsdmbbweights(chaneff,ns,wprf)``
``wpbb = jsdmbbweights(___,'RegularizationFactor',alpha)``
``[wpbb,wc] = jsdmbbweights(___)``

Description

example

````wpbb = jsdmbbweights(chaneff,ns,wprf)` returns baseband precoding weights, `wpbb`, for the effective channel, `chaneff`, to achieve orthogonality among users by Joint Spatial Division Multiplexing (JSDM). RF precoding weights, `wprf`, divide users into groups by their location information. `ns` is the number of data streams or users.```
````wpbb = jsdmbbweights(___,'RegularizationFactor',alpha)` specifies the regularization factor, `alpha`.```
````[wpbb,wc] = jsdmbbweights(___)` also returns combining weights `wc` for each user.```

Examples

collapse all

Find baseband precoding weights for a JSDM beamformer based on a base station with a 64-element linear antenna array. Assume there are two user groups. The first group has two users and the second group has three users. Array elements are 1/2 wavelength apart.

Set the number of array elements to 64.

`Nt = 64;`

Find the array steering weights in the direction of the first user group. The user group is centered at ${+10}^{\circ }$azimuth.

```v1 = steervec((0:Nt-1)*0.5,[9 11]); rc1 = v1*v1'; ```

Find the array steering weights in the direction of the second user group. The user group is centered ${-5}^{\circ }$azimuth.

```v2 = steervec((0:Nt-1)*0.5,[-4 -5 -6]); rc2 = v2*v2';```

Then, compute the RF weights from the channel covariance matrix.

```ns = [2 3]; hcov = {rc1,rc2}; wprf = jsdmrfweights(hcov,ns);```

Construct the instantaneous effective channel.

```heff1 = wprf{1}*v1*eye(ns(1))*randn(ns(1),ns(1),'like',1i); heff2 = wprf{2}*v2*eye(ns(2))*randn(ns(2),ns(2),'like',1i);```

Compute baseband weights using per-group-processing.

`[wpbb,wc] = jsdmbbweights({heff1,heff2},ns,wprf);`

Verify orthogonality.

`hortho1 = wpbb{1}*heff1*wc{1}`
```hortho1 = 2×2 complex 9.5489 + 0.0000i -0.0000 + 0.0000i -0.0000 + 0.0000i 9.5489 + 0.0000i ```
`hortho2 = wpbb{2}*heff2*wc{2}`
```hortho2 = 3×3 complex 2.8633 - 0.0000i 0.0000 - 0.0000i 0.0000 + 0.0000i -0.0000 + 0.0000i 2.8633 + 0.0000i -0.0000 - 0.0000i 0.0000 - 0.0000i -0.0000 - 0.0000i 2.8633 - 0.0000i ```

Input Arguments

collapse all

Effective downlink channels, specified as a complex-valued Nsc-by-TotalNrtf-by-TotalNs array or 1-by-G cell array. The effective downlink channels map the streams in each group to the G user groups.

• If `chaneff` is a 3-dimensional Nsc-by-TotalNtrf-by-TotalNs array, TotalNs is the total number of data streams, TotalNtrf is the sum of RF chains for all user groups, and Nsc is the number of subcarriers. This configuration corresponds to the joint group processing (JGP) scheme of JSDM.

• If `chaneff` is a 1-by-G cell array, then the gth element in the cell array contains the individual effective channel from the allocated RF chain at the base station to the corresponding group of users as either:

• an Nsc-by-Ntrf(g)-by-NS(g) array when `ns` is a vector, or

• an Nsc-by-Ntrf(g)-by-sum(NS{g}) array when `ns` is a cell array.

This configuration corresponds to the per group processing (PGP) scheme of JSDM.

Data Types: `double` | `cell`
Complex Number Support: Yes

Number of data streams, specified as a G-element row vector or a 1-by-G cell array.

• If `ns` is a vector, each element specifies the total number of data streams in the corresponding user group.

• If `ns` is a cell array, each element in the cell array is a Kg-element row vector where Kg is the number of users in the gth group. The elements in the Kg-element row vector specifies the number of receiving data streams for each user in that group.

Data Types: `double` | `cell`

RF precoding weights, specified as an 1-by-G cell array. The gth element in `wprf` is an Ntrf(g)-by-Nt matrix that maps Ntrf(g) RF chain to Nt antennas in the base station. Ntrf(g) is the number of RF chains dedicated to the gth group.

Data Types: `cell` | `double`
Complex Number Support: Yes

Regularization factor, specified as a nonnegative scalar. Units are dimensionless.

Data Types: `double`

Output Arguments

collapse all

Baseband precoding weights, returned as a complex-valued Nsc-by-TotalNS-by-TotalNtrf array or 1-by-G cell array.

• If `chaneff` is not a cell array, `wpbb` is an Nsc-by-TotalNS-by-TotalNtrf array.

• If `chaneff` is a cell array, then `wpbb` is a 1-by-G cell array whose gth element is either an Nsc-by-Ns(g)-by-Ntrf(g) array when `ns` is a vector or an Nsc-by-sum(NS{g})-by-Ntrf(g) array when `ns` is a cell array.

.

Recombining weights for each user, returned as a 1-by-G cell array. The structure of `wc` depends on the `ns` input argument.

• If `ns` is a vector, each cell in `wc` is an Nsc-by-NS(g)-by-NS(g) array.

• If `ns` is a cell array, then `wc`(g) is a 1-by-Kg cell array where Kg is the number of users in the gth user group. Within the Kg-element cell array, each entry is an Nsc-by-sum(Ns{g})-by-Ns{g}(k) array where Ns{g}(k) is the number of data streams for the kth user in the gth user group.

References

[1] Adhikary A., J. Nam, J-Y Ahn, and G. Caire. "Joint Spatial Division and Multiplexing - The Large-Scale Array Regime." IEEE Transactions on Information Theory, Vol. 59, No. 10, October 2013, pp. 6441-6463.

Version History

Introduced in R2023a