The path_loss object represents a generic path loss model. It does not hold any value in representing a particular path loss model but rather acts as the foundation for all other path loss models within MFM.

A path loss model is typically a function of carrier frequency, distance of the path, and other parameters (e.g., path loss exponent). Some path loss models are deterministic while other involve some degree of randomness (e.g., shadowing).

In the context of MIMO formulations, the path_loss object (and its subclasses) are responsible for realizing the large-scale gain $G$, which is the square root of the inverse of path loss.

### Creating a Generic Path Loss Object

While the path_loss object on its own isn’t all that useful, it can be created via

p = path_loss.create()


As mentioned, more useful channel models are subclasses of the path_loss object, meaning they will inherit the properties and methods of the path_loss object. Moreover, the path_loss object includes some of the key setup functions that most—if not all—other channel objects will use.

### Key Properties

The path_loss object (and its subclasses) contain the following important properties.

The realized path loss of a path_loss object p is stored in

p.attenuation


which is a power loss.

The carrier frequency (in Hertz), carrier wavelength (in wavelengths), and propagation velocity (in meters per second) of the channel—more accurately, of the signals we are interested in—are captured by

p.carrier_frequency
p.carrier_wavelength
p.propagation_velocity


While not all channel models require knowledge of these three properties, several path loss models do and thus, for simplicity, MFM includes them in the generic path_loss object.

The distance of the path (in meters) is stored in

p.distance


### Setting the Carrier Frequency

To set the carrier frequency of a path loss model, use

p.set_carrier_frequency(fc)


where fc is the carrier frequency (in Hz) of the signals of interest. This will automatically update the carrier wavelength based on the current propagation velocity.

### Setting the Propagation Velocity

To set the propagation velocity of a path loss model, use

p.set_propagation_velocity(vel)


where vel is the propagation velocity (in m/s) of the signals of interest.

It is common to use vel = 3e8 for electromagnetic signals, for example.

Since this parameter can be set by the user, MFM may support other communication systems and/or other propagation media, such as underwater acoustics where the propagation velocity is commonly approximated to vel = 1.5e3 for oceanic environments.

### Setting the Distance

To set the distance of a path_loss object p, simply use

p.set_distance(d)


where d is the distance of the path in meters.

### Example Setup

A typical path_loss object setup looks something similar to

p = path_loss.create()
p.set_carrier_frequency(fc)
p.set_propagation_velocity(vel)
p.set_distance(d)


### Getting the Attenuation

To get the realized attenuation of a path_loss object p, simply use

atten = p.get_attenuation()


where atten is the attenuation of the path loss (power loss, linear scale).

Note that atten is related to the large-scale gain $G$ by simply atten $= G^{-2}$.

As mentioned, the path_loss object on its own does not represent any path loss model but is a superclass/parent for all other path loss models in MFM. Thus, there is no way to realize the attenuation on a path_loss object itself; all other path loss models in MFM will, however, and after which, users can use get_attenuation to retrieve the realized attenuation.

### List of Properties

The path_loss object contains the following properties:

• path_loss.name
• path_loss.type
• path_loss.distance
• path_loss.attenuation
• path_loss.carrier_frequency
• path_loss.carrier_wavelength
• path_loss.propagation_velocity

### List of Methods

The path_loss object contains the following methods:

### Methods Documentation

#### create(type)

Creates a path loss object of a specific type.

Usage:
obj = path_loss.create()
obj = path_loss.create(type)
Input Arguments:
type — (optional) a string specifying which path loss model to create
Return Values:
obj — a path loss object

Back to methods

#### get_attenuation()

Returns the realized attenuation of the path loss model.

Usage:
val = get_attenuation()
Return Values:
val — the attenuation (power loss) of the path

Back to methods

#### initialize()

Initializes a path loss object.

Usage:
initialize()

Back to methods

#### path_loss(name)

Creates a path loss object.

Usage:
obj = path_loss()
obj = path_loss(name)
Input Arguments:
name — an optional name for the object
Return Values:
obj — an object representing path loss

Back to methods

#### set_carrier_frequency(fc)

Sets the carrier frequency of the channel. Also updates the carrier wavelength accordingly.

Usage:
set_carrier_frequency(fc)
Input Arguments:
fc — carrier frequency (Hz)
Notes:

Back to methods

#### set_distance(d)

Sets the distance of the path (in meters).

Usage:
set_distance(d) Sets the distance of the link to a specific
value.
Input Arguments:
d — distance of the path (in meters)

Back to methods

#### set_name(name)

Sets the name of the path loss model.

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

Back to methods

#### set_path_loss_attenuation(atten)

Sets the attenuation of the path loss model.

Usage:
set_path_loss_attenuation(atten)
Input Arguments:
atten — the attenuation (power loss) of the path

Back to methods

#### set_propagation_velocity(val)

Sets the propagation velocity of the channel. Also updates the carrier wavelength accordingly.

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

Back to methods

#### set_type(type)

Sets the type of path loss model.

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

Back to methods