# wlanTGacChannel

Filter signal through 802.11ac multipath fading channel

## Description

The `wlanTGacChannel`

System object™ filters an input signal through an 802.11ac™ (TGac) multipath fading channel.

The fading processing assumes the same parameters for all
*N*_{T}-by-*N*_{R}
links of the TGac channel, where *N*_{T} is the number of
transmit antennas and *N*_{R} is the number of receive
antennas. Each link comprises all multipaths for that link.

To filter an input signal using a TGac multipath fading channel:

Create the

`wlanTGacChannel`

object and set its properties.Call the object with arguments, as if it were a function.

To learn more about how System objects work, see What Are System Objects?

## Creation

### Description

creates a TGac fading
channel System object, `tgac`

= wlanTGacChannel`tgac`

. This object filters a real or complex input
signal through the TGac channel to obtain the channel-impaired signal.

creates a TGac channel object, `tgac`

= wlanTGacChannel(`Name`

,`Value`

)`tgac`

, and sets properties using one or
more name-value pairs. Enclose each property name in quotes. For example,
`wlanTGacChannel('NumReceiveAntennas',2,'SampleRate',10e6)`

creates a
TGac channel with two receive antennas and a 10 MHz sample rate.

## Properties

Unless otherwise indicated, properties are *nontunable*, which means you cannot change their
values after calling the object. Objects lock when you call them, and the
`release`

function unlocks them.

If a property is *tunable*, you can change its value at
any time.

For more information on changing property values, see System Design in MATLAB Using System Objects.

`SampleRate`

— Sample rate of the input signal

`80e6`

(default) | positive scalar

Sample rate of the input signal in Hz, specified as a positive scalar.

**Data Types: **`double`

`DelayProfile`

— Delay profile model

`'Model-B'`

(default) | `'Model-A'`

| `'Model-C'`

| `'Model-D'`

| `'Model-E'`

| `'Model-F'`

Delay profile model, specified as `'Model-A'`

,
`'Model-B'`

, `'Model-C'`

,
`'Model-D'`

, `'Model-E'`

, or
`'Model-F'`

. To enable the `FluorescentEffect`

property, select either `'Model-D'`

or
`'Model-E'`

.

The table summarizes the models properties before the bandwidth reduction factor.

Parameter | Model | |||||
---|---|---|---|---|---|---|

A | B | C | D | E | F | |

Breakpoint distance (m) | 5 | 5 | 5 | 10 | 20 | 30 |

RMS delay spread (ns) | 0 | 15 | 30 | 50 | 100 | 150 |

Maximum delay (ns) | 0 | 80 | 200 | 390 | 730 | 1050 |

Rician K-factor (dB) | 0 | 0 | 0 | 3 | 6 | 6 |

Number of taps | 1 | 9 | 14 | 18 | 18 | 18 |

Number of clusters | 1 | 2 | 2 | 3 | 4 | 6 |

The number of clusters represents the number of independently modeled propagation paths.

**Data Types: **`char`

| `string`

`ChannelBandwidth`

— Channel bandwidth

`'CBW80'`

(default) | `'CBW20'`

| `'CBW40'`

| `'CBW160'`

Channel bandwidth, specified as `'CBW20'`

,
`'CBW40'`

, `'CBW80'`

, or
`'CBW160'`

. The default is `'CBW80'`

, which
corresponds to an 80 MHz channel bandwidth.

**Data Types: **`char`

| `string`

`CarrierFrequency`

— RF carrier frequency

`5.25e9`

(default) | positive scalar

RF carrier frequency in Hz, specified as a positive scalar.

**Data Types: **`double`

`EnvironmentalSpeed`

— Speed of the scatterers

`0.089`

(default) | positive scalar

Speed of the scatterers in km/h, specified as a positive scalar.

**Data Types: **`double`

`TransmitReceiveDistance`

— Distance between transmitter and receiver

`3`

(default) | positive scalar

Distance between the transmitter and receiver in meters, specified as a positive scalar.

`TransmitReceiveDistance`

is used to compute the path loss, and
to determine whether the channel has a line of sight (LOS) or non line of sight (NLOS)
condition. The path loss and standard deviation of shadow fading loss depend on the
separation between the transmitter and the receiver.

