移動平均フィルター(FIRフィルター)に対する最良の1次IIR(ARフィルター)近似とは何ですか?


24

次の1次IIRフィルターを想定します。

y[n]=αx[n]+(1α)y[n1]

IIRが最後のサンプルの算術平均であるFIRを可能な限り近似するパラメーター st を選択するにはどうすればよいですか。αk

z[n]=1kx[n]+1kx[n1]++1kx[nk+1]

ここで、、つまりIIRの入力はよりも長くなる可能性がありますが、最後の入力の平均の最適な近似が必要です。n[k,)kk

IIRには無限のインパルス応答があるため、最適な近似を探しています。またはコスト関数のいずれであっても、分析ソリューションが必要です。L2L1

この最適化問題は、1次IIRのみを与えられた場合、どのように解決できますか

ありがとう。


に正確に従う必要がありますか?y[n]=αx[n]+(1α)y[n1]
フォノン

1
これは、非常に貧弱な近似になるはずです。一次IIR以外のものは買えませんか?

を使用して2つの異なることを意味しないように質問を編集することができます。たとえば、2番目に表示される方程式は、「できるだけ良い」という基準を正確に言いたい場合があります。たとえば、をすべてのできるだけ小さくするか、をすべてのできるだけ小さくします。y[n]| y[n]z[n]| n| y[n]z[n]| 2nz[n]=1kx[n]++1kx[nk+1]|y[n]z[n]|n|y[n]z[n]|2n
ディリップサルベート

@フォノン、はい、それは一次IIRでなければなりません。基準は単純です。結果は、システムへの最後の入力の平均にできるだけ近く、なければなりません。両方のケースの結果を見て喜んでいるでしょう。分析解はに対してのみ実行可能であると想定していますが。k個のn [ K INF ]y[n]kn[k,inf]|y[n]z[n]|2
ロイ

回答:


10

がスカラーであるという分析的な解決策はありません(私は思う)。これは、与えられたに対してを与えるスクリプトです。オンラインで必要な場合は、LUTを作成できます。スクリプトは最小化するソリューションを見つけますααK

0πdw|H1(jw)H2(jw)|2

ここで、はFIR周波数応答、はIIR周波数応答です。H1H2

Kの範囲を指定しませんでした。しかし、次のシステムは平均フィルターと同等であり、計算の複雑さは同じで、一次IIRであることを明確にしたいだけです。

H(z)=1K1zK1z1

function a = find_a(K)

w = 0.0001:0.001:pi;
as = [-1:0.001:-0.001  0.001:0.001:1];

E = zeros(size(as));
for idx=1:length(as)
    fJ = J(w,as(idx),K);
    E(idx) = sum(fJ);
end

[Emin, indx] = min(E)
a = as(indx)

function f = J(w,a,K)
    num = 2*(2-a)*(1-cos(w*K)) + 2*(cos(w*(K-1)) - cos(w)) - 2*(1-a)*(cos(w)-cos(w*(K+1)));
    den = (2-a)^2 + 1 + (1-a)^2 + 2*(1-a)*cos(2*w) - 2*(2-a)^2*cos(w);
    f = -(a/K)*num./den;
    f = f+(1/K^2)*(1-cos(w*K))./(1-cos(w))+a^2./(1+(1-a)^2-2*(1-a)*cos(w));
end

end

@Drazick比較的単純です。IIRとFIRの2つの式は積分に組み込まれています。FIRフィルターの代替式を見つけるための鍵は、等比数列/系列を認識することです。詳細はすべてen.wikipedia.org/wiki/Geometric_progression#Geometric_seriesにあります。スクリプトでは、J関数は積分記号の下で式を計算します。
ナイアレン

@niaren私はこれが古い投稿であることを知っているので、覚えていれば:あなたの関数「f」はどのように派生していますか?同様のことをコーディングしましたが、FIR(H1)およびIIR(H2)の複素伝達関数を使用してから、sum(abs(H1-H2)** 2)を実行します。これをsum(fj)と比較しましたが、結果として異なる出力が得られます。私は数学を耕す前に尋ねると思いました。
ドム

@Domそれはずっと前であり、私は本当に覚えていない。私はちょうどするプロセスを行ったと思います。表現をどのように検証したか思い出せません。私は再び数学を通過する気にしません[H1(jω)H2(jω)][H1(jω)H2(jω)]
...-ナイアレン

@niarenこんにちは、私はあなたの表現を導き出そうとしましたが、複雑な分数を足し合わせると行き詰まりました。コードを間違えました...関数はsum(abs(H1-H2)** 2)に比例する結果を出しているようで、正しいことを示しています。
ドム

16

