Bộ lọc thông thấp Downsampling cho âm thanh: FIR hoặc IIR?


8

Tôi đang làm việc trong một dự án xử lý âm thanh thời gian thực, trong đó tôi phải giảm 44,1 kHz xuống mức tốc độ lấy mẫu thấp hơn chưa được xác định về cơ bản để giảm độ phức tạp tính toán. Tôi đang tìm kiếm một bộ lọc downsampling khá tốt và tôi đã tìm thấy các bài viết đề xuất cả IIR (chủ yếu là elip) và FIR (chủ yếu là pha tối thiểu). Bộ lọc pha tối thiểu FIR không nhất thiết phải làm việc với tôi, vì tôi cần bộ lọc pha tuyến tính. Vì vậy, các tùy chọn là FIR pha pha tuyến tính có thể có độ trễ đáng kể trong nó hoặc IIR lọc kép (MATLABfiltfilt lệnh ) mà trước tiên lọc tiến lên sau đó lùi lại.

Một số ưu và nhược điểm của FIR và IIR như các bộ lọc downsampling là gì? Cái nào thực tế hơn trong một ứng dụng thời gian thực?

Câu trả lời:


10

Nếu pha tuyến tính là một yêu cầu, điều đó có thể sẽ giúp bạn hướng tới việc thực hiện FIR. Có thể xây dựng các bộ lọc IIR có pha tuyến tính gần đúng, nhưng có thể dễ dàng thiết kế FIR pha pha tuyến tính.

Nếu bạn lo lắng về độ trễ, lọc ngược tiến như trong filtfiltthực sự không phải là một lựa chọn tốt. Nói chung, nó thực sự có nghĩa là được sử dụng một quy trình ngoại tuyến, vì để thực hiện chính xác kỹ thuật, bạn phải chạy toàn bộ tín hiệu qua phía trước, sau đó thực hiện ngược lại. Điều đó ngụ ý rằng bạn có quyền truy cập vào toàn bộ tín hiệu cùng một lúc, điều này không tương xứng với độ trễ thấp.

Nói chung, bộ lọc FIR sẽ yêu cầu một thứ tự cao hơn cho một tập hợp các yêu cầu hiệu suất nhất định. Tuy nhiên, các bộ lọc FIR mang lại một số lợi thế thực sự, chẳng hạn như tính ổn định được đảm bảo, độ nhạy thấp hơn đối với các lỗi làm tròn (vì lỗi lượng tử hóa không được đưa trở lại qua bộ lọc, mặc dù bạn có thể bù cho điều này với độ phức tạp tăng lên) và đạt được đơn giản đáp ứng pha tuyến tính. Ngoài ra, việc triển khai bộ lọc FIR hiệu quả có sẵn cho nhiều kiến ​​trúc bộ xử lý, giảm thiểu chi phí của các vòi phụ.

Một cách khác để giảm chi phí nhấn thêm cho các bộ lọc FIR trong tình huống của bạn là tận dụng các kỹ thuật xử lý tín hiệu đa năng hiệu quả. Cụ thể, bạn có thể sử dụng một cách tiếp cận số thập phân polyphase để giảm đáng kể số lượng tính toán mà bạn thực hiện trong quá trình xác định tín hiệu của mình. Điều này có tác dụng làm giảm số lượng vòi hiệu quả (về độ phức tạp tính toán) trong bộ lọc decimation. Ngoài ra, nếu bạn cần giảm giá theo một yếu tố lớn, thì phương pháp tiếp cận đa tầng có thể giúp giảm thêm tải của bạn. Cuốn sách DSP giới thiệu của Lyons có một số tài liệu dễ đọc tốt về các chủ đề này.

Đưa ra các thông số cụ thể hơn của hệ thống của bạn, người ta có thể đưa ra các khuyến nghị rõ ràng hơn. Yêu cầu thiết kế bộ lọc của bạn là gì? Nền tảng của bạn có những khả năng tính toán nào? Tỷ lệ mẫu nào bạn sẽ quyết định?


Số thập phân polyphase chính xác là những gì tôi đang tìm kiếm! Cảm ơn =)
Phonon

@Phonon Và nếu bạn muốn nâng cao hơn nữa, hãy xem các triển khai 'CIC' (Cascade Integrator Comb). Đó là một kỹ thuật thường được sử dụng khi sự khác biệt về tỷ lệ lấy mẫu là rất lớn.
Spacey

Các bộ lọc CIC là phổ biến cho việc triển khai phần cứng (chẳng hạn như trong các GPU) vì chúng không yêu cầu bất kỳ phép nhân nào, chỉ trì hoãn và thêm. Điều này xảy ra với chi phí của một số mức độ tự do cho phản ứng của bộ lọc thực sự trông như thế nào. Nếu bạn có các yêu cầu chặt chẽ về đáp ứng tần số của bộ giải mã, bạn có thể làm tốt hơn các phương pháp CIC, miễn là bạn có thể đáp ứng khối lượng công việc.
Jason R

@JasonR Youve đã khơi dậy sự tò mò của tôi - điều gì tốt hơn CIC? (Tôi giả sử bạn vẫn đang nói về việc làm tốt hơn CIC cho FPGA hoặc chúng ta đang nói về ngoại tuyến?)
Spacey

Nhận xét của tôi liên quan đến thực tế là bạn có ít quyền kiểm soát đối với đáp ứng tần số của bộ lọc CIC khi so sánh với bộ lọc FIR chung, mà bạn có thể thiết kế để có một mức cắt sắc nét tùy ý nếu bạn cho nó đủ vòi. Như với hầu hết các vấn đề thiết kế bộ lọc, bạn cần tất cả các thông số kỹ thuật hiệu suất trên bảng để chọn cách tiếp cận tốt nhất.
Jason R

1

Làm thế nào thấp có nghĩa là "độ trễ thấp"?

Nếu bạn có nghĩa là dưới 1 mS với mức giảm tốc độ mẫu lớn, thì FIR pha tối thiểu có thể được yêu cầu. Nếu bạn có nghĩa là khoảng 1/30 giây, thì bạn thậm chí có thể thực hiện bộ lọc FIR pha pha tuyến tính hiệu quả bằng cách sử dụng phương pháp thêm / lưu (tích chập nhanh) chồng chéo FFT.


1

Một chút bí mật liên quan đến độ phức tạp thời gian: Bộ lọc FIR có thể vector hóa, điều này thực sự giúp ích trong các kiến ​​trúc CPU hiện đại. Hơn nữa, các bộ lọc IIR đạt hiệu quả cao vì giá trị đầu ra hiện tại phụ thuộc vào các giá trị đầu ra trước đó, loại bỏ lợi thế của đường ống.

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.