20241223160339 Virtual Analog とは

synthdspwipVA

勉強中。 普通のDSPと何が違うのか、SPICEと何が違うのか、など知りたい。

Vadim Zavalishin - “The art of VA filter design” – A different kind of digital filter theory

00:00
本日はご来場いただきありがとうございます。これから「Venom’s evolutions: バーチャルアナログフィルタ設計の技術とさまざまなデジタルフィルタ理論」についてお話しします。Vitamins(ヴィタミンズ)は、オーディオ業界で約20年間働いており、Native Instrumentsの従業員として主にReaktor Coreというグラフィカルなオーディオプログラミング言語の開発を担当してきました。また、DSP(デジタル信号処理)の研究も行っており、最も有名な作品は「バーチャルアナログフィルタ設計の技術」です。それでは、ヴィタミンズに拍手をお願いします。

00:43
ご興味を持っていただきありがとうございます。多くの方が来てくださり、感謝しています。また、Florianがこのプレゼンテーションのためにラップトップを貸してくれたことにも感謝します。さて、このトークは基本的に「バーチャルアナログフィルタ設計の技術」という本の紹介です。この本は6年以上前に出版されましたが、この夏に大幅な更新が行われ、第2版がリリースされました。これが今回のプレゼンテーションのきっかけです。また、最近マイナーなアップデートも行われました。この本は通常、Native InstrumentsのウェブサイトからPDFで無料でダウンロードできますが、KBRやウェブフォーラムを通じて入手するのが最善です。そうすれば、最新版を確実に入手できます。検索エンジンが表示する古いバージョンではなく。

01:18
このトークはいくつかのパートに分かれています。最初のパートでは、この本の動機と構造について説明し、2番目のパートでは第2版のハイライトについてお話しします。それでは始めましょう。この本の動機はかなり大胆です。それは、音楽DSP業界向けのデジタルフィルタ理論の入門テキストとして、標準的なDSPテキストを置き換えることです。もちろん、標準的なテキストを完全に捨て去るという意味ではありません。それは少しやりすぎでしょう。何千人もの人々の仕事を無視することはできません。しかし、異なる視点から、異なるアプローチを提供することで、音楽DSP業界にとってより適した入門書を目指しています。

02:00
標準的なDSPテキストの問題は、それが悪いことをしているわけではなく、焦点が異なることです。標準的なDSPでは、フィルタは基本的に信号から特定の周波数範囲を切り取る手段であり、それだけです。これが優先事項です。一方、音楽DSPでは優先事項がまったく異なります。私たちは、フィルタのロールオフ、カットオフ、レゾナンスなど、音楽的に重要な特性を求めています。また、非線形要素やオーディオレートでのモジュレーションも重要です。これにより、標準的なDSPで見つかった解決策が、他の目的には最適でない場合があります。 02:33
このスライドの左側に示されているように、標準的なDSPフィルタの本質は、差分方程式とそれを実装する構造です。有名な直接形式(Direct Form)です。ここでは、Reaktorのセットアップを使って、この種のフィルタの問題点を説明します。これは、Direct Form 1の共振ローパスフィルタです。Maggie Spin Nubiumのようなシンセサイザーを想像してください。古典的なDSPテキストを読んで、この共振フィルタの伝達関数を見つけ、それを構築しました。では、その結果を聞いてみましょう。

Vadim Zavalishin - “The art of VA filter design” – A different kind of digital filter theory 03:45
これはローパスフィルタで、共振することもできますが、このフィルタをモジュレートし始めると、奇妙な低音のうなりが発生することがあります。Direct Form 2ではさらに悪化します。ですので、注意してください。ポディウムがすぐに消えるかもしれませんが、アナログフィルタはもっと強力です。もしレートをさらに上げると、ある時点でフィルタが爆発します。

04:50
これと比較して、アナログフィルタは同じ設定でもうまく動作します。このアーティファクトは発生しません。これが主な問題です。Direct Formのもう一つの問題は、ここで示しているDirect Form 2のハイパスフィルタです。一見問題なさそうですが、ある時点で非常に大きなノイズが発生します。これは起こるべきではありません。本来得られるべき結果はこれです。これは、計算が64ビットで行われているにもかかわらず、十分な精度が得られていないことを示しています。

