คำสั่งซื้อแรกที่ดีที่สุดของ IIR (ตัวกรอง AR) ใช้กับตัวกรองค่าเฉลี่ยเคลื่อนที่ (ตัวกรอง FIR) คืออะไร


24

สมมติตัวกรอง IIR อันดับแรกดังต่อไปนี้:

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

ฉันจะเลือกพารามิเตอร์α st ที่ IIR ประมาณเท่าที่จะทำได้ FIR ซึ่งเป็นค่าเฉลี่ยเลขคณิตของkตัวอย่างล่าสุดได้อย่างไร:

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

โดยที่n[k,)หมายถึงอินพุตสำหรับ IIR อาจยาวกว่าkและยังต้องการให้การประมาณค่าเฉลี่ยที่ดีที่สุดของอินพุตสุดท้ายk

ฉันรู้ว่า IIR มีการตอบสนองต่อแรงกระตุ้นอย่างไม่มีที่สิ้นสุดดังนั้นฉันจึงมองหาการประมาณค่าที่ดีที่สุด ฉันยินดีที่จะใช้โซลูชันการวิเคราะห์ไม่ว่าจะเป็นฟังก์ชั่นการคิดต้นทุนL2หรือL1

ปัญหาการปรับให้เหมาะสมนี้สามารถแก้ไขได้อย่างไรเมื่อได้รับ IIR อันดับที่หนึ่งเท่านั้น

ขอบคุณ


ต้องติดตามy[n]=αx[n]+(1α)y[n1]อย่างแม่นยำหรือไม่?
Phonon

1
สิ่งนี้ถูกคาดหมายว่าจะเป็นการประมาณที่แย่มาก คุณไม่สามารถซื้ออะไรได้มากกว่า IIR อันดับหนึ่งใช่ไหม
leftaroundabout

คุณอาจต้องการแก้ไขคำถามของคุณเพื่อที่คุณจะไม่ใช้y[n]เพื่อหมายถึงสองสิ่งที่แตกต่างกันเช่นสมการที่แสดงที่สองสามารถอ่าน, และคุณอาจต้องการบอกว่า "เกณฑ์ดี" เท่าที่จะเป็นไปได้ "เช่นคุณต้องการ| y[n]-z[n]| จะเล็กที่สุดสำหรับทุกnหรือ| y[n]-z[n]| 2จะมีขนาดเล็กเป็นไปได้สำหรับทุกn z[n]=1kx[n]++1kx[nk+1]|y[n]z[n]|n|y[n]z[n]|2n
Dilip Sarwate

y[n]k| y [ n ] - z [ n ] | 2n[k,inf]|y[n]z[n]|2

คำตอบ:


10

ไม่มีวิธีวิเคราะห์สำหรับเป็นแบบสเกลาร์ (ฉันคิดว่า) นี่คือสคริปต์ที่ให้คุณสำหรับระบุ หากคุณต้องการแบบออนไลน์คุณสามารถสร้าง LUT ได้ สคริปต์ค้นหาวิธีแก้ปัญหาที่ย่อเล็กสุดอัลฟ่าKααK

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

โดยที่คือการตอบสนองความถี่ FIR และคือการตอบสนองความถี่ IIRH 2H1H2

คุณไม่ได้ระบุช่วงใด ๆ สำหรับเค แต่ฉันต้องการทำให้ชัดเจนว่าระบบต่อไปนี้เทียบเท่ากับตัวกรองเฉลี่ยของคุณและมีความซับซ้อนในการคำนวณเหมือนกันและ 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 นั้นเสียบเข้ากับอินทิกรัล กุญแจสำคัญในการค้นหาการแสดงออกทางเลือกสำหรับตัวกรอง FIR คือการรับรู้ความก้าวหน้าทางเรขาคณิต / ซีรีส์ คุณจะพบทุกรายละเอียดที่นี่: en.wikipedia.org/wiki/Geometric_progression#Geometric_series ในสคริปต์ฟังก์ชัน J จะคำนวณนิพจน์ภายใต้เครื่องหมายอินทิกรัล
niaren

@ Niaren ฉันรู้ว่านี่เป็นโพสต์เก่าดังนั้นหากคุณจำได้: ฟังก์ชั่นของคุณมาจากไหน 'f' ฉันเขียนโค้ดที่คล้ายกัน แต่ใช้ฟังก์ชั่นการถ่ายโอนที่ซับซ้อนสำหรับ FIR (H1) และ IIR (H2) จากนั้นทำผลรวม (abs (H1 - H2) ** 2) ฉันได้เปรียบเทียบสิ่งนี้กับผลรวมของคุณ (fj) แต่ได้ผลลัพธ์ที่ต่างออกไป คิดว่าฉันจะถามก่อนที่จะไถคณิตศาสตร์
Dom

