Engee documentation

rfbudget

Creates an RF budget object and performs RF budget analysis for a chain of 2 port elements.

Library

EngeeRF

Syntax

Function call

  • rfobj = rfbudget() — creates an RF budget object, the properties of which are set by default.

  • rfobj = rfbudget(_,AutoUpdate) — creates an RF budget object using the argument AutoUpdate. You can use this syntax with any of the previous syntaxes.

  • rfobj = rfbudget(Name=Value) — sets properties specified by one or more name-value arguments.

Arguments

Name-value input arguments

Specify pairs of arguments as Name=Value, where Name — the name of the argument, and Value — the appropriate value.

# Elements — RF budget elements

+ EngeeRF.AbstractRF.AbstractObjectRF[] (by default) | RF object | array of RF objects

Details

RF budget elements defined as an RF object or an array of RF objects. Use an array of objects when performing RF budget analysis for a chain of RF elements.

The table lists the supported RF objects that can be used to design an RF chain.

Element Type RF object

The linear element

attenuator

rffilter

nport

seriesRLC

shuntRLC

phaseshift

txlineCPW

txlineMicrostrip

txlineStripline

txlineTwoWire

A non-linear element

amplifier

modulator

mixerIMT

Example: RF budget analysis for an amplifier and modulator circuit:

using EngeeRF
a = amplifier()
m = modulator()
b = rfbudget(Elements=[a m])

# InputFrequency is the frequency of the input signal, Hz

+ Float64[] (by default) | a non-negative scalar | non-negative column vector

Details

The frequency of the input signal in Hz, set as a non-negative scalar or column vector of size on , where represents the number of frequencies. If the input frequency is a vector, then the function rfbudget analyzes each input frequency separately.

Типы данных

Float64

# AvailableInputPower — power supplied to the cascade input, dBm

+ NaN (by default) | scalar

Details

The power at the cascade input in dBm, set as a scalar.

Типы данных

Float64

# SignalBandwidth — signal bandwidth at the cascade input, Hz

+ NaN (by default) | scalar

Details

The bandwidth of the signal at the input of the cascade in Hz, set as a scalar.

Типы данных

Float64

# AutoUpdate — option for automatic recalculation of RF budget

+ true (by default) | false

Details

The option to automatically recalculate the RF budget analysis based on changes made to the existing scheme, set as true or false.

Setting the argument AutoUpdate in the value false disables automatic recalculation of the budget when changing parameters.

# Solver — calculation method

+ "Friis" (by default)

Details

The calculation method.

# WaitBar — option to display the progress bar
true (default) | false

Details

The option to display a progress bar with a cancel button during harmonic balance analysis, set as true or false.

Output arguments

# rfobj — RF budget object

+ object

Details

The RF budget object. The object contains the following properties:

  • Elements — the function sets this property based on the argument Elements.

  • InputFrequency — the function sets this property based on the argument InputFrequency.

  • AvailableInputPower — the function sets this property based on the argument AvailableInputPower.

  • SignalBandwidth — the function sets this property based on the argument SignalBandwidth.

  • AutoUpdate — the function sets this property based on the argument AutoUpdate.

  • Solver — the function sets this property based on the argument Solver.

  • WaitBar — the function sets this property based on the argument WaitBar.

  • OutputFrequency — output frequencies in Hz, returned as:

    • scalar, when and ;

    • vectors when or ;

    • matrices when and ;

      represents the number of frequencies at the input, and — the number of steps in the cascade.

  • OutputPower — output power in dBm, returned as:

    • scalar, when and ;

    • vectors when or ;

    • matrices when and ;

      represents the number of frequencies at the input, and — the number of steps in the cascade.

  • TransducerGain is the power gain of the converter in dB, returned as:

    • scalar, when and ;

    • vectors when or ;

    • matrices when and ;

      represents the number of frequencies at the input, and — the number of steps in the cascade.

  • NF — noise coefficients in dB, returned as:

    • scalar, when and ;

    • vectors when or ;

    • matrices when and ;

      represents the number of frequencies at the input, and — the number of steps in the cascade.

  • IIP3 is the input intersection point of third—order intermodulation distortion in dBm, returned as:

    • scalar, when and ;

    • vectors when or ;

    • matrices when and ;

      represents the number of frequencies at the input, and — the number of steps in the cascade.

  • OIP3 is the output intersection point of third—order intermodulation distortion in dBm, returned as:

    • scalar, when and ;

    • vectors when or ;

    • matrices when and ;

      represents the number of frequencies at the input, and — the number of steps in the cascade.

  • SNR — the signal-to-noise ratio in dB, returned as:

    • scalar, when and ;

    • vectors when or ;

    • matrices when and ;

      represents the number of frequencies at the input, and — the number of steps in the cascade.