05:36
これが、アナログフィルタに戻る理由です。アナログフィルタは、カットオフモジュレーションを正しく処理します。アナログフィルタと言っても、必ずしも電子回路を指すわけではありません。抽象的なブロック図として考えることができます。ブロック図は時間的に連続しているため、ディレイは必要ありません。代わりに積分器を使用します。このスライドは、アナログ形式の有名な状態変数フィルタを示しています。数学的には、積分器の使用がモジュレーション時の良好な動作を実現しています。

06:08
基本的な数学的変換により、カットオフが一様に正の場合、カットオフモジュレーションは時間軸のワープとして等価に見なすことができます。したがって、フィルタは実際にはモジュレーションされていないかのように動作し、フィルタの安定性も保たれます。このため、約10年前まで、積分器ベースのフィルタが音楽DSPで広く使用されていました。しかし、オイラー法や類似の積分スキームを使用した場合、カットオフモジュレーションの問題は解決されましたが、ナイキスト周波数近くでいくつかの余分なアーティファクトが発生し、完全には修正できませんでした。

07:17
これに対して、古典的な理論で得られた双一次変換フィルタは、はるかに優れた結果をもたらします。しかし、あまり知られていないアプローチとして、台形積分法があります。これは何十年も前から知られていましたが、なぜかほとんど知られていませんでした。台形積分法は、古典的なDSPフィルタとまったく同じ周波数応答を提供します。また、双一次変換は積分の傑作であるとされることもありますが、この声明は誤りです。詳細には立ち入りませんが、最初に聞いた3つのフィルタは、すべて双一次変換の周波数応答を持っていましたが、実際にうまく動作したのは積分器を使用したフィルタだけでした。

07:50
したがって、台形積分法は双一次変換を意味しますが、その逆は成り立ちません。おそらく、台形積分法が広く知られていなかったためでしょう。約10年前に、トポロジー保存変換(Topology Preserving Transform)として再発見されました。台形積分法が微分方程式に対して記号的に行われるのに対し、トポロジー保存変換はブロック図から始めます。そして、図中のすべての積分器を双一次変換された離散時間積分器に置き換えます。この変換により、フィルタの周波数応答を維持しながら、良好な動作を実現できます。

08:56
このスライドに示されているように、積分器を置き換えた後、ブロック図にはゼロ遅延フィードバックループが現れます。これは音楽DSP業界にとって奇妙なことです。なぜなら、ゼロ遅延フィードバック解決法は何十年も前から知られていましたが、なぜか体系的に避けられてきました。人々は「ゼロ遅延フィードバックは解決できない」と言い、遅延を挿入してループを切断しようとしますが、これでは周波数応答が損なわれます。トポロジー保存変換では、ゼロ遅延フィードバックを適切に解決し、台形積分法とほぼ同じ結果を得ることができます。

09:29
このようにして得られたフィルタは、現在EDFフィルタとして知られています。この本は、トポロジー保存変換を基にしたフィルタ設計について解説しています。それでは、本の内容にさらに近づいて、予備知識について話しましょう。古典的なテキストでは、フィルタについて学ぶ前に多くの理論的な内容を学びます。このスライドの左側に示されているように、多くの理論的なトピックが含まれています。しかし、「バーチャルアナログフィルタ設計の技術」では、非常に少ない予備知識しか必要としません。

10:36
この本では、サンプリング定理の基本的な理解と、フーリエ変換の基本的な結果だけが必要です。フーリエ変換については、信号が異なる周波数の正弦波の和として表現できるという基本的な結果だけを理解していれば十分です。フィルタは、これらの各成分を異なる方法で処理します。これがフィルタリングの本質です。本の導入章では、これを数学的な言葉で再説明しています。これが、フィルタ理論に入るために必要なすべての準備です。