@Dom นั่นนานแล้วและฉันจำไม่ได้จริงๆ ผมคิดว่าผมเพิ่งไปผ่านกระบวนการของการทำงานออกomega)] ฉันจำไม่ได้ว่าฉันยืนยันการแสดงออกอย่างไร ฉันไม่คิดจะผ่านคณิตศาสตร์อีกครั้ง ...[H1(jω)H2(jω)][H1(jω)H2(jω)]
niaren

@ Niaren สวัสดีฉันพยายามรับนิพจน์ของคุณ แต่ติดเมื่อรวมเศษส่วนที่ซับซ้อน ฉันทำผิดพลาดในรหัสของฉัน ... ฟังก์ชั่นของคุณดูเหมือนจะให้ผลลัพธ์ที่เป็นสัดส่วนกับผลรวม (abs (H1 - H2) ** 2) แสดงว่ามันถูกต้อง
Dom

16

มีการอภิปรายที่ดีของปัญหานี้ในการประมวลผลสัญญาณฝังตัวอยู่กับสัญญาณสถาปัตยกรรมไมโครประมาณระหว่างหน้า 63 และ 69 บนหน้า 63มันประกอบด้วยตัวกรองเฉลี่ยเคลื่อนที่แบบเรียกซ้ำ (ซึ่ง niaren ได้ให้ไว้ในคำตอบของเขา )

H(z)=1N1zN1z1.

เพื่อความสะดวกเกี่ยวกับการสนทนาต่อไปนี้มันสอดคล้องกับสมการความแตกต่างดังต่อไปนี้:

yn=yn1+1N(xnxnN).

การประมาณซึ่งวางตัวกรองลงในแบบฟอร์มที่คุณระบุนั้นต้องสมมติว่าเพราะ (และฉันอ้างอิงจากหน้า 68 ) "คือค่าเฉลี่ยของตัวอย่าง " การประมาณนั้นทำให้เราสามารถลดความซับซ้อนของสมการผลต่างดังนี้: y n - 1 x nxnNyn1yn1xn

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

การตั้งค่าเรามาถึงรูปแบบดั้งเดิมของคุณแล้วซึ่งแสดงว่าสัมประสิทธิ์ที่คุณต้องการ ( ด้วยความเคารพต่อการประมาณนี้) เท่ากับ (โดยที่คือจำนวนตัวอย่าง) Yα=1N1yn=αxn+(1α)yn1 N1NN

การประมาณนี้เป็น "ดีที่สุด" ในบางประเด็นหรือไม่? มันดูสง่างามอย่างแน่นอน นี่คือวิธีที่การตอบสนองขนาดเปรียบเทียบที่ [44.1kHz] สำหรับ N = 3 และเมื่อ N เพิ่มขึ้นเป็น 10 (การประมาณเป็นสีน้ำเงิน):

N = 3 N = [3,10]


ดังที่คำตอบของปีเตอร์แนะนำการประมาณตัวกรอง FIR ด้วยตัวกรองแบบเรียกซ้ำอาจเป็นปัญหาได้ภายใต้บรรทัดฐานกำลังสองน้อยที่สุด การอภิปรายที่กว้างขวางของวิธีการที่จะแก้ปัญหานี้โดยทั่วไปสามารถพบได้ในวิทยานิพนธ์ JOS ของเทคนิคการกรองดิจิตอลการออกแบบและระบบบัตรประจำตัวที่มีการประยุกต์ใช้ในการไวโอลิน เขาสนับสนุนการใช้ Hankel Norm แต่ในกรณีที่การตอบสนองเฟสไม่สำคัญเขายังครอบคลุมถึงวิธีของ Kopec ซึ่งอาจทำงานได้ดีในกรณีนี้ (และใช้บรรทัดฐาน ) ภาพรวมกว้างของเทคนิคในการทำวิทยานิพนธ์ที่สามารถพบได้ที่นี่ พวกเขาอาจให้การประมาณที่น่าสนใจอื่น ๆL2


นี่เป็นวิธี "Elegant" ในการพูดบางอย่างเกี่ยวกับความทรงจำของตัวกรอง IIR ลำดับแรก หน่วยความจำจะเทียบเท่ากับalpha} ฉันจะดูวิธีอื่น ๆ ที่คุณพูดถึง ขอบคุณ 1α
Royi

คุณช่วยอธิบายได้อย่างง่ายดายว่าทำไมภายใต้มาตรฐาน LS ( ) ไม่มีวิธีแก้ปัญหา? L2
Royi

ฉันไม่แน่ใจว่ามีวิธีแก้ปัญหา LS ในกรณีนี้หรือไม่ฉันเพิ่งรู้ว่ามันมีปัญหาเกี่ยวกับการบรรจบกันของปัญหา "FIR-based FIR Approximation" ทั่วไป ฉันจะอัปเดตข้อมูลเพิ่มเติมเมื่อมีโอกาส
เก็บข้อมูล

