Có bất kỳ hình thức triển khai tiêu chuẩn nào cho các bộ lọc Butterworth có thể điều chỉnh không?


17

Một trong những cách tiêu chuẩn để thực hiện bộ lọc Butterworth là với một loạt các phần bậc hai, mỗi phần tương ứng với một cặp cực liên hợp phức tạp. Ví dụ, đối với bộ lọc thứ tư, sẽ có hai phần thứ hai. Nếu chúng ta xem xét cách các vị trí cực cho bộ lọc thông thấp thay đổi trong mặt phẳng z khi đường cắt được thiết kế gần 0hz đến gần Nyquist, đường dẫn "bị quét" bởi mỗi cặp cực tương ứng với một cặp cung bên trong vòng tròn đơn vị , như được minh họa trong hình dưới đây [cho các bộ lọc bậc bốn]:

Vị trí cực của mặt phẳng Z cho các bộ lọc thông thấp Butterworth bậc bốn

Dựa vào thời gian các bộ lọc này tồn tại được bao lâu và thực tế là các "cung" này tương ứng với các đường thẳng trong mặt phẳng s, lý do là ai đó sẽ phát triển một hình thức thực hiện với một tham số duy nhất có thể quét các cực dọc theo các cung tại "thời gian chạy" [trái ngược với "thời gian thiết kế"]. Tuy nhiên, tôi chưa gặp phải bất cứ điều gì như vậy.

Nó tương đối đơn giản để đưa ra nhiều cách khác nhau để làm điều này, đặc biệt là trong các phân khúc của phạm vi, và sẵn sàng ném thêm một chút tính toán vào nó. Điều tôi băn khoăn là như sau:

Có một số cách tiêu chuẩn để thực hiện bộ lọc Butterworth [kỹ thuật số] có thể điều chỉnh của một đơn hàng nhất định mà 1) có các thuộc tính tối ưu (ví dụ: hiệu quả, độ bền) và 2) bao gồm toàn bộ phạm vi?

Hay đây thực sự chỉ là một vấn đề dễ dàng đến mức không ai bận tâm để nói về nó? Nếu đó là trường hợp, có vẻ như nó sẽ xuất hiện trong các chương trình thiết kế bộ lọc bên cạnh các tùy chọn cho thiết kế "tĩnh".

Tôi đã tìm thấy điều này: Một bộ lọc Butterworth đa mục đích với tần số cắt thay đổi , nhưng lúc đầu Googling dường như không có nhiều thông tin về những gì trong đó.

Cập nhật (lại: câu trả lời)

Chỉ cần nói rõ hơn một chút:

  • Tôi đang tìm kiếm một "thiết kế meta" với một tham số (giả sử từ [0,1]) sẽ tự động điều chỉnh điểm cắt từ DC sang Nyquist (trong khi vẫn giữ mức tăng bình thường) để sử dụng trong hệ thống thay đổi theo thời gian. Một cái gì đó giống như bộ cộng hưởng hai cực này , ngoại trừ với các ràng buộc Butterworth. Ý tưởng là việc tính toán tham số sẽ hiệu quả hơn so với việc thực hiện quy trình thiết kế ngoại tuyến điển hình khi chạy.
  • Tôi thậm chí không nhất thiết phải tìm cách thiết kế một "bộ lọc meta" (tức là làm toán với các biến thay vì số), tôi tự hỏi liệu có lựa chọn nào cho các hình thức triển khai [không rõ ràng] tiêu chuẩn hay không - bởi vì, nói, cách tiếp cận đơn giản tương ứng với trường hợp tĩnh kết thúc có vấn đề về số trong trường hợp thay đổi theo thời gian.
  • Có lẽ không có vấn đề gì, và cách tiếp cận đơn giản là những gì được sử dụng trong thực tế. Điều đó sẽ rất tuyệt. Mối quan tâm của tôi là tôi chưa thấy chủ đề này được đề cập rõ ràng trong bất kỳ nguồn nào tôi đã tham khảo, nhưng có lẽ tôi đã bỏ lỡ điều gì đó thực sự rõ ràng, vì vậy tôi đang hỏi.
  • Trong quá trình thêm chi tiết ở đây, tôi đã xem qua một cách xử lý chung các cấu trúc biquad tham số, gần như là thứ tôi đang tìm kiếm (và có một số tài liệu tham khảo hay).