11:08
次に、本の核心部分について話しましょう。このスライドでは、本の目次と架空の古典的なテキストの目次を比較しています。左側には、多くの理論的なトピックが並んでいます。一方、「バーチャルアナログフィルタ設計の技術」では、フィルタの種類に基づいて内容を整理しています。音楽DSPで広く使用されているフィルタの種類を研究します。これらはバーチャルアナログフィルタと呼ばれることが多いですが、ウェーブテーブルシンセサイザーのような、明示的にバーチャルアナログを謳わないシンセサイザーでも、この種のフィルタが使用されることがあります。 11:47
この本では、音楽DSPで一般的に使用されるフィルタの種類を順に解説しています。1ポールフィルタ(基本的にはRCフィルタ)から始まり、状態変数フィルタ、そしてフィードバックを持つフィルタクラス(MoogラダーフィルタやDiodeラダーフィルタなど)を扱います。Sallen-Keyフィルタもラダーフィルタの一種と見なすことができます。これらのフィルタは、抽象的なアナログブロック図として研究されます。離散時間形式ではなく、アナログブロック図として研究されます。

12:21
1ポールフィルタを学んだ後、トポロジー保存変換について学ぶ章があります。この変換は、これらのブロック図をデジタル形式に変換する方法を教えます。この変換は基本的にルーチンプロセスです。本が提案するフィルタ設計の考え方は、アナログブロック図を基に考えることです。これらの図はシンプルで、数学もシンプルです。DSPエンジニアはアナログブロック図を基に考え、最後にこのルーチンを適用してフィルタをデジタル形式に変換します。これが本の基本的なアイデアです。

13:31
また、非線形性についても触れています。これは音楽DSPの重要なトピックです。飽和やアンチエイリアシングジェネレータを使用して、非線形フィルタを構築する方法を解説しています。本の目的は、単にMoogフィルタをデジタル形式で再現する方法を教えることではありません。アナログブロック図を基に考えることを教えることが目的です。これは古典的なDSPとは異なるパラダイムを導入するものです。

14:45
古典的なDSPでは、フィルタの伝達関数をインパルス応答の変換として導入することが一般的です。しかし、これは直感的ではありません。フィルタは、差分方程式を数値的に解くことで動作しますが、インパルス応答は数学的な概念であり、フィルタの動作を理解するためにはあまり役立ちません。本では、ブロック図から始めて、個々の要素の伝達関数を学び、それらを代数的に組み合わせることでフィルタの伝達関数を導出します。これは直感的で理解しやすいアプローチです。

15:58
このスライドでは、伝達関数代数の概念を紹介しています。ブロック図から始めて、個々の要素の伝達関数を学び、それらを代数的に組み合わせることでフィルタの伝達関数を導出します。これは、古典的なDSPテキストとは異なるアプローチです。古典的なテキストでは、フィルタの伝達関数をインパルス応答の変換として導入することが一般的ですが、これは直感的ではありません。本では、ブロック図から始めて、個々の要素の伝達関数を学び、それらを代数的に組み合わせることでフィルタの伝達関数を導出します。これは直感的で理解しやすいアプローチです。

16:32
このアプローチは完全に厳密ではありませんが、フィルタの動作を直感的に理解するには十分です。より厳密な導出が必要な場合は、微分方程式と差分方程式から伝達関数を明示的に導出する方法も解説しています。これは、フィルタが実際にどのように動作するかを正確に反映しているため、直感的な導出です。

17:03
これが、本の理論的な要素の一部です。時間が少し進みすぎているかもしれませんが、とにかく、これで最初のパートを終了します。本が典型的なテキストとどのように異なるかを理解していただけたと思います。また、まだ読んでいない方には、この異なる視点が音楽DSP業界にとってより適しているかどうかを確認するために、ぜひチェックしてみてください。判断はあなた次第です。

17:40
それでは、もっと楽しいパートに移りましょう。少し重い内容から始まりますが、それでも楽しいと思います。第2版のハイライトについてお話しします。第2版の大部分は、執筆時またはその直前に私が行った研究の結果を説明しています。これは非常に理論的に見えるかもしれませんが、実際には実用的な質問に基づいて行われた研究です。本をざっと見ただけでは、これが明らかではないかもしれません。そこで、この重い理論部分の実用的な結果をハイライトしたいと思います。

18:22
例えば、ドーンフィルタから始めましょう。これは、約200ページにわたる重い理論の結果です。ドーンフィルタは、ヒルベルト変換や位相分割器としても知られており、最も有名な用途は周波数シフター効果です。これは、2つの並列の1ポールオールパスフィルタのチェーンで構成されており、正しく動作するためには特定のカットオフに調整する必要があります。インターネット上には、何年も前から計算された係数のセットが存在していますが、異なる係数セットを構築したい場合、例えばより高い次数のフィルタや異なる帯域幅のフィルタを構築したい場合、その方法に関する情報を見つけるのはほぼ不可能です。

