Esempio n. 1
0
def deembedleft(e, X):
    """deembedleft deembeds S-matrix e from S-matrix X from the left
    e, and S should all be on the four-matrix form:
    Frequency is first index, measurement sweep is second index and port
    indices are third and fourth index.
    """
    X, e = make_same_dims(X, e)
    neworder = tuple([x for x in X.dims if not isinstance(x, _DimMatrix)])
    X = X.reorder_dimensions(*neworder)
    e = e.reorder_dimensions(*neworder)
    klass, dims = X.__class__, X.dims
    #    X, e = X.view(type=ndarray), X.view(type=ndarray)
    denom = (e[..., 0, 1] * e[..., 1, 0] - e[..., 0, 0] * e[..., 1, 1] +
             e[..., 1, 1] * X[..., 0, 0])
    maxshape = tuple(max(x) for x in zip(X.shape, e.shape))
    res = X.__class__(np.zeros(maxshape, X.dtype), dims=X.dims)
    e11 = (X[..., 0, 0] - e[..., 0, 0])
    e12 = (X[..., 0, 1] * e[..., 1, 0])
    e21 = (X[..., 1, 0] * e[..., 0, 1])
    e22 = (-X[..., 0, 1] * X[..., 1, 0] * e[..., 1, 1])
    res[..., 0, 0] = e11
    res[..., 0, 1] = e12
    res[..., 1, 0] = e21
    res[..., 1, 1] = e22
    res = res / denom
    res[..., 1, 1] = res[..., 1, 1] + X[..., 1, 1]
    res = klass(res, dims=dims)
    return res
Esempio n. 2
0
def deembedleft(e, X):
    """deembedleft deembeds S-matrix e from S-matrix X from the left
    e, and S should all be on the four-matrix form:
    Frequency is first index, measurement sweep is second index and port
    indices are third and fourth index.
    """
    X, e = make_same_dims(X, e)
    neworder = tuple([x for x in X.dims if not isinstance(x, _DimMatrix)])
    X = X.reorder_dimensions(*neworder)
    e = e.reorder_dimensions(*neworder)
    klass, dims = X.__class__, X.dims
    #    X, e = X.view(type=ndarray), X.view(type=ndarray)
    denom = e[..., 0, 1] * e[..., 1, 0] - e[..., 0, 0] * e[..., 1, 1] + e[..., 1, 1] * X[..., 0, 0]
    maxshape = tuple(max(x) for x in zip(X.shape, e.shape))
    res = X.__class__(np.zeros(maxshape, X.dtype), dims=X.dims)
    e11 = X[..., 0, 0] - e[..., 0, 0]
    e12 = X[..., 0, 1] * e[..., 1, 0]
    e21 = X[..., 1, 0] * e[..., 0, 1]
    e22 = -X[..., 0, 1] * X[..., 1, 0] * e[..., 1, 1]
    res[..., 0, 0] = e11
    res[..., 0, 1] = e12
    res[..., 1, 0] = e21
    res[..., 1, 1] = e22
    res = res / denom
    res[..., 1, 1] = res[..., 1, 1] + X[..., 1, 1]
    res = klass(res, dims=dims)
    return res
Esempio n. 3
0
def cascadeS(S1, S2, *rest):
    """Cascade arrays containing S-parameters.
    """
    S1, S2 = make_same_dims(S1, S2)
    neworder = tuple([x for x in S1.dims if not isinstance(x, _DimMatrix)])
    S1 = S1.reorder_dimensions(*neworder)
    S2 = S2.reorder_dimensions(*neworder)
    denom = (1 - S1[..., 1, 1] * S2[..., 0, 0])
    s1det = det(S1)
    s2det = det(S2)
    maxshape = tuple(max(x) for x in zip(S1.shape, S2.shape))
    res = S1.__class__(np.zeros(maxshape, S1.dtype), dims=S1.dims)
    res[..., 0, 0] = S1[..., 0, 0] - S2[..., 0, 0] * s1det
    res[..., 0, 1] = S1[..., 0, 1] * S2[..., 0, 1]
    res[..., 1, 0] = S1[..., 1, 0] * S2[..., 1, 0]
    res[..., 1, 1] = S2[..., 1, 1] - S1[..., 1, 1] * s2det
    res = res / denom
    res = S1.__class__(res, dims=S1.dims)
    return res
Esempio n. 4
0
def cascadeS(S1, S2, *rest):
    """Cascade arrays containing S-parameters.
    """
    S1, S2 = make_same_dims(S1, S2)
    neworder = tuple([x for x in S1.dims if not isinstance(x, _DimMatrix)])
    S1 = S1.reorder_dimensions(*neworder)
    S2 = S2.reorder_dimensions(*neworder)
    denom = 1 - S1[..., 1, 1] * S2[..., 0, 0]
    s1det = det(S1)
    s2det = det(S2)
    maxshape = tuple(max(x) for x in zip(S1.shape, S2.shape))
    res = S1.__class__(np.zeros(maxshape, S1.dtype), dims=S1.dims)
    res[..., 0, 0] = S1[..., 0, 0] - S2[..., 0, 0] * s1det
    res[..., 0, 1] = S1[..., 0, 1] * S2[..., 0, 1]
    res[..., 1, 0] = S1[..., 1, 0] * S2[..., 1, 0]
    res[..., 1, 1] = S2[..., 1, 1] - S1[..., 1, 1] * s2det
    res = res / denom
    res = S1.__class__(res, dims=S1.dims)
    return res