มีแบบฟอร์มการใช้งานมาตรฐานสำหรับตัวกรอง Butterworth ที่ปรับค่าได้หรือไม่?


17

หนึ่งในวิธีมาตรฐานในการนำตัวกรอง Butterworth ไปใช้นั้นมีส่วนเรียงลำดับที่สองเรียงซ้อนกันซึ่งสอดคล้องกับเสาคู่ที่ซับซ้อน สำหรับตัวกรองลำดับที่สี่เช่นจะมีสองส่วนลำดับที่สอง หากเราพิจารณาว่าสถานที่ตั้งของเสาสำหรับตัวกรอง lowpass เปลี่ยนในระนาบ z เป็นส่วนทางลัดได้รับการออกแบบให้ใกล้กับ 0hz ถึงใกล้ Nyquist เส้นทาง "กวาดออก" โดยแต่ละคู่ของเสาตรงกับคู่ของส่วนโค้งภายในวงกลมหน่วย ดังแสดงในรูปต่อไปนี้ [สำหรับตัวกรองลำดับที่สี่]:

ตำแหน่งเสา Z-plane สำหรับตัวกรอง Lowpass ลำดับที่สี่ของ Butterworth

เมื่อพิจารณาว่าตัวกรองเหล่านี้ยาวแค่ไหนและจากข้อเท็จจริงที่ว่า "ส่วนโค้ง" เหล่านี้ตรงกับเส้นตรงในระนาบ s มันก็มีเหตุผลว่ามีคนพัฒนาแบบฟอร์มการนำไปปฏิบัติด้วยพารามิเตอร์เดียวซึ่งสามารถกวาดเสาได้ ตามส่วนโค้งที่ "เวลาทำงาน" [ซึ่งตรงข้ามกับ "เวลาออกแบบ"] อย่างไรก็ตามฉันยังไม่เจออะไรแบบนั้น

มันค่อนข้างตรงไปตรงมาที่จะเกิดขึ้นกับวิธีการทำสิ่งต่าง ๆ โดยเฉพาะอย่างยิ่งในส่วนของช่วงและมีความตั้งใจที่จะโยนการคำนวณพิเศษเล็กน้อยที่มัน สิ่งที่ฉันสงสัยคือต่อไปนี้:

มีวิธีมาตรฐานในการติดตั้งตัวกรอง Butterworth ที่ปรับค่าได้ของคำสั่งที่กำหนดว่า 1) มีคุณสมบัติที่ดีที่สุด (เช่นประสิทธิภาพความทนทาน) และ 2) ครอบคลุมช่วงทั้งหมดหรือไม่?

หรือนี่เป็นเพียงปัญหาง่าย ๆ ที่ไม่มีใครรบกวนให้พูดถึง หากเป็นกรณีนี้ดูเหมือนว่าจะปรากฏในโปรแกรมออกแบบตัวกรองถัดจากตัวเลือกสำหรับการออกแบบ "คงที่"

ฉันพบสิ่งนี้: ตัวกรอง Butterworth เอนกประสงค์ที่มีความถี่คัตออฟผันแปรแต่ในตอนแรกGooglingดูเหมือนจะไม่มีข้อมูลมากนักเกี่ยวกับสิ่งที่อยู่ในนั้น

อัปเดต (ใหม่: คำตอบ)