19:37
これは一種の隠された知識かもしれません。おそらくいくつかのテキストには記載されているのでしょうが、多くの人々が「ドーンフィルタの係数をどのように計算するのか」と質問していますが、ほとんど誰も答えを知りません。私はこの課題に挑戦し、答えを見つけました。最初の版ではすでに答えを記載していましたが、その式は非常に複雑で、もっと単純な答えがあるはずだと考えました。第2版では、その答えを見つけることができました。そのためには、ヤコビ楕円関数の理論に深く入り込む必要がありました。

20:10
このスライドの上部に示されている式が、その鍵となる式です。これは、2つの異なるヤコビ楕円関数をリーマン球面上の反転によって結びつけるものです。これは非常にエレガントに聞こえますが、実際に理解するためにはこの分野の知識が必要です。とにかく、この式を使って答えを得ることができました。この2番目の式は非常にシンプルで、1ポールオールパスフィルタの極と零点の位置、つまりカットオフを与えます。これは標準的なヤコビ楕円関数であり、多くの数学ライブラリで簡単に計算できます。

21:15
本では、この関数を計算する方法も説明していますが、式自体は非常に短くシンプルです。これは1ポールフィルタのチューニングです。さらに、楕円モジュラスがゼロに近づく場合の極限形も示しています。これは、楕円フィルタから

21:15
私は答えを得ることができました。この2番目の式は非常にシンプルで、1ポールオールパスフィルタの極と零点の位置、つまりカットオフ周波数を示しています。これは、標準的なヤコビ楕円関数を使用しており、多くの数学ライブラリで簡単に計算できます。本ではこの関数の計算方法も説明していますが、式自体は非常に短くシンプルです。これは1ポールフィルタのチューニングを示しています。さらに、楕円モジュラスがゼロに近づく場合の極限形も示しています。これにより、楕円フィルタからバターワースフィルタに移行します。この場合、ヤコビ楕円関数は単なるタンジェント関数に簡略化され、バターワースフィルタが得られます。これにより、帯域幅が少し狭くなりますが、より良い結果が得られます。これで、誰でも簡単に自分自身の周波数シフターを構築できるようになりました。

22:26
次に、もう一つの小さなハイライトとして、一般化されたリンクウィッツ・ライリークロスオーバーについてお話しします。これは以前から知られているべき内容かもしれませんが、少なくとも広く知られていないようです。この研究は、KVRオーディオでのディスカッションから始まりました。そこで、Mark Mahalo氏が重要な情報を提供してくれました。彼は、リンクウィッツ・ライリークロスオーバーをバターワースフィルタだけでなく、他のフィルタタイプでも構築できると指摘しました。彼は、1ポールオールパスフィルタを基にしたリンクウィッツ・ライリークロスオーバーの例を示しました。このフィルタは厳密にはオールパスフィルタではなく、ハイシェルビングフィルタに近いものです。彼は、このフィルタを使ってクロスオーバーを構築する方法を説明しました。これは少し複雑ですが、基本的にはシンプルです。

22:59
その後、自然と「どの他のフィルタタイプが使えるのか?」という疑問が湧きました。なぜなら、バターワースフィルタだけが使えるわけではないからです。そこで、私はこの課題に取り組み、答えを見つけました。この式がその答えです。この式は、任意のフィルタを使えることを意味します。おそらくローパスフィルタを使うべきですが、基本的にはどのフィルタでも、両方のバンドがオールパスに加算され、同じ位相応答を持つクロスオーバーを構築できます。つまり、ここにある伝達関数の部分にお気に入りのフィルタを代入し、残りの式を一意に定義することで、クロスオーバーを得ることができます。詳細には立ち入りませんが、この式を試すために、楕円フィルタを使ったリンクウィッツ・ライリークロスオーバーを構築しました。

