fixed: remove dc_enforce
This commit is contained in:
@@ -200,7 +200,6 @@ class VFManager():
|
||||
pre_poles=self._poles,
|
||||
fit_constant=self.fit_constant,
|
||||
fit_proportional=self.fit_proportional,
|
||||
dc_enforce=self.dc_enforce,
|
||||
passivity_enforce=self.passivity_enforce
|
||||
)
|
||||
return self.model_instance
|
||||
@@ -215,7 +214,6 @@ class VFManager():
|
||||
pre_poles=self._poles,
|
||||
fit_constant=self.fit_constant,
|
||||
fit_proportional=self.fit_proportional,
|
||||
dc_enforce=self.dc_enforce,
|
||||
passivity_enforce=self.passivity_enforce
|
||||
)
|
||||
if self.verbose:
|
||||
|
||||
@@ -4,7 +4,7 @@ from ovf.core.utils import cond_row_inf, cond_col_one, generate_starting_poles
|
||||
|
||||
|
||||
class MultiPortOrthonormalBasis:
|
||||
def __init__(self,H,freqs,pre_poles,passivity_enforce=True,dc_enforce=True,fit_constant=True,fit_proportional=False):
|
||||
def __init__(self,H,freqs,pre_poles,passivity_enforce=True,fit_constant=True,fit_proportional=False):
|
||||
self._least_squares_condition = None
|
||||
self._least_squares_row_condition = None
|
||||
self._least_squares_col_condition = None
|
||||
@@ -19,7 +19,6 @@ class MultiPortOrthonormalBasis:
|
||||
|
||||
self.dc_tol = 1e-18
|
||||
|
||||
self.dc_enforce = dc_enforce
|
||||
self.fit_constant = fit_constant
|
||||
self.fit_proportional = fit_proportional
|
||||
self.passivity_enforce = passivity_enforce
|
||||
@@ -414,17 +413,9 @@ class MultiPortOrthonormalBasis:
|
||||
"""
|
||||
K, N = self.Phi.shape
|
||||
Phi = self.Phi
|
||||
dc_tol = 1e-18
|
||||
has_dc = self.dc_enforce and self.freqs[0] < dc_tol
|
||||
keep = np.ones(K, dtype=bool)
|
||||
|
||||
# SK weighting (applied only to the (73) rows we keep in LS)
|
||||
|
||||
if has_dc:
|
||||
# Enforce DC response exactly:
|
||||
k0 = int(np.argmin(np.abs(self.freqs)))
|
||||
keep[k0] = False
|
||||
|
||||
if self.fit_constant:
|
||||
one = np.ones((K, 1), np.complex128)
|
||||
Phi_w = np.hstack([one, Phi])
|
||||
@@ -434,7 +425,7 @@ class MultiPortOrthonormalBasis:
|
||||
for j in range(self.ports):
|
||||
M0 = np.zeros((K,N*self.ports**2),dtype=complex)
|
||||
M0[:,index*N:(index+1)*N] = Phi
|
||||
M0 = np.hstack([M0, -(H[:,i,j].reshape(-1,1) * Phi_w)]).reshape((K, -1))[keep,:] # (K, 2N), complex
|
||||
M0 = np.hstack([M0, -(H[:,i,j].reshape(-1,1) * Phi_w)]).reshape((K, -1)) # (K, 2N), complex
|
||||
index+=1
|
||||
M_kp = M0 if M_kp is None else np.vstack([M_kp, M0])
|
||||
assert M_kp is not None
|
||||
@@ -445,20 +436,14 @@ class MultiPortOrthonormalBasis:
|
||||
for j in range(self.ports):
|
||||
M0 = np.zeros((K,N*self.ports**2),dtype=complex)
|
||||
M0[:,index*N:(index+1)*N] = Phi
|
||||
M0 = np.hstack([M0, -(H[:,i,j].reshape(-1,1) * Phi)]).reshape((K, -1))[keep,:] # (K, 2N), complex
|
||||
M0 = np.hstack([M0, -(H[:,i,j].reshape(-1,1) * Phi)]).reshape((K, -1)) # (K, 2N), complex
|
||||
index+=1
|
||||
M_kp = M0 if M_kp is None else np.vstack([M_kp, M0])
|
||||
assert M_kp is not None
|
||||
|
||||
|
||||
if has_dc:
|
||||
A_re = np.real(M_kp)
|
||||
A_im = np.imag(M_kp)
|
||||
mask = np.ones(K, dtype=bool); mask[k0] = False
|
||||
|
||||
else:
|
||||
A_re = np.real(M_kp)
|
||||
A_im = np.imag(M_kp)
|
||||
A_re = np.real(M_kp)
|
||||
A_im = np.imag(M_kp)
|
||||
|
||||
A_blocks = [A_re, A_im]
|
||||
|
||||
@@ -467,17 +452,15 @@ class MultiPortOrthonormalBasis:
|
||||
for i in range(self.ports):
|
||||
Hk_sum.append([])
|
||||
for j in range(self.ports):
|
||||
Hk_kp0 = H[:,i,j][keep]
|
||||
Hk_sum[i].append(np.sum(np.abs(Hk_kp0)**2))
|
||||
Hk_sum[i].append(np.sum(np.abs(H[:,i,j])**2))
|
||||
# Hk_kp = Hk_kp0 if Hk_kp is None else np.hstack([Hk_kp, Hk_kp0])
|
||||
K_keep = int(np.count_nonzero(keep))
|
||||
A_w0 = []
|
||||
b_w0 = []
|
||||
# Hk_sum = np.sum(np.abs(Hk_kp)**2)
|
||||
for i in range(self.ports):
|
||||
for j in range(self.ports):
|
||||
beta_ij = float(np.sqrt(Hk_sum[i][j]))
|
||||
mean_row = (beta_ij / K_keep) * np.sum(Phi_w[keep, :], axis=0)
|
||||
mean_row = (beta_ij / len(Phi_w)) * np.sum(Phi_w, axis=0)
|
||||
A_w0.append(np.concatenate([np.zeros(N*self.ports**2, float),
|
||||
np.real(mean_row).astype(float)]
|
||||
).reshape(1, -1))
|
||||
@@ -489,16 +472,16 @@ class MultiPortOrthonormalBasis:
|
||||
b = np.zeros(m, float)
|
||||
b = np.concatenate([b, b_w0])
|
||||
else:
|
||||
H_kp = None
|
||||
H_all = None
|
||||
for i in range(self.ports):
|
||||
for j in range(self.ports):
|
||||
H_0 = H[:,i,j][keep]
|
||||
H_kp = H_0 if H_kp is None else np.hstack([H_kp, H_0])
|
||||
assert H_kp is not None
|
||||
H_kp = H_kp.reshape(-1,1)
|
||||
H_0 = H[:,i,j]
|
||||
H_all = H_0 if H_all is None else np.hstack([H_all, H_0])
|
||||
assert H_all is not None
|
||||
H_all = H_all.reshape(-1,1)
|
||||
|
||||
b_re = np.real(d0 * H_kp)
|
||||
b_im = np.imag(d0 * H_kp)
|
||||
b_re = np.real(d0 * H_all)
|
||||
b_im = np.imag(d0 * H_all)
|
||||
b = np.concatenate([b_re.ravel(), b_im.ravel()]).astype(float)
|
||||
|
||||
# ---- build final stacked-real system ----
|
||||
|
||||
Reference in New Issue
Block a user