Có ai quen thuộc với thuật toán của Gustafson để giảm thiểu quá độ trong quá trình lọc lùi về phía trước [1] không? Tôi đang cố gắng thực hiện nó và dự đoán đầu tiên của tôi là kiểm tra bộ lọc của Matlab, vì họ đang tham khảo bài báo. Trong hàm Matlab cũng có một hệ phương trình tuyến tính được giải để tìm các điều kiện ban đầu zi nhằm giảm thiểu các quá trình khởi động, nhưng mối quan hệ giữa tham chiếu và mã không rõ ràng đối với tôi. Các dòng mã duy nhất liên quan đến tối thiểu hóa là (nfilt là chiều dài của vectơ hệ số):
zi = ( eye(nfilt-1) - [-a(2:nfilt), [eye(nfilt-2); zeros(1,nfilt-2)]] ) \...
( b(2:nfilt) - b(1)*a(2:nfilt) );
Bất cứ ai cũng có thể chỉ cho tôi đi đúng hướng về cách những dòng đó liên quan đến thuật toán được mô tả trong bài viết của Gustafson?
[1] Gustafsson, F. "Xác định các trạng thái ban đầu trong quá trình lọc tiến lùi." Giao dịch IEEE® về xử lý tín hiệu. Tập 44, tháng 4 năm 1996, trang 988 Từ 992.
filtfilt()
tôi không thể hiểu tại sao. Tôi chưa đọc bài viết của Gustafson (tôi không phải là IEEE và không thể nhận nó miễn phí, bất cứ ai có bản sao đều được gửi email cho tôi .pdf của nó). khi sử dụng khái niệm này filtfilt
, người ta có thể thực hiện nó cho toàn bộ tệp mẫu (đối với tôi, đó sẽ là tệp âm thanh hoặc âm thanh, như .wav) trước tiên hãy lọc âm thanh với phần đệm không ở cuối chừng nào bạn mong đợi đáp ứng xung của bộ lọc chuyển tiếp. làm kéo dài tập tin, nhưng đầu ra gần như bằng không. sau đó chạy tệp kết quả thông qua bộ lọc ngược.
filtfilt
trong thời gian thực bằng cách chia đầu vào thành các khối mẫu, đệm không cho mỗi khối, lọc các khối về phía sau nhưng giữ "đuôi" lật ngược về hướng về phía trước và thêm chồng chéo. Powell-Chau đã không làm điều này, nhưng tôi nghĩ rằng đây là một ứng dụng tốt của các bộ lọc Truncated IIR, vì vậy bạn biết khi nào đầu ra khối phân rã kết thúc.