24:07
楕円モジュラスを使用することで、ストップバンドの漏れと通過帯域のリップルのトレードオフを制御できます。バターワースフィルタでは、ストップバンドにいくらかのリップルが発生しますが、通過帯域での漏れはあまり目立ちません。一方で、遷移領域はより急峻になります。もし時間があれば、後でこれをデモンストレーションできるかもしれません。ただし、今回は音ではなく、応答曲線で説明します。

24:39
これが2番目の実用的な結果です。次に、このトークの最大のセクションに移ります。これはおそらく最も楽しい部分になるでしょう。私は「第2種バターワースフィルタ」と「バターワース変換」を発明しました。本ではこれについて詳しく説明していますが、非常に理論的に見えるかもしれません。しかし、これから多くの実用的な結果が得られると考えています。このアイデアがどのように発展し、どのような結果をもたらしたのかを説明したいと思います。

25:18
このアイデアは、非常に標準的なDSP初心者の質問から始まりました。KVRオーディオで「2次以上のエイジングローパスフィルタをどのように構築するのか?」という質問が繰り返されました。2次フィルタの場合、共振ローパスフィルタを構築する方法はほぼ1つしかありませんが、高次フィルタの場合、多くの選択肢があります。例えば、Moogラダーフィルタを使うことを提案する人もいますが、Moogラダーフィルタは2次フィルタとは大きく異なり、高次に一般化するのは簡単ではありません。そこで、いくつかの同一の2次セクションを組み合わせるという試みもありましたが、結果として非常に広い共振ピークが得られ、通常はひどい音になります。

26:28
この質問が再び提起されたことで、私は再度解決策を見つけようと試みました。最終的に、古典的なバターワースフィルタ(第1種バターワースフィルタ)から始めることにしました。この設計式は、バターワースフィルタを知っている人ならば理解できるでしょう。私はこの分母に追加の項を加えることにしました。この追加の項により、分母は2次多項式になります。この多項式の最小値が共振ピークに変わります。これが主なアイデアでした。ただし、この方法は偶数次のフィルタでのみ機能します。奇数次の場合、共役極が得られないため、これらのフィルタは存在しません。

27:37
その後、分母を少し異なる形で書き直すことで、2次ローパスフィルタの分母とほぼ同じ形式であることに気づきました。つまり、この置換により、2次ローパスフィルタを高次の共振ローパスフィルタに変換できることがわかりました。このフィルタを「第1種バターワースフィルタ」と呼び、共振を持つフィルタを「第2種バターワースフィルタ」と呼ぶことにしました。

28:49
この置換により、2次ローパスフィルタを高次の共振フィルタに変換できますが、次数は偶数でなければなりません。つまり、Mを2nと定義することで、Mが奇数でも偶数でもこの置換が適用できます。この置換は、ΩをΩの2n乗に置き換えるものです。さらに、この置換は第1種バターワースフィルタにも適用できます。つまり、この美しい置換により、1次ローパスフィルタを第1種および第2種バターワースフィルタに変換できます。

30:01
さらに、これまで分母に対してのみこの変換を行っていましたが、同じ形式で分子に対しても同じ変換を行うことができます。つまり、フィルタの零点も同じ方法で変換できます。これにより、1次または2次フィルタにこの変換を適用でき、任意の次数の伝達関数にも適用できます。なぜなら、伝達関数を1次および2次セクションに因数分解し、それぞれを変換できるからです。この変換を「バターワース変換」と呼びます。この変換は、任意のフィルタに適用できます。

30:34
フィルタの振幅応答は通常、対数周波数スケールでプロットされます。この変換を対数周波数スケールで考えると、周波数をn倍に縮小する効果があります。このスライドでは、2次フィルタから4次フィルタに変換した場合の効果を示しています。これから、このフィルタの音をデモンストレーションします。まず、2次フィルタから始め、n=2の変換を適用して4次フィルタにします。共振がより細くなります。6次フィルタにすると、共振はさらに細くなります。

31:24
このフィルタの音は、一部の人にとってはあまり音楽的ではないと感じられるかもしれません。共振が細すぎると感じるからです。私も部分的には同意しますが、これは文化的なものかもしれません。なぜなら、私たちが慣れ親しんでいる共振は、2次フィルタやMoogラダーフィルタのような広い共振ピークを持つフィルタから来ているからです。4次フィルタでも同様の共振を持つことがありますが、私たちはそれに慣れていないのかもしれません。いずれにせよ、このフィルタは特定のシナリオで音楽的に使用できると思います。

