dynonet icon indicating copy to clipboard operation
dynonet copied to clipboard

Meaning of n_b

Open temcdrm opened this issue 3 years ago • 2 comments

We want to experiment with StableSecondOrder and noticed that n_b=2 at line 329 of lti.py. That leaves only 2 learnable numerator coefficients in b_coeff, compared to 3 learnable coefficients in equation (27) of the paper.

Furthermore, on page 15 the paper says "All the G-blocks in the first branch are third-order (na = nb = 3), while the single G-block in the second branch is second-order (na = nb = 2)". Because a0==1 and b0 is learnable, it would seem that n_b in the software corresponds to nb+1 from the paper. Is that right?

temcdrm avatar Sep 14 '22 13:09 temcdrm

Hello @temcdrm,

Sorry for the very slow response.

We want to experiment with StableSecondOrder and noticed that n_b=2 at line 329 of lti.py. That leaves only 2 learnable numerator coefficients in b_coeff, compared to 3 learnable coefficients in equation (27) of the paper.

I think there's a discrepancy between code and paper. I should have had 3 learnable numerator coefficients to describe the 2nd order transfer function (27). We may want to modify the code accordingly (line 329 of lti.py), change b_coeff to 3 parameters, but I want to double-check first.

Furthermore, on page 15 the paper says "All the G-blocks in the first branch are third-order (na = nb = 3), while the single G-block in the second branch is second-order (na = nb = 2)". Because a0==1 and b0 is learnable, it would seem that n_b in the software corresponds to nb+1 from the paper. Is that right?

I think there is some error in the description of the experiments. The "correct" logic is that na and nb are the number of trainable parameters of denominator/numerator starting from the highest order. The highest order of denominator is a1 since a0=1, while the highest order of the numerator is n_k. StableSecondOrder blocks do not have delay features implemented.

forgi86 avatar Jan 23 '24 08:01 forgi86

Thanks for the response, @forgi86. We've been looking into the stability properties again, and we might test the change you suggest at line 329 of lti.py.

Our project uses dynoNet to implement a controlled current source, with a number of variables that include the terminal voltage. The current and voltage are also coupled through an external electrical network. Sometimes the closed-loop response of current to voltage perturbations is unstable, although the poles of G are confirmed to be stable. Right now, we're looking into a way of calculating the sensitivity of output current to perturbations of the input voltage, which we might incorporate into the loss during training. I also think it's worth trying the StableSecondOrder blocks again.

temcdrm avatar Feb 06 '24 19:02 temcdrm

Closed with merging of https://github.com/forgi86/dynonet/pull/5

temcdrm avatar May 20 '24 16:05 temcdrm