Superclass:  Channel   

On This Page

About

Rayleigh-faded channels are represented by the channel_rayleigh object, which is a subclass of the generic channel object.

A Rayleigh-faded channel is described by the fact that its entries are drawn i.i.d. from a complex Normal distribution with mean 0 and variance 1.

Video Tutorial

Creating a Rayleigh-Faded Channel

A Rayleigh-faded channel can be created via

c = channel.create('Rayleigh')

which will create a channel_rayleigh object c.

The channel_rayeligh object is a subclass of the channel object, meaning it will inherit the properties and methods of the channel object.

Key Properties

The channel_rayleigh object is a subclass of the channel object and thus inherits all of its properties and methods.

It does not contain any important properties beyond those inherited from the channel object, which are summarized below.

c.array_transmit
c.array_receive
c.num_antennas_transmit
c.num_antennas_receive
c.carrier_frequency
c.carrier_wavelength
c.propagation_velocity
c.channel_matrix

Example Setup

The setup of a Rayleigh-faded channel, by virtue of its simplicity, is practically identical to that of a generic channel object, which looks similar to

c = channel.create()
c.set_carrier_frequency(fc)
c.set_propagation_velocity(vel)
c.set_arrays(atx,arx)

where fc is the carrier frequency (in Hz), vel is the propagation velocity (in m/s), and atx and arx are array objects at the channel input and output, respectively.

Invoking a Channel Realization

Generating a realization of the Rayleigh-faded channel c is as simple as executing

H = c.realization()

where H is the realized channel matrix whose entries are drawn i.i.d. from a complex Normal distribution with mean 0 and variance 1.

The channel matrix can also be retrieved via

H = c.get_channel_matrix()

though this does not invoke a new channel realization but rather merely returns the current channel matrix.

Shorthand Methods

The channel_rayleigh object inherits the following shorthand methods from the channel object.

  • c.H — Returns the channel matrix.
  • c.Nt — Returns the number of transmit antennas at the channel input.
  • c.Nr — Returns the number of receive antennas at the channel output.

List of Properties

The channel_rayleigh object contains the following properties:

  • channel_rayleigh.name
  • channel_rayleigh.channel_matrix
  • channel_rayleigh.num_antennas_transmit
  • channel_rayleigh.num_antennas_receive
  • channel_rayleigh.array_transmit
  • channel_rayleigh.array_receive
  • channel_rayleigh.carrier_frequency
  • channel_rayleigh.carrier_wavelength
  • channel_rayleigh.propagation_velocity
  • channel_rayleigh.normalized_channel_energy
  • channel_rayleigh.force_channel_energy_normalization

List of Methods

The channel_rayleigh object contains the following methods:

Methods Documentation

H()

Returns the channel matrix.

Usage:
val = H()
Return Values:
val — the channel matrix

Back to methods

Nr()

Returns the number of receive antennas out of the channel.

Usage:
val = Nr()
Return Values:
val — the number of receive antennas out of the channel

Back to methods

Nt()

Returns the number of transmit antennas into the channel.

Usage:
val = Nt()
Return Values:
val — the number of transmit antennas into the channel

Back to methods

channel_rayleigh(name)

Creates a MIMO channel object.

Usage:
obj = CHANNEL()
obj = CHANNEL(name)
Input Arguments:
name — an optional name for the object
Return Values:
obj — an object representing a MIMO channel

Back to methods

create(type)

Creates a channel object of a specific type.

Usage:
c = channel.create()
c = channel.create(type)
Input Arguments:
type — (optional) a string specifying what type of channel to create
Return Values:
c — a channel object of the type specified

Back to methods

enforce_channel_energy_normalization(H)

Normalizes the channel matrix so that its total energy (squared Frobenius norm) is equal the current normalized channel energy property. The default normalized channel energy is the product of the number of transmit antenans and the number of receive antennas.

Usage:
G = enforce_channel_energy_normalization()
G = enforce_channel_energy_normalization(H)
Input Arguments:
H — (optional) a channel matrix; if not passed, the current channel matrix will be used and overwritten with the normalized version; if passed, the channel matrix property will not be set
Return Values:
G — the normalized channel matrix