เพื่อให้ชัดเจนยิ่งขึ้น:

  • ฉันกำลังมองหา "การออกแบบเมตา" พร้อมพารามิเตอร์ (พูดจาก [0,1]) ที่จะปรับการตัดจาก DC เป็น Nyquist โดยอัตโนมัติ (ในขณะที่รักษาอัตราขยายปกติ) เพื่อใช้ในระบบที่เปลี่ยนแปลงเวลา บางอย่างเช่นเครื่องแลกเปลี่ยนความร้อนสองขั้วนี้ยกเว้นข้อ จำกัด ของ Butterworth แนวคิดคือการคำนวณพารามิเตอร์จะมีประสิทธิภาพมากกว่าการทำตามขั้นตอนการออกแบบออฟไลน์ทั่วไปที่รันไทม์
  • ฉันไม่จำเป็นต้องมองหาวิธีออกแบบ "meta-filter" (เช่นคณิตศาสตร์กับตัวแปรแทนที่จะเป็นตัวเลข) ฉันสงสัยว่ามีตัวเลือกสำหรับแบบฟอร์มการใช้งานมาตรฐาน [ไม่ชัดเจน] - เพราะ พูดว่าวิธีการตรงไปตรงมาที่สอดคล้องกับกรณีคงที่จบลงด้วยการมีปัญหาเชิงตัวเลขในกรณีที่แตกต่างกันไปตามเวลา
  • อาจไม่มีปัญหาและแนวทางตรงไปตรงมาคือสิ่งที่ใช้ในการปฏิบัติ มันจะดีมาก. ความกังวลของฉันคือฉันไม่ได้เห็นหัวข้อนี้กล่าวถึงอย่างชัดเจนในแหล่งข้อมูลใด ๆ ที่ฉันปรึกษา แต่บางทีฉันเพิ่งพลาดบางสิ่งบางอย่างชัดเจนจริง ๆ ดังนั้นฉันถาม
  • ในกระบวนการของการเพิ่มรายละเอียดเพิ่มเติมที่นี่ฉันวิ่งข้ามการรักษาทั่วไปของโครงสร้าง biquad ซึ่งเกือบจะเป็นสิ่งที่ฉันกำลังมองหา (และมีการอ้างอิงที่ดีบางอย่าง)

อัปเดต 2

ฉันกำลังมองหาคำตอบเหมือนที่ฉันใส่ในความคิดเห็นที่สองของฉันกับ Jason R ดังนี้:

"ใช่แล้วคุณต้องการใช้ parametrization III-2b จากวิทยานิพนธ์ของผู้ที่อยู่ในรูปแบบขัดแตะของรัฐในรูปแบบเคาะเพราะมันจะช่วยแก้ปัญหากรณีเช่นนี้ในขณะที่ใช้จำนวนทวีคูณน้อยที่สุด"

อาจไม่มีสิ่งใดที่มีอยู่จริง แต่คำถามของฉันคือว่ามันเป็นเช่นนั้นหรือไม่และถ้าเป็นเช่นนั้นคืออะไรหรือฉันจะหาได้ที่ไหน

เงินรางวัล

จากการอ้างอิงถึง "ผู้สังเกตการณ์แบบฟอร์มมาตรฐาน" ที่กำหนดโดย Tim Wescott ในเธรด comp.dsp ในคำตอบของ Jason Rฉันตัดสินใจที่จะสมมติว่าฉันอาจต้องเริ่มขุดในวรรณกรรมของระบบควบคุมดังนั้นฉันจึงพยายามค้นหาbutterworth "พื้นที่ของรัฐ"และมันก็ปรากฏขึ้นดังต่อไปนี้เย็นมากการรักษาของการออกแบบ / การใช้งานไม่เพียง แต่ Butterworth พารามิเตอร์เท่านั้น แต่ยัง Chebyshev และตัวกรองรูปไข่:

Sophocles J. Orfanidis, "การออกแบบอีควอไลเซอร์พารามิเตอร์ดิจิตอลระดับสูง" J. Audio Eng Soc., vol. 53, pp. 1026-1046, พ.ย. 2005

มันจะใช้เวลาสักครู่เพื่อขุดลงไป แต่จากสิ่งที่ฉันได้อ่านจนถึงตอนนี้ฉันจะประหลาดใจมากถ้าไม่ใช่สิ่งที่ฉันกำลังมองหา ฉันให้อันนี้แก่ Jason R สำหรับการอ้างอิง comp.dsp ที่นำฉันไปสู่กระดาษ Orfanidis คำตอบของเขายังเป็นภาพรวมในทางปฏิบัติที่ดีของการออกแบบตัวกรอง Butterworth เช่นกัน

คำตอบ:


10