**Data Types: **`double`

`NormalizePathGains`

— Normalize path gains

`true`

or `1`

(default) | `false`

or `0`

Normalize path gains, specified as a numeric or logical `1`

(`true`

) or `0`

(`false`

). To
normalize the fading processes such that the total power of the path gains, averaged
over time, is 0 dB, set this property to `1`

(`true`

).
Otherwise, set this property to `0`

(`false`

).

**Data Types: **`logical`

`UserIndex`

— User index for single or multi-user scenario

`0`

(default) | positive integer

User index, specified as a nonnegative integer. If the property is set to
`0`

, the angles of arrival and departure from the TGn channel model
are used in the calculation of the spatial correlation matrix. If the property is set to
a positive integer, pseudorandom offsets are applied to the TGn angles of arrival and
departure before the calculation of the spatial correlation matrix. For more details,
see the section on MIMO Enhancements.

**Data Types: **`double`

`TransmissionDirection`

— Transmission direction

`'Downlink'`

(default) | `'Uplink'`

Transmission direction of the active link, specified as either
`'Downlink'`

or `'Uplink'`

.The default value,
`'Downlink'`

, specifies transmission from an access point to a user
station.

**Data Types: **`char`

| `string`

`NumTransmitAntennas`

— Number of transmit antennas

`1`

(default) | positive integer

Number of transmit antennas, specified as a positive integer.

**Data Types: **`double`

`TransmitAntennaSpacing`

— Distance between transmit antenna elements

`0.5`

(default) | positive scalar

Distance between transmit antenna elements, specified as a positive scalar expressed in wavelengths.

`TransmitAntennaSpacing`

supports uniform linear arrays
only.

#### Dependencies

To enable this property, set the `NumTransmitAntennas`

property
to a value greater than `1`

.

**Data Types: **`double`

`NumReceiveAntennas`

— Number of receive antennas

`1`

(default) | positive integer

Number of receive antennas, specified as a positive integer.

**Data Types: **`double`

`ReceiveAntennaSpacing`

— Distance between receive antenna elements

`0.5`

(default) | positive scalar

Distance between receive antenna elements, specified as a positive scalar expressed in wavelengths.

`ReceiveAntennaSpacing`

supports uniform linear arrays
only.

#### Dependencies

To enable this property, set the `NumReceiveAntennas`

property
to a value greater than `1`

.

**Data Types: **`double`

`LargeScaleFadingEffect`

— Large-scale fading effects

`'None'`

(default) | `'Pathloss'`

| `'Shadowing'`

| `'Pathloss and shadowing'`

Large-scale fading effects applied in the channel, specified as
`'None'`

, `'Pathloss'`

,
`'Shadowing'`

, or `'Pathloss and shadowing'`

.

**Data Types: **`char`

| `string`

`FluorescentEffect`

— Fluorescent effect

`true`

or `1`

(default) | `false`

or `0`

Fluorescent effect, specified as a numeric or logical `1`

(`true`

) or `0`

(`false`

). To
include Doppler effects from fluorescent lighting, set this property to
`1`

(`true`

).

#### Dependencies

To enable this property, set the `DelayProfile`

property to
`'Model-D'`

or `'Model-E'`

.

**Data Types: **`logical`

`PowerLineFrequency`

— Power line frequency

`'60Hz'`

(default) | `'50Hz'`

Power line frequency in Hz, specified as `'50Hz'`

or
`'60Hz'`

.

The power line frequency is 60 Hz in the United States and 50 Hz in Europe.

#### Dependencies

To enable this property, set the `FluorescentEffect`

property
to `1`

(`true`

) and the
`DelayProfile`

property to `'Model-D'`

or
`'Model-E'`

.

**Data Types: **`char`

| `string`

`NormalizeChannelOutputs`

— Normalize channel outputs

`true`

or `1`

(default) | `false`

or `0`

Normalize channel outputs by the number of receive antennas, specified as a numeric
or logical `1`

(`true`

) or `0`

(`false`

).

**Data Types: **`logical`

`ChannelFiltering`

— Enable channel filtering

`true`

or `1`

(default) | `false`

or `0`

Enable channel filtering, specified as a numeric or logical `1`

(`true`

) or `0`

(`false`

). To
enable channel filtering, set this property to `1`

