Xấp xỉ IIR (Bộ lọc AR) tốt nhất cho Bộ lọc trung bình di chuyển (Bộ lọc FIR) là gì?


24

Giả sử Bộ lọc IIR thứ tự đầu tiên sau đây:

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

Làm cách nào tôi có thể chọn tham số st IIR gần đúng nhất có thể với FIR, đó là giá trị trung bình số học của các mẫu cuối cùng :αk

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

Trong đó , có nghĩa là đầu vào cho IIR có thể dài hơn và tôi muốn có xấp xỉ tốt nhất về giá trị trung bình của đầu vào cuối cùng .n[k,)kk

Tôi biết IIR có đáp ứng xung vô hạn, do đó tôi đang tìm kiếm xấp xỉ tốt nhất. Tôi rất vui vì giải pháp phân tích cho dù đó là hàm chi phí hay .L2L1

Làm thế nào có thể giải quyết vấn đề tối ưu hóa này chỉ với IIR bậc 1.

Cảm ơn.


Nó có phải theo ] không? y[n]=αx[n]+(1α)y[n1]
Phonon

1
Điều này chắc chắn sẽ trở thành một xấp xỉ rất kém. Bạn không đủ khả năng chi trả nhiều hơn IIR đơn hàng đầu tiên?
leftaroundabout

Bạn có thể muốn chỉnh sửa câu hỏi của mình để không sử dụng có nghĩa là hai điều khác nhau, ví dụ: phương trình được hiển thị thứ hai có thể đọc và bạn có thể muốn nói chính xác tiêu chí của bạn là "càng tốt càng tốt", ví dụ: bạn có muốn càng nhỏ càng tốt cho tất cả , hoặc càng nhỏ càng tốt cho tất cả . 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

@Phonon, vâng, nó phải là một IIR đặt hàng đầu tiên. Các tiêu chí rất đơn giản, kết quả phải càng gần với giá trị trung bình của đầu vào cuối cùng của hệ thống trong đó . Tôi sẽ rất vui khi thấy kết quả cho cả hai trường hợp. Mặc dù tôi giả sử giải pháp phân tích chỉ khả thi đối với . y[n]kn[k,thông tin]|y[n]-z[n]|2
Royi

Câu trả lời:


10

Không có giải pháp phân tích nào cho là một vô hướng (tôi nghĩ). Đây là tập lệnh cung cấp cho bạn cho một cho . Nếu bạn cần nó trực tuyến, bạn có thể xây dựng một LUT. Kịch bản tìm giải pháp giảm thiểuααK

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

Trong đó là đáp ứng tần số FIR và là đáp ứng tần số IIR.H1H2

Bạn đã không chỉ định bất kỳ phạm vi nào cho K. Nhưng tôi chỉ muốn làm rõ rằng hệ thống sau tương đương với bộ lọc trung bình của bạn và có cùng độ phức tạp tính toán và thứ tự IIR đầu tiên của bạn!

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 Nó là tương đối thẳng về phía trước. Hai biểu thức cho IIR và FIR được cắm vào tích phân. Chìa khóa để tìm biểu thức thay thế cho bộ lọc FIR là nhận ra tiến trình / chuỗi hình học. Bạn tìm thấy tất cả các chi tiết ở đây: en.wikipedia.org/wiki/Geometric_proTHERion#Geometric_series . Trong tập lệnh, hàm J tính toán biểu thức dưới dấu tích phân.
niaren

@niaren Tôi biết đây là một bài viết cũ nên nếu bạn có thể nhớ: chức năng của bạn 'f' bắt nguồn như thế nào? Tôi đã mã hóa một thứ tương tự nhưng sử dụng các hàm truyền phức tạp cho FIR (H1) và IIR (H2) và sau đó thực hiện tổng (abs (H1 - H2) ** 2). Tôi đã so sánh số tiền này với tổng của bạn (fj), nhưng nhận được kết quả đầu ra khác nhau. Nghĩ rằng tôi sẽ hỏi trước khi cày qua toán.
Dom