Micro Signal Architectureを使用したEmbedded Signal Processingのこの問題については、おおよそ63〜69ページで説明されています。上のページ63は、(そのniarenはで与えた移動平均フィルタの正確な再帰の導出を含む彼の答え

H(z)=1N1zN1z1.

次の説明に関する便宜上、次の差分方程式に対応します。

yn=yn1+1N(xnxnN).

指定したフォームにフィルタを置く近似と仮定必要ので、(から及びIの引用頁。68)「の平均であり、サンプル「。この近似により、前述の差分方程式を次のように簡略化できます。、Y N - 1 X nはxnNyn1yn1xn

yn=yn1+1N(xnyn1)yn=yn11Nyn1+1Nxnyn=(11N)yn1+1Nxn.

設定、我々は元の形、到着係数必要なことを示し、(この近似に関して)は正確に(はサンプル数です)。 YN=αXN+1-αYN-11α=1Nyn=αxn+(1α)yn1 N1NN

この近似は、ある意味で「最良」ですか?確かにエレガントです。N = 3の場合と、Nが10に増加した場合(青の近似値)の振幅応答の比較([44.1kHz]):

N = 3 N = [3,10]


ピーターの答えは示唆して、再帰型フィルタとFIRフィルタを近似することは、最小二乗規範の下で問題となる可能性があります。一般にこの問題を解決する方法の詳細な議論は、JOSの論文「デジタルフィルター設計のテクニックとバイオリンへの応用を伴うシステム同定」にあります。彼はハンケルノルムの使用を提唱していますが、位相応答が重要でない場合は、このケースでうまく機能する可能性のあるKopecの方法もカバーしています(そしてノルムを使用しています)。論文のテクニックの広い概要はここで見つけることができます。他の興味深い近似値が得られる場合があります。L2


これは、1次IIRフィルターのメモリについて何かを言う「エレガントな」方法です。そのメモリはと同等です。あなたが言及した他の方法を調べます。ありがとう。1α
ロイ

LSノルム()に解決策がない理由を直感的に説明していただけますか?L2
ロイ

この場合、LSソリューションがあるかどうかはまだわかりませんが、一般的な「IIRベースのFIR近似」問題の収束に問題がある傾向があることを知っています。機会がありましたら、詳細を追加して更新します。
データガイスト

さて、ピーターが提案したコスト関数(最初のもの)が正しい場合、解決策があります。少なくとも私の計算によれば。
ロイ

すばらしいです。「ヒューリスティック」なアプローチが、より標準的なものとどのように比較されるかを知りたいです。1/N
データガイスト

16

OK、最良のものを導き出しましょう: そうの係数はです。 X[N-M]α1-αM

y[n]=αx[n]+(1α)y[n1]=αx[n]+(1α)αx[n1]+(1α)2y[n2]=αx[n]+(1α)αx[n1]+(1α)2αx[n2]+(1α)3y[n3]
x[nm]α(1α)m

最適な平均二乗近似は最小化します: m>k1

J(α)=m=0k1(α(1α)m1k)2+m=kα2(1α)2m=m=0k1(α2(1α)2m2kα(1α)m+1k2)+α2(1α)2km=0(1α)2m=α21(1α)2k1(1α)2+2αk1(1α)k1(1α)+α2(1α)2k1(1α)2+1k=α21(1α)2+2k(1(1α)k)+1k=α22αα2+2k(1(1α)k)+1k=α2α+2k(1(1α)k)+1k
これは、場合、FIR係数がゼロだからです。m>k1

次のステップは、導関数を取り、ゼロに等しくすることです。


派生のプロットを見るとのためにと 0から1へ、それが問題のように見える(私はそれを設定したとして)最良の答えであるため、不良設定である。K = 1000年α α = 0JK=1000αα=0

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


ここに間違いがあると思います。私の計算によると、その方法は次のとおりです。

J(α)=m=0k1(α(1α)m1k)2+m=kα2(1α)2m=m=0k1(α2(1α)2m2kα(1α)m+1k2)+α2(1α)2km=0(1α)2m=α21(1α)2k1(1α)22αk1(1α)k1(1α)+1k+α2(1α)2k1(1α)2

Mathematicaに従って単純化すると:

J(α)=α2α+2(1α)k1k

MATLABで次のコードを使用すると、異なるものの同等のものが生成されます。

syms a k;

expr1 = (a ^ 2) * ((1 - ((1 - a) ^ (2 * k))) / (1 - ((1 - a) ^ 2)));
expr2 = ((2 * a) / k) * ((1 - ((1 - a) ^ (k))) / (1 - (1 - a)));
expr3 = (1 / k);
expr4 = ((a ^ 2) * ((1 - a) ^ (2 * k))) / (1 - ((1 - a) ^ (2)));

simpExpr = simplify(expr1 - expr2 + expr3 + expr4);

J(α)=2α2k2(1α)k+1k

とにかく、それらの機能には最小限のものがあります。


それでは、FIRフィルターのサポート(長さ)の近似のみを実際に考慮していると仮定しましょう。その場合、最適化の問題は次のようになります

J2(α)=m=0k1(α(1α)m1k)2

プロットの種々の値に対する対以下プロットとテーブルの日付をもたらします。J2(α)Kα

以下のための = 8 = 0.1533333 ための = 16 = 0.08 について = 24 = 0.0533333 ための = 32 = 0.04 の場合 = 40 = 0.0333333 について = 48 = 0.0266667 について = 56 = 0.0233333 について = 64。 Kαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin = 0.02
の場合 = 72 = 0.0166667 Kαmin

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

赤い破線は、緑の線はで、を最小化するの値(から選択)。1/KαminαJ2(α)alpha=[0:.01:1]/3;


1
まったく同じものを投稿するつもりだった=)
フォノン