(`true`

). To disable channel filtering, set this property to
`0`

(`false`

).

**Note**

If you set this property to `0`

(`false`

), the
`step`

object function does not accept
an input signal. In this case, the `NumSamples`

and `SampleRate`

properties determine the duration of the fading process
realization.

**Data Types: **`logical`

`NumSamples`

— Number of time-domain samples

`320`

(default) | positive integer

Number of time-domain samples used to get path gain samples, specified as a positive integer.

#### Dependencies

To enable this property, set the `ChannelFiltering`

property to `0`

(`false`

).

**Data Types: **`double`

`OutputDataType`

— Data type of impaired signal

`'double'`

(default) | `'single'`

Data type of impaired signal, specified as one of these values:

`'double'`

– Return the`pathGains`

output as a double-precision matrix`'single'`

– Return the`pathGains`

output as a single-precision matrix

#### Dependencies

To enable this property, set the `ChannelFiltering`

property to
`0`

(`false`

).

**Data Types: **`char`

| `string`

`RandomStream`

— Source of random number stream

`'Global stream'`

(default) | `'mt19937ar with seed'`

Source of random number stream, specified as `'Global stream'`

or
`'mt19937ar with seed'`

.

If you set this property to `'Global stream'`

, the current global
random number stream is used for random number generation. In this case, the
`reset`

function resets the filters and creates a new channel
realization.

If you set this property to `'mt19937ar with seed'`

, the mt19937ar
algorithm generates random numbers. In this case, the `reset`

function
also reinitializes the random number stream to the value of the
`Seed`

property.

**Note**

The random numbers of the channel components are distributed as follows:

The random phase of the Doppler component due to fluorescent lights is uniformly distributed. See equation 27 of

*TGn Channel Models*for more information.In multi-user scenarios using the TGac, TGah, or TGax channel models, the per-user angle-of-arrival (AoA) and angle-of-departure (AoD) rotations discussed in the MIMO Enhancements section are uniformly distributed.

The fading samples are generated from a normally-distributed complex uncorrelated Gaussian process with zero mean and unit variance in discrete time.

**Data Types: **`char`

| `string`

`Seed`

— Initial seed of mt19937ar random number stream

`73`

(default) | nonnegative integer

Initial seed of an mt19937ar random number stream, specified as a nonnegative
integer. The `Seed`

property reinitializes the mt19937ar random
number stream in the `reset`

function.

#### Dependencies

To enable this property, set the `RandomStream`

property to
`'mt19937ar with seed'`

.

**Data Types: **`double`

`PathGainsOutputPort`

— Enable path gain output

`false`

or `0`

(default) | `true`

or `1`

Enable path gain output computation, specified as a numeric or logical
`1`

(`true`

) or `0`

(`false`

).

**Data Types: **`logical`

## Usage

### Description

`[`

also returns in `y`

,`pathGains`

] = tgac(`x`

)`pathGains`

the TGac channel path gains of the
underlying fading process.

This syntax applies when you set the `PathGainsOutputPort`

property to `1`

(`true`

).

### Input Arguments

`x`

— Input signal

complex matrix

Input signal, specified as a real or complex
*N*_{S}-by-*N*_{T}
matrix, where:

*N*_{S}is the number of samples.*N*_{T}is the number of transmit antennas and must be equal to the`NumTransmitAntennas`

property value.

**Data Types: **`single`

| `double`

**Complex Number Support: **Yes

### Output Arguments

`y`

— Output signal

complex matrix

Output signal, returned as an
*N*_{S}-by-*N*_{R}
complex matrix, where:

*N*_{S}is the number of samples.*N*_{R}is the number of receive antennas and is equal to the`NumReceiveAntennas`

property value.

**Data Types: **`single`

| `double`

`pathGains`

— Path gains of the fading process

complex array

Path gains of the fading process, returned as an
*N*_{S}-by-*N*_{P}-by-*N*_{T}-by-*N*_{R}
complex array, where:

*N*_{S}is the number of samples.*N*_{P}is the number of resolvable paths, that is, the number of paths defined for the case specified by the`DelayProfile`

property.*N*_{T}is the number of transmit antennas and is equal to the`NumTransmitAntennas`