Cập nhật 2

Tôi đang tìm kiếm câu trả lời giống như câu tôi đưa vào nhận xét thứ hai của mình cho Jason R, như sau:

"Ồ đúng rồi, bạn muốn sử dụng parametrization III-2b từ luận án tương tự, ở dạng mạng tinh thể khai thác vì nó giải quyết trường hợp cạnh như vậy trong khi sử dụng số nhân tối thiểu."

Có lẽ không có gì giống như vậy tồn tại, nhưng câu hỏi của tôi là liệu nó có, và nếu vậy, nó là gì, hoặc tôi có thể tìm thấy nó ở đâu?

Giải độc đắc

Dựa trên một tham chiếu đến "hình thức kinh điển của người quan sát" được đưa ra bởi Tim Wescott trong chuỗi comp.dsp trong câu trả lời của Jason R , tôi quyết định cho rằng tôi có thể phải bắt đầu tìm hiểu về tài liệu hệ thống điều khiển, vì vậy tôi đã thử thực hiện tìm kiếm "không gian nhà nước" butterworth , và nó đã xuất hiện như sau, rất tuyệt vời, đối xử với việc thiết kế / thực hiện, không chỉ là tham số Butterworth, mà cả các bộ lọc Ch Quashev và Elliptic:

Sophocles J. Orfanidis, "Thiết kế bộ cân bằng tham số kỹ thuật số bậc cao", J. Audio Eng. Sóc., Tập. 53, trang 1026-1046, tháng 11 năm 2005.

Sẽ mất một chút thời gian để tìm hiểu, nhưng dựa trên những gì tôi đã đọc cho đến nay, tôi sẽ rất ngạc nhiên nếu đó không phải là thứ tôi đang tìm kiếm. Tôi đang đưa cái này cho Jason R để tham khảo comp.dsp dẫn tôi đến bài báo của Orfanidis. Câu trả lời của ông cũng là một tổng quan thực tế tốt đẹp về thiết kế bộ lọc Butterworth.

Câu trả lời:


10

Tôi không chắc chắn chính xác những gì bạn đang tìm kiếm. Như bạn đã lưu ý trong câu hỏi của mình, các hàm truyền của họ bộ lọc Butterworth được hiểu rõ và dễ dàng tính toán phân tích. Thật đơn giản để thực hiện cấu trúc bộ lọc Butterworth có thể điều chỉnh theo thứ tự bộ lọc và tần số cắt:

  1. Dựa trên thứ tự bộ lọc đã chọn, tần số cắt và tốc độ mẫu, tính toán các vị trí cực cho bộ lọc nguyên mẫu tương tự Butterworth. Vì các bộ lọc Butterworth không có số không, nên hàm truyền được xác định bởi các vị trí cực (và mức tăng DC).

  2. Sử dụng biến đổi song tuyến , ánh xạ các vị trí cực của nguyên mẫu tương tự đến các vị trí tương ứng của chúng trong việc thực hiện bộ lọc kỹ thuật số của bạn.

  3. Một lần nữa, bộ lọc kỹ thuật số được xác định bởi các vị trí cực được tìm thấy trong bước 2. Chia bộ lọc thành các phần thứ hai bằng cách nhóm các cực theo cặp.

Đó là nó. Như tôi đã nói, việc lập trình một bộ lọc Butterworth bằng cách sử dụng bất kỳ tham số nào bạn có thể cần; không có thao tác nào phức tạp khủng khiếp để thực hiện.

