MATLAB xử lý các bộ lọc IIR như thế nào?


8

MATLAB có một butter, trong đó xây dựng bộ lọc Butterworth theo thứ tự và tần số cắt tương đối. Bộ lọc được tạo có thể được sử dụng cho filterbất kỳ tín hiệu hữu hạn.

MATLAB làm điều này như thế nào nếu bộ lọc có đáp ứng xung vô hạn? Tôi cho rằng nó phải cửa sổ tín hiệu - điều này được thực hiện bởi một cửa sổ hình chữ nhật đơn giản để tất cả các giá trị đã biết được sử dụng?

Ngoài ra, làm thế nào là bộ lọc liên tục rời rạc? Biến đổi song phương, phù hợp đáp ứng xung, vv?

Tôi không nghĩ rằng văn bản trợ giúp MATLAB giải thích điều này:

Y = FILTER(B,A,X)lọc dữ liệu trong vectơ Xvới bộ lọc được mô tả bởi vectơ ABđể tạo dữ liệu được lọc Y. Bộ lọc là một triển khai "Chuyển đổi mẫu II trực tiếp" của phương trình sai phân chuẩn:

a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)
                      - a(2)*y(n-1) - ... - a(na+1)*y(n-na)

Câu trả lời:


8

Đây thực sự không phải là vấn đề cụ thể của MATLAB; Tôi thấy một vài câu hỏi chung hơn:

Làm thế nào để bạn thực hiện một bộ lọc IIR kỹ thuật số?

Bạn có thể áp dụng bất kỳ bộ lọc kỹ thuật số chung nào bằng cách kết hợp đáp ứng xung của nó với tín hiệu mà bạn muốn lọc. Trông giống như:

y[n]=k=0N1x[k]h[nk]

Điều này hoạt động rất tốt cho các bộ lọc FIR , nhưng bạn gặp phải các vấn đề phức tạp với các hệ thống IIR , vì các phản hồi xung của chúng dài vô tận ( trong tổng số trên). Điều đó làm cho đầu ra của bộ lọc khó tính toán bằng cách sử dụng tổng tích chập đơn giản ở trên. Để thực sự triển khai bộ lọc IIR, chúng ta cần một cách để thể hiện đầu ra của bộ lọc theo cách dễ tính toán hơn.N

Thuộc tính của bộ lọc IIR làm cho đáp ứng xung của nó dài vô tận là bản chất đệ quy của hệ thống ; có phản hồi từ đầu ra trở lại đầu vào bộ lọc. Điều này có nghĩa là đầu ra của bộ lọc IIR tại bất kỳ thời điểm nào có thể phụ thuộc vào hai nguồn thông tin riêng biệt:

  • Tín hiệu đầu vào của bộ lọc, quá khứ và hiện tại, và

  • Giá trị quá khứ của tín hiệu đầu ra bộ lọc.

Điều này dẫn đến biểu diễn phương trình khác biệt của hệ thống IIR:

a0y[n]=k=1M1aky[nk]+k=0N1bkx[nk]

Biểu diễn này minh họa rằng chúng ta có thể triển khai bộ lọc IIR bằng cách tính tổng trọng số đầu ra của bộ lọc và đầu vào quá khứ của bộ lọc (trong thực tế, và có thể và thường giống nhau; thứ tự của bộ lọc khi được xác định như trên là ). Đây là biểu thức dạng đóng, nắm bắt hoàn toàn hành vi của bộ lọc, phù hợp để thực hiện tự động và là phương trình được tham chiếu trong đoạn trích trợ giúp MATLAB mà bạn đã trình bày trong câu hỏi của mình. Lưu ý rằng gần như chỉ được coi là bằng ; Tôi chỉ bao gồm nó bởi vì nó được hiển thị trong văn bản trợ giúp được trích dẫn, được tham chiếu làMNNMmax(M,N)1a01a(1).

Vì vậy, để trả lời cụ thể câu hỏi của bạn, như văn bản gợi ý, MATLAB triển khai các hệ thống IIR bằng phương trình trên. Khi bạn thiết kế một bộ lọc IIR với MATLAB hoặc cách khác, bạn sẽ có được hai bộ hệ số ( và trong phương trình khác biệt) mà xác định làm thế nào để cân đầu vào lọc qua và kết quả trong việc thực hiện bộ lọc. Có một số sự tinh tế khác đôi khi có liên quan; ví dụ, văn bản đề cập đến việc sử dụng bộ thực hiện "chuyển đổi dạng II trực tiếp" của bộ lọc. Sau đó, bạn áp dụng bộ lọc bằng cách tính phương trình sai phân ở trên cho từng mẫu đầu ra mong muốn.akbk

Thực tế, có một số cấu trúc liên kết có thể được sử dụng để triển khai các bộ lọc kỹ thuật số, mỗi bộ lọc có sự đánh đổi riêng. DF2T thường được sử dụng do cấu trúc hiệu quả hơn của nó (nó chứa một số phần tử trễ tối thiểu) và độ mạnh được cải thiện của nó đối với lỗi làm (vì các hệ số tiếp theo được triển khai trước tiên).bk

MATLAB thiết kế bộ lọc Butterworth như thế nào?

Tài liệu cho butterhàm không chỉ định cách nó tạo ra xấp xỉ rời rạc cho nguyên mẫu bộ lọc Butterworth tương tự . Tuy nhiên, bằng cách nhìn trộm vào butter.m, bạn tìm thấy:

% step 5: Use Bilinear transformation to find discrete equivalent:
if ~analog,
    [a,b,c,d] = bilinear(a,b,c,d,fs);
end

Vì vậy, có vẻ như nó sử dụng phép biến đổi song tuyến để ánh xạ nguyên mẫu bộ lọc Butterworth thành hiện thực bộ lọc kỹ thuật số.


2

Hàm bộ lọc của MATLAB chỉ đơn giản là thực hiện phương trình sai khác cho bộ lọc được chuyển đổi dạng II trực tiếp. Không có lý do để số hóa bộ lọc vì nó được thiết kế trong không gian riêng biệt ở nơi đầu tiên. đầu ra của bộ lọc () có cùng độ dài với đầu vào. Điều đó về mặt kỹ thuật "sai" vì nó cắt bớt phần bộ lọc sẽ kéo dài chiều dài đó. Nếu bạn đã đi để có quyền truy cập vào đuôi, bạn có thể nối thêm một số không vào tín hiệu đầu vào. Vì đó là một phản hồi "vô hạn", bạn không thể thực hiện điều đó một cách hoàn hảo nhưng trong thực tế trong hầu hết các ứng dụng, điều đó không khó thực hiện.

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.