property value.*N*_{R}is the number of receive antennas and is equal to the`NumReceiveAntennas`

property value.

**Data Types: **`single`

| `double`

## Object Functions

To use an object function, specify the
System object as the first input argument. For
example, to release system resources of a System object named `obj`

, use
this syntax:

release(obj)

**Note**

If the `RandomStream`

property of the System object is set to `'Global stream'`

, the `reset`

function resets the filters only. If you set
`RandomStream`

to `'mt19937ar with seed'`

, the
`reset`

function also reinitializes the random number
stream to the value of the `Seed`

property.

## Examples

### Transmit VHT Waveform Through TGac Channel

Generate a VHT waveform and pass it through a TGac SISO channel. Display the spectrum of the resultant signal.

Set the channel bandwidth and the corresponding sample rate.

```
bw = 'CBW80';
fs = 80e6;
```

Generate a VHT waveform.

cfg = wlanVHTConfig; txSig = wlanWaveformGenerator(randi([0 1],1000,1),cfg);

Create a TGac SISO channel with path loss and shadowing enabled.

tgacChan = wlanTGacChannel('SampleRate',fs,'ChannelBandwidth',bw, ... 'LargeScaleFadingEffect','Pathloss and shadowing');

Pass the VHT waveform through the channel.

rxSig = tgacChan(txSig);

Plot the spectrum of the received waveform.

saScope = spectrumAnalyzer(SampleRate=fs,YLimits=[-120 -40]); saScope(rxSig)

Because path loss and shadowing are enabled, the mean received power across the spectrum is approximately –60 dBm.

### Transmit VHT Waveform Through 4x2 MIMO Channel

Create a VHT waveform with four transmit antennas and two space-time streams.

cfg = wlanVHTConfig('NumTransmitAntennas',4,'NumSpaceTimeStreams',2, ... 'SpatialMapping','Fourier'); txSig = wlanWaveformGenerator([1;0;0;1],cfg);

Create a 4x2 MIMO TGac channel and disable large-scale fading effects.

tgacChan = wlanTGacChannel('SampleRate',80e6,'ChannelBandwidth','CBW80', ... 'NumTransmitAntennas',4,'NumReceiveAntennas',2, ... 'LargeScaleFadingEffect','None');

Pass the transmit waveform through the channel.

rxSig = tgacChan(txSig);

Display the spectrum of the two received space-time streams.

saScope = spectrumAnalyzer(SampleRate=80e6, ... ShowLegend=true, ... ChannelNames={'Stream 1','Stream 2'}); saScope(rxSig)

### Recover VHT Data from 2x2 MIMO Channel

Transmit a VHT-LTF and a VHT data field through a noisy 2x2 MIMO channel. Demodulate the received VHT-LTF to estimate the channel coefficients. Recover the VHT data and determine the number of bit errors.

Set the channel bandwidth and corresponding sample rate.

```
bw = 'CBW160';
fs = 160e6;
```

Create VHT-LTF and VHT data fields with two transmit antennas and two space-time streams.

cfg = wlanVHTConfig('ChannelBandwidth',bw, ... 'NumTransmitAntennas',2,'NumSpaceTimeStreams',2); txPSDU = randi([0 1],8*cfg.PSDULength,1); txLTF = wlanVHTLTF(cfg); txDataSig = wlanVHTData(txPSDU,cfg);

Create a 2x2 MIMO TGac channel.

tgacChan = wlanTGacChannel('SampleRate',fs,'ChannelBandwidth',bw, ... 'NumTransmitAntennas',2,'NumReceiveAntennas',2);

Create AWGN channel noise, setting the SNR to 15 dB.

chNoise = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (SNR)',... 'SNR',15);

Pass the signals through the TGac channel and noise models.

rxLTF = chNoise(tgacChan(txLTF)); rxDataSig = chNoise(tgacChan(txDataSig));

Create an AWGN channel for a 160 MHz channel with a 9 dB noise figure. The noise variance, `nVar`

, is equal to *kTBF*, where *k* is Boltzmann's constant, *T* is the ambient temperature of 290 K, *B* is the bandwidth (sample rate), and *F* is the receiver noise figure.

nVar = 10^((-228.6 + 10*log10(290) + 10*log10(fs) + 9)/10); rxNoise = comm.AWGNChannel('NoiseMethod','Variance','Variance',nVar);