@フォノン:気軽に続けてください!その目的のためにコミュニティwikiとしてマークしました。
ピーターK。

微分wrtは無限数の項(すなわち多項式ではない)を持つ系列であり、に設定して解く必要があるため、何らかの注意(または場合によっては近似)が必要になります。0 αα0α
ディリップサルワテ

誰かが私の作業を確認および/または修正してください。:-)
ピーターK。

@DilipSarwate、最良の近似は何でしょうか?ありがとう。
ロイ

3

実験的試験に基づくk(2〜100)の範囲内のベストフィット(和二乗誤差)の関係が得られるalfa = 1/k^0.865 ことkMovAvgフィルタのサンプル数を


関係を抽出するために、インタラクティブなExcelシートを使用しました: drive.google.com/open
id=

3

この古い質問につまずいたので、解決策を共有したいと思います。他の回答で述べたように、分析的な解決策はありませんが、最小化する関数はうまく動作し、最適値は数回のニュートン反復で簡単に見つけることができます。結果の最適性を確認するための式もあります。α

長さ FIR移動平均フィルターのインパルス応答は、次の式で与えられます。N

(1)hFIR[n]=1N(u[n]u[nN])

ここで、は単位ステップ関数です。一次IIRフィルターu[n]

(2)y[n]=αx[n]+(1α)y[n1]

インパルス応答を持っています

(3)hIIR[n]=α(1α)nu[n]

今の目標は、二乗誤差を最小化することです

(4)ϵ=n=0(hFIR[n]hIIR[n])2

使用してと、エラーは次のように書くことができます。(1)(3)

ϵ(α)=n=0N1(α(1α)n1N)2+n=Nα2(1α)2n=α2n=0(1α)2n2αNn=0N1(1α)n+n=0N11N2=α21(1α)22αN1(1α)N1(1α)+1N(5)=α2α2N(1(1α)N)+1N,0<α<2

この表現は、この回答で与えられた表現と非常に似ていますが、同一ではありません。上の制限における確認無限和が収束することになり、それはによって与えられたIIRフィルタの安定条件と同一である。α(5)(2)

微分をゼロに設定すると、(5)

(6)(1α)N1(2α)2=1

なお、最適間隔でなければならないためのより大きな値交流インパルス応答をもたらす移動平均フィルタFIR一定のインパルスrepsonseを近似することができません。α(0,1]α(3)

平方根を取り、を導入すると、(6)β=1α

(7)β(N+1)/2+β(N1)/21=0

この方程式はに対して解析的に解くことができませんが、に対して解くことができます:NβN

(8)N=2log(1+β)log(β),β0

式を使用して、数値解を再確認できます。指定された値を返す必要があります。7 N(8)(7)N

式は、数行の(Matlab / Octave)コードで解決できます。(7)

N = 50; FIR移動平均フィルターの望ましいフィルター長の%

if(N == 1)%自明な場合の反復なし
    b = 0;
他に
    %ニュートン反復
    b = 1; 開始値の割合
    Nit = 7;
    n =(N + 1)/ 2;
    k = 1:Nitの場合、
        f = b ^ n + b ^(n-1)-1;
        fp = n * b ^(n-1)+(n-1)* b ^(n-2);
        b = b-f / fp;
    終わり

    チェック結果の割合
    N0 = -2 * log(1 + b)/ log(b)+ 1%はNと等しくなければなりません
終わり

a = 1-b;

以下は、フィルター長範囲に対する最適値を含む表です。NαN

   Nアルファ

   1 1.0000e + 00
   2 5.3443e-01
   3 3.8197e-01
   4 2.9839e-01
   5 2.4512e-01
   6 2.0809e-01
   7 1.8083e-01
   8 1.5990e-01
   9 1.4333e-01
  10 1.2987e-01
  20 6.7023e-02
  30 4.5175e-02
  40 3.4071e-02
  50 2.7349e-02
  60 2.2842e-02
  70 1.9611e-02
  80 1.7180e-02
  90 1.5286e-02
 100 1.3768e-02
 200 6.9076e-03 
 300 4.6103e-03
 400 3.4597e-03
 500 2.7688e-03
 600 2.3078e-03
 700 1.9785e-03
 800 1.7314e-03
 900 1.5391e-03
1000 1.3853e-03
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.