feat: 多端口权重改善和修改了采集函数

This commit is contained in:
mayge
2025-09-23 22:23:49 -04:00
parent 9a2df95f00
commit 87845cda82
6 changed files with 3729 additions and 196 deletions

View File

@@ -8,7 +8,7 @@ import matplotlib.pyplot as plt
import random as rnd
class MultiplePortQR:
def __init__(self,H,freqs,poles,weights=None,passivity=True,dc_enforce=True,fit_constant=True,fit_proportional=False):
def __init__(self,H,freqs,poles,weights=None,passivity=True,dc_enforce=False,fit_constant=True,fit_proportional=False):
self.least_squares_rms_error = None
self.least_squares_condition = None
self.eigenval_condition = None
@@ -37,7 +37,7 @@ class MultiplePortQR:
self.Cr = None
z = np.linalg.eigvals(self.A - self.B @ self.Cw)
p_next = -z
p_next = z
if passivity:
self.next_poles = self.passivity_enforce(p_next)
@@ -196,21 +196,28 @@ class MultiplePortQR:
A_blocks = [A_re, A_im]
if self.fit_constant:
Hk_kp = None
Hk_sum = []
for i in range(self.ports):
Hk_sum.append([])
for j in range(self.ports):
Hk_kp0 = H[:,i,j][keep]
Hk_kp = Hk_kp0 if Hk_kp is None else np.hstack([Hk_kp, Hk_kp0])
assert Hk_kp is not None
Hk_sum = np.sum(np.abs(Hk_kp)**2)
beta = float(np.sqrt(Hk_sum))
mean_row = (beta / weights_kp.shape[0]) * np.sum(Phi_w, axis=0)
A_w0 = np.concatenate([np.zeros(N*self.ports**2, float),
np.real(mean_row).astype(float)]
).reshape(1, -1)
b_w0 = np.array([beta], float)
Hk_sum[i].append(np.sum(np.abs(Hk_kp0)**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)
A_w0.append(np.concatenate([np.zeros(N*self.ports**2, float),
np.real(mean_row).astype(float)]
).reshape(1, -1))
b_w0.append(np.array([beta_ij], float))
b_w0 = np.asarray(b_w0).ravel()
A_blocks += [A_w0]
A_blocks += A_w0
m = A_re.shape[0] + A_im.shape[0]
b = np.zeros(m, float)
b = np.concatenate([b, b_w0])
@@ -307,16 +314,18 @@ def noise(n:complex,coeff:float=0.05):
if __name__ == "__main__":
start_point = 0
network = rf.Network("/tmp/paramer/simulation/3500/3500.s2p")
id = 3000
network = rf.Network(f"/tmp/paramer/simulation/{id}/{id}.s2p")
# network = rf.data.ring_slot
ports = network.nports
K = 10
K = 5
full_freqences = network.f[start_point:]
noised_sampled_points = network.y[start_point:,:,:]
sampled_points = network.y[start_point:,:,:]
noised_sampled_points = network.y[start_point:,:,:].reshape(-1,ports,ports)
sampled_points = network.y[start_point:,:,:].reshape(-1,ports,ports)
# noised_sampled_points = - network.y[start_point:,0,1].reshape(-1,1,1)
# sampled_points = network.y[start_point:,1,1].reshape(-1,1,1)
# noised_sampled_points = network.y[start_point:,0,0].reshape(-1,1,1)
# sampled_points = network.y[start_point:,0,0].reshape(-1,1,1)
H,freqs = auto_select_multple_ports(noised_sampled_points,full_freqences,max_points=20)
poles = generate_starting_poles(2,beta_min=1e4,beta_max=freqs[-1]*1.1)