この古い質問につまずいたので、解決策を共有したいと思います。他の回答で述べたように、分析的な解決策はありませんが、最小化する関数はうまく動作し、最適値は数回のニュートン反復で簡単に見つけることができます。結果の最適性を確認するための式もあります。α
長さ FIR移動平均フィルターのインパルス応答は、次の式で与えられます。N
hFIR[n]=1N(u[n]−u[n−N])(1)
ここで、は単位ステップ関数です。一次IIRフィルターu[n]
y[n]=αx[n]+(1−α)y[n−1](2)
インパルス応答を持っています
hIIR[n]=α(1−α)nu[n](3)
今の目標は、二乗誤差を最小化することです
ϵ=∑n=0∞(hFIR[n]−hIIR[n])2(4)
使用してと、エラーは次のように書くことができます。(1)(3)
ϵ(α)=∑n=0N−1(α(1−α)n−1N)2+∑n=N∞α2(1−α)2n=α2∑n=0∞(1−α)2n−2αN∑n=0N−1(1−α)n+∑n=0N−11N2=α21−(1−α)2−2αN1−(1−α)N1−(1−α)+1N=α2−α−2N(1−(1−α)N)+1N,0<α<2(5)
この表現は、この回答で与えられた表現と非常に似ていますが、同一ではありません。上の制限における確認無限和が収束することになり、それはによって与えられたIIRフィルタの安定条件と同一である。α(5)(2)
微分をゼロに設定すると、(5)
(1−α)N−1(2−α)2=1(6)
なお、最適間隔でなければならないためのより大きな値交流インパルス応答をもたらす移動平均フィルタFIR一定のインパルスrepsonseを近似することができません。α(0,1]α(3)
平方根を取り、を導入すると、(6)β=1−α
β(N+1)/2+β(N−1)/2−1=0(7)
この方程式はに対して解析的に解くことができませんが、に対して解くことができます:NβN
N=−2log(1+β)log(β),β≠0(8)
式を使用して、数値解を再確認できます。指定された値を返す必要があります。(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