Ưu điểm của bộ lọc MATLAB là gì


30

MATLAB filtfilt một bộ lọc tiến lùi, nghĩa là lọc, đảo ngược tín hiệu, lọc lại và sau đó đảo ngược lại. Rõ ràng điều này được thực hiện để giảm độ trễ pha? Những lợi thế / bất lợi của việc sử dụng bộ lọc như vậy là gì (tôi đoán nó sẽ dẫn đến sự gia tăng hiệu quả trong thứ tự bộ lọc).

Có nên sử dụng filtfiltluôn luôn thay vì filter(nghĩa là chỉ lọc chuyển tiếp)? Có ứng dụng nào cần sử dụng hay không và không nên sử dụng ứng dụng này ở đâu?


Không sử dụng bộ lọc không pha cho âm thanh, vì nó gây ra "tiếng chuông trước" nghe có vẻ kỳ quặc. Lọc pha tối thiểu là tự nhiên hơn. ccrma.stanford.edu/~jos/filters/Linear_Phase_Really_Ideal.html
endolith

Câu trả lời:


34

Bạn có thể nhìn vào nó tốt nhất trong miền tần số. Nếu x[n] là chuỗi đầu vào và h[n] là đáp ứng xung của bộ lọc, thì kết quả của lần lọc đầu tiên là

X(ejω)H(ejω)

với H ( e j ω ) là biến đổi Fourier của x [ n ]h [ n ] , tương ứng. Tương ứng với thời gian đảo ngược để thay thế ω bởi - ω trong miền tần số, vì vậy sau khi nghịch đảo thời gian chúng tôi nhậnX(ejω)H(ejω)x[n]h[n]ω-ω

X(e-jω)H(e-jω)

Thứ hai bộ lọc tương ứng với một nhân với :H(ejω)

X(e-jω)H(ejω)H(e-jω)

mà sau khi đảo ngược thời gian cuối cùng cũng cho phổ của tín hiệu đầu ra

(1)Y(ejω)= =X(ejω)H(ejω)H(e-jω)= =X(ejω)|H(ejω)|2

bởi vì đối với hệ số bộ lọc thực có giá trị chúng ta có . Phương trình (1) cho thấy phổ đầu ra thu được bằng cách lọc với bộ lọc có đáp ứng tần số | H ( e j ω ) | 2 , hoàn toàn có giá trị thực, tức là pha của nó bằng 0 và do đó không có biến dạng pha.H(e-jω)= =H*(ejω)|H(ejω)|2

Đây là lý thuyết. Trong xử lý thời gian thực tất nhiên có độ trễ khá lớn vì đảo ngược thời gian chỉ hoạt động nếu bạn cho phép độ trễ tương ứng với độ dài của khối đầu vào. Nhưng điều này không thay đổi thực tế là không có biến dạng pha, nó chỉ là một độ trễ bổ sung của dữ liệu đầu ra. Đối với FIR lọc, phương pháp này là không đặc biệt hữu ích bởi vì bạn cũng có thể xác định một bộ lọc mới h [ n ] = h [ n ] * h [ - n ] và nhận được kết quả tương tự với bộ lọc thông thường. Điều thú vị hơn là sử dụng phương pháp này với các bộ lọc IIR, vì chúng không thể có pha không (hoặc pha tuyến tính, tức là độ trễ thuần túy).h^[n]= =h[n]*h[-n]

Tóm lại:

  • nếu bạn có hoặc cần bộ lọc IIR và bạn muốn độ méo pha bằng 0, và độ trễ xử lý không có vấn đề gì thì phương pháp này rất hữu ích

  • nếu xử lý chậm trễ là một vấn đề bạn không nên sử dụng nó

  • nếu bạn có bộ lọc FIR, bạn có thể dễ dàng tính toán phản hồi bộ lọc FIR mới tương đương với việc sử dụng phương pháp này. Lưu ý rằng với các bộ lọc FIR, một pha tuyến tính chính xác luôn có thể được nhận ra.


Tôi đã tạo một thẻ có tên maximum-aposteriori-estimation. Bạn có thể vui lòng đổi tên nó thành maximum-a-posteriori-estimation? Do nhầm lẫn tôi quên mất -sau a. Cảm ơn bạn.
Royi

15

Tôi thấy video này rất, rất hữu ích (nó giải thích chi tiết về câu trả lời của Matt).

Dưới đây là một số ý tưởng chính từ video:

  • Không pha sẽ dẫn đến không có biến dạng pha, nhưng sẽ dẫn đến một bộ lọc phi nhân quả. Điều này có nghĩa là nếu dữ liệu đang được lọc khi được thu thập, đây sẽ không phải là một tùy chọn (chỉ hợp lệ đối với dữ liệu được lưu trữ mà chúng tôi có thể xử lý sau).nhập mô tả hình ảnh ở đây
  • Khi bạn triển khai bộ lọc phi nhân quả, các transitor bị mờ về phía trước và phía sau (ví dụ: nếu chúng ta muốn gợn 2dB, thực tế là chúng ta sẽ tạo ra một bước tiến và lùi bằng bộ lọc có nghĩa là chúng ta sẽ muốn mỗi những cái này để có 1dB).nhập mô tả hình ảnh ở đây
  • Sử dụng thuộc tính đảo ngược thời gian của biến đổi Fourier thời gian rời rạc. nhập mô tả hình ảnh ở đây
  • Đáp ứng tần số hiệu quả do FILTFILT gây ra là cường độ của nó theo một hướng, bình phương. Bạn lấy tín hiệu đầu vào của mình x[n], lọc nó, đảo ngược kết quả, lọc lại và đảo ngược lại (bước đảo ngược thời gian yêu cầu tất cả dữ liệu có sẵn).nhập mô tả hình ảnh ở đây
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.