dynonet
dynonet copied to clipboard
Meaning of n_b
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?
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.
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.
Closed with merging of https://github.com/forgi86/dynonet/pull/5