調整可能なバタワースフィルターの標準的な実装形式はありますか?


17

バターワースフィルターを実装する標準的な方法の1つは、それぞれが複素共役極のペアに対応する2次セクションのカスケードです。たとえば、4次フィルターの場合、2つの2次セクションがあります。カットオフが0hz付近からナイキスト付近に設計されているため、z平面でローパスフィルターの極の位置がどのように変化するかを考えると、極の各ペアによって「掃引」されるパスは、単位円内のアークのペアに対応します、次の図に示すように[4次フィルターの場合]:

4次バターワースローパスフィルターのZ面極位置

これらのフィルターがどのくらいの期間存在し、これらの「アーク」がs平面の直線に対応するという事実を考えると、ポールをスイープできる単一のパラメーターを持つ実装フォームを誰かが開発したのは理にかなっています「設計時」ではなく「実行時」の円弧に沿って。しかし、私はまだそのようなものに遭遇していません。

特に範囲のセグメント内でこれを行うさまざまな方法を考え出すことは比較的簡単で、少し余分な計算を投げる意欲があります。私が疑問に思っているのは次のとおりです:

1)最適な特性(効率、堅牢性など)を持ち、2)範囲全体をカバーする、特定の次数の調整可能な[デジタル]バタワースフィルターを実装する標準的な方法はありますか?

または、これは本当に簡単な問題なので、誰もそれについて話すことを気にしませんか?その場合、「静的」設計のオプションの横にあるフィルター設計プログラムに表示されるようです。

私はこれを見つけました:可変カットオフ周波数を備えた多目的バターワースフィルターですが、最初はグーグルで何が含まれているかについての情報はあまりないようです。

更新(再:回答)

もう少し明確にするために:

  • 私は、時変システムで使用するために、DCからナイキストへのカットオフを自動的に調整する(ゲインを正規化したままにする)パラメーター([0,1]など)を持つ「メタ設計」を探しています。バターワース制約を除いて、この2極共振器のようなもの。アイデアは、パラメータを計算することは、実行時に一般的なオフライン設計手順を実行するよりも効率的であるということです。
  • 「メタフィルタ」の設計方法を必ずしも探しているわけではありません(つまり、数値の代わりに変数を使用して計算を行います)。標準の[非自明]実装形式の選択肢があるかどうか疑問に思っています。たとえば、静的な場合に対応する単純なアプローチでは、時変の場合に数値的な問題が発生します。
  • たぶん問題はないかもしれませんし、簡単なアプローチが実際に使用されているものです。それは素晴らしいことです。私が心配しているのは、私が相談した情報源のどれにもこのトピックが明示的に言及されていないことですが、たぶん本当に明白な何かを見逃したので、私は尋ねています。
  • ここで詳細を追加する過程で、私はパラメトリックバイクアッド構造の一般的な処理に遭遇しました。

更新2

次のように、Jason Rへの2番目のコメントに入れたような答えを探しています。

「ああ、そうですね、最小限の乗算を使用しながら、このようなエッジケースを解決するので、タップされた状態のラティス形式で、ある程度の論文のパラメーター化III-2bを使用したいと思います。」

おそらくそのようなものは存在しませんが、私の質問は、それが存在するかどうか、もしそうなら、それは何ですか、どこで見つけることができますか?

ジャックポット

ジェイソンRの答えのcomp.dspスレッドでティムウェスコットによって与えられた「観測者の標準形式」への参照に基づいて、私は制御システムの文献を掘り始めなければならないかもしれないと仮定することにしました。butterworth "state space"であり、パラメトリックバターワースだけでなく、チェビシェフフィルターと楕円フィルターも含めて、次の非常にクールな設計/実装の扱いを示しました。

Sophocles J. Orfanidis、「高次デジタルパラメトリックイコライザーデザイン」、J。Audio Eng。Soc。、vol。53、pp。1026-1046、2005年11月。

掘り下げるには少し時間がかかりますが、これまで読んだ内容に基づいて、探しているものではない場合は非常に驚くでしょう。Orfanidis論文に導いたcomp.dsp参照のために、これをJason Rに渡します。彼の答えは、バターワースフィルターの設計に関する実用的な概要でもあります。

回答:


10

