コード例 #1
0
    def noise_parameters(self, partial=False):
        db = DataBlock()
        db.S = SArray(self.N)
        if isinstance(self.N, ABCDArray):
            CA = self.C / (2 * k * 290)
            CA11 = CA[..., 0, 0]
            CA12 = CA[..., 0, 1]
            CA22 = CA[..., 1, 1]
            Rn = CA11.real
            Yopt = (np.sqrt(CA22 / CA11 - (CA12.imag / CA11) ** 2) +
                    1j * (CA12.imag / CA11))
            Fmin = 1 + (CA12 + CA11 * Yopt.conj()).real
            if partial:
                db.CA = CA
            db.Rn = Rn
            db.Yopt = Yopt
            db.Fmin = Fmin
            db.Gopt = (1 / 50. - Yopt) / (1 / 50. + Yopt)
            return db

        N = self.convert(YArray)
        Y11 = N.N[..., 0, 0]
        Y21 = N.N[..., 1, 0]
        C = N.C / (4 * k * 290)
        CY11 = C[..., 0, 0]
        CY12 = C[..., 0, 1]
        CY22 = C[..., 1, 1]
        Rn = (CY22 / abs(Y21) ** 2).real
        Ycor = Y11 - CY12 / CY22 * Y21
        Gn = (CY11 - abs(Y11 - Ycor) ** 2 * Rn).real
        Yopt = np.sqrt(Gn / Rn + Ycor.real ** 2) - 1j * Ycor.imag
        Fmin = 1 + 2 * Rn * (Ycor.real + Yopt.real)

        db.CY = C
        db.Gn = Gn
        db.Ycor = Ycor
        db.S = SArray(self.N)
        db.Rn = Rn
        db.Fmin = Fmin
        db.Gopt = (1 / 50. - Yopt) / (1 / 50. + Yopt)
        db.Yopt = Yopt
        return db