FIRフィルター設計:ウィンドウとパークマクレランおよび最小二乗


21

ローパスフィルターのFIRフィルター設計にParks-McClellan(ここではPMcCと略します)または最小二乗アルゴリズムよりもウィンドウアプローチを使用する利点はありますか?今日の計算能力では、アルゴリズム自体の複雑さは要因ではないと仮定します。

この質問は、PMcCと最小二乗を比較するものではありませんが、具体的には、これらのアルゴリズムの代わりにウィンドウFIR設計手法を使用する理由がある場合、またはそれらのアルゴリズムによって廃止され、教訓的な目的に追いやられた設計をフィルター処理するウィンドウ手法がありましたか?

以下は、ハミングウィンドウを、同じ数のタップを使用して、最小二乗法を使用したお気に入りの設計アプローチと比較した比較の1つです。ハミングウィンドウのパスバンドに厳密に一致するように、最小二乗アプローチの通過帯域を拡大しました。この場合、最小二乗のパフォーマンスが大幅に向上することは明らかでした(ストップバンド除去が大幅に向上します)。すべてのウィンドウでこれを行っていないので、PMcCと最小二乗を実行できるかどうか、またはウィンドウイングアプローチが好ましいFIRローパスフィルタの他のアプリケーションがあるかどうかという質問につながりますか?

ここに画像の説明を入力してください


2
カイザーウィンドウシンクとを比較することをお勧めfirpm()firls()ます。
ロバートブリストージョンソン

回答:


16

ウィンドウフィルターの設計手法は、もはや最も重要な設計手法の1つではなく、おそらく歴史的な理由により、従来の教科書では過剰に表現されている可能性があります。

ただし、特定の状況ではその使用を正当化できると思います。計算の複雑さがもはや問題ではないことに同意しません。これはプラットフォームに依存します。デスクトップコンピューターに座ってフィルターを設計すれば、複雑さを心配する必要はありません。ただし、特定のプラットフォームおよび設計を準リアルタイムで実行する必要がある状況では、計算の複雑さが問題となり、単純な準最適な設計手法がはるかに複雑な最適な手法よりも優先されます。例として、私はフィルター(ビームフォーマー)をその場で再設計する必要があるビームフォーミング用のシステムで働いていたため、計算の複雑さが実際に問題でした。

また、多くの実際的な状況では、最適な設計と次善の設計の違いを心配する必要はないと確信しています。これは、量子化係数と算術演算の量子化結果で固定小数点演算を使用する必要がある場合にさらに当てはまります。

別の問題は、最適なフィルター設計法とその実装の数値安定性です。Parks-McClellanアルゴリズム(つまり、使用した実装)が単に収束しなかったいくつかのケースに遭遇しました。これは、仕様があまり意味をなさない場合に発生しますが、完全に合理的な仕様でも発生する可能性があります。同じことは、線形方程式系を解く必要がある最小二乗設計法にも当てはまり、これは悪条件の問題になる可能性があります。このような状況では、ウィンドウ方式は決してあなたを失望させません。

ウィンドウ手法と最小二乗設計の比較についてのコメント:この比較は、ウィンドウ手法に対する最小二乗手法の一般的な優位性を示すとは思わない。まず、ストップバンドの減衰を確認するようです。これは、2つの方法のいずれの設計目標でもありません。ウィンドウ法は、いかなる意味においても最適ではなく、最小二乗設計はストップバンドエネルギーを最小化し、ストップバンドリップルサイズをまったく気にしません。見えるのは、窓の設計の通過帯域の端が最小二乗の設計の通過帯域の端よりも大きいのに対し、ストップバンドの端は小さいことです。その結果、ウィンドウ処理によって設計されたフィルターの遷移帯域幅は小さくなり、阻止帯域リップルが大きくなります。遷移帯域幅の違いは小さいかもしれませんが、ただし、フィルターのプロパティはこのパラメーターに非常に敏感です。帯域エネルギーを停止することになると、最小二乗フィルターが他のフィルターよりも優れていることは間違いありませんが、リップルサイズほど簡単にはわかりません。そして、その違いが実際のアプリケーションで実際に違いを生むかどうかは疑問のままです。

そのような比較は、多くの場合、見たいように見えるようにすることができることを示しましょう。以下の図では、Matlab / Octave関数で設計された最小二乗最適ローパスフィルターfirls.m(青)と、カイザーウィンドウを使用したウィンドウメソッドで設計されたローパスフィルター(赤)を比較します。

ここに画像の説明を入力してください

この図から、ウィンドウ処理によって設計されたフィルターは最小二乗最適フィルターよりもわずかに優れていると結論付けることさえできます。もちろん、これは「より良い」ことさえ定義しておらず、最小二乗フィルターより小さな平均二乗近似誤差を持たなければならないため、無意味です。ただし、図には直接表示されません。とにかく、これはそのような比較を行う際に非常に慎重で明確でなければならないという私の主張を支持するためだけです。

要するに、純粋に教訓的な理由でDSP学生のために学ぶのに役立つことは別として、1970年代以降の技術の進歩にもかかわらず、特定の実用的なシナリオではウィンドウ手法の使用は正当化できると思います。すぐに変更します。