ฉันไม่แน่ใจว่าสิ่งที่คุณกำลังมองหา ตามที่คุณบันทึกไว้ในคำถามของคุณฟังก์ชั่นการถ่ายโอนของตระกูลตัวกรอง Butterworthนั้นมีความเข้าใจและคำนวณได้ง่าย มันค่อนข้างง่ายที่จะใช้โครงสร้างตัวกรอง Butterworth ที่ปรับได้ตามลำดับตัวกรองและความถี่ตัด:

  1. ขึ้นอยู่กับลำดับตัวกรองที่เลือกความถี่ของการตัดออกและอัตราตัวอย่างคำนวณตำแหน่งของเสาสำหรับตัวกรองต้นแบบแอนะล็อก Butterworth เนื่องจากตัวกรอง Butterworth ไม่มีศูนย์ฟังก์ชันการถ่ายโอนจะถูกกำหนดโดยตำแหน่งขั้วโลก (และอัตราขยาย DC)

  2. ด้วยการใช้การแปลงแบบบิลิแนร์ทำแผนที่ตำแหน่งขั้วของต้นแบบต้นแบบไปยังตำแหน่งที่สอดคล้องกันในการทำให้ตัวกรองดิจิทัลของคุณรับรู้

  3. อีกครั้งตัวกรองดิจิตอลถูกกำหนดโดยที่ตั้งเสาที่พบในขั้นตอนที่ 2 แบ่งตัวกรองออกเป็นส่วนที่สองตามลำดับโดยการจัดกลุ่มเสาเป็นคู่

แค่นั้นแหละ. อย่างที่ฉันบอกไปมันเป็นเรื่องง่ายที่จะออกแบบตัวกรอง Butterworth แบบเป็นโปรแกรมโดยใช้พารามิเตอร์ใด ๆ ก็ตามที่คุณอาจต้องการ ไม่มีการดำเนินการใดที่ซับซ้อนอย่างมากที่จะนำมาใช้

แก้ไข:ฉันไม่แน่ใจจริงๆว่าผลลัพธ์ที่คุณต้องการคืออะไร ฉันคิดว่าคุณสนใจวิธีการใช้งานตัวกรอง IIR ด้วยค่าสัมประสิทธิ์การแปรผันตามเวลาซึ่งไม่ได้เจาะจงเฉพาะกับตัวกรอง Butterworth ฉันคิดว่าเป้าหมายของคุณคือการลดสิ่งประดิษฐ์เมื่อเปลี่ยนความถี่ตัวกรองการตัด สิ่งนี้ถูกกล่าวถึงในการอภิปรายในกลุ่มข่าวสาร comp.dspเมื่อต้นปีที่ผ่านมา ในขณะที่ฉันไม่แน่ใจว่ากรณีการใช้งานหรือข้อกำหนดของคุณสำหรับโครงสร้างตัวกรองนี้มีหลายวิธีในการเปลี่ยน

ฉันรู้ว่าคุณบอกว่าคุณต้องการให้ตัวกรองของคุณมีพารามิเตอร์เดียวที่กำหนดความถี่ cutoff แต่ความจริงก็ยังคงอยู่ที่โครงสร้างที่ปรับค่าได้ของคุณต้องมีวิธีในการแปลความถี่ cutoff เป็นค่าสัมประสิทธิ์ที่ต้องการ (หรือในกรณี Butterworth เพียง ที่ตั้งเสา) กระบวนการที่ฉันอธิบายไว้ข้างต้นมีความเหมาะสมสำหรับการสร้างตำแหน่งขั้วตามอัตราตัวอย่างที่ต้องการ

คุณสามารถลดความซับซ้อนของกระบวนการคำนวณตำแหน่งเสาได้โดยการวิเคราะห์รูปทรงเรขาคณิตของตำแหน่งเสาของตัวกรองดิจิตอลในระนาบ z ตัวกรอง Butterworth แบบแอนะล็อกมีเสาที่วางครึ่งวงกลมในครึ่งซ้ายของ s-plane ไบลิแนร์แปลงแผนที่ครึ่งวงกลมนี้เป็นรูปแบบที่เป็นรูปวงรีที่คุณแสดงในคำอธิบายคำถามของคุณ การใช้รูปแบบที่รู้จักกันนี้กับขั้วของตัวกรอง Butterworth แบบอะนาล็อกฟังก์ชั่นการแมปของการแปลงแบบบิลิแนร์และพีชคณิตบางอย่างคุณอาจสามารถแสดงออกมาได้ง่ายสำหรับตำแหน่งขั้วของตัวกรองดิจิทัล การกระทำปรับ