ดีถ้าฟังก์ชั่นค่าใช้จ่ายที่ Peter แนะนำ (อันแรก) อยู่ที่นั่นนั่นก็คือทางออก อย่างน้อยตามการคำนวณของฉัน
Royi

ยิ่งใหญ่ ฉันอยากรู้ว่าวิธีการแบบฮิวริสติกแบบเปรียบเทียบกับอะไรที่เป็นที่ยอมรับมากกว่านี้ 1/N
เก็บข้อมูล

16

ตกลงเราจะพยายามหาสิ่งที่ดีที่สุด: ดังนั้น ว่าค่าสัมประสิทธิ์ของเป็นเมตร

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]
α ( 1 - α ) mx[nm]α(1α)m

การประมาณค่ากำลังสองเฉลี่ยที่ดีที่สุดจะลดลง:

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 เป็นศูนย์สำหรับ 1m>k1

ขั้นต่อไปคือการหาอนุพันธ์และถือเป็นศูนย์


กำลังมองหาที่พล็อตของที่ได้มาสำหรับและ 0-1 ดูเหมือนว่าปัญหา (ที่ผมเคยตั้งขึ้น) จะไม่ดีถูกวางเพราะคำตอบที่ดีที่สุดคือ0K = 1,000 αJK=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
กำลังจะโพสต์สิ่งเดียวกันแน่นอน =)
Phonon

@Phonon: อย่าลังเลที่จะดำเนินการต่อไป! ฉันทำเครื่องหมายว่าเป็นวิกิชุมชนเพื่อจุดประสงค์นั้น
Peter K.

อนุพันธ์ wrtเป็นอนุกรมที่มีจำนวนอนันต์ (เช่นไม่ใช่พหุนาม) ที่คุณต้องตั้งค่าให้เท่ากับแล้วจึงแก้หาและดังนั้นจึงมีความจำเป็น (หรืออาจจะประมาณ) α0α
Dilip Sarwate

ใครช่วยกรุณาตรวจสอบและ / หรือแก้ไขการทำงานของฉันได้ไหม :-)
Peter K.

@DilipSarwate สิ่งที่จะเป็นการประมาณที่ดีที่สุด? ขอบคุณ
Royi

3

อยู่ในการทดสอบทดลองkในช่วง (2-100) แบบที่ดีที่สุด (ผลรวมกำลังสองข้อผิดพลาด) ให้ความสัมพันธ์ของalfa = 1/k^0.865 การเป็นkจำนวนตัวอย่างสำหรับตัวกรอง MovAvg


ฉันใช้แผ่นงาน Excel แบบโต้ตอบเพื่อแยกความสัมพันธ์: drive.google.com/open?id=0B48gEYiKwYegY3NqQThMTTZ1OG8
chiliwili69

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 ที่ได้รับจาก(2)α(5)(2)

การตั้งค่าอนุพันธ์ของเป็นศูนย์ผลลัพธ์(5)

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

โปรดทราบว่าดีที่สุดจะต้องอยู่ในช่วงเวลาเนื่องจากค่าที่มากกว่าของส่งผลให้เกิดการตอบสนองต่อแรงกระตุ้นแบบสลับซึ่งไม่สามารถประมาณค่ารีพัลส์ค่าเฉลี่ยเคลื่อนที่ FIR ที่เคลื่อนไหวได้α(0,1]α(3)

รับสแควร์รูทของและแนะนำเราได้(6)β=1α

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

สมการนี้ไม่สามารถแก้ไขได้สำหรับแต่สามารถแก้ไขได้สำหรับ :NβN

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

สมการสามารถใช้ในการตรวจสอบการแก้ปัญหาเชิงตัวเลขของ ; มันจะต้องกลับค่าที่ระบุของN( 7 )(8)(7)N

สมการสามารถแก้ไขได้ด้วยโค้ด (Matlab / Octave) สองสามบรรทัด:(7)

N = 50; % ความยาวตัวกรองที่ต้องการของตัวกรองค่าเฉลี่ยเคลื่อนที่ FIR

ถ้า (N == 1)% ไม่ซ้ำสำหรับกรณีเล็ก ๆ น้อย ๆ
    b = 0;
อื่น
    ซ้ำนิวตัน
    b = 1; ค่าเริ่มต้น
    นิด = 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 * บันทึก (1 + b) / บันทึก (b) + 1% จะต้องเท่ากับ N
ปลาย

a = 1 - b;

ด้านล่างเป็นตารางที่มีค่าที่เหมาะสมที่สุดของสำหรับช่วงความยาวตัวกรอง :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
1,000 1.3853e-03
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.