Table of Contents

Class LoraLinkBudget

Namespace
Pamoja.Lora
Assembly
Pamoja.Lora.dll

The gains and losses of a LoRa link, from the transmitting radio to the receiving one.

public sealed record LoraLinkBudget : IEquatable<LoraLinkBudget>
Inheritance
LoraLinkBudget
Implements
Inherited Members

Remarks

The properties are the parts of a deployment a maker chooses: how hard the radio drives, which antenna goes on each end, and how much cable sits between each antenna and its radio. Every value is in decibels and resolves to a hundredth of a decibel. A new budget is 0 dBm between isotropic antennas with no cable, heard with RadioNoiseFigureDb. The static members give each term of a budget on its own, from the documents that define them.

Fields

GatewayNoiseFigureDb

A typical noise figure for a LoRaWAN gateway receiver, in dB.

public const double GatewayNoiseFigureDb = 3

Field Value

double

Remarks

Semtech TN1300.05 works with 3 dB for a gateway.

RadioNoiseFigureDb

A typical noise figure for a Semtech sub-GHz LoRa radio, in dB.

public const double RadioNoiseFigureDb = 6

Field Value

double

Remarks

Semtech AN1200.22 takes 6 dB as the receiver behind the SX1272 and SX1276 datasheet sensitivities.

Properties

EirpDbm

The equivalent isotropically radiated power, in dBm.

public double EirpDbm { get; }

Property Value

double

Remarks

The transmit power plus the transmitting antenna gain, less the transmitting cable loss. This is the figure regional power ceilings limit.

NoiseFigureDb

The noise figure of the receiver, in dB, such as RadioNoiseFigureDb for a node or GatewayNoiseFigureDb for a gateway.

public double NoiseFigureDb { get; init; }

Property Value

double

ReceiveAntennaGainDbi

The gain of the receiving antenna over an isotropic antenna, in dBi.

public double ReceiveAntennaGainDbi { get; init; }

Property Value

double

ReceiveCableLossDb

The loss in the cable and connectors between the receiving antenna and its radio, in dB.

public double ReceiveCableLossDb { get; init; }

Property Value

double

TransmitAntennaGainDbi

The gain of the transmitting antenna over an isotropic antenna, in dBi.

public double TransmitAntennaGainDbi { get; init; }

Property Value

double

TransmitCableLossDb

The loss in the cable and connectors between the transmitting radio and its antenna, in dB.

public double TransmitCableLossDb { get; init; }

Property Value

double

TransmitPowerDbm

The power the transmitting radio delivers at its antenna port, in dBm.

public double TransmitPowerDbm { get; init; }

Property Value

double

Methods

DemodulatorSnrDb(byte)

Returns the signal-to-noise ratio the LoRa demodulator needs at a spreading factor, in dB.

public static double DemodulatorSnrDb(byte spreadingFactor)

Parameters

spreadingFactor byte

The spreading factor, clamped to 5 to 12.

Returns

double

The typical figure from Table 6-1 of the SX1261/2 datasheet, from -2.5 dB at SF5 to -20 dB at SF12.

FccMaxConductedDbm(double, ushort?)

Returns the most conducted power 47 CFR 15.247 allows a 902-928 MHz transmitter through an antenna, in dBm.

public static double? FccMaxConductedDbm(double antennaGainDbi, ushort? hoppingChannels = null)

Parameters

antennaGainDbi double

The directional gain of the transmitting antenna.

hoppingChannels ushort?

The number of hopping channels, or null for a system using digital modulation.

Returns

double?

1 W for digital modulation and for hopping on at least 50 channels, and 0.25 W for hopping on 25 to 49, less every decibel the gain exceeds 6 dBi; or null for hopping on fewer than 25 channels, which paragraph (b)(2) sets no limit for.

FreeSpaceLossDb(uint, uint)

Returns the free-space basic transmission loss between isotropic antennas, in dB.

public static double FreeSpaceLossDb(uint distanceMeters, uint frequencyHz)

Parameters

distanceMeters uint

The distance between the antennas in meters.

frequencyHz uint

The carrier frequency in hertz.

Returns

double

The loss of Recommendation ITU-R P.525-5, equation (5), which grows by 6.02 dB each time the distance doubles.

FresnelRadiusMillimeters(uint, uint, uint)

Returns the radius of the first Fresnel ellipsoid at a point on a path, in millimeters.

public static uint FresnelRadiusMillimeters(uint nearMeters, uint farMeters, uint frequencyHz)

Parameters

nearMeters uint

The distance from one antenna to the point, in meters.

farMeters uint

The distance from the point to the other antenna, in meters.

frequencyHz uint

The carrier frequency in hertz.

Returns

uint

The radius of Recommendation ITU-R P.526-16, equation (2), widest halfway along the path. The diffraction zone starts where the clearance falls to 60% of it.

Returns how far above the sensitivity a signal arrives across a path, in dB.

public double MarginDb(LoraLink link, double pathLossDb)

Parameters

link LoraLink

The link settings, whose spreading factor and bandwidth set the sensitivity.

pathLossDb double

The loss between the two antennas.

Returns

double

The link margin, which is negative where the path loses more than the link survives.

Returns the most path loss the link survives, in dB.

public double MaxPathLossDb(LoraLink link)

Parameters

link LoraLink

The link settings, whose spreading factor and bandwidth set the sensitivity.

Returns

double

The loss above which the link does not close.

MaxTransmitPowerDbm(double)

Returns the most transmit power that keeps the EIRP at or under a ceiling, in dBm.

public double MaxTransmitPowerDbm(double eirpCeilingDbm)

Parameters

eirpCeilingDbm double

The EIRP limit, such as MaxEirpDbm(uint) for a frequency.

Returns

double

The ceiling less the transmitting antenna gain, plus the transmitting cable loss. A higher-gain antenna leaves less power for the radio.

NoiseFloorDbm(uint)

Returns the thermal noise power in a channel, in dBm.

public static double NoiseFloorDbm(uint bandwidthHz)

Parameters

bandwidthHz uint

The channel bandwidth in hertz.

Returns

double

-174 dBm/Hz plus 10 log10 of the bandwidth, as Semtech AN1200.22 derives it.

ReceivedDbm(double)

Returns the power that reaches the receiving radio across a path, in dBm.

public double ReceivedDbm(double pathLossDb)

Parameters

pathLossDb double

The loss between the two antennas, such as FreeSpaceLossDb(uint, uint).

Returns

double

The EIRP less the path loss, plus the receiving antenna gain, less the receiving cable loss.

Returns the weakest signal the receiver can demodulate on a link, in dBm.

public double SensitivityDbm(LoraLink link)

Parameters

link LoraLink

The link settings, whose spreading factor and bandwidth set the floor.

Returns

double

The noise floor of the channel, raised by the noise figure and lowered by the demodulator SNR.