in C99


ベッセル・フィルタ (Bessel filter) の計算例と設計表


Takayuk HOSODA
Apr. 11, 2024
English English edition is here.

前書き

今は西暦2024年の春、Generative Pre-trained Transformer も桜も花盛りだというのに、 技術雑誌の付録の手帳にアクティブフィルタの設計表が載っていた。 花も GPT も見るもので使うものじゃないというのは分かるけど、 その数表のベッセル・フィルタ[1][2]の設計値が「ちょっと」違う気がして気になった。

そんなところにセレンディピティ的なのを発揮してもしょうがないけど、気になってしまって少し調べてみた。 数表の出所は辿れなかったけど、カットオフ周波数を √0.5 の代わりに、 本末転倒感のある(*1)厳密な -3 dB で計算した値と比較すると掲載値と 5 桁程度合うみたい。 5 桁程っていうのも、日本の近代回路網理論の黎明期が 1950 年代だと考えると、 元々の計算が利用出来る計算環境的に単精度とかが理由だったりするのだろうか。

実際の回路設計ではベッセル・フィルタを採用することも少ないし、 仮にあったとしてもさまざまな設計用アプリケーションが使える今となっては、 わざわざ数表から設計することも稀だとは思うものの、 アナログ信号とディジタル信号処理の狭間や、扱う信号の高速化にともなうエラーレートや EMC の観点からも、 ベッセル・フィルタそのものではなくても、 数学的な理解や本質的にベッセル・フィルタを必要とする場合もある。 そんな理由で、これをきっかけとして改めてベッセル・フィルタの計算例と計算プログラムと設計表をまとめておこうと思う。

正規化ベッセル・フィルタの計算例

3次ベッセル・フィルタの伝達関数 TBF(s, 3) は、時間遅れの伝達関数

e^{ \tau s} =  \frac{1}{\cosh( \tau s) + \sinh( \tau s)}
の連分数展開による近似 [2][3] (i.e. 0 : 3 次の Padé 近似) から次のようになります。

 \mathrm{TBF}(s, 3) = \frac{15}{s^3 + 6 s^2 + 15 s + 15}

TBF(s, 3) の振幅の絶対値が 1 / √2 になるカットオフ周波数 fc は次のように計算されます。