Jason ฉันไม่ได้มองหาวิธีการออกแบบ Butterworth ที่ระบุฉันกำลังมองหา "meta-design" ฉันจะอัปเดตคำถามโดยมีรายละเอียดเพิ่มเติมเล็กน้อย
เก็บข้อมูล

1
เรื่องการแก้ไข กระบวนการที่คุณอธิบายไว้ในย่อหน้าสุดท้ายเป็นวิธีที่ฉันจะเข้าใกล้ - ฉันแค่สงสัยว่าสิ่งนี้ได้รับการคุ้มครองจริงหรือไม่ กล่าวอีกนัยหนึ่งสิ่งต่าง ๆ เช่น "อ๋อใช่คุณต้องการใช้ parametrization III-2b จากวิทยานิพนธ์ของพอดูได้ในรูปแบบขัดแตะรัฐเคาะเพราะมันแก้ไขกรณีขอบดังกล่าวและเช่นในขณะที่ใช้จำนวนทวีคูณน้อยที่สุด "
เก็บข้อมูล

1
ความคิดเห็นเล็กน้อยเกี่ยวกับจู้จี้: ในระนาบ Z ตัวกรอง BW มีค่าเป็นศูนย์ สำหรับตัวกรองสัญญาณความถี่ต่ำพวกเขาทั้งหมดอยู่ที่ -1 และสำหรับตัวกรองสัญญาณความถี่สูงพวกเขาอยู่ที่ +1
Hilmar

@ Hilmar: จุดดี เลขศูนย์ที่คุณพูดถึงสอดคล้องกับศูนย์ที่เกิดขึ้นเป็นs± ใน s- เครื่องบิน (สำหรับตัวกรอง lowpass; เช่น s0สำหรับทางหลวง)
Jason R

2

ใช่มีรูปแบบการใช้งานมาตรฐานสำหรับ Butterworth และเกือบทุกการตอบกลับของตัวกรองอื่น ๆ พวกมันทั้งหมดถูกนำไปใช้อย่างสมบูรณ์ในไลบรารีตัวกรอง IIR โอเพนซอร์สของฉัน นี่คือตัวอย่างของรหัสที่สร้างคู่ขั้ว / ศูนย์สำหรับตัวกรอง Butterworth ที่มีระดับตามอำเภอใจ:

void AnalogLowPass::design (int numPoles)
{
  if (m_numPoles != numPoles)
  {
    m_numPoles = numPoles;

    reset ();

    const double n2 = 2 * numPoles;
    const int pairs = numPoles / 2;
    for (int i = 0; i < pairs; ++i)
    {
      complex_t c = std::polar (1., doublePi_2 + (2 * i + 1) * doublePi / n2);
      addPoleZeroConjugatePairs (c, infinity());
    }

    if (numPoles & 1)
      add (-1, infinity());
  }
}

อย่างที่คุณเห็นตำแหน่งของเสานั้นจะคำนวณโดยการแบ่งย่อยระนาบ s-plane ออกเป็น "คู่" ที่เท่ากัน

รหัสที่เหมาะสมมีไว้สำหรับการตอบสนองตัวกรองทุกประเภท: Chebyshev, Elliptic, Legendre รวมถึงรุ่นชั้นวางของแต่ละตัว

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

ภาพหน้าจอ


ไลบรารี DSPFilters ตอบโจทย์การใช้งานตรงตามคำถามดั้งเดิมโดยใช้สมการที่มีพารามิเตอร์เพื่อคำนวณคู่ขั้ว / ศูนย์ของตัวกรองดิจิทัลในเวลาทำงาน ฉันจะแก้ไขคำตอบให้รวมข้อมูลโค้ดต้นฉบับด้วย
Vinnie Falco
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.