TOUCHSTONE ISSUE RESOLUTION DOCUMENT (TSIRD) TSIRD ID#: 7 ISSUE TITLE: Standardized Pole-Residue Representation of Touchstone Data REQUESTOR: Arpad Muranyi, Siemens EDA DATE SUBMITTED: February 14, 2024 DATE REVISED: DATE ACCEPTED: -------------------------------------------------------------------------------- DEFINITION OF THE ISSUE: With the ever-increasing complexity of package and printed circuit board designs, Touchstone files used for interconnect modeling are also increasing in size. Touchstone file sizes are often in the hundreds of Megabytes, or even Gigabytes range. This can have a negative effect on simulation performance and makes the distribution of these files very challenging. Consequently, there is a great need for finding ways to describe large interconnects with smaller files. In addition, different EDA vendors use different (proprietary) algorithms to process the Touchstone file data in simulations, which can cause simulation results to be different from different EDA tools, even with identical Touchstone files. A common method in the industry to reduce the size of Touchstone files - and thereby improve simulation performance - is to convert the large frequency table data to fitted pole-residue format. There are numerous advantages to this method, one of which is that EDA tools can produce identical simulation results with the same pole-residue-based models. While pole-residue fitting (also known as "rational fit" or "vector fit") has been used for decades in the industry, this data format has not been standardized yet, which makes it EDA tool dependent. The goal of this proposal is to standardize the pole-residue format so that all EDA tools could make use of the same pole-residue model files. -------------------------------------------------------------------------------- SOLUTION REQUIREMENTS: The Touchstone specification must meet these requirements: Table 1: Solution Requirements Requirement Notes * Define three new keyword pairs to describe pole-residue data [Begin Pole-Residue Data] / [End Pole-Residue Data], [Begin Common Poles Data] / [End Common Poles Data] and [Begin Residues Data] / [End Residues Data] * Define a new keyword to document the number of pole-residue matrix elements [Number of Pole-Residue Indices] * Define a new keyword pair to document the source of the pole-residue data [Begin Pole-Residue Data Source] / [End Pole-Residue Data Source] * Make the frequency table and the pole residue data mutually exclusive in the same file Change the rules of the existing [Network Data] and [Noise Data] keywords -------------------------------------------------------------------------------- SUMMARY OF PROPOSED CHANGES: For review purposes, the proposed changes are summarized as follows: Table 2: Touchstone Keywords Affected Specification Item New/Modified/Other Notes -------------------------------------------------------------------------------- PROPOSED CHANGES: Note that the existing Touchstone specification does not define the units for [Network Data] (we should probably correct that). Consider adding a File_rev keyword to Touchstone in general... Change the text of the existing Touchstone 2.1 specification throughout for the [Number of Frequencies], [Network Data] and [Noise Data] keywords so that they would be not allowed when the [Begin Pole-Residue Data Source] and related keywords are present. Add the following keywords to the Touchstone specification in the appropriate location: Keyword: [Begin Pole-Residue Data Source] / [End Pole-Residue Data Source] Required: The [Begin Pole-Residue Data Source] / [End Pole-Residue Data Source] keyword pair is required when the [Begin Pole-Residue Data] is present, or when [Begin Common Poles Data] and [Begin Residues Data] are present. Otherwise, it is not permitted. Description: The purpose of the [Begin Pole-Residue Data Source] keyword is to document the original source Touchstone file containing the network data from which the pole-residue data was generated. Sub-Params: Source_file, File_date, File_revision, File_size, Company_name, Source_checksum, Min_valid_frequency, Max_valid_frequency Usage rules: The Source_file and File_date subparameters are required. Each subparameter shall start on a separate line and may appear in any order. Each subparameter and its argument shall be separated by at least one white space. The file name argument of the Source_file subparameter is case-sensitive to support operating systems in which file names are case-sensitive. The month argument in the File_date subparameter should be spelled out for clarity. The File_size argument shall be provided in bytes (not kilo-bytes or mega-bytes, etc.). Min_valid_frequency and Max_valid_frequency define the valid frequency range of the fitted pole residue data as it relates to the original S-parameter data. These frequencies may correspond to the minimum and maximum frequencies found in the original S-parameter network data or the minimum and maximum fitted pole frequencies and indicate the useful bandwidth of the pole-residue data, beyond which the model may not accurately represent the original S-parameter data. Example: [Begin Pole-Residue Data Source] Company_name NoName Corp. Source_file Original_matrix_formatted.s30p File_revision rev0.0 File_date July 4, 2024 File_size 12345678 Source_checksum CE114e4501d2e4E2DcEA3E17B546F339 Min_valid_frequency 0 Max_valid_frequency 10e+9 [End Pole-Residue Data Source] Keyword: [Number of Pole-Residue Indices] Required: The [Number of Pole-Residue Indices] keyword is required when the [Begin Pole-Residue Data] or the [Begin Residues Data] keyword is present, otherwise it is not permitted. Description: The purpose of this keyword is to provide a mechanism to check for possible typographical errors or accidental loss of data in the file. Usage rules: The [Number of Pole-Residue Indices] keyword shall appear after the [Number of Ports] keyword and before the [Begin Pole-Residue Data], [Begin Common Poles Data], or [Begin Residues Data] keywords. The [Number of Pole-Residue Indices] keyword shall be followed by at least one white space and a single integer number. The value of the integer that follows this keyword shall range from N to N[2], for full matrices, or N to N*(N+1)/2 for upper or lower triangle matrices, where N is the model's number of ports given in the [Number of Ports] keyword, and shall match the total number of indices following the [Begin Pole-Residue Data] or the [Begin Residues Data] keywords. When the value provided by this keyword is less than N[2] for full matrices, or less than N*(N+1)/2 for upper or lower triangle matrices, the matrix element data of the matrix elements whose indices are not present after the [Begin Pole-Residue Data] or the [Begin Residues Data] keyword are considered to be zero. Examples: ! The full matrix of a 4-port network data (.s4p file) would ! consist of 16 matrix elements. [Number of Pole-Residue Indices] 16 ! If all entries of the 4-port network data (.s4p file) are ! zero except its diagonal, it may be described with four ! pole-residue keywords. [Number of Pole-Residue Indices] 4 Keyword: [Begin Pole-Residue Data] Required: The [Begin Pole-Residue Data] keyword is not permitted prior to Version 3.0 files; it is not permitted for parameter types G and H, and it is not permitted when the [Begin Common Poles Data] and [Begin Residues Data] keywords or the [Network Data] keyword are present. Otherwise, at least N instances of the [Begin Pole-Residue Data] keyword are required. Description: This keyword contains the coefficients of the pole-residue representation of the network data. Sub-Params: Delay, Asymptote, Residue_at_infinity, Number_of_data_lines Usage rules: The [Begin Pole-Residue Data] keyword is followed by at least one white space and one or more integer number pairs, which are separated by a comma and enclosed in a pair of open and close parentheses. A white space is not required around the comma between the integer numbers or between the integer numbers and the parentheses or between the parentheses. The integer number pairs (i, j) that follow the [Begin Pole-Residue Data] keyword denote indexing to define which matrix element (or elements) are described by the data that follows. The number of matrix elements described by the [Begin Pole-Residue Data] / [End Pole-Residue Data] keyword pair is determined by the number of integer number pairs (i, j) that follow the [Begin Pole-Residue Data] keyword. The list of indices may span multiple lines and is terminated by any of the subparameters that follow. The value of the indices shall range from 1 to N, where N is the model's number of ports given in the [Number of Ports] keyword. The [Begin Pole-Residue Data] / [End Pole-Residue Data] keyword pairs shall describe at least N matrix elements (for a diagonal matrix). The maximum number of matrix elements in a model file shall be N[2] for a full matrix. When the [Matrix Format] keyword is present with the argument "Lower" or "Upper", the maximum number of matrix elements shall be no more than N*(N+1)/2. When the number of matrix elements described by the [Begin Pole-Residue Data] / [End Pole-Residue Data] keyword pairs is less than the maximums described above, the matrix element data of the missing matrix elements are assumed to be zero. All index number pairs following all occurrences of the [Begin Pole-Residue Data] keyword in a model file must be unique. For example, a 4-port model with a full matrix description might have 16 [Begin Pole-Residue Data] keywords with the following indices: [Begin Pole-Residue Data] (1,1) [Begin Pole-Residue Data] (1,2) [Begin Pole-Residue Data] (1,3) [Begin Pole-Residue Data] (1,4) [Begin Pole-Residue Data] (2,1) [Begin Pole-Residue Data] (2,2) [Begin Pole-Residue Data] (2,3) [Begin Pole-Residue Data] (2,4) [Begin Pole-Residue Data] (3,1) [Begin Pole-Residue Data] (3,2) [Begin Pole-Residue Data] (3,3) [Begin Pole-Residue Data] (3,4) [Begin Pole-Residue Data] (4,1) [Begin Pole-Residue Data] (4,2) [Begin Pole-Residue Data] (4,3) [Begin Pole-Residue Data] (4,4) A 4-port model that has a symmetric matrix may be described two different ways. One method would rely on the [Matrix Format] keyword with the argument "Lower" or "Upper" and a corresponding set of indices, as shown here for an "Upper" triangle matrix: [Begin Pole-Residue Data] (1,1) [Begin Pole-Residue Data] (1,2) [Begin Pole-Residue Data] (1,3) [Begin Pole-Residue Data] (1,4) [Begin Pole-Residue Data] (2,2) [Begin Pole-Residue Data] (2,3) [Begin Pole-Residue Data] (2,4) [Begin Pole-Residue Data] (3,3) [Begin Pole-Residue Data] (3,4) [Begin Pole-Residue Data] (4,4) The second method would use explicit indexing without the [Matrix Format] keyword, as follows: [Begin Pole-Residue Data] (1,1) [Begin Pole-Residue Data] (1,2) (2,1) [Begin Pole-Residue Data] (1,3) (3,1) [Begin Pole-Residue Data] (1,4) (4,1) [Begin Pole-Residue Data] (2,2) [Begin Pole-Residue Data] (2,3) (3,2) [Begin Pole-Residue Data] (2,4) (4,2) [Begin Pole-Residue Data] (3,3) [Begin Pole-Residue Data] (3,4) (4,3) [Begin Pole-Residue Data] (4,4) Note that omitting the keywords for any of the matrix elements other than the diagonals in the above examples is permissible, implying that the matrix element data of the omitted matrix elements are all zero. Also note that for large pin count components with regularly repeating patterns, such as connectors, the explicit indexing syntax allows for a long list of indices after the [Begin Pole-Residue Data] keyword to support reusing the same matrix element data for several matrix elements. When the pole-residue data is generated from Touchstone 1.0 or 1.1 Y or Z parameters (in which case the Y or Z parameters are normalized), the Touchstone 1.0 or 1.1 Y or Z-parameter data from which the pole-residue data is generated shall be unnormalized first by the model maker. Unlike [Network Data] in Touchstone files, the pole-residue data is ordered by matrix elements, not by frequency. For each pole-residue matrix element (i, j), i=1...N and j=1...N define the table of poles and residues. Each pole-residue matrix element (i, j) contains one or more data lines in the form of [αm ωm Am Bm], m=1...M, where M is the sum of the number of real poles and the number of complex-conjugate pairs, defined in subparameter Number_of_data_lines (see equation below). For example, with 7 real poles and 14 complex conjugate pairs of complex poles, the number of data lines M becomes 21. αm and ωm are the real and imaginary parts of the complex poles, and Am and Bm are the real and imaginary parts of the coefficients for the pole components. The values (1/2)(Am - iBm) and (1/2)(Am + iBm) are normalized residues (divided by the pole) that correspond to the pair of complex conjugate poles. For a real pole (Bm = 0, ωm = 0), the equation below turns into Am/(1 + s/αm), where Am is the normalized residue for the real pole. The coefficient Am is the value that the pair of complex conjugate poles or a real pole contribute to the DC value. The unit for αm and ωm is Hz. The unit for Am and Bm depends on the parameter type. For S-parameters it is unitless, for Z-parameters it is ohms, and for Y-parameters it is siemens (1/ohms). Hm(s)=12Am-iBm1+s/(αm+iωm)+Am+iBm1+s/(αm-iωm) Duplicate real poles, or duplicate complex-conjugate pair of complex poles are not permitted in the pole-residue data provided between the [Begin Pole-Residue Data] / [End Pole-Residue Data] keyword pairs. Subparameter Delay is optional, but it is not permitted for Y and Z-parameters (it is only allowed for S-parameters). In S-parameter models it may be present (or absent) within any number of [Begin Pole-Residue Data] / [End Pole-Residue Data] keyword pairs. Its unit is seconds. Subparameter Asymptote is optional, but it is not permitted for S-parameters (it is only allowed for Y and Z-parameters). In Y and Z-parameter models it may be present (or absent) within any number of [Begin Pole-Residue Data] / [End Pole-Residue Data] keyword pairs. Asymptote defines the factor K used in the asymptotic component K*(i*frequency) that linearly grows with frequency, where i = √(-1), and K = (2*PI)*Linf, where Linf is an equivalent inductance for Z-parameters, or K = (2*PI)*Cinf, where Cinf is an equivalent capacitance for Y-parameters. Since frequency is defined in Hz, the coefficient K has the unit of henry/Hz for Z-parameters and farad/Hz for Y-parameters. The unit for the asymptotic component K*(i*frequency) is ohms for Z-parameters and siemens (1/ohms) for Y-parameters. Subparameter Residue_at_infinity is required. It defines the value of A1m, the normalized residue for the real pole αm at infinity. The unit for Residue_at_infinity depends on the parameter type. For S-parameters it is unitless, for Z-parameters it is ohms, for Y-parameters it is siemens (1/ohms). The Number_of_data_lines subparameter is required. The value of Number_of_data_lines is equal to the number of pole-residue data lines that follow. The value of Number_of_data_lines is not required to be the same for each [Begin Pole-Residue Data] / [End Pole-Residue Data] keyword pair in a given model file. The Number_of_data_lines subparameter is followed by the pole-residue data lines. Each line contains four numbers corresponding to αm, ωm, A1m and A2m, as described above. Keyword: [End Pole-Residue Data] Required: The [End Pole-Residue Data] keyword is required for each [Begin Pole-Residue Data] keyword, otherwise it is not permitted. Description: The [End Pole-Residue Data] keyword indicates the end of the pole-residue data. Examples: ! This example is for S-parameter models ! for which Asymptote is not permitted [Begin Pole-Residue Data] (1,1) Delay = 1.26351e-09 Residue_at_infinity = 0.321123423421 Number_of_data_lines = 35 1.60981891306855e+08 6.03830005978569e+09 -2.15363238798792e-06 1.96534688582861e-05 2.93321810887676e+09 1.91770843721616e+09 -1.05426912887832e+01 -8.82630433918342e+00 1.23990373548953e+08 4.39994357143840e+09 1.25728612812034e-05 2.13669372820529e-05 1.57193681614524e+08 3.10437931944199e+09 5.10972708034658e-05 -1.15663907003945e-05 2.83363448768380e+07 2.10218276754607e+09 3.07314704488451e-06 5.16091015967049e-06 ... 5.23409852743859e+06 1.34534534593845e+07 3.07314704488451e-06 5.16091015967049e-06 [End Pole-Residue Data] ! This example is for Y or Z-parameter models ! for which Delay is not permitted [Begin Pole-Residue Data] (1,1) Asymptote = 0.83754e-12 Residue_at_infinity = 0.321123423421 Number_of_data_lines = 35 1.60981891306855e+08 6.03830005978569e+09 -2.15363238798792e-06 1.96534688582861e-05 2.93321810887676e+09 1.91770843721616e+09 -1.05426912887832e+01 -8.82630433918342e+00 1.23990373548953e+08 4.39994357143840e+09 1.25728612812034e-05 2.13669372820529e-05 1.57193681614524e+08 3.10437931944199e+09 5.10972708034658e-05 -1.15663907003945e-05 2.83363448768380e+07 2.10218276754607e+09 3.07314704488451e-06 5.16091015967049e-06 ... 5.23409852743859e+06 1.34534534593845e+07 3.07314704488451e-06 5.16091015967049e-06 [End Pole-Residue Data] Keyword: [Begin Common Poles Data] Required: The [Begin Common Poles Data] keyword is not permitted prior to Version 3.0 files; it is not permitted for parameter types G and H, and it is not permitted when the [Begin Pole-Residue Data] keyword or the [Network Data] keyword is present. Otherwise, the [Begin Common Poles Data] keyword is required. Description: This keyword contains the coefficients of the common poles from the pole-residue representation of the network data and is used together with the coefficients of the residues defined in the [Begin Residues Data] keyword. Sub-Param: Number_of_data_lines Usage rules: Only one [Begin Common Poles Data] / [End Common Poles Data] keyword pair is permitted in a model file. Note that [Begin Common Poles Data] does not use indexing after the keyword because the set of poles is common for all matrix elements. When the pole-residue data is generated from Touchstone 1.0 or 1.1 Y or Z-parameters (in which case the Y or Z-parameters are normalized), the Touchstone 1.0 or 1.1 Y or Z-parameter data from which the pole-residue data is generated shall be unnormalized first by the model maker. The Number_of_data_lines subparameter is required. The value of Number_of_data_lines is equal to the number of common poles data lines that follow and shall match the value of the Number_of_data_lines subparameter in the [Begin Residues Data] keywords. (Consequently, the value of Number_of_data_lines must be the same within each [Begin Residues Data] / [End Residues Data] keyword pair in a given model file.) The Number_of_data_lines subparameter within the [Begin Common Poles Data] / [End Common Poles Data] keyword pair is followed by the common poles data lines. Each line contains two numbers corresponding to αm, ωm, as described above. Keyword: [End Common Poles Data] Required: The [End Common Poles Data] keyword is required when the [Begin Common Poles Data] keyword is present, otherwise it is not permitted. Description: The [End Common Poles Data] keyword indicates the end of the common poles data. Example: [Begin Common Poles Data] Number_of_data_lines = 35 1.60981891306855e+08 6.03830005978569e+09 2.93321810887676e+09 1.91770843721616e+09 1.23990373548953e+08 4.39994357143840e+09 1.57193681614524e+08 3.10437931944199e+09 2.83363448768380e+07 2.10218276754607e+09 ... 5.23409852743859e+06 1.34534534593845e+07 [End Common Poles Data] Keyword: [Begin Residues Data] Required: The [Begin Residues Data] keyword is required when [Begin Common Poles Data] is present, otherwise it is not permitted. Description: This keyword contains the coefficients of the residues from the pole-residue representation of the network data and is used together with the coefficients of the common poles defined in the [Begin Common Poles Data] keyword. Sub-Params: Asymptote, Residue_at_infinity, Number_of_data_lines Usage rules: The [Begin Residues Data] keyword is followed by at least one white space and one or more integer number pairs, which are separated by a comma and enclosed in a pair of open and close parentheses. A white space is not required around the comma between the integer numbers or between the integer numbers and the parentheses or between the parentheses. The integer number pairs (i, j) that follow the [Begin Residues Data] keyword denote indexing to define which matrix element (or elements) are described by the data that follows. The number of matrix elements described by the [Begin Residues Data] / [End Residues Data] keyword pair is determined by the number of integer number pairs (i, j) that follow the [Begin Residues Data] keyword. The list of indices may span multiple lines and is terminated by any of the subparameters that follow. The value of the indices shall range from 1 to N, where N is the model's number of ports given in the [Number of Ports] keyword. The [Begin Residues Data] / [End Residues Data] keyword pairs shall describe at least N matrix elements (for a diagonal matrix). The maximum number of matrix elements in a model file shall be N[2] for a full matrix. When the [Matrix Format] keyword is present with the argument "Lower" or "Upper", the maximum number of matrix elements shall be no more than N*(N+1)/2. When the number of matrix elements described by the [Begin Residues Data] / [End Residues Data] keyword pairs is less than the maximums described above, the matrix element data of the missing matrix elements are assumed to be zero. All index number pairs following all occurrences of the [Begin Residues Data] keyword in a model file must be unique. For example, a 4-port model with a full matrix description might have 16 [Begin Residues Data] keywords with the following indices: [Begin Residues Data] (1,1) [Begin Residues Data] (1,2) [Begin Residues Data] (1,3) [Begin Residues Data] (1,4) [Begin Residues Data] (2,1) [Begin Residues Data] (2,2) [Begin Residues Data] (2,3) [Begin Residues Data] (2,4) [Begin Residues Data] (3,1) [Begin Residues Data] (3,2) [Begin Residues Data] (3,3) [Begin Residues Data] (3,4) [Begin Residues Data] (4,1) [Begin Residues Data] (4,2) [Begin Residues Data] (4,3) [Begin Residues Data] (4,4) A 4-port model that has a symmetric matrix may be described two different ways. One method would rely on the [Matrix Format] keyword with the argument "Lower" or "Upper" and a corresponding set of indices, as shown here for an "Upper" triangle matrix: [Begin Residues Data] (1,1) [Begin Residues Data] (1,2) [Begin Residues Data] (1,3) [Begin Residues Data] (1,4) [Begin Residues Data] (2,2) [Begin Residues Data] (2,3) [Begin Residues Data] (2,4) [Begin Residues Data] (3,3) [Begin Residues Data] (3,4) [Begin Residues Data] (4,4) The second method would use explicit indexing without the [Matrix Format] keyword, as follows: [Begin Residues Data] (1,1) [Begin Residues Data] (1,2) (2,1) [Begin Residues Data] (1,3) (3,1) [Begin Residues Data] (1,4) (4,1) [Begin Residues Data] (2,2) [Begin Residues Data] (2,3) (3,2) [Begin Residues Data] (2,4) (4,2) [Begin Residues Data] (3,3) [Begin Residues Data] (3,4) (4,3) [Begin Residues Data] (4,4) Note that omitting the keywords for any of the matrix elements other than the diagonals in the above examples is permissible, implying that the matrix element data of the omitted matrix elements are all zero. Also note that for large pin count components with regularly repeating patterns, such as connectors, the explicit indexing syntax allows for a long list of indices after the [Begin Residues Data] keyword to support reusing the same matrix element data for several matrix elements. When the pole-residue data is generated from Touchstone 1.0 or 1.1 Y or Z-parameters (in which case the Y or Z-parameters are normalized), the Touchstone 1.0 or 1.1 Y or Z-parameter data from which the pole-residue data is generated shall be unnormalized first by the model maker. Subparameter Asymptote is optional, but it is not permitted for S-parameters (it is only allowed for Y, and Z-parameters). Subparameter Residue_at_infinity is required. It defines the value of am, the normalized residue for the real pole αm at infinity. The unit for Residue_at_infinity depends on the parameter type. For S-parameters it is unitless, for Z-parameters it is ohms, and for Y-parameters it is siemens (1/ohms). The Number_of_data_lines subparameter is required. The value of Number_of_data_lines is equal to the number of pole-residue data lines that follow and shall match the value of Number_of_data_lines in the [Begin Common Poles Data] / [End Common Poles Data] keyword pair. (Consequently, the value of Number_of_data_lines must be the same within each [Begin Residues Data] / [End Residues Data] keyword pair in a given model file.) The Number_of_data_lines subparameter within the [Begin Residues Data] / [End Residues Data] keyword pair is followed by the residues data lines. Each line contains two numbers corresponding to am and bm, as described above. Keyword: [End Residues Data] Required: The [End Residues Data] keyword is required for each [Begin Residues Data] keyword, otherwise it is not permitted. Description: The [End Residues Data] keyword indicates the end of the residues data. Examples: ! This example is for S-parameter models ! in which Asymptote is not permitted [Begin Residues Data] (1,1) Residue_at_infinity = 0.321123423421 Number_of_data_lines = 35 -2.15363238798792e-06 1.96534688582861e-05 -1.05426912887832e+01 -8.82630433918342e+00 1.25728612812034e-05 2.13669372820529e-05 5.10972708034658e-05 -1.15663907003945e-05 3.07314704488451e-06 5.16091015967049e-06 ... 3.07314704488451e-06 5.16091015967049e-06 [End Residues Data] ! This example is for Y or Z-parameter models [Begin Residues Data] (1,1) Asymptote = 0.83754e-12 Residue_at_infinity = 0.321123423421 Number_of_data_lines = 35 -2.15363238798792e-06 1.96534688582861e-05 -1.05426912887832e+01 -8.82630433918342e+00 1.25728612812034e-05 2.13669372820529e-05 5.10972708034658e-05 -1.15663907003945e-05 3.07314704488451e-06 5.16091015967049e-06 ... 3.07314704488451e-06 5.16091015967049e-06 [End Residues Data] Full example: ! This is a "full example" of a fictitious S-parameter model using the ! pole-residue representation to illustrate proper keyword usage. [Version] 3.0 # S [Number of Ports] 4 ! The full matrix of a 4-port network data (.s4p file) would consist of ! 16 matrix elements, but an upper or lower triangle matrix needs only ! 10 matrix elements. [Number of Pole-Residue Indices] 10 [Reference] 50 50 50 0.1 [Matrix Format] Upper ! [Begin Pole-Residue Data Source] Company_name NoName Corp. Source_file Original_matrix_formatted.s4p File_revision rev0.0 File_date July 4, 2024 File_size 12345678 Source_checksum CE114e4501d2e4E2DcEA3E17B546F339 Min_valid_frequency 0 Max_valid_frequency 10e+9 [End Pole-Residue Data Source] ! ! This example is for S-parameter models for which Asymptote is not permitted [Begin Pole-Residue Data] (1,1) (2,2) (3,3) (4,4) Delay = 1.234567e-09 Residue_at_infinity = 0.1234567 Number_of_data_lines = 35 1.11997447664287e+08 3.24519226681551e+09 9.09052286272013e-05 6.49242007237459e-05 3.45625059472302e+08 3.13202277859585e+09 -5.42268000295391e-01 2.48747631004809e-01 4.87299986445282e+07 2.75489126930901e+09 1.02425334619334e-06 6.83169670830202e-06 4.09178020913195e+08 2.63376211400015e+09 -8.21075742857057e-01 7.09421412990463e-01 1.25803831342928e+07 2.28501210803170e+09 -6.90884078070982e-07 1.49162488028986e-06 ... 3.84539180679563e+08 1.63825202937485e+09 1.01930938230280e-01 1.80693045098583e+00 [End Pole-Residue Data] ! [Begin Pole-Residue Data] (1,2) (1,3) (1,4) (2,3) (2,4) (3,4) Delay = 1.654321e-09 Residue_at_infinity = 0.7654321 Number_of_data_lines = 32 2.57657596701128e+09 7.26711892771513e+09 -1.79483212033890e+00 -4.37286249216797e-01 2.45747062751230e+08 7.12315022893002e+09 -2.47169488917289e-02 4.52307576480460e-02 2.24603359541219e+08 6.68617182181606e+09 -1.29395685167005e-02 7.66829440907635e-02 2.19006983378440e+08 6.15632147553301e+09 -3.88176154021273e-02 8.26124289582556e-02 9.67891332253463e+07 5.84109173882383e+09 -1.27899882458803e-04 1.08884971149896e-05 ... 1.49750555567436e+08 5.30314608166901e+09 -1.00201770683190e-03 -1.39362341960212e-03 [End Pole-Residue Data] [End] -------------------------------------------------------------------------------- BACKGROUND INFORMATION/HISTORY: The original Touchstone 2.0 [Mixed Mode Order] keyword could be applied to pole-residue data as well, if so desired. However, it's unlikely that time domain simulation (for which the fitted poles are created) can be conducted in a basis that does not represent actual node voltages and branch currents. Technical background information: There are a few reasons we (Mentor/Siemens) prefer the PLS format for S-parameters instead of the Foster format: * It is problematic to write the expression that defines the S-parameter matrix component in the Foster form because it may require hundreds of complex and real poles. The PLS format has a fixed number of columns (4), which are the real/imaginary part of frequency and the real/imaginary part of the coefficient). This greatly simplifies the parser and the writer code. * We'd like to see actual contribution from each pole (or conjugate pair) into the transfer function. In equation (2) below the factor A shows how much a particular pole contributes into DC value. The coefficients A, B have the same dimension as the parameters, i.e., dimensionless for S, or impedance/admittance for Z/Y, but denominator is dimensionless. In the Foster format, denominator is measured in rad/sec therefore the factors in the numerator bear this unit as well and are not normalized. That is, in the Foster format, the coefficients at the larger poles are typically very large as well, so that their contribution into DC equals their ratio. * In the PLS format the pole frequencies are defined in Hz, not rad/s, similar to the sampled Touchstone data. This simplifies interpretation of the values. Since the denominator is dimensionless, the poles could be easily rescaled (into rad/s) without touching the coefficients, which is not possible in Foster format. * There is no difference in the format between the real pole or a complex conjugate pair of poles (except that for a real pole the imaginary parts of the pole frequency or the coefficient are zero), but the Foster format assumes different number of summands. * Delay multiplier could be added by defining it as a single value, e.g., an insertion loss. Of course, the Foster format could always be converted into PLS format, and in many cases an inverse is possible as well. The main reason was convenience and performance when reading and writing complicated PLS files. Some of these reach tens of MB of disk space, especially for multi-port S-parameter models. Ultimately, the spec must be convenient to the users / EDA companies and allow flexibility. The PLS format is closely related to the Foster formula, which defines partial fraction expansion of the frequency dependence. The Foster format defines the function of the complex frequency s as: . (1) (1) is a sum of the constant component k0, the linearly growing imaginary component k1s, and the sum of partial fractions each one being a ratio of the complex coefficient and the difference between the complex frequency and the pole , which could be real or complex. Note that (1), by its structure, doesn't enforce realness and stability of the corresponding time domain responses. Realness requires that the summands corresponding to the complex poles always come in complex conjugate pairs, which makes the corresponding time domain response real. Stability means that with bounded input the system produces a bounded output. The latter requires that the real part of the poles in (1) is negative. The proposed PLS format enforces these conditions. In particular, the component that corresponds to a pair of the complex conjugate poles, is represented as: , (2) where and are complex numbers that define the normalized residue and the complex pole, and , are their complex conjugates. Realness and stability are enforced by the PLS format as follows: Every row of data contains four numbers, , which define the real and imaginary parts of the complex pole and the complex coefficient. The first two define the complex frequency Qm as: With that: * Realness is enforced "by design", because these four numbers in each data row make a pair of summands with complex-conjugate frequencies and coefficients. * Stability is enforced by the requirement that . Indeed, the denominator of the first summand in (2) becomes zero when , where is a mathematical definition of the complex pole. The real part of the stable polemust be negative, which happens when . For any complex conjugate pair of poles the value of specified in the PLS format is positive. This is because we have the freedom to choose the sign of this parameter any way we please (since they go in complex-conjugate pairs, one of them will have a positive). Of course, after we define positive values for and , the values and can't be chosen arbitrarily. In case of a real pole, we have , . We can find the Foster form or as follows: , (3) where and . Expression (2) can define a single real pole when and , which makes and . Conversion of parameters: PLS to FOSTER: , FOSTER to PLS: ,