Back to methods

get_channel_matrix()

Returns the channel matrix.

Usage:
H = get_channel_matrix()
Return Values:
H — channel matrix

Back to methods

initialize()

Initializes a channel.

Usage:
initialize()

Back to methods

realization()

Realizes a Rayleigh channel matrix where each entry in the channel matrix is drawn i.i.d. from a complex normal distribution.

Usage:
H = realization()
Return Values:
H — a channel matrix whose entries are Rayleigh-faded

Back to methods

set_array_receive(array)

Sets the receive array object. Also sets the number of receive antennas accordingly.

Usage:
set_array_receive(array)
Input Arguments:
array — an array object

Back to methods

set_array_transmit(array)

Sets the transmit array object. Also sets the number of transmit antennas accordingly.

Usage:
set_array_transmit(array)
Input Arguments:
array — an array object

Back to methods

set_arrays(array_transmit,array_receive)

Sets the transmit and receive arrays at the input and output of the channel.

Usage:
set_arrays(array_transmit,array_receive)
Input Arguments:
array_transmit — an array object at the channel input
array_receive — an array object at the channel output

Back to methods

set_carrier_frequency(fc)

Sets the carrier frequency of the channel.

Usage:
set_carrier_frequency(fc)
Input Arguments:
fc — carrier frequency (Hz)
Notes:
Also updates carrier wavelength.

Back to methods

set_channel_matrix(H)

Sets the channel matrix.

Usage:
set_channel_matrix(H)
Input Arguments:
H — channel matrix

Back to methods

set_force_channel_energy_normalization(force)

Sets the enforcement of channel energy normalization. If true, the channel matrix will always be normalized such that its energy is of the desired value.

Usage:
set_force_channel_energy_normalization(force)
Input Arguments:
force — a boolean indicating if the channel matrix should be normalized or not

Back to methods

set_name(name)

Sets the name of the channel.

Usage:
set_name()
set_name(name)
Input Arguments:
name — (optional) a string; if not passed, ‘channel’ is the default name used

Back to methods

set_normalized_channel_energy(E)

Sets the normalized energy of the channel.

Usage:
set_normalized_channel_energy()
set_normalized_channel_energy(E)
Input Arguments:
E — (optional) the desired normalized channel energy; if not passed, the product of the number of transmit antennas and the number of receive antennas will be used

Back to methods

set_propagation_velocity(val)

Sets the propagation velocity of the channel.

Usage:
set_propagation_velocity(val)
Input Arguments:
val — propagation velocity (meters/sec)

Back to methods

set_receive_array(array)

Sets the receive array object (LEGACY).

Usage:
set_receive_array(array)
Input Arguments:
array — an array object

Back to methods

set_transmit_array(array)

Sets the transmit array object (LEGACY).

Usage:
set_transmit_array(array)
Input Arguments:
array — an array object

Back to methods


Source

classdef channel_rayleigh < channel
    % CHANNEL A Rayleigh-faded channel.
    properties
        % pass
    end
    methods
        function obj = channel_rayleigh(name)
            % CHANNEL Creates a MIMO channel object.
            % 
            % Usage:
            %  obj = CHANNEL()
            %  obj = CHANNEL(name)
            % 
            % Args:
            %  name: an optional name for the object
            % 
            % Returns:
            %  obj: an object representing a MIMO channel
            if nargin < 1 || isempty(name)
                name = 'channel-rayleigh';
            end
            obj.name = name;
        end
        
        function H = channel_realization(obj)
            % CHANNEL_REALIZATION Realizes a Rayleigh channel matrix
            % where each entry in the channel matrix is drawn i.i.d. from a
            % complex normal distribution.
            %
            % Usage:
            %  H = CHANNEL_REALIZATION()
            % 
            % Returns:
            %  H: a channel matrix whose entries are Rayleigh-faded
            H = cgauss_rv(0,1,obj.Nr,obj.Nt);
            obj.set_channel_matrix(H);
        end
    end
end