@Dom Đó là một thời gian dài trước đây và tôi thực sự không thể nhớ. Tôi đoán tôi vừa trải qua quá trình tập luyện . Tôi không thể nhớ làm thế nào tôi xác minh biểu thức. Tôi không ngại học lại môn toán ...[H1(jω)H2(jω)][H1(jω)H2(jω)]
niaren

@niaren Xin chào, tôi đã cố gắng rút ra biểu hiện của bạn nhưng bị kẹt khi cộng các phân số phức tạp. Tôi đã mắc lỗi trong mã của mình ... hàm của bạn dường như cho kết quả tỷ lệ thuận với tổng (abs (H1 - H2) ** 2), cho biết nó là chính xác.
Dom

16

Có một cuộc thảo luận thú vị về vấn đề này trong Xử lý tín hiệu nhúng với Kiến trúc tín hiệu vi mô , khoảng giữa các trang 63 và 69 . Trên trang 63 , nó bao gồm một dẫn xuất của bộ lọc trung bình di chuyển đệ quy chính xác (mà niaren đã đưa ra trong câu trả lời của mình ),

H(z)=1N1zN1z1.

Để thuận tiện cho các cuộc thảo luận sau, nó tương ứng với phương trình khác biệt sau:

yn=yn1+1N(xnxnN).

Phép tính gần đúng đặt bộ lọc vào dạng bạn đã chỉ định yêu cầu giả sử rằng , bởi vì (và tôi trích dẫn từ trang 68 ) " y n - 1 là trung bình của các mẫu x n ". Phép tính gần đúng đó cho phép chúng ta đơn giản hóa phương trình sai phân trước như sau:xnNyn1yn1xn

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

Đặt , chúng tôi đến mẫu ban đầu của bạn,yn=αxn+(1-α)yn-1, cho thấy hệ số bạn muốn (đối với xấp xỉ này) chính xác là1α=1Nyn=αxn+(1α)yn1 (trong đóNlà số lượng mẫu). 1NN

Đây có phải là xấp xỉ "tốt nhất" trong một số khía cạnh? Nó chắc chắn thanh lịch. Đây là cách đáp ứng cường độ so sánh [ở 44,1kHz] cho N = 3 và khi N tăng lên 10 (xấp xỉ màu xanh lam):

N = 3 N = [3,10]


Như câu trả lời của Peter cho thấy, việc xấp xỉ bộ lọc FIR với bộ lọc đệ quy có thể có vấn đề theo một tiêu chuẩn bình phương tối thiểu. Một cuộc thảo luận rộng rãi về cách giải quyết vấn đề này nói chung có thể được tìm thấy trong luận án của JOS, Kỹ thuật thiết kế bộ lọc kỹ thuật số và nhận dạng hệ thống với ứng dụng cho đàn violin . Anh ta ủng hộ việc sử dụng Hankel Norm, nhưng trong trường hợp phản ứng pha không thành vấn đề, anh ta cũng đề cập đến Phương pháp của Kopec, có thể hoạt động tốt trong trường hợp này (và sử dụng định mức ). Tổng quan rộng về các kỹ thuật trong luận án có thể được tìm thấy ở đây . Họ có thể mang lại xấp xỉ thú vị khác.L2


Đây là một cách "Thanh lịch" để nói điều gì đó về bộ nhớ của Bộ lọc IIR thứ tự đầu tiên. Bộ nhớ của nó tương đương với . Tôi sẽ xem xét các phương pháp khác mà bạn đề cập. Cảm ơn. 1α
Royi

Bạn có thể giải thích bằng trực giác tại sao theo định mức LS ( ) không có giải pháp? L2
Royi

Tôi không chắc có giải pháp LS trong trường hợp này hay không, tôi chỉ biết rằng nó có xu hướng có vấn đề về sự hội tụ cho vấn đề "xấp xỉ FIR dựa trên IIR". Tôi sẽ cập nhật thêm thông tin khi có cơ hội.
datageist

Vâng, nếu hàm chi phí Peter đề xuất (Cái đầu tiên) là đúng thì có một giải pháp. Ít nhất là theo tính toán của tôi.
Royi

Tuyệt quá. Tôi tò mò muốn xem cách tiếp cận "heuristic" so sánh với một cái gì đó kinh điển hơn. 1/N
datageist

