Qucs-S S-parameter Viewer & RF Synthesis Tools
Loading...
Searching...
No Matches
structures.h
1/*
2 * Copyright (C) 2019-2025 Andrés Martínez Mera - andresmmera@protonmail.com
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 */
17
18#ifndef STRUCTURES_H
19#define STRUCTURES_H
20
21#include <QString>
22#include <QStringList>
23#include <QMap>
24#include <array>
25#include <complex.h>
26#include <complex>
27#include <deque>
28#include <vector>
29
33enum ComponentType {
34 Capacitor,
35 Inductor,
36 Term,
37 GND,
38 ConnectionNodes,
39 Resistor,
40 TransmissionLine,
41 MicrostripLine,
42 MicrostripStep,
43 MicrostripOpen,
44 MicrostripVia,
45 MicrostripCoupledLines,
46 OpenStub,
47 ShortStub,
48 CoupledLines,
49 Coupler,
50 ComplexImpedance,
51 SPAR_Block
52};
53
59inline QString ComponentTypeToString(ComponentType type){
60 static const QMap<ComponentType, QString> names = {
61 {Capacitor, "Capacitor"},
62 {Inductor, "Inductor"},
63 {Term, "Term"},
64 {GND, "GND"},
65 {ConnectionNodes, "ConnectionNodes"},
66 {Resistor, "Resistor"},
67 {TransmissionLine, "TransmissionLine"},
68 {MicrostripLine, "MicrostripLine"},
69 {MicrostripStep, "MicrostripStep"},
70 {MicrostripOpen, "MicrostripOpen"},
71 {MicrostripVia, "MicrostripVia"},
72 {MicrostripCoupledLines, "MicrostripCoupledLines"},
73 {OpenStub, "OpenStub"},
74 {ShortStub, "ShortStub"},
75 {CoupledLines, "CoupledLines"},
76 {Coupler, "Coupler"},
77 {ComplexImpedance, "ComplexImpedance"},
78 {SPAR_Block, "SPAR_Block"}};
79
80 return names.value(type, "Unknown");
81}
82
86enum ResponseType {
87 Butterworth,
88 Chebyshev,
89 Legendre,
90 Gaussian,
91 Elliptic,
92 Blichinkoff,
93 Bessel,
94 LinearPhaseEqError,
95 Gegenbauer
96};
97
101enum FilterClass { Lowpass, Highpass, Bandpass, Bandstop };
102
106enum Coupling {
107 CapacitiveCoupledShuntResonators,
108 InductiveCoupledShuntResonators,
109 CapacitiveCoupledSeriesResonators,
110 InductiveCoupledSeriesResonators,
111 QWCoupledShuntResonators
112};
113
117enum SemiLumpedImplementation { ONLY_INDUCTORS, INDUCTORS_AND_SHUNT_CAPS };
118
119
123enum TransmissionLineType {
124 Ideal,
125 MLIN, // Microstrip
126 SLIN, // Stripline
127 Lumped
128};
129
130static const double SPEED_OF_LIGHT = 299792458.0;
131
136 QString ID;
137 std::vector<int> N;
138 std::vector<double> Ripple;
139 std::vector<double> RL;
140};
141
146 double height;
147 double er;
148 double tand;
151
153 MS_Substrate(double h = 0.508e-3, double epsilon_r = 3.55,
154 double tand = 0.0027, double MetalConductivity = 58e6,
155 double MetalThickness = 32e-6)
156 : height(h), er(epsilon_r), tand(tand),
158};
159
160
161
166inline bool operator==(const MS_Substrate& a, const MS_Substrate& b) {
167 return a.height == b.height &&
168 a.er == b.er &&
169 a.tand == b.tand &&
172}
173
174
178inline QList<MS_Substrate> removeDuplicates(const QList<MS_Substrate>& list) {
179 QList<MS_Substrate> uniqueList;
180 for (const auto& item : list) {
181 if (!uniqueList.contains(item)) {
182 uniqueList.append(item);
183 }
184 }
185 return uniqueList;
186}
187
188
192struct FilterSpecifications {
193 FilterClass FilterType;
194 ResponseType FilterResponse;
195 QString Implementation;
196 TransmissionLineType TL_implementation;
197 Coupling DC_Coupling;
198 bool isCLC;
199 unsigned int order;
200 double Ripple = 0.05;
201 double fc;
202 double bw;
203 double ZS;
204 double ZL;
205 double as;
206 QString EllipticType;
207 bool UseZverevTables;
208 double minZ;
209 double maxZ;
210 SemiLumpedImplementation SemiLumpedISettings;
211 double ImpedanceRatio;
212 MS_Substrate MS_Subs;
213 ComponentType tunableComponent_DC_Filters;
214 std::vector<double> resonatorValues;
215};
216
221 double Z0;
223 TransmissionLineType TL_implementation;
227 QString Weigthing;
228 double gamma_MAX;
229 double ZL_freq;
230 std::complex<double> ZL;
231 QList<double> freq;
232 QList<std::complex<double>> ZL_data;
233 QString sim_path;
235};
236
247
252 std::vector<std::complex<double>> ZS;
253 std::vector<std::complex<double>> ZL;
254 QStringList topology;
255 QList<struct ComponentInfo> Ladder;
256};
257
262 QString Type;
263 TransmissionLineType TL_implementation;
266 std::deque<double> OutputRatio;
267 double alpha;
268 QString units;
269 double freq;
270 double Z0;
272};
273
278 QString Topology;
279 TransmissionLineType TL_implementation;
280 double Zin;
281 double Zout;
282 double Attenuation;
283 double Frequency;
284 double Pin;
286};
287
288#endif // STRUCTURES_H
Attenuator design parameters.
Definition structures.h:277
QString Topology
Attenuator topology.
Definition structures.h:278
double Zout
Output impedance (Ohm)
Definition structures.h:281
double Pin
Input power (W)
Definition structures.h:284
double Attenuation
Attenuation (dB)
Definition structures.h:282
double Frequency
Central frequency (Hz)
Definition structures.h:283
TransmissionLineType TL_implementation
TL type.
Definition structures.h:279
MS_Substrate MS_Subs
Substrate settings.
Definition structures.h:285
double Zin
Input impedance (Ohm)
Definition structures.h:280
Microstrip substrate parameters.
Definition structures.h:145
double MetalThickness
Metal thickness (m)
Definition structures.h:150
double er
Relative permittivity.
Definition structures.h:147
double tand
Dissipation factor.
Definition structures.h:148
double MetalConductivity
Metal conductivity (S/m)
Definition structures.h:149
double height
Substrate height (m)
Definition structures.h:146
MS_Substrate(double h=0.508e-3, double epsilon_r=3.55, double tand=0.0027, double MetalConductivity=58e6, double MetalThickness=32e-6)
Constructor with RO4003C defaults (20 mils)
Definition structures.h:153
Matching network design data.
Definition structures.h:240
MatchingNetworkDesignParameters OutputNetworkParameters
Output network params.
Definition structures.h:242
double f_match
Target frequency (Hz)
Definition structures.h:245
std::array< std::complex< double >, 4 > sparams
S-parameters.
Definition structures.h:243
bool twoPortMode
Two-port mode flag.
Definition structures.h:244
MatchingNetworkDesignParameters InputNetworkParameters
Input network params.
Definition structures.h:241
Matching network design parameters.
Definition structures.h:220
QList< std::complex< double > > ZL_data
Impedance vs frequency.
Definition structures.h:232
MS_Substrate MS_Subs
Substrate settings.
Definition structures.h:234
TransmissionLineType TL_implementation
TL type.
Definition structures.h:223
int Solution
Solution number.
Definition structures.h:224
int Topology
Network topology.
Definition structures.h:222
std::complex< double > ZL
Load impedance at fmatch.
Definition structures.h:230
double Z0
Reference impedance (Ohm)
Definition structures.h:221
double gamma_MAX
Maximum reflection coefficient.
Definition structures.h:228
int NSections
Number of sections.
Definition structures.h:226
QList< double > freq
Frequency list.
Definition structures.h:231
double ZL_freq
Load impedance frequency (Hz)
Definition structures.h:229
QString Weigthing
Weighting function.
Definition structures.h:227
int OpenShort
Open/short configuration.
Definition structures.h:225
QString sim_path
S-parameter file path.
Definition structures.h:233
Network information.
Definition structures.h:251
std::vector< std::complex< double > > ZL
Load impedances.
Definition structures.h:253
QList< struct ComponentInfo > Ladder
Component IDs and properties.
Definition structures.h:255
std::vector< std::complex< double > > ZS
Source impedances.
Definition structures.h:252
QStringList topology
Topology descriptions.
Definition structures.h:254
Power combiner parameters.
Definition structures.h:261
QString Type
Wilkinson, branchlines, Bagley, etc.
Definition structures.h:262
double freq
Center frequency (Hz)
Definition structures.h:269
TransmissionLineType TL_implementation
TL type.
Definition structures.h:263
double alpha
Attenuation constant.
Definition structures.h:267
std::deque< double > OutputRatio
Splitting ratio.
Definition structures.h:266
MS_Substrate MS_Subs
Substrate settings.
Definition structures.h:271
int Nstages
Number of combiner stages.
Definition structures.h:265
QString units
mm, mil, um
Definition structures.h:268
double Z0
Reference impedance (Ohm)
Definition structures.h:270
int Noutputs
Number of output branches.
Definition structures.h:264
Prototype table properties.
Definition structures.h:135
QString ID
Table identifier.
Definition structures.h:136
std::vector< double > RL
Return loss values.
Definition structures.h:139
std::vector< int > N
Filter orders.
Definition structures.h:137
std::vector< double > Ripple
Ripple values.
Definition structures.h:138