Pass the signals through the receiver noise model.

rxLTF = rxNoise(rxLTF); rxDataSig = rxNoise(rxDataSig);

Demodulate the VHT-LTF. Use the demodulated signal to estimate the channel coefficients.

dLTF = wlanVHTLTFDemodulate(rxLTF,cfg); chEst = wlanVHTLTFChannelEstimate(dLTF,cfg);

Recover the data and determine the number of bit errors.

rxPSDU = wlanVHTDataRecover(rxDataSig,chEst,nVar,cfg); numErr = biterr(txPSDU,rxPSDU)

numErr = 0

## Algorithms

The algorithms used to model the TGac channel are based on those used for the TGn channel
and are described in `wlanTGnChannel`

and [1]. The changes to support the TGac
channel include:

Increased bandwidth

Higher-order MIMO

Multi-user MIMO

Reduced Doppler

Complete information on the changes required to support TGac channels can be found in [2].

### Increased Bandwidth

TGac channels support bandwidths of up to 1.28 GHz, whereas TGn channels have a maximum
bandwidth of 40 MHz. By increasing the sampling rate and decreasing the tap spacing of the
power delay profile (PDP), the TGn model is used as the basis for TGac. The channel sampling
rate is increased by a factor of $${2}^{\lceil {\mathrm{log}}_{2}\left(W/40\right)\rceil}$$, where *W* is the bandwidth. The PDP tap spacing is
reduced by the same factor.

Bandwidth, W | Sampling Rate Expansion Factor | PDP Tap Spacing (ns) |
---|---|---|

W ≤ 40 MHz | 1 | 10 |

40 MHz < W ≤ 80 MHz | 2 | 5 |

80 MHz < W ≤ 160 MHz | 4 | 2.5 |

160 MHz < W ≤ 320 MHz | 8 | 1.25 |

320 MHz < W ≤ 640 MHz | 16 | 0.625 |

640 MHz < W ≤ 1280 MHz | 32 | 0.3125 |

### MIMO Enhancements

The TGn channel model supports no more than 4x4 MIMO, while the TGac model supports 8x8 MIMO.

The TGac model uses per-user angle diversity to support simultaneous communication
between multiple user stations and an access point. For each channel realization, the model
achieves this by adding pseudorandom offsets to the angles of arrival and departure of each
cluster before the calculation of the spatial correlation matrix. Different offsets are
chosen for each positive value of the `UserIndex`

property. This causes
the angles of arrival and departure for each cluster to differ between users.

Changing the `TransmissionDirection`

property swaps the angle of
arrival of each cluster with its corresponding angle of departure. For more details, see the
Appendix of [2].

To see how the `UserIndex`

property can be used in an application,
see this example: 802.11ax Packet Error Rate Simulation for Uplink Trigger-Based Format.

### Reduced Doppler

Indoor channel measurements indicate that the magnitude of Doppler assumed in the TGn channel model is too high for stationary users. As such, the TGac channel model uses a reduced environment velocity of 0.089 km/hr. This model assumes a coherence time of 800 ms or, equivalently, an RMS Doppler spread of 0.4 Hz for a 5 GHz carrier frequency.

## References

[1] Erceg, V., L. Schumacher, P.
Kyritsi, et al. *TGn Channel Models*. Version 4. IEEE 802.11-03/940r4,
May 2004.

[2] Breit, G., H. Sampath, S. Vermani,
et al.*TGac Channel Model Addendum*. Version 12. IEEE 802.11-09/0308r12,
March 2010.

[3] Kermoal, J. P., L. Schumacher, K.
I. Pedersen, P. E. Mogensen, and F. Frederiksen. “A Stochastic MIMO Radio Channel Model
with Experimental Validation”. *IEEE Journal on Selected Areas in
Communications* 20, No. 6 (August 2002): pp. 1211–1226.

## Extended Capabilities

### C/C++ Code Generation

Generate C and C++ code using MATLAB® Coder™.

Usage notes and limitations:

See System Objects in MATLAB Code Generation (MATLAB Coder).

## Version History

**Introduced in R2015b**

## Open Example

You have a modified version of this example. Do you want to open this example with your edits?

## MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)