良い答えマットカップルの説明/質問:複雑さに関して、実際の例を思いつくことができますか?これは実装の問題であることがわかりますが、係数を考え出す際に、下位プラットフォームで設計を行う理由を考えることはできません(したがって、私の質問です)。比較に関しては、最小二乗法が明らかに優れています。同じリップルと遷移の場合、阻止帯域の減衰が向上します。2つに一致するように通過帯域幅を拡大しました。エッジはやや大きくなります。これはマッチングを停止した場所であるため、より近くで一致する可能性があるためです。
ダンボスチェン

2
@DanBoschen:もちろん、ほとんどの場合、設計はオフラインで行われ、複雑さは問題になりません。ただし、フィルターを準リアルタイムで再設計する必要があるアプリケーション(ビームフォーミングアプリケーション)に遭遇したため、複雑さの問題があります。
マットL.

1
また、ウィンドウデザインと比較した最適なデザインによるタップ数の実際の節約については、私が見た結果はしばしば期待はずれです。多くの場合、1つまたは2つのタップだけでほとんど違いはありません。
マットL.

1
OK、オフライン設計の場合、および数値安定性が問題にならないことが判明した場合(その特定の設計の場合、一般に問題のままです)、ウィンドウ処理は役に立ちません。しかし一般的に、オフライン設計に常に依存できるわけではなく、さらに重要なことには、数値の問題を常に回避できるわけではありません。だから、「廃止」という言葉はまだ少し強すぎると思います。
マットL.

3
非常によく言いました。覚えておくべきことは、エンジニアリングとは、要件を満たすのに十分な実装を見つけることです。windowメソッドは実装が簡単で、常に機能します。他のメソッドにはより複雑な実装があり、扱いにくい場合があります。私はその場でフィルターを設計する必要のあるいくつかのシステムを使用してきましたが、ウィンドウ方式はそのような状況に最適です。
ジェイソンR

7

ウィンドウ化されたSincフィルターは、関連するFIRフィルターを実行するのに十分なほど強力なプロセッサーでオンザフライで適応的に生成できます。ウィンドウ処理されたSincフィルターは、有限の制限時間で生成できます。

いくつかの単純なウィンドウ化Sincフィルターの生成は、コードの数行で完全に記述(およびマルウェアなどの検査)できますが、一部の不透明なツールボックスは盲目的に使用します。

PMcCフィルタージェネレーターをゼロからコーディングする場合と比較して、ウィンドウ化されたSincフィルターを説明するために必要な数学の背景はそれほど必要ありません。

PMcCフィルターの周波数応答のリップルが等しいと、時間領域で、単純なウィンドウフィルターによって生成されるアーティファクトとは異なる(おそらく望ましくない)アーティファクトが発生する可能性があります。


1
はい、@ hotpaw2の良い点です。通過帯域リップルは、シンボル間干渉(トレーリングエコーとリーディングエコー)につながります。ありがとう
ダンボッシェン

2
2003年にcomp.dspでのパークスマックレランの前後のエコーについて話しました。Alexey Lukinは、最小限のMATLABの例を投稿しましたf=[0 0.49 0.51 1]; a=[1 1 0 0]; b=remez(300,f,a)。これもOctaveで実行されます。説明は、非常に急峻なフィルターでは、コサインに似たリップルが十分に規則的である可能性があることです。周波数領域コサインに相当する時間領域は、2つのインパルスエコーになります。
オッリNiemitalo

6

ここでは、窓付きデザインの利点の1つと、Parks–McClellanから同じ利点を得るためのトリックを示します。

ハーフバンド、クォーターバンドなどのフィルターウィンドウでは、スケーリングされたsinc関数の時間領域ゼロが保持されます。これは、プロトタイプの理想的なローパスフィルターです。ゼロは係数になり、フィルターの計算コストを削減します。ハーフバンドフィルターの場合、ウィンドウ設計では、中間係数(偶数と見なされる)を除くすべての偶数係数0のフィルターが得られます。

シンク
図1. 2倍に水平に引き伸ばされたSinc関数は、2倍のアップサンプリングに適した、ゲイン2の典型的なハーフバンドローパスフィルターです。

ただし、Parks–McClellan / Remezは、ユニティゲインパスバンドのみが定義された偶数のタップを持つフィルターを使用して設計することにより、同じ利点を得るためにだまされる可能性があります。得られた係数は、より長いフィルターの奇数係数として使用されます。長いフィルタの中間係数は1に設定され、他の偶数係数は0に設定されます。このフィルタは、通過帯域で2のゲインを持ち、通過帯域と停止帯域で対称リップルを持ちます。Pythonの場合:

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
c0 = signal.remez(14, [0, 3500.0/8000], [1])
c = np.zeros(c0.size*2-1)
c[0::2] = c0
c[c0.size-1] = 1
freq, response = signal.freqz(c)
plt.semilogy(freq/(2*np.pi), np.abs(response))
plt.show()
plt.plot(range(-c0.size+1, c0.size, 1), c, 'x')
plt.grid(True)
plt.show()

図2。
図2. Pythonを使用して間接的に設計されたハーフバンドフィルターの係数scipy.signal.remez

図3
図3.を使用して間接的に設計されたハーフバンドフィルターの振幅周波数応答プロットscipy.signal.remez

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.