Các vấn đề với việc thiết kế bộ lọc FIR bằng FFT là gì?


15

Tôi đang cố gắng hiểu mối quan hệ giữa bộ lọc FIR được thiết kế từ "nguyên tắc đầu tiên" bằng cách sử dụng nhân bộ lọc có tích chập và bộ lọc được thiết kế theo một trong hai cách sử dụng FFT (xem bên dưới).

Theo tôi hiểu, đáp ứng xung của bộ lọc FIR là điều tương tự như hạt nhân chập của bộ lọc. (Sửa tôi nếu tôi sai.)

Ngoài ra, theo cách hiểu của tôi, tần số thành phần (tức là biến đổi Fourier) của đáp ứng xung của bộ lọc FIR cũng giống như đáp ứng tần số của bộ lọc. Và, do đó, biến đổi phạm vi nghịch đảo sẽ trả lại cho tôi đáp ứng xung. (Một lần nữa, hãy sửa tôi nếu tôi sai).

Điều này dẫn tôi đến hai kết luận (bỏ qua phản ứng pha hoặc giả sử phản ứng pha tuyến tính):

  1. Tôi có thể thiết kế bộ lọc FIR của đáp ứng tần số tùy ý bằng cách "vẽ" đáp ứng tần số mong muốn của mình, lấy IFFT để có đáp ứng xung và sử dụng nó làm hạt nhân tích chập.

  2. Ngoài ra, tôi có thể tạo bộ lọc bằng cách lấy FFT của tín hiệu đầu vào, nhân với đáp ứng tần số tùy ý mong muốn của tôi trong miền tần số và lấy IFFT của kết quả để tạo tín hiệu đầu ra.

Theo trực giác, cảm giác như 1 & 2 là tương đương, nhưng tôi không chắc liệu tôi có thể chứng minh điều đó không.

Có vẻ như mọi người (và tài liệu DSP) đã nỗ lực hết sức để thiết kế các hạt nhân FIR với các câu trả lời được xác định trước, sử dụng các thuật toán phức tạp (với tôi) như Ch Quashev hoặc Remez (Tôi đang ném ra một số tên tôi đã đọc, mà không thực sự hiểu chúng) .

  • Tại sao đi đến các độ dài này, khi một biến đổi FFT / IFFT tồn tại cho mọi hạt nhân FIR có thể?
  • Tại sao không chỉ đơn giản là vẽ đáp ứng tần số chính xác mà bạn mong muốn, lấy IFFT và có hạt nhân FIR của bạn (phương pháp 1 ở trên)?

Lĩnh vực quan tâm của tôi là âm thanh kỹ thuật số / âm nhạc kỹ thuật số, trong trường hợp nó có liên quan.
bryhoyt

Câu trả lời:


13

Một lý do bạn thấy mọi người thiết kế các bộ lọc FIR, thay vì thực hiện một cách tiếp cận trực tiếp (như cả 1 và 2) là cách tiếp cận trực tiếp thường không tính đến tính tuần hoàn trong miền tần số và thực tế là tích chập được thực hiện bằng FFT là tích chập tuần hoàn .

Điều đó có nghĩa là gì?

x= =[1,2,3,4]h= =[1,1]

Tích chập [ 1 , 3 , 5 , 7 , 4 ] , một vectơ 5 chiều dài. Nếu bạn sử dụng FFT (có độ dài sai, 4) thì câu trả lời bạn nhận được là [ 3 , 5 , 7 , 5 ] . Lý do cho sự khác biệt là kết quả của tích chập tuyến tính của hai phần này là chiều dài 5, nhưng kết quả của tích chập tròn là bất kể chiều dài FFT là gì.y= =x*h[1,3,5,7,4][3,5,7,5]

Nếu độ dài FFT lớn hơn hoặc bằng độ dài kết quả của tích chập tuyến tính, thì hai chiều dài là như nhau. Mặt khác, hai cái này không giống nhau (trừ khi dữ liệu bằng cách nào đó âm mưu biến nó thành như vậy, ví dụ nếu một tín hiệu bằng 0).


Chắc chắn, nhưng tại sao không ai đó sau đó chỉ cần đảm bảo kích thước FFT / IFFT tương xứng với độ dài tích chập cuối cùng? Ví dụ: độ dài tích chập là N + M - 1, vì vậy chỉ cần đảm bảo bạn 'vẽ' một đáp ứng tần số trong miền phạm vi, với độ dài M-1. Tại sao nó không hoạt động? Thú vị btw. :)
TheGrapeBeyond

1
M-1

2
Đáp ứng tần số có độ dài M-1 vẫn có đáp ứng xung dài vô hạn. Điều đó có nghĩa là khi bạn IFFT để có kết quả được lọc, phần đuôi của phản hồi xung của bộ lọc sẽ bao quanh (nhiều lần) và tăng tốc kết quả miền thời gian cuối cùng của bạn. Có lẽ một chút. Có lẽ rất nhiều.
hotpaw2

10

Một vấn đề là xử lý các biến đổi độ dài vô hạn bao quanh khi sử dụng FFT có độ dài hữu hạn. Biến đổi Fourier của đáp ứng tần số hữu hạn là đáp ứng xung có độ dài vô hạn hoặc nhân bộ lọc. Hầu hết mọi người muốn bộ lọc của họ kết thúc trước khi chết hoặc hết bộ nhớ máy tính, vì vậy cần có các thủ thuật để tạo ra các bộ lọc FIR ngắn hơn. Chỉ cần để phần đuôi của đáp ứng xung vô hạn bao quanh FFT hoặc cắt ngắn nó đến một số độ dài chung, có thể tạo ra bộ lọc FIR kém hơn cho thông số tần số mong muốn của bạn so với một trong các nguyên mẫu bộ lọc "cổ điển".

