| Products & Services | Solutions | Academia | Support | User Community | Company |
| Download Product Updates | | | Get Pricing | | | Trial Software |
| Documentation → Communications Toolbox |
| Contents | Index |
| Learn more about Communications Toolbox |
chan = mimochan(nt,
nr, ts, fd)
chan = mimochan(nt, nr, ts, fd, tau)
chan = mimochan(nt,
nr, ts, fd, tau, pdb)
chan = mimochan(nt, nr, ts, fd) constructs a multiple-input multiple-output (MIMO) Rayleigh fading channel object with a single path link.
nt is the number of transmit antennas.
nr is the number of receive antennas.
nt and nr can be integer values from 1 to 8.
ts is the sample time of the input signal, in seconds.
fd is the maximum Doppler shift, in hertz.
You can model the effect of the channel, chan, on a signal x by using the syntax y = filter(chan, x), where the input signal x has nt columns, and the output signal y has ns columns. See filter (mimo) for more information.
chan = mimochan(nt, nr, ts, fd, tau) constructs a MIMO fading channel object with a frequency selective multipath link that models each discrete path as an independent Rayleigh fading process with the same average gain. tau represents a row vector of path delays, each specified in seconds
chan = mimochan(nt, nr, ts, fd, tau, pdb) specifies pdb as a row vector of average path gains, each in dB.
A MIMO fading channel object has the properties shown in the following table. You can write to all properties except for the ones explicitly noted otherwise.
| Property | Description |
|---|---|
| NumTxAntennas | Number of transmit antennas, between 1 and 8. |
| NumRxAntennas | Number of receive antennas, between 1 and 8. |
| InputSamplePeriod | Sample period of the signal on which the channel acts, measured in seconds. |
| DopplerSpectrum | Any Doppler spectrum objects. This property defaults to a Jakes Doppler object. Must either be a single Doppler object or a vector of Doppler objects with the same length as PathDelays. |
| MaxDopplerShift | Maximum Doppler shift of the channel, in hertz (applies to all paths of a channel). |
| PathDelays | Vector listing the delays of the discrete paths, in seconds. This value defaults to 0. |
| AvgPathGaindB | Vector listing the average gain of the discrete paths, in dB. Must be of the same size as PathDelays. This value defaults to 0. |
| TxCorrelationMatrix | Transmit correlation matrix, hermitian, of size NumTxAntennas by NumTxAntennas (or 3-D array, with one correlation matrix per path). The default is an identity matrix. |
| RxCorrelationMatrix | Receive correlation matrix, hermitian, of size NumRxAntennas by NumRxAntennas (or 3-D array, with one correlation matrix per path). This value defaults to an identity matrix. |
| KFactor | Rician K-factor (scalar or vector). This value defaults to 0 (Rayleigh fading). |
| DirectPathDopplerShift | Any Doppler shifts of the line-of-sight components in hertz. This value defaults to 0. |
| DirectPathInitPhase | Any Initial phases of line-of-sight components in radians. This value defaults to 0. |
| ResetBeforeFiltering | If this value is 1, each call to filter resets the state of the channel object before filtering. If it is 0, the fading process maintains continuity from one call to the next. This value defaults to 1. |
| NormalizePathGains | If this value is 1, the fading process is normalized such that the expected value of the path gains' total power is 1. This value defaults to 1. |
| StorePathGains | If this value is 1, the complex path gain array is stored as the channel filter function processes the signal. This value defaults to 0. |
| ChannelType | Fixed value, 'MIMO'. This property is not writable. |
| PathGains | Complex array of size Ns by L by NumTxAntennas by NumRxAntennas (where Ns is the number of samples and L is the length of PathDelays), listing the current gains of the discrete paths for each combination of transmit/receive antennas. This property is not writable. |
| ChannelFilterDelay | Delay of the channel filter, measured in samples. This property is not writable. |
| NumSamplesProcessed | Number of samples the channel processed since the last reset. When you create or reset chan, this property value is 0. This property is not writable. |
Changing the length of PathDelays also changes:
the length of AvgPathGaindB
the lengths of KFactor, DirectPathDopplerShift and DirectPathInitPhase, if KFactor is a vector (no changes if KFactor is a scalar).
the length of DopplerSpectrum, if DopplerSpectrum is a vector (no change if DopplerSpectrum is a single object)
the size of TxCorrelationMatrix and/or RxCorrelationMatrix, if either property is a 3-D array
Changing the length of PathDelays also changes:
MATLAB software truncates or zero-pads the value of AvgPathGaindB to adjust its vector length
If KFactor is a vector, MATLAB software truncates or zero-pads the value of KFactor to adjust its vector length. DirectPathDopplerShift and DirectPathInitPhase both follow changes in KFactor
If DopplerSpectrum is a vector of Doppler objects, MATLAB software adds Jakes Doppler objects or removes elements from DopplerSpectrum, to make it the same length as PathDelays
If TxCorrelationMatrix and/or RxCorrelationMatrix is a 3-D array, will add identity matrices or remove matrices from the 3-D array, so that the 3rd dimension equals the length of PathDelays
MATLAB software may also change the values of read-only properties, such as PathGains and ChannelFilterDelay
If KFactor is a scalar value, then the first discrete path indicates a Rician fading process (it contains a line-of-sight component) with a K-factor (defined by the value for KFactor). The remaining discrete paths are independent Rayleigh fading processes (no line-of-sight component). If KFactor is a vector of the same size as PathDelays, then each discrete path indicates a Rician fading process with a K-factor given by the corresponding element of the vector KFactor.
DirectPathDopplerShift must be the same size as KFactor. If KFactor and DirectPathDopplerShift are scalar values, the line-of-sight component of the first discrete path has a Doppler shift of DirectPathDopplerShift, while the remaining discrete paths indicate independent Rayleigh fading processes. If DirectPathDopplerShift is a vector of the same size as KFactor, the line-of-sight component of each discrete path has a Doppler shift given by the corresponding element of the vector DirectPathDopplerShift.
You can set any initial phases of the line-of-sight components through the property DirectPathInitPhase.
A MIMO fading channel object has the following methods.
This method filters data through the MIMO fading channel object.
y = filter(chan, x) filters data through the MIMO channel, where the input x is a matrix of size Ns by nt. The output, y, is a matrix of size Ns by nr. For these matrices, Ns is the number of samples, nt is the number of transmit antennas, and nr is the number of receive antennas.
This method resets the MIMO channel object.
reset(chan) resets the MIMO channel object, chan, initializing the PathGains and NumSamplesProcessed properties as well as internal filter states. This is useful when you want the effect of creating a new channel.
reset(chan,randstate) resets the MIMO channel object, chan and initializes the state of the random number generator, randstate, that the channel uses. randstate is a two-element column vector or a scalar integer. This is useful when you want to repeat previous numerical results that started from a particular state.
Note reset(chan,randstate) will not support randstate in a future release. See the legacychannelsim function for more information. |
The following example creates a MIMO channel object with two transmit and receive antennas, three paths, Rician K-factor greater than zero, and specific correlation matrices. First create the channel object using the mimochan function, as shown below:
chan = mimochan(2, 2, 1e-4, 60, [0 2.5e-4 3e-4], [0 -2 -3])
mimochan returns the following channel:
chan =
ChannelType: 'MIMO'
NumTxAntennas: 2
NumRxAntennas: 2
InputSamplePeriod: 1.0000e-004
DopplerSpectrum: [1x1 doppler.jakes]
MaxDopplerShift: 60
PathDelays: [0 2.5000e-004 3.0000e-004]
AvgPathGaindB: [0 -2 -3]
TxCorrelationMatrix: [2x2 double]
RxCorrelationMatrix: [2x2 double]
KFactor: 0
DirectPathDopplerShift: 0
DirectPathInitPhase: 0
ResetBeforeFiltering: 1
NormalizePathGains: 1
StorePathGains: 0
PathGains: [4-D double]
ChannelFilterDelay: 4
NumSamplesProcessed: 0
Now assign the Rician K-factor to the first path, and set the transmit and receive correlation matrices of the MIMO channel object.
chan.KFactor = 2; chan.TxCorrelationMatrix = [1 0.6; 0.6 1]; chan.RxCorrelationMatrix = [1 0.5*j; -0.5*j 1];
Now we can use this channel to filter data signals. This example sends a series of ones through the channel and stores the output.
y = filter(chan, ones(20, 2));
Plot the channel output signals:
t=(0:19)*chan.InputSamplePeriod;
plot(t,abs(y))
xlabel('Time (s)')
ylabel('Amplitude')
legend('1st antenna output','2nd antenna output')The figure window displays.

[1] Jeruchim, M., Balaban, P., and Shanmugan, K., Simulation of Communication Systems, Second Edition, New York, Kluwer Academic/Plenum, 2000.
[2] J. P. Kermoal, 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 of Commun., vol. 20, no. 6, pp. 1211—1226, Aug. 2002.
[3] C. Oestges and B. Clerckx, MIMO Wireless Communications: From Real-World Propagation to Space-Time Code Design, Academic Press, 2007.
[4] L. M. Correira, Ed., Mobile Broadband Multimedia Networks: Techniques, Models and Tools for 4G, Academic Press, 2006.
![]() | matintrlv | minpol | ![]() |

Learn how to apply early verification to your development process through these technical resources.
How much time do you spend on testing to ensure implementation meets system-level requirements?
| © 1984-2009- The MathWorks, Inc. - Site Help - Patents - Trademarks - Privacy Policy - Preventing Piracy - RSS |