Hareketli Ortalama Filtreye (FIR Filtresi) En İyi Birinci Sıra IIR (AR Filtre) Yaklaşımı Nedir?


24

Aşağıdaki birinci dereceden IIR Filtresini alınız:

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

Nasıl parametreyi seçebilir st IIR mümkün olduğunca iyi geçen aritmetik ortalamasıdır FIR olarak yaklaşır örneklerinde:αk

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

Burada , IIR için girdi, daha uzun olabilir ve yine de, son k girdilerinin ortalamasının en iyi şekilde tahmin edilmesini istiyorum .n[k,)kk

IIR'nin sonsuz dürtü yanıtı olduğunu biliyorum, bu yüzden en iyi yaklaşımı arıyorum. Analitik çözüm için L2 veya L1 maliyet fonksiyonu için olsun istersem mutlu olurum .

Bu optimizasyon probleminin sadece 1. dereceden IIR verildiğinde nasıl çözülebileceği.

Teşekkürler.


Takip etmek zorunda mı kesinlikle]? y[n]=αx[n]+(1α)y[n1]
Phonon

1
Bu çok zayıf bir yaklaşım haline gelmek zorunda . Birinci dereceden bir IIR'den başka bir şey alamaz mısınız?
leftaroundabout

İki farklı anlam ifade etmek için kullanmamanız için sorunuzu düzenlemek isteyebilirsiniz , örneğin görüntülenen ikinci denklem , ve tam olarak sizin kriter ne demek isteyebilirsiniz örneğin "mümkün olduğunca iyi şekilde" istiyorsun tüm mümkün olduğu kadar küçük olması , ya da tüm mümkün olduğu kadar küçük olması . z [ n ] = 1y[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
Dilip Sarwate

@Fonon, evet, bu bir birinci sıra IIR olmalı. Kriterler basittir, sonucu , sistemdeki en son girişinin ortalamasına . Her iki durumda da sonucu görmekten mutlu olurum. Analitik çözümün yalnızca için uygun olduğunu varsaydığım halde . k , n [ k , inf ] | y [ n ] - z [ n ] | 2y[n]kn[k,inf]|y[n]z[n]|2
Royi

Yanıtlar:


10

skaler olması için analitik bir çözüm yoktur (bence). Burada belirli bir için veren bir betik . Çevrimiçi ihtiyacınız varsa, bir LUT oluşturabilirsiniz. Betik en aza indiren çözümü bulurα KααK

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

burada FIR frekans tepkisi ve IIR frekans tepkisidir.H 2H1H2

K için herhangi bir aralık belirtmediniz. Ancak, aşağıdaki sistemin ortalama filtrenizle aynı olduğunu ve aynı hesaplama karmaşıklığına ve birinci dereceden IIR'nize sahip olduğunu açıkça belirtmek istiyorum!

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 Doğrudan görecelidir. IIR ve FIR için iki ifade integral içine bağlanır. FIR filtresi için alternatif ifadeyi bulmanın anahtarı geometrik ilerlemeyi / seriyi tanımaktır. Tüm detayları burada bulabilirsiniz: en.wikipedia.org/wiki/Geometric_progression#Geometric_series . Kodda, J işlevi, integral işaretinin altındaki ifadeyi hesaplar.
niaren

@ niaren Bunun eski bir yazı olduğunu biliyorum, eğer hatırlayabiliyorsanız: 'f' işleviniz nasıl türetilir? Benzer bir şey kodladım ama FIR (H1) ve IIR (H2) için karmaşık transfer fonksiyonlarını kullanıp sonra toplamı (abs (H1 - H2) ** 2) yapıyorum. Bunu toplamınızla (fj) karşılaştırdım, ancak farklı sonuç çıktıları elde ettim. Matematikte çiftçilik yapmadan önce soracağımı düşündüm.
Dom,

@Dom Bu çok uzun zaman önceydi ve gerçekten hatırlayamıyorum. Sanırım sadece . İfadeyi nasıl doğruladığımı hatırlayamıyorum. Yine matematiğin içinden [H1(jω)H2(jω)][H1(jω)H2(jω)]
geçmeyi umursamıyorum

@ niaren Merhaba, ifadenizi türetmeye çalıştım ancak karmaşık kesirleri eklerken sıkışıp kaldım. Kodumda bir hata yaptım ... fonksiyonunuz, doğru olduğunu gösteren toplamla (abs (H1 - H2) ** 2) orantılı sonuçlar veriyor gibi görünüyor.
Dom,

16

Bu sorunun , Mikro Sinyal Mimarisi ile Gömülü Sinyal İşleme'de , kabaca 63 ve 69. sayfalar arasında güzel bir tartışması var . On sayfa 63 , bu (ki niaren verdi hareketli ortalama filtresi kesin özyinelemeli bir türetme söz onun cevabı ,)

H(z)=1N1zN1z1.

Aşağıdaki tartışmaya göre kolaylık sağlamak için, aşağıdaki fark denklemine karşılık gelir:

yn=yn1+1N(xnxnN).

Belirtilen forma filtre koyar yaklaşım varsayarak gerektirir , (ve alıntı için pg. 68 ) " ortalamasıdır örnekleri ". Bu yaklaşım, önceki fark denklemini aşağıdaki gibi basitleştirmemizi sağlar: y n - 1 x nxnNyn1yn1xn

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

Ayar , böylece orijinal formuna varmak katsayısı, istediğiniz gösterir, ( Bu yaklaşıma göre) tam olarak (burada örnek sayısıdır). Y, n=αx, n+(1-α)Y, n-11α=1Nyn=αxn+(1α)yn1 N1NN

Bu yaklaşım bazı açılardan "en iyisi" mi? Kesinlikle zarif. Büyüklük tepkisinin N = 3 için [44.1kHz'de] ve N'nin 10'a yükselmesi (mavi renkte yaklaştırma) şöyle:

N = 3 N = [3,10]


As Peter cevabı anlaşılacağı, bir özyinelemeli filtreli bir FIR filtresi yaklaşan bir en küçük kareler norm altında sorunlu olabilir. Genel olarak bu sorunun nasıl çözüleceğine dair kapsamlı bir tartışma JOS'un tezi, Dijital Filtre Tasarımı Teknikleri ve Keman Uygulaması ile Sistem Tanımlama bölümünde bulunabilir . Hankel Normu'nun kullanımını savunuyor, ancak faz cevabının önemli olmadığı durumlarda, bu durumda iyi çalışabilecek Kopec'in Yöntemini de kapsıyor (ve bir normu kullanıyor). Tezdeki tekniklere genel bir bakış burada bulunabilir . Başka ilginç yaklaşımlar verebilirler.L2


Bu, birinci sınıf IIR Filtresinin hafızası hakkında bir şeyler söylemenin "Zarif" bir yoludur. Belleği eşdeğerdir . Bahsettiğiniz diğer yöntemleri inceleyeceğim. Teşekkürler. 1α
Royi

Neden LS normu altında ( ) bir çözüm olmadığını sezgisel olarak açıklayabilir misiniz ? L2
Royi

Bu durumda bir LS çözümü olup olmadığından emin değilim, ancak genel "IIR tabanlı FIR yaklaşımı" problemi için yakınsama sorunları olduğunu düşünüyorum. Şansım varken daha fazla bilgiyi güncelleyeceğim.
datageist

Şey, Peter'ın önerdiği maliyet işlevi (ilk) doğru ise bir çözüm var. En azından hesaplarıma göre.
Royi,

Harika. "Sezgisel" yaklaşımının daha kanonik bir şeyle nasıl karşılaştırıldığını görmek merak ediyorum . 1/N
datageist

16

Tamam, en iyiyi elde etmeye çalışalım: çok bu katsayısı olduğu . x[n-m]α(1-α

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

En iyi ortalama kare yaklaşımı en aza indirecektir: m>k-1

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
Çünkü FIR katsayıları için sıfırdır .m>k1

Bir sonraki adım türev almak ve sıfıra eşitlemektir.


ve için türetilmiş 0'dan 1'e bir grafiğine baktığımda, en iyi cevap olduğu için (kurulumunu yaptığım gibi) sorun görünmüyor .Jα α = 0K=1000αα=0

görüntü tanımını buraya girin


Burada bir yanlışlık olduğunu düşünüyorum. Hesaplarıma göre olması gerektiği gibi:

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 verimlerine göre sadeleştirmek :

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

MATLAB'da aşağıdaki kodu kullanmak, farklı olsa da eşdeğer bir şey sağlar:

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

Her neyse, bu işlevler minimumda.


Öyleyse, gerçekten de yalnızca FIR filtresinin desteği (uzunluğu) üzerindeki yaklaşıma önem verdiğimizi varsayalım. Bu durumda, optimizasyon problemi şu :

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

Plotlama çeşitli değerleri için karşı altında araziler ve tabloda tarihi sonuçları.KJ2(α)Kα

İçin = 8 0,1533333 = için = 16 0.08 = için = 24. 0,0533333 = için = 32 = 0.04 için = 40. 0,0333333 = için = 48. 0,0266667 = için = 56. 0.0233333 = için = 64. α m i n K α m i n K α m i n K α m i n K α m i n K α m i n K a m i n K a n m a n K a m i n K a m a n a n a k i a K iKαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin 0,02 =
için = 72. 0.0166667 = Kαmin

görüntü tanımını buraya girin

Kırmızı kesikli çizgiler edilir ve yeşil hatları , değeri bu en aza indirir (seçilen ).α m ı n α J 2 ( α ) bir l p h bir = [ 0 : .01 : 1 ] / 3 ;1/KαminαJ2(α)alpha=[0:.01:1]/3;


1
Sadece aynı şeyi gönderecekti =)
Phonon

@Fonon: devam etmek için çekinmeyin! Bu amaçla topluluk wiki olarak işaretledim.
Peter K.

Wrt türevi , eşit ve sonra için çözmeniz gereken sınırsız sayıda terim (yani bir polinom değil) içeren bir seridir ve bu nedenle bazı özen (veya muhtemelen yaklaşık olarak) gerekli olacaktır. 0 αα0α
Dilip Sarwate

Birisi lütfen çalışmamı kontrol edebilir ve / veya düzeltebilir mi? :-)
Peter K.

@DilipSarwate, En iyi yaklaşım ne olurdu? Teşekkürler.
Royi

3

k2 - 100 aralığındaki deneysel testlere dayanarak en iyi uyum (toplam kare hatası) MovAvg filtresi için numune sayısı alfa = 1/k^0.865 olma ilişkisini verirk



3

α

uzunluğunun darbe tepkisi,N

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

u[n]

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

dürtü yanıtı var

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

Amaç şimdi kare hatasını en aza indirmektir.

(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

α(5)(2)

türevinin ayarlanması(5)

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

α(0,1]α(3)

(6)β=1α

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

βN

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

(8)(7)N

(7)

N = 50; FIR hareketli ortalama filtrenin% istenen filtre uzunluğu

eğer (N == 1)% önemsiz vaka için yineleme olmaz
    b = 0;
Başka
    % Newton yineleme
    b = 1; % başlangıç ​​değeri
    Nit = 7;
    n = (N + 1) / 2;
    k = 1 için: Nit,
        f = b ^ n + b ^ (n-1) -1;
        fp = n * b ^ (n-1) + (n-1) * b ^ (n-2);
        b = b - f / fp;
    son

    % Sonucu kontrol et
    N0 = -2 * log (1 + b) / log (b) + 1% N değerine eşit olmalıdır
son

a = 1 - b;

αN

   N alfa

   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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.