Một vấn đề khác là đáp ứng tần số "được vẽ" ngẫu nhiên thường có phản hồi khủng khiếp (độ vọt quá mức) giữa các điểm được vẽ ở bất kỳ độ phân giải hữu hạn nào. Chuyển đổi sang bộ lọc FIR và nó đổ chuông như điên. Các nguyên mẫu bộ lọc cổ điển được thiết kế để có các chức năng đáp ứng tần số trơn tru giữa các điểm mẫu.

(2) của bạn được gọi là tích chập nhanh và thường được sử dụng nếu FFT dài hơn độ dài của cửa sổ dữ liệu cộng với nhân bộ lọc kết hợp và thêm / lưu chồng chéo thích hợp được sử dụng để chăm sóc bắt đầu / kết thúc mỗi phân đoạn tích chập hoặc cửa sổ (vì các FFT thường có chiều dài khối).


6

Re 1): Có, bạn có thể thiết kế bộ lọc FIR bằng cách "vẽ" đáp ứng tần số (cả về cường độ và pha. Tuy nhiên, điều này có xu hướng rất không hiệu quả: độ dài của đáp ứng xung (và thứ tự bộ lọc) chỉ đơn giản là trước -được xác định bởi độ dài FFT của bạn. Nếu bạn chọn FFT 128 điểm, bạn sẽ nhận được 128 vòi để đáp ứng xung và nếu bạn chọn FFT 4096 điểm, bạn sẽ nhận được 4096 vòi lọc.

Re 2): Có, bạn có thể lọc bằng cách nhân trong miền tần số và đó thực sự là cách duy nhất để thực hiện hiệu quả đối với các đáp ứng xung lớn. Tuy nhiên, như Peter K đã chỉ ra, phép nhân trong miền tần số tương ứng với tích chập tuần hoàn. Cách phổ biến nhất để thực hiện tích chập tuyến tính là thuật toán "chồng chéo thêm" hoặc "lưu chồng lấp" (dễ dàng bị tách ra).


3

Tôi không chắc là tôi hiểu mọi thứ đã được nói ở đây, nhưng tôi muốn làm cho trường hợp của phương pháp Biến đổi Fourier.

Đầu tiên, đó là một cách cực kỳ linh hoạt và đơn giản để thiết kế các bộ lọc FIR. Như bạn đã nói, tất cả những gì cần phải làm là xác định cường độ và đáp ứng pha. Tuy nhiên, như đã nói, bạn cần phải cẩn thận một chút về cách bạn xác định phản hồi. Một phản hồi tùy ý có thể yêu cầu số lượng vòi cực lớn để thực hiện và đưa ra phản hồi miền thời gian khủng khiếp. Vì vậy, hãy cẩn thận làm thế nào bạn xác định nó.

Thứ hai, ví dụ, phương pháp Công viên McClellan thực sự có thể tạo ra bộ lọc tốt hơn phương pháp Fourier cho một số yêu cầu cụ thể, nhưng không dễ kiểm soát số lượng vòi và cũng xác định cường độ, pha và phản ứng bước với điều đó phương pháp.

Ví dụ: giả sử bạn muốn thiết kế bộ lọc FIR với các đặc điểm tương tự như Tàu IIR 10 cực, nhưng bạn muốn thu hẹp dải chuyển tiếp một chút (với chi phí vượt quá bước phản hồi). Sau đó, phương pháp Fourier làm cho vấn đề này trở nên dễ dàng để giải quyết với khoảng 22 vòi, tùy thuộc vào mức độ hẹp của dải chuyển tiếp.

Nếu bạn muốn xem phương thức Fourier có khả năng gì, hãy thử chương trình FIR này http://www.iowahills.com/5FIRFiltersPage.html (miễn phí). Ví dụ, nó có thể thiết kế tương đương IIR cho các bộ lọc Gauss, Bessel, Butterworth và Inverse Ch Quashev. Nói chung, nó cho phép bạn điều chỉnh phản hồi của bộ lọc đối với hầu hết mọi thứ, đó là điểm mạnh của phương pháp Fourier. Về phía bên dưới, các bộ lọc có thể không tối ưu cho một số yêu cầu cụ thể.


Điều đó có vẻ thú vị. Tôi sẽ phải dùng thử phần mềm để thực sự hiểu về những gì đang xảy ra - trang web dường như không thực sự mô tả phương pháp của nó quá chi tiết. Tuy nhiên, từ những gì tôi có thể nói, có vẻ như là một phép lai trong đó bạn điều khiển đáp ứng tần số của một nguyên mẫu bộ lọc được tạo theo cách truyền thống hơn. Đúng không? Tôi nghĩ những gì bạn nói là đúng - bạn cần cẩn thận với cách bạn xác định câu trả lời, hoặc bạn sẽ kết thúc với một số lượng lớn vòi. AFAIU, đây là vấn đề lớn với việc thiết kế bộ lọc dành riêng cho đáp ứng tần số.
bryhoyt

1

AFAIK cái này được gọi là "phương pháp lọc ngây thơ". Bạn có thể ảnh hưởng đến nội dung phổ tại một số điểm nhất định trong không gian tần số, nhưng bạn không làm gì hữu ích cho nội dung tần số giữa các điểm đó. Nếu bạn thiết kế bộ lọc FIR phù hợp, bạn thực sự cũng tính đến các điểm chính giữa các điểm chính đó và bộ lọc như vậy sẽ tốt hơn nhiều so với bộ lọc đầu tiên ..

Trân trọng, Bul.

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.