Chỉnh sửa: Tôi không thực sự chắc chắn kết quả cuối cùng mà bạn đang tìm kiếm. Tôi nghĩ rằng thay vào đó bạn quan tâm nhất đến cách triển khai các bộ lọc IIR với các hệ số thay đổi theo thời gian, không nhất thiết phải cụ thể đối với bộ lọc Butterworth. Tôi giả sử mục tiêu của bạn là giảm thiểu các vật phẩm khi thay đổi tần số cắt của bộ lọc; điều này đã được đề cập trong một cuộc thảo luận về nhóm tin comp.dsp vào đầu năm nay. Mặc dù tôi không chắc trường hợp sử dụng hoặc yêu cầu của bạn đối với cấu trúc bộ lọc này là gì, có một số cách để thực hiện chuyển đổi.

Tôi biết bạn nói rằng bạn muốn bộ lọc của mình có một tham số xác định tần số cắt, nhưng thực tế là cấu trúc có thể điều chỉnh của bạn phải có cách dịch tần số cắt sang các hệ số cần thiết (hoặc trong trường hợp Butterworth, chỉ là vị trí cực). Quá trình tôi mô tả ở trên là phù hợp để tạo các vị trí cực dựa trên tỷ lệ mẫu chuẩn hóa mong muốn.

Bạn có khả năng đơn giản hóa quá trình tính toán vị trí cực bằng cách phân tích hình dạng của các vị trí cực của bộ lọc kỹ thuật số trong mặt phẳng z. Bộ lọc Butterworth tương tự có các cực nằm trong một hình bán nguyệt ở nửa bên trái của mặt phẳng s; phép biến đổi song tuyến ánh xạ hình bán nguyệt này thành mô hình trông giống hình elip mà bạn đã minh họa trong mô tả câu hỏi của mình. Sử dụng mẫu đã biết này cho các cực của bộ lọc Butterworth tương tự, chức năng ánh xạ của biến đổi song tuyến và một số đại số, bạn có thể đưa ra một biểu thức tương đối đơn giản cho các vị trí cực của bộ lọc kỹ thuật số, do đó cung cấp cho bạn bộ lọc dễ nhìn hơn điều chỉnh hành động.


Jason, tôi không tìm cách thiết kế một đặc tả Butterworth cụ thể, tôi đang tìm kiếm một "thiết kế meta". Tôi sẽ cập nhật câu hỏi với một chút chi tiết.
datageist

1
Re: Chỉnh sửa. Quá trình bạn mô tả trong đoạn cuối chính xác là cách tôi sẽ tiếp cận nó - tôi chỉ tự hỏi liệu điều này có thực sự được đề cập ở bất cứ đâu không. Nói cách khác, những thứ như, "Ồ đúng rồi, bạn muốn sử dụng tham số III-2b từ luận án tương tự, ở dạng mạng tinh thể khai thác vì nó giải quyết trường hợp cạnh như vậy trong khi sử dụng số nhân tối thiểu. "
datageist

1
Nhận xét nhỏ về nit-picky: Trong mặt phẳng Z, bộ lọc BW thực sự có số không. Đối với các bộ lọc thông thấp, tất cả đều ở mức -1 và đối với các bộ lọc thông cao, chúng ở mức +1.
Hilmar

s±ss0

2

Có, có các hình thức triển khai tiêu chuẩn cho Butterworth và hầu hết các phản hồi của bộ lọc khác. Tất cả đều được thực hiện đầy đủ trong thư viện bộ lọc IIR mã nguồn mở của tôi. Đây là một đoạn mã tạo ra các cặp cực / không cho bộ lọc Butterworth có mức độ tùy ý:

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

Như bạn có thể thấy, vị trí của các cực được tính bằng cách chia mặt phẳng s thành các "cặp" các đoạn bằng nhau.

Mã phù hợp được cung cấp cho tất cả các loại phản ứng bộ lọc phổ biến: Ch Quashev, Elliptic, Legendre, bao gồm cả các phiên bản kệ của từng loại.

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

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

Ảnh chụp màn hình


Thư viện DSPFilters trực tiếp giải quyết trường hợp sử dụng được dự tính bởi câu hỏi ban đầu, sử dụng phương trình tham số hóa để tính các cặp cực / không của bộ lọc kỹ thuật số trong thời gian chạy. Tôi sẽ sửa đổi câu trả lời để bao gồm một đoạn mã nguồn.
Vinnie Falco
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.