Examples

Creating an RF budget object

Details

Creating a data object with the default properties using the function rfbudget and we will deduce its properties.

using EngeeRF

b = rfbudget()

println("Elements: ", b.Elements,
        "\nInputFrequency: ", b.InputFrequency,
        "\nAvailableInputPower: ", b.AvailableInputPower,
        "\nSignalBandwidth: ", b.SignalBandwidth,
        "\nAutoUpdate: ", b.AutoUpdate,
        "\nOutputFrequency: ", b.OutputFrequency,
        "\nOutputPower: ", b.OutputPower,
        "\nTransducerGain: ", b.TransducerGain,
        "\nNF: ", b.NF,
        "\nIIP3: ", b.IIP3,
        "\nOIP3: ", b.OIP3,
        "\nSNR: ", b.SNR)
Elements: EngeeRF.AbstractRF.AbstractObjectRF[]
InputFrequency: Float64[]
AvailableInputPower: NaN
SignalBandwidth: NaN
AutoUpdate: true
OutputFrequency: Matrix{Float64}(undef, 0, 0)
OutputPower: Matrix{Float64}(undef, 0, 0)
TransducerGain: Matrix{Float64}(undef, 0, 0)
NF: Matrix{Float64}(undef, 0, 0)
IIP3: Matrix{Float64}(undef, 0, 0)
OIP3: Matrix{Float64}(undef, 0, 0)
SNR: Matrix{BigFloat}(undef, 0, 0)

Let’s create a two-port serial RLC circuit object and add it as an element to the RF budget object with the specified properties.

using EngeeRF

b = rfbudget()

println("Elements: ", b.Elements,
        "\nInputFrequency: ", b.InputFrequency,
        "\nAvailableInputPower: ", b.AvailableInputPower,
        "\nSignalBandwidth: ", b.SignalBandwidth,
        "\nAutoUpdate: ", b.AutoUpdate,
        "\nOutputFrequency: ", b.OutputFrequency,
        "\nOutputPower: ", b.OutputPower,
        "\nTransducerGain: ", b.TransducerGain,
        "\nNF: ", b.NF,
        "\nIIP3: ", b.IIP3,
        "\nOIP3: ", b.OIP3,
        "\nSNR: ", b.SNR)
Elements: EngeeRF.AbstractRF.AbstractObjectRF[seriesRLC(Terminals = ("p1+", "p2+", "p1-", "p2-"), Name = "SeriesRLC", Budget = nothing, Listener = nothing, Ports = ("p1", "p2"), Parent = nothing, ParentNodes = Int64[], ParentPath = "", NumPorts = 2, R = 50.0, L = 1.0e-6, C = 5.0e-12, Name = "SeriesRLC")]
InputFrequency: [1.0e9]
AvailableInputPower: -30.0
SignalBandwidth: 1.0e8
AutoUpdate: true
OutputFrequency: [1.0e9;;]
OutputPower: [-65.92198202974255;;]
TransducerGain: [-35.92198202974255;;]
NF: [3.010299956639812;;]
IIP3: [Inf;;]
OIP3: [Inf;;]
SNR: BigFloat[60.96488723758829232562408304577801251192706544629058321574484227786790837291292;;]

Recommendations

The Touchstone file in the object nport must be passive at all specified frequencies.

Algorithms

The ABCD parameters are used to calculate the S-parameters of the cascade for the Friis solver. When , conversion to ABCD results in NaNs. For such cases, the S-parameters are modified as follows:

  • , and .

    rfbudget1

    • Connect a large resistance ( Ohms) parallel to the network.

    • Connect low resistance ( Ohms) sequentially to the beginning of the network.

  • , and .

    rfbudget2

    • Connect a large resistance ( Ohms) parallel to the network.

    • Connect low resistance ( Ohms) sequentially at the end of the network.

  • , and .

    rfbudget3

    • Connect a large resistance ( Ohms) parallel to the network.

    • Connect low resistance ( Ohms) sequentially to the beginning of the network.

    • Connect low resistance ( Ohms) sequentially at the end of the network.

  • .

    rfbudget4

    Connect a large resistance ( Ohms) parallel to the network.

Literature

  1. Roychowdhury, J., D. Long, and P. Feldmann. Cyclostationary Noise Analysis of Large RF Circuits with Multitone Excitations. IEEE Journal of Solid-State Circuits 33, no. 3 (March 1998): 324–36. https://doi.org/10.1109/4.661198.