在Sanathanan–Koerner算法中:
H~(s)=n(s)d(s)=∑n=0nˉansn∑n=0nˉbnsn\widetilde{H}(s)=\frac{n(s)}{d(s)}=\frac{\sum_{n=0}^{\bar{n}}a_ns^n}{\sum_{n=0}^{\bar{n}}b_ns^n}H
(s)=d(s)n(s)=∑n=0nˉbnsn∑n=0nˉansn
求解数值逼近时的误差项:
(eSK(i))2=1kˉ∑k=1kˉ∣Hk∑n=0nˉbn(i)(jωk)n−∑n=0nˉan(i)(jωk)n∑n=0nˉbn(i−1)(jωk)n∣2\left(e_{SK}^{(i)}\right)^{2}=\frac{1}{\bar{k}}\sum_{k=1}^{\bar{k}}\left|\frac{H_{k}\sum_{n=0}^{\bar{n}}b_{n}^{(i)}(j\omega_{k})^{n}-\sum_{n=0}^{\bar{n}}a_{n}^{(i)}(j\omega_{k})^{n}}{\sum_{n=0}^{\bar{n}}b_{n}^{(i-1)}(j\omega_{k})^{n}}\right|^{2}(eSK(i))2=kˉ1k=1∑kˉ
∑n=0nˉbn(i−1)(jωk)nHk∑n=0nˉbn(i)(jωk)n−∑n=0nˉan(i)(jωk)n
2
会包含频率的多次项,求解的最小二乘问题的矩阵将包含 Vandermonde 块,导致恶化的条件,会增加数值的不稳定性,当条件数变大时,计算结果对输入数据的微小变化会变得非常敏感,可能导致数值解不准确甚至不收敛。
为了解决上述的问题,VF算法用部分分式替代之前的传递函数的表达式
H~(s)=n(s)d(s)=∑n=0nˉansn∑n=0nˉbnsn\widetilde{H}(s)=\frac{n(s)}{d(s)}=\frac{\sum_{n=0}^{\bar{n}}a_ns^n}{\sum_{n=0}^{\bar{n}}b_ns^n}H
(s)=d(s)n(s)=∑n=0nˉbnsn∑n=0nˉansn
将H~(s)\widetilde{H}(s)H
(s)的分子和分母项分别写作:
n(i)=c0(i)+∑n=1ncn(i)s−pn(0)(1.10) n^{(i)} = c_0^{(i)} + \sum_{n=1}^{n} \frac{c_n^{(i)}}{s - p_n^{(0)}} \tag{1.10} n(i)=c0(i)+n=1∑ns−pn(0)cn(i)(1.10)
d(i)=1+∑n=1ndn(i)s−pn(0)(1.11) d^{(i)} = 1 + \sum_{n=1}^{n} \frac{d_n^{(i)}}{s - p_n^{(0)}} \tag{1.11} d(i)=1+n=1∑ns−pn(0)dn(i)(1.11)
其中:
- n(i)n^{(i)}n(i)和d(i)d^{(i)}d(i) 分别表示分子和分母多项式。
- c0(i)c_0^{(i)}c0(i)和cn(i)c_n^{(i)}cn(i)是分子多项式的系数。
- dn(i)d_n^{(i)}dn(i)是分母多项式的系数。
- pn(0)p_n^{(0)}pn(0)表示初始极点,与变量sss一起出现在分式中。
这里提到的初始极点 pn(0)∈Cp^{(0)}_n \in \mathbb{C}pn(0)∈C是一组复数,将在后续讨论它们的选取方式。可以看到,在公式 (1.11) 中,常数项已标准化为 1,这是不失一般性的处理。与 Sanathanan-Koerner 迭代中使用的幂函数基sns^nsn相比,分式1s−pn(0)\frac{1}{s - p^{(0)}_n}s−pn(0)1的变化在 sss增加时更加受控。如果选择合适的极点pn(0)p^{(0)}_npn(0),则分式形式在频率上的变化更加平缓。此特性可改善条件数,特别是在极点pn(0)p^{(0)}_npn(0)彼此不同且分布较开时,效果更显著。
将(1.10)和(1.11)代入之前的误差表达式(1.9):
(eSK(i))2=1k∑k=1k∣Hk∑n=0nbn(i)(jωk)n−∑n=0nan(i)(jωk)n(∑n=0nbn(i−1)(jωk)n)2∣2 (e_{SK}^{(i)})^2 = \frac{1}{k} \sum_{k=1}^{k} \left| \frac{H_k \sum_{n=0}^{n} b_n^{(i)} (\text{j}\omega_k)^n - \sum_{n=0}^{n} a_n^{(i)} (\text{j}\omega_k)^n} { \left( \sum_{n=0}^{n} b_n^{(i-1)} (\text{j}\omega_k)^n \right)^2}\right|^2 (eSK(i))2=k1k=1∑k