32:42
また、このフィルタの非線形バージョンを構築することにも興味を持ちました。しかし、バターワース変換は伝達関数に対して機能するため、トポロジーについては何も教えてくれません。線形フィルタの場合、トポロジーはそれほど重要ではありませんが、非線形フィルタの場合、トポロジーは音に大きな影響を与えます。したがって、伝達関数からフィルタを構築する際のトポロジーの選択が重要になります。線形フィルタの場合、2次セクションに因数分解して積み重ねることが一般的です。しかし、非線形フィルタの場合、この方法は適していません。なぜなら、各セクションが独立して非線形性を持つため、全体のフィードバックに影響を与えるべき非線形性が局所的にしか作用しないからです。

33:45
そこで、私は転置一般化状態変数フィルタ(Observable Canonical Form)から始め、積分器を1ポールローパスフィルタに置き換えることで、この構造にたどり着きました。この構造は、ラダーフィルタやSallen-Keyフィルタからも導出できます。これにより、4ポールフィルタを構築し、同じ非線形性を持つラダーフィルタと比較しました。結果として、4ポールフィルタはまったく異なる音を持ちます。

35:19
次に、もう一つの実用的な応用例を示します。これは8ポールシェルビングフィルタです。今回は音ではなく、振幅応答のプロットを見てください。このフィルタは、1ポールシェルビングフィルタの応答から始まり、2ポール、4ポール、8ポールへと滑らかに変化します。この変化は完全にスムーズで、アーティファクトはありません。さらに、楕円範囲に進むこともできます。これにより、リップルを許容し、より急峻な応答を得ることができます。

36:35
また、ローパスからバンドパスへの変換を使用して、バンドパスまたはバンドストップフィルタを構築することもできます。これにより、スロープコントロールや帯域幅の調整が可能になります。これはイコライザーに実装できる機能です。

37:13
最後に、このハイシェルビングフィルタの極零点プロットを示します。これは非常に美しいプロットです。極と零点が互いに打ち消し合い、スロープを増加させることで新しい極と零点が現れます。このプロットは非常に美しく、カレイドスコープのようなパターンを形成します。

38:32
最後のデモンストレーションは、少しティーザー的なものです。これは、私がブロック図を基にフィルタを構築する方法を研究している中で見つけたフィルタです。詳細については、YouTubeのトークで説明しています。今回は、カットオフノブを回すだけで、フィルタの音を変化させます。

39:59
トークを締めくくるために、さらなる読書材料を紹介したいと思います。残念ながら、同じパラダイムに従った資料はあまりありません。Will Pirkle氏の本は、フィルタについて同じアプローチを取っています。また、Stephan Xiang氏の短いテキストも参考になります。このテキストは、積分器の概念を直感的に紹介しており、トポロジー保存変換の背後にある考え方を理解するのに役立ちます。

41:22
最後に、私の本はNative Instrumentsのウェブサイトから無料でダウンロードできます。最新版はKVRオーディオフォーラムのスレッドにリンクがあります。ぜひチェックしてみてください。

42:00
質問があればどうぞ。例えば、このフィルタをオーディオレートでモジュレートするとどうなるか、といった質問がありました。残念ながら、ステージ上でパッチを組む時間はありませんが、興味があれば後で一緒に試すことができます。

42:41
また、これらのフィルタの計算コストについての質問もありました。古典的なフィルタに比べて、これらのフィルタは2倍程度の計算コストがかかることがあります。例えば、1ポールフィルタの場合、4回の操作が必要ですが、古典的なフィルタでは3回で済むかもしれません。状態変数フィルタの場合、すべてのモードで10回の操作が必要です。ただし、係数の更新はより高コストです。

45:17
最後に、他のトポロジー保存積分器を試したかどうかという質問がありました。台形積分法以外にも、さまざまな積分スキームがありますが、私はそれらを試していません。因果性を持つ積分器でなければならないため、選択肢は限られています。

47:06
これでトークを終了します。デモンストレーションを楽しんでいただけたでしょうか?質問があればどうぞ。

Zero Delay Feedback Filters, Part II Urs Heckmann - Zero Delay Feedback Synthedit VA Filters, the geeky bits.