rfbudget
Creates an RF budget object and performs RF budget analysis for a chain of 2 port elements.
| Library |
|
Syntax
Function call
-
rfobj = rfbudget()— creates an RF budget object, the properties of which are set by default.
-
rfobj = rfbudget(Elements,InputFrequency,AvailableInputPower,SignalBandwidth)— creates an RF budget object, performing calculations according to the specified arguments. By default, if any of the input arguments are changed, the object recalculates the results.
-
rfobj = rfbudget(_,AutoUpdate)— creates an RF budget object using the argumentAutoUpdate. 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 |
|
|
|
|
|
A non-linear element |
|
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.
| Типы данных |
|
# 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.
| Типы данных |
|
# 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.
| Типы данных |
|
# 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.
#
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 argumentElements. -
InputFrequency— the function sets this property based on the argumentInputFrequency. -
AvailableInputPower— the function sets this property based on the argumentAvailableInputPower. -
SignalBandwidth— the function sets this property based on the argumentSignalBandwidth. -
AutoUpdate— the function sets this property based on the argumentAutoUpdate. -
Solver— the function sets this property based on the argumentSolver.
-
WaitBar— the function sets this property based on the argumentWaitBar. -
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.
-
-
TransducerGainis 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.
-
-
IIP3is 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.
-
-
OIP3is 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 .
-
Connect a large resistance ( Ohms) parallel to the network.
-
Connect low resistance ( Ohms) sequentially to the beginning of the network.
-
-
, and .
-
Connect a large resistance ( Ohms) parallel to the network.
-
Connect low resistance ( Ohms) sequentially at the end of the network.
-
-
, and .
-
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.
-
-
.
Connect a large resistance ( Ohms) parallel to the network.
Literature
-
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.