あなたが何を探しているのか正確にはわかりません。質問で指摘したように、バタワースフィルターファミリーの伝達関数はよく理解されており、分析的に簡単に計算できます。フィルターの次数とカットオフ周波数によって調整可能なバタワースフィルター構造を実装するのは非常に簡単です。

  1. 選択したフィルター次数、カットオフ周波数、およびサンプルレートに基づいて、バターワースアナログプロトタイプフィルターの極の位置を計算します。バターワースフィルターにはゼロがないため、伝達関数は極の位置(およびDCゲイン)によって決まります。

  2. 双線形変換を使用して、アナログプロトタイプの極の位置を、フィルターのデジタル実現の対応する位置にマッピングします。

  3. 繰り返しますが、デジタルフィルターはステップ2で見つかった極の位置によって定義されます。極をペアでグループ化することにより、フィルターを2次セクションに分割します。

それでおしまい。先ほど言ったように、必要なパラメーターを使用してバターワースフィルターをプログラムで設計するのは簡単です。どの操作も実装がひどく複雑ではありません。

編集:あなたが探している最終結果は本当にわかりません。代わりに、バターワースフィルターに必ずしも固有ではない、時変係数を持つIIRフィルターの実装方法に最も関心があると思います。フィルターのカットオフ周波数を変更する際のアーティファクトを最小限にすることがあなたの目標だと思います。これは、今年初めにcomp.dspニュースグループに関する議論で取り上げられました。このフィルター構造の使用事例や要件はわかりませんが、切り替えを実現する方法はいくつかあります。

フィルターにカットオフ周波数を定義する単一のパラメーターを持たせたいと言ったことは知っていますが、調整可能な構造にはカットオフ周波数を必要な係数に変換する方法が必要であるという事実が残ります(バターワースの場合は、ポールの位置)。上記のプロセスIは、目的の正規化サンプルレートに基づいて極の位置を生成するのに適しています。

z平面内のデジタルフィルターの極位置のジオメトリを分析することにより、極位置計算プロセスを簡略化できます。アナログバタワースフィルターには、s平面の左半分の半円にある極があります。バイリニア変換は、この半円を質問の説明で示した楕円形のパターンにマッピングします。この既知のパターンをアナログバターワースフィルターの極、双線形変換のマッピング関数、およびいくつかの代数に使用すると、デジタルフィルターの極の位置を比較的簡単に表現できるため、より簡単なフィルターを提供できます。チューニングアクション。


ジェイソン、私は特定のバターワース仕様を設計する方法を探しているのではなく、「メタデザイン」を探しています。質問をもう少し詳しく更新します。
データガイスト

1
再:編集。最後の段落で説明したプロセスは、まさに私がどのようにアプローチするかです。実際にどこでこれがカバーされているのか疑問に思っています。言い換えれば、「ああ、そうですね、最小数の乗算を使用しながら、このようなエッジケースを解決するため、タップされた状態のラティス形式で、論文III-2bのパラメーター化III-2bを使用します。 」
データガイスト

1
小さなちょっとしたコメント:Zプレーンでは、BWフィルターには実際にゼロがあります。ローパスフィルターの場合はすべて-1、ハイパスフィルターの場合は+1です。
ヒルマー

s±ss0

2

はい、バターワース、および他のほぼすべてのフィルター応答の標準的な実装フォームがあります。それらはすべて、オープンソースのIIRフィルターライブラリに完全に実装されています。以下は、任意の次数のバターワースフィルターの極/零点のペアを生成するコードのスニペットです。

void AnalogLowPass::design (int numPoles)
{
  if (m_numPoles != numPoles)
  {
    m_numPoles = numPoles;

    reset ();

    const double n2 = 2 * numPoles;
    const int pairs = numPoles / 2;
    for (int i = 0; i < pairs; ++i)
    {
      complex_t c = std::polar (1., doublePi_2 + (2 * i + 1) * doublePi / n2);
      addPoleZeroConjugatePairs (c, infinity());
    }

    if (numPoles & 1)
      add (-1, infinity());
  }
}

ご覧のとおり、極の位置は、s平面を「ペア」の等しいセグメントに分割することによって計算されます。

適切なコードは、すべての一般的なタイプのフィルター応答に提供されます:Chebyshev、Elliptic、Legendre、それぞれのシェルフバージョンを含みます。

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

スクリーンショット


DSPFiltersライブラリは、パラメータ化された方程式を使用して実行時にデジタルフィルターの極/零点ペアを計算し、元の質問で想定されたユースケースに直接対処します。ソースコードスニペットも含めるように答えを修正します。
ヴィニーファルコ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.