fc = solve(abs(TBF(s, 3), s) - sqrt(0.5) → fc ≃ 1.75567236868121064920

ここで、solve(f(s), s) は、 関数 f(s)s について解く(*2)ことを意味します。

fc で正規化した 3次ベッセル・フィルタの正規化伝達関数 TBFN(s, 3) は近似的に次のようになります。
\mathrm{TBFN}(s, 3) \simeq \frac{15 }{5.411658992532456819 s^3 + 18.4943127969041571099 s^2 + 26.3350855302181597381 s  + 15}

TBFN(s, 3) の極 p は分母を解いて次のように求められます。

solve(15 / TBFN(s, 3), s) → p ≃ {-1.322675800, -1.047409161 ± i 0.9992644365 }

p のひとつの極 p に対する 固有振動数 ω とクォリティファクタ Q は次のように定義されます。

\omega &=& |\ p\ |\\Q &=& \frac{-\omega}{2\ \mathrm{Re}p}

従って、2段構成の 3次ベッセル・フィルターの正規化設計パラメータは次のように計算されます。

\omega_1 \simeq 1.322675800\ ,&& Q_1 \simeq 0.5\\
\omega_2 \simeq 1.447617133\ ,&& Q_2 \simeq 0.6910466259

Appendix

正規化ベッセル・フィルタの振幅特性 (1〜12 次)

fig.1 Frequency response of the normalized Bessel filters (1st - 12th order)
正規化ベッセル・フィルタの SPICE3 シミュレーション結果 (1〜12 次)
Group delay of the normalized Bessel filters
fig.2 Group delay characteristics of the normalized Bessel filters (1st to 12th order)
AC simulation results of the normalised Bessel filter of active filters with ideal op-amps using SPICE3.


Transcient response of the normalized Bessel filters
fig.3 Transcient response of the normalized Bessel filters (1st to 12th order)
TRAN simulation results of the normalised Bessel filter of active filters with ideal op-amps using SPICE3.
ベッセル・フィルタの伝達関数 (1〜12 次)

T_{{BF}}(s,n) = \frac{\displaystyle\frac{(2n)!}{n!\,2^n}} {\displaystyle\sum_{k = 0}^n\frac{(2n - k)!}{(n - k)!\,k!\,2^{n - k}}\,s^k}

T_{BF}(s,1)&=&\frac{1}{s+1}\\
T_{BF}(s,2)&=&\frac{3}{s^2+3s+3}\\
T_{BF}(s,3)&=&\frac{15}{s^3+6s^2+15s+15}\\
T_{BF}(s,4)&=&\frac{105}{s^4+10s^3+45s^2+105s+105}\\
T_{BF}(s,5)&=&\frac{945}{s^5+15s^4+105s^3+420s^2+945s+945}\\
T_{BF}(s,6)&=&\frac{10395}{s^6+21s^5+210s^4+1260s^3+4725s^2+10395s+10395}\\
T_{BF}(s,7)&=&\frac{135135}{s^7+28s^6+378s^5+3150s^4+17325s^3+62370s^2+135135s+135135}\\
T_{BF}(s,8)&=&\frac{2027025}{s^8+36s^7+630s^6+6930s^5+51975s^4+270270s^3+945945s^2+2027025s+2027025}\\
T_{BF}(s,9)&=&\frac{34459425}{s^9+45s^8+990s^7+13860s^6+135135s^5+945945s^4+4729725s^3+16216200s^2+34459425s+34459425}

T_{BF}(s,10)&=&\frac{654729075}{s^{11}+55s^9+1485s^8+25740s^7+315315s^6+2837835s^5+18918900s^4+91891800s^3+310134825s^2+654729075s+654729075}\\
T_{BF}(s,11)&=&\frac{13749310575}{s^{11}+66s^{10}+2145s^9+45045s^8+675675s^7+7567560s^6+64324260s^5+413513100s^4+1964187225s^3+6547290750s^2+13749310575s+13749310575}\\
T_{BF}(s,12)&=&\frac{316234143225}{s^{12}+78s^{11}+3003s^{10}+75075s^9+1351350s^8+18378360s^7+192972780s^6+1571349780s^5+9820936125s^4+45831035250s^3+151242416325s^2+316234143225s+316234143225}
ベッセル・フィルタのカットオフ周波数 (1〜12 次)

\mathrm{order}  && \mathrm{cut-off\; frequency}\\
n  && f_c\\
1  &&  1.00000000000000000000\\
2  &&  1.36165412871613052096\\
3  &&  1.75567236868121064920\\
4  &&  2.11391767490421584302\\
5  &&  2.42741070215262813767\\
6  &&  2.70339506120292187640\\
7  &&  2.95172214703872277193\\
8  &&  3.17961723751065133050\\
9  &&  3.39169313891166010111\\
10  &&  3.59098059456916348279\\
11  &&  3.77960741643962009289\\
12  &&  3.95915082114428531554
正規化ベッセル・フィルタの極 (2〜12 次)

\xi_\mathrm{Bessel}(2) \simeq &&\{-1.1016013305921617015 \pm i\ 0.63600982475703448213\}\\
\xi_\mathrm{Bessel}(3) \simeq &&\{-1.3226757999104447673,\\
&&\; -1.0474091610089354263 \pm i\ 0.99926443628063757599\}\\
\xi_\mathrm{Bessel}(4) \simeq &&\{-1.3700678305514442327 \pm i\ 0.410249717493752057,\\
&&\; -0.99520876435027351019 \pm i\ 1.2571057394546661002\}\\
\xi_\mathrm{Bessel}(5) \simeq &&\{-1.5023162714474789878,\\
&&\; -0.95767654856268193176 \pm i\ 1.471124320730395064,\\
&&\; -1.3808773258604395854 \pm i\ 0.71790958762676845074\}\\
\xi_\mathrm{Bessel}(6) \simeq &&\{-1.3818580975965633864 \pm i\ 0.97147189071157097218,\\
&&\; -0.93065652294685864233 \pm i\ 1.6618632689425906009,\\
&&\; -1.5714904036160307848 \pm i\ 0.32089637422262373156\}\\
\xi_\mathrm{Bessel}(7) \simeq &&\{-1.684368179273180171,\\
&&\; -0.90986778062346975444 \pm i\ 1.8364513530363928286,\\
&&\; -1.3789032167954738438 \pm i\ 1.1915667778006519794,\\
&&\; -1.6120387662261241751 \pm i\ 0.58924450693147147295\}

\xi_\mathrm{Bessel}(8) \simeq &&\{-1.636939418126879603 \pm i\ 0.82279562513969530055,\\
&&\; -0.8928697188471322178 \pm i\ 1.9983258436412952024,\\
&&\; -1.3738412176373695236 \pm i\ 1.3883565758775552145,\\
&&\; -1.7574084004016431415 \pm i\ 0.27286757510223119062\}\\
\xi_\mathrm{Bessel}(9) \simeq &&\{-1.8566005012280034477,\\
&&\; -1.6523964845788349908 \pm i\ 1.031389566984410613,\\
&&\; -0.87839927616095252348 \pm i\ 2.1498005243133215095,\\
&&\; -1.80717053496210115 \pm i\ 0.5123837305749040137,\\
&&\; -1.3675883097929051509 \pm i\ 1.5677337122372686999\}\\
\xi_\mathrm{Bessel}(10) \simeq &&\{-1.360692278384544035 \pm i\ 1.7335057426614761842,\\
&&\; -1.8421962445248344952 \pm i\ 0.72725759775747787213,\\
&&\; -1.9276196913722768577 \pm i\ 0.24162347097153336661,\\
&&\; -0.86575690170837525248 \pm i\ 2.2926048309824757853,\\
&&\; -1.6618102413621520203 \pm i\ 1.2211002185791613521\}

\xi_\mathrm{Bessel}(11) \simeq &&\{-2.0167014734500268025,\\
&&\; -1.6671936422452973207 \pm i\ 1.3959629036464656916,\\
&&\; -1.3534866773880991371 \pm i\ 1.8882968447597186611,\\
&&\; -1.8673612388872039264 \pm i\ 0.92311558295185904374,\\
&&\; -1.9801606453037554436 \pm i\ 0.45959874382661401508,\\
&&\; -0.85451258135234993207 \pm i\ 2.4280594669150566409\}\\
\xi_\mathrm{Bessel}(12) \simeq &&\{-0.84437887285039650684 \pm i\ 2.5571889692029125806,\\
&&\; -1.8856496197318523848 \pm i\ 1.1038148812152310505,\\
&&\; -1.6698035888528286074 \pm i\ 1.5588027008411653863,\\
&&\; -2.0199459330751226282 \pm i\ 0.65899650071722267946,\\
&&\; -1.3461746802905127508 \pm i\ 2.033998508278489405,\\
&&\; -1.0846445069315783593 \pm i\ 0.21916153518975516035\}
poles-of-the-normalized-bessel-filters.png
fig.4 Poles of the normalized Bessel filters (1st - 16th order)
Poles are connected by lines for each group.

脚注

*1 : 電力が 1/2 になる周波数がカットオフ周波数であって 1/√2 ≃ -3 dB (i.e. 10-3/20 / (1/√2) - 1 ≃ 0.0011865297 ). であるため。無線工学的には 0.1 % 程の誤差は無視できるが数表となると話は別である。

*2 : 方程式の解法にはニュートン・ラフソン法 (Newton-Raphson method) や オストロフスキーの方法 (Ostrowski's method) [4][5] 、高次代数方程式の解法には DKA (Durand-Kerner-Aberth) 法 [4] [6] [9] などが利用される。


ソースコード

bf_dka -- Durand-Kerner-Aberth 法による逆ベッセル多項式の求根

bf_dka.c 数式のクリックで展開/折りたたみ

g &=& -\frac{a_1}{n}\\
r_0 &=& |g| + \sqrt[\displaystyle  n]{\max_{0\le k \le n}|a_k|} \\
x_k &=& g + r_0\exp\left\{\mathrm{i}\left(\frac{2\pi k}{n}+\frac{\pi}{2n}}\right)\right\}\quad |\;0\le k<n,\;\mathrm{i}^2=-1\\
{x_k} &\leftarrow&  x_k - \frac{{p_n(x_k)}}{{{p'_n(x_k)} - {p_n(x_k)} \displaystyle\sum_{\substack{j = 0\\j  \neq k}}^ {n-1}  \frac{1}{x_k - x_j}}}
 bf_dka_xp_mini-1.13.tar.gz — 教育目的のための bf_dka の最小バージョンの C ソース コードです。 *BSD または Linux 環境でコンパイルできます。

結論

アナログフィルタ関係の教科書や実務書をいくつか紐解いてみたが、 計算の根拠付きで "正確な" 8桁以上の数表が載っているものがうまく見つけられなかった。 今は優れた数式処理ソフトウェアがいくつもあるが、改めて C99 の 64-bit 整数と倍精度あるいは拡張倍精度の複素数でどこまでいけるかやってみた。 数式処理ソフトとかと違って C で書くとアルゴリズムとか計算機限界に合わせた最適化とか全てが手の内に残るので他にも活用出来て嬉しい。 x86 拡張倍精度で DKA (Durand-Kerner-Aberth) 法を用いた上記プログラムでの計算結果は、 数式処理ソフトウェアでの 25 桁の多倍長計算の基準値との比較では、 12 次までは 14 桁、16 次までは 12 桁有効で、17 次では 11 桁まで有効だった (fig.5 参照)。 ここには未掲載の倍精度版での計算結果は 12 次までは 11 桁、16 次までは 9 桁有効で、17 次では 8 桁まで有効だった (fig.6 参照)。

bf-dka-errors.png
fig.5 Maximum error V.S. order (Ehrilich-Aberth and Durand-Kerner method, x86 extended precision)

bf-dka-errors.png
fig.6 Order V.S. Maximum error and Itteraions until convergence (Ehrilich-Aberth and Durand-Kerner method, double precision)

追補

正規化ベッセル・フィルタの設計表 (2〜17 次)
ormalized-bessel-filter-design-parameters
 normalized-Bessel-filter-design-parameters-1.31.pdf
ベッセル・フィルタのシミュレーション回路例 (3 次, VCVS 型, LTspice 用)
bessel3-sch
bessel3-tr
bessel3-gd
 bessel3-ltspice.zip

参考文献

  1. G.N.Watson. A TREATISE ON THE THEORY OF BESSEL FUNCTIONS. SECOND EDITION. Cambridge University Press, 1966, 815p
  2. Thomson, W.E. "Delay networks having maximally flat frequency characteristics", Proceedings of the IEE - Part III: Radio and Communication Engineering, 1949, 96, (44), p. 487-490
  3. 勝間田 明男 "ベッセルディジタルフィルタの自動設計について" 験震時報第56巻, 1993, p. 17-34
  4. 戸川隼人 "科学技術計算ハンドブック", サイエンス社, 東京, 1992, ISBN 4-7819-0666-4
  5. .M.Ostrowskis. SOLUTION OF EQUATIONS IN EUCLIDEAN AND BANACH SPACES. THIRD EDITION. Academic Press, New Yoark and London, 1973
  6. 山本 哲朗・古金 卯太郎・野倉 久美 "代数方程式を解く Durand-Kerner 法と Aberth 法", 情報処理 Vol.18 No.6 June 1977, p. 566-571
  7. 白木 恒雄・寺野 隆雄・中村 秀治・栗原 千鶴子 "DKA法 による超越方程式の解法とその適用例", 土木学会論文集 第416号/1-13, 1990, p. 295-302
  8. 名取 亮 編 長谷川 秀彦・櫻井哲也・檜山澄子・他 共著, "数値計算法", オーム社, 東京, Japan, 1998.9, p.109-113, ISBN 4-274-13153-X
  9. 小澤 一文, "Durand-Kerner 法の効率的な初期値の簡単な設定法", 日本応用数理学会論文誌 Vol.3, No.4, 1993, p.173-186
  10. Anatol I. Zverev, "Handbook of Filter Synthesis", John Wiley and Sons, Inc, New York London Sydney, 1967, p. 61-71
  11. Dunster, T. & Gil, Amparo & Ruiz-Antolin, Diego & Segura, Javier. (2021). Computation of the reverse generalized Bessel polynomials and their zeros. Computational and Mathematical Methods. 3. 10.1002/cmm4.1198.
  12. Srivastava, Hari. (2023). An Introductory Overview of Bessel Polynomials, the Generalized Bessel Polynomials and the q-Bessel Polynomials. Symmetry. 15. 822. 10.3390/sym15040822.

関連項目

外部リンク


www.finetune.co.jp [Mail] © 2000 Takayuki HOSODA.