Saya menemukan pertanyaan lama ini dan saya ingin membagikan solusi saya. Seperti disebutkan dalam jawaban lain, tidak ada solusi analitis, tetapi fungsi yang diminimalisasi berperilaku baik dan nilai optimal dari dapat ditemukan dengan mudah dengan beberapa iterasi Newton. Ada juga formula untuk memeriksa optimalitas hasil.α
Respon impuls dari panjang FIR moving average filter diberikan olehN
hFIR[n]=1N(u[n]−u[n−N])(1)
di mana adalah fungsi unit step. Filter IIR urutan pertamau[n]
y[n]=αx[n]+(1−α)y[n−1](2)
memiliki respons impuls
hIIR[n]=α(1−α)nu[n](3)
Tujuannya sekarang adalah untuk meminimalkan kesalahan kuadrat
ϵ=∑n=0∞(hFIR[n]−hIIR[n])2(4)
Menggunakan dan , kesalahan dapat ditulis sebagai(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)
Ungkapan ini sangat mirip dengan yang diberikan dalam jawaban ini , tetapi tidak identik. Pembatasan pada dalam memastikan bahwa jumlah tak terbatas bertemu, dan identik dengan kondisi stabilitas untuk filter IIR yang diberikan oleh .α(5)(2)
Mengatur turunan dari ke nol hasil dalam(5)
(1−α)N−1(2−α)2=1(6)
Perhatikan bahwa optimal harus dalam interval karena nilai menghasilkan respons impuls bolak-balik , yang tidak dapat mendekati perkiraan impuls konstan filter rata-rata bergerak FIR.( 0 , 1 ]α(0,1]α(3)
Mengambil akar kuadrat dari dan memperkenalkan , kami dapatkan(6)β=1−α
β(N+1)/2+β(N−1)/2−1=0(7)
Persamaan ini tidak dapat diselesaikan secara analitis untuk , tetapi dapat diselesaikan untuk :NβN
N=−2log(1+β)log(β),β≠0(8)
Persamaan dapat digunakan untuk memeriksa ulang solusi numerik ; harus mengembalikan nilai ditentukan .(8)N(7)N
Persamaan dapat diselesaikan dengan beberapa baris kode (Matlab / Oktaf):(7)
N = 50; % panjang filter yang diinginkan dari filter rata-rata bergerak FIR
if (N == 1)% tidak ada iterasi untuk kasus sepele
b = 0;
lain
% Iterasi Newton
b = 1; % nilai awal
Nit = 7;
n = (N + 1) / 2;
untuk k = 1: Nit,
f = b ^ n + b ^ (n-1) -1;
fp = n * b ^ (n-1) + (n-1) * b ^ (n-2);
b = b - f / fp;
akhir
% hasil cek
N0 = -2 * log (1 + b) / log (b) + 1% harus sama dengan N
akhir
a = 1 - b;
Di bawah ini adalah tabel dengan nilai optimal untuk rentang panjang filter :NαN
N alpha
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