16

OK, chúng ta hãy cố gắng rút ra điều tốt nhất: sao cho hệ số củax[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

Xấp xỉ trung bình vuông tốt nhất sẽ hạn chế tối đa: vì các hệ số FIR bằng 0 chom>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
m>k1

Bước tiếp theo là lấy đạo hàm và bằng không.


Nhìn vào một biểu đồ của dẫn xuất cho K = 1000α từ 0 đến 1, có vẻ như vấn đề (như tôi đã thiết lập) là không hợp lý, bởi vì câu trả lời tốt nhất là α = 0 .JK=1000αα=0

nhập mô tả hình ảnh ở đây


Tôi nghĩ rằng có một sai lầm ở đây. Cách nó phải theo tính toán của tôi là:

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

Đơn giản hóa nó theo năng suất Mathicala:

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

Sử dụng mã sau đây trên MATLAB mang lại một cái gì đó tương đương mặc dù khác nhau:

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

Nhưng dù sao, những chức năng đó có tối thiểu.


Vì vậy, hãy giả sử rằng chúng tôi thực sự chỉ quan tâm đến sự gần đúng về mức hỗ trợ (độ dài) của bộ lọc FIR. Trong trường hợp đó, bài toán tối ưu hóa chỉ là:

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

Vẽ biểu đồ cho các giá trị khác nhau của K so với kết quả α trong ngày trong các ô và bảng bên dưới.J2(α)Kα

Với = 8. α m i n = 0.1533333 Với K = 16. α m i n = 0.08 Với K = 24. α m i n = 0,0533333 Với K = 32. α m i n = 0,04 Với K = 40. α m i n = 0,0333333 Với K = 48. α m i n = 0,0266667 VớiKαmin
Kαmin
Kαmin
Kαmin
Kαmin
Kαmin
= 56. α m i n = 0,0233333 Với K = 64. α m i n = 0,02 Với K = 72. α m i n = 0,0166667 Kαmin
Kαmin
Kαmin

nhập mô tả hình ảnh ở đây

Các đường đứt nét màu đỏ là và các đường màu xanh lá cây là α m i n , giá trị của α làm giảm thiểu J 2 ( α ) (được chọn từ a l p h a = [ 0 : .01 : 1 ] / 3 ; ) .1/KαminαJ2(α)alpha=[0:.01:1]/3;


1
Chỉ là sẽ đăng chính xác điều tương tự =)
Phonon

@Phonon: Hãy tiếp tục! Tôi đã đánh dấu nó là wiki cộng đồng cho mục đích đó.
Peter K.

α0α

Ai đó có thể vui lòng kiểm tra và / hoặc sửa chữa công việc của tôi? :-)
Peter K.

@DilipSarwate, gần đúng nhất là gì? Cảm ơn.
Royi

3

Dựa trên các thử nghiệm thử nghiệm ktrong phạm vi (2 đến 100), mức phù hợp nhất (lỗi bình phương tổng) cho thấy mối quan hệ alfa = 1/k^0.865ksố lượng mẫu cho bộ lọc MovAvg


Tôi đã sử dụng một bảng excel tương tác để trích xuất mối quan hệ: drive.google.com/open?id=0B48gEYiKwYegY3NqQThMTTZ1OG8
chiliwili69

3

α

N

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

u[n]

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

có phản ứng thúc đẩy

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

Mục tiêu bây giờ là giảm thiểu lỗi bình phương

(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)

(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; % chiều dài bộ lọc mong muốn của bộ lọc trung bình di chuyển FIR

if (N == 1)% không lặp lại cho trường hợp tầm thường
    b = 0;
khác
    Lặp lại% Newton
    b = 1; % giá trị bắt đầu
    Nit = 7;
    n = (N + 1) / 2;
    cho k = 1: Nit,
        f = b ^ n + b ^ (n-1) -1;
        fp = n * b ^ (n-1) + (n-1) * b ^ (n-2);
        b = b - f / fp;
    kết thúc

    % kiểm tra kết quả
    N0 = -2 * log (1 + b) / log (b) + 1% phải bằng N
kết thúc

a = 1 - b;

α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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.