Bộ lọc FIR cần bao nhiêu vòi?


20

Tôi đang tìm cách thiết kế một bộ các bộ lọc FIR để thực hiện bộ lọc thông thấp. Tôi cũng đang cố gắng giảm độ trễ của tín hiệu thông qua bộ lọc vì vậy tôi tự hỏi số lượng vòi tối thiểu tôi có thể sử dụng có thể là bao nhiêu.

Tôi biết rằng nhiều vòi hơn có thể dẫn đến việc cắt tần số sắc nét hơn và từ chối băng tần tốt hơn, v.v. Tuy nhiên, điều tôi quan tâm là cơ bản hơn - nếu tôi muốn triển khai bộ lọc thông thấp với mức cắt tại nói điều đó có nghĩa là tôi cần ít nhất 100 vòi để giảm tín hiệu tần số thấp hơn? Hoặc tôi có thể thoát khỏi với ít vòi hơn và nếu vậy thì có giới hạn thấp hơn về mặt lý thuyết không?fs100

Câu trả lời:


24

Trích dẫn Xử lý tín hiệu kỹ thuật số cổ điển của Bellanger - Lý thuyết và thực hành , vấn đề không phải là tần số cắt của bạn là bao nhiêu, mà là bạn cần bao nhiêu suy giảm, mức độ gợn sóng trong tín hiệu bạn muốn duy trì và quan trọng nhất là thu hẹp quá trình chuyển đổi của bạn từ pass-sang stopband (độ rộng chuyển tiếp) cần phải được.

Tôi giả sử bạn muốn có bộ lọc pha tuyến tính (mặc dù bạn chỉ định độ trễ tối thiểu, tôi không nghĩ rằng bộ lọc pha tối thiểu là một ý tưởng hay, nói chung, trừ khi bạn biết rõ bạn sẽ làm gì với tín hiệu của mình sau đó) . Trong trường hợp đó, thứ tự bộ lọc (là số lượng vòi) là

N23đăng nhập10[110δ1δ2]fSΔf

với

fS tỷ lệ lấy mẫuΔf chiều rộng chuyển tiếp, I E. sự khác biệt giữa kết thúc băng thông và bắt đầu băng dừngδ1 Ripple trong passband, I E. "bao nhiêu biên độ ban đầu bạn có thể đủ khả năng để thay đổi"δ2 sự ngạc nhiên trong dải dừng.

Hãy cắm một số số! Bạn đã chỉ định tần suất cắt là , vì vậy tôi sẽ tiếp tục và tuyên bố chiều rộng chuyển đổi của bạn sẽ không quá một nửa, vì vậy .fS100Δf= =fS200

Đến từ công nghệ SDR / RF, mức triệt tiêu 60 dB thường là đủ đầy đủ - phần cứng, không có chi phí điên rồ, sẽ tốt hơn trong việc giữ các tín hiệu không mong muốn ra khỏi đầu vào của bạn, vì vậy, đừng lãng phí CPU khi có bộ lọc tuyệt vời tốt hơn hơn những gì phần cứng của bạn có thể làm. Do đó, .δ2= =-60 dB= =10-3

Giả sử bạn có thể sống với biến thiên biên độ 0,1% trong băng thông (nếu bạn có thể sống với nhiều hơn, cũng xem xét việc yêu cầu triệt tiêu bớt nghiêm ngặt hơn). Đó là .δ1= =10-4

Vì vậy, cắm cái này vào:

NBộ lọc của Tommy23đăng nhập10[110δ1δ2]fSΔf= =23đăng nhập10[11010-410-3]fSfS200= =23đăng nhập10[11010-7]200= =23đăng nhập10[110-6]200= =23(đăng nhập10106)200= =236200= =800 .

Vì vậy, với 200 vòi của bạn, bạn ở rất xa, nếu bạn sử dụng một dải thông cực kỳ hẹp trong bộ lọc của mình như tôi giả sử bạn sẽ làm.

Lưu ý rằng điều này không là một vấn đề - trước hết, một bộ lọc 800-vòi đáng sợ, nhưng thẳng thắn, chỉ ngay từ cái nhìn đầu tiên:

  • Như tôi đã thử nghiệm trong câu trả lời này tại StackOverflow : Ngày nay CPU rất nhanh , nếu bạn sử dụng triển khai FIR được tối ưu hóa cho CPU của ai đó. Ví dụ: tôi đã sử dụng triển khai FFT-FIR của GNU Radio với chính xác phác thảo đặc tả bộ lọc ở trên. Tôi có hiệu suất 141 triệu mẫu mỗi giây - điều đó có thể hoặc không đủ cho bạn. Vì vậy, đây là trường hợp thử nghiệm dành riêng cho câu hỏi của chúng tôi (mất vài giây để sản xuất):Bộ lọc FFT FIR dựa trên Radio Radiotỷ lệ kết quả: Phòngavg = 1.40982e + 08
  • Decimation: Nếu bạn chỉ giữ một phần băng thông đầu vào, đầu ra của bộ lọc của bạn sẽ bị quá tải. Giới thiệu một decimation của có nghĩa rằng bộ lọc của bạn không cung cấp cho bạn tất cả các mẫu đầu ra, nhưng mỗi thứ duy nhất - mà thông thường sẽ dẫn đến rất nhiều và rất nhiều răng cưa, nhưng kể từ khi bạn xóa bỏ mọi dấu hiệu cho thấy có thể bí danh, bạn có thể làm như vậy Cách thực hiện bộ lọc thông minh (bộ giải mã polyphase) có thể làm giảm nỗ lực tính toán bằng M, theo cách này. Trong trường hợp của bạn, bạn có thể dễ dàng ước tính bằng , và sau đó, máy tính của bạn sẽ chỉ phải tính toánMMM= =50120050= =24phép nhân / tích lũy trên mỗi mẫu đầu vào - dễ dàng hơn nhiều. Các bộ lọc trong GNU Radio thường có khả năng đó. Và theo cách này, ngay cả trong FFT FIR (vốn không cho vay rất tốt cho việc thực hiện bộ giải mã đa âm), tôi có thể đạt được một yếu tố khác là 2 trong hiệu suất. Không thể làm nhiều hơn nữa. Theo kinh nghiệm của tôi, nó khá gần với băng thông RAM. Dành cho
  • Độ trễ: Đừng quan tâm đến nó. Thực sự, không, trừ khi bạn cần. Bạn đang làm điều này với tốc độ lấy mẫu âm thanh điển hình? Hãy nhớ rằng, đã đề cập ở trên. Vì vậy, thời gian tính toán đầu ra bộ lọc sẽ chỉ có liên quan đến truyền phát tín hiệu trực tiếp của MS / s. Đối với DSP có dữ liệu ngoại tuyến: tốt, hãy thêm độ trễ cho bất kỳ tín hiệu nào bạn có song song với bộ lọc để bù lại. (Nếu bộ lọc của bạn là pha tuyến tính, độ trễ của nó sẽ bằng một nửa chiều dài bộ lọc.) Điều này có thể có liên quan trong việc triển khai phần cứng của bộ lọc FIR.96kSS«nực cười141S
  • Triển khai phần cứng: Vì vậy, có thể CPU và HĐH của PC hoặc thiết bị nhúng của bạn thực sự không cho phép bạn thực hiện các hạn chế về độ trễ của mình và vì vậy, bạn đang xem xét các FIR được triển khai bằng FPGA. Điều đầu tiên bạn sẽ nhận thấy là đối với phần cứng, có một thiết kế khác nhau - một "Tôi triệt tiêu mọi thứ trừ1100của bộ lọc tốc độ đầu vào của tôi "cần độ rộng bit lớn cho các số điểm cố định mà bạn xử lý trong Phần cứng (như được đặt ở các số dấu phẩy động trên CPU). Vì vậy, đó là lý do đầu tiên khiến bạn thường chia bộ lọc đó thành nhiều phần , xếp tầng, nhỏ hơn, giảm dần các bộ lọc FIR. Một lý do khác là bạn có thể, với mỗi "bước" xếp tầng, hãy để các số nhân của bạn (thường là "các lát DSP") chạy ở tốc độ thấp hơn và do đó, ghép chúng (số lát DSP thường rất hạn chế), sử dụng một số nhân cho nhiều vòi. Tuy nhiên, một lý do khác là đặc biệt là các bộ lọc nửa băng tần, tức là các đường thông thấp triệt tiêu một nửa dải đầu vào và cung cấp một nửa tốc độ đầu vào, có thể thực hiện rất hiệu quả trong phần cứng (vì chúng có một nửa các vòi là 0, một thứ khó khai thác khi triển khai CPU / SIMD).

3
Lake DSP đã thực hiện 256.000 bộ lọc FIR trong thời gian thực vào giữa đầu những năm 1990. 1200 vòi? Phfffft! ;-)
Peter K.

2
@PeterK. Đó là tinh thần! Sự tôn trọng sâu sắc đối với FIR 256kT đó - độ chính xác bằng số mà họ đã xây dựng mà chắc chắn phải ngoạn mục như kích thước tuyệt đối của thiết kế. Quá trẻ để tự mình thưởng thức công nghệ, những năm đầu thập niên 90 hẳn là một khoảng thời gian thú vị. Nói chuyện với một kỹ sư một thời gian trước đó đã làm IC DFT trở lại trong những ngày đó; nhu cầu về các ASIC DSP dành riêng cho ứng dụng dường như rất cao khi mọi người nhận ra những gì có thể là DSP-khôn ngoan với các nền tảng điện toán để thực sự xử lý các luồng dữ liệu kết quả, nhưng không có các nhà cung cấp "đa mục đích" (không giống như ngày nay).
Marcus Müller

@PeterK., Yeah nhưng aussies luôn kéo chân chúng tôi.
robert bristow-johnson

@ robertbristow-johnson oy matey, những gì một trò đùa nội bộ đang diễn ra ở đây: D?
Marcus Müller

2
@ MarcusMüller, mặc dù trước đây dường như có sự phổ biến ngày càng tăng của ASIC so với bây giờ (và tôi nghĩ rằng bởi vì tất cả mọi người là một nhà thiết kế / thiết kế ASIC bây giờ chỉ sử dụng các GPU) đã có DSP "đa mục đích" từ sớm Những năm 90 LakeDSP thingie đã được tạo ra từ 6 DSP56001.
robert bristow-johnson

14

Đối với một ước tính nhanh chóng và rất thực tế, tôi thích quy tắc ngón tay cái của harris:

NtmộtpS= =Mộttten22*BT

Ở đâu:

Atten là mức suy giảm mong muốn tính theo dB,

BT là dải chuyển tiếp được chuẩn hóa ,BT= =FStop-FpmộtSSFS

FStopFpmộtSS

FS

Điều này xuất hiện rất gần với những gì bạn sẽ nhận được cho bộ lọc pha tuyến tính với độ gợn băng thông 0,1 dB. Tôi thường xuyên sử dụng quy tắc này để có ý tưởng cắt đầu tiên về số lượng vòi cần thiết, sau đó sửa đổi thông qua việc lặp lại trong quy trình thiết kế bộ lọc.

Cũng cần lưu ý: quy tắc ngón tay cái này cung cấp cái nhìn sâu sắc về những gì thực sự thúc đẩy số lượng vòi: sự suy giảm băng tần và độ dốc của dải chuyển tiếp (và gợn băng thông, nhưng thường là - ít nhất là đối với các bộ lọc tôi phải thiết kế cho các ứng dụng comm không dây - yêu cầu suy giảm sẽ chiếm ưu thế trên Ripple). Vì vậy, câu hỏi của bạn trong việc nêu rõ mức cắt ở Fs / 100 bị thiếu nhanh như thế nào bạn cần chuyển sang dải dừng.

FSFpmộtSSFStop

NtmộtpS= =6022*2/100= =137

Chơi xung quanh với những con số này cũng có thể chứng minh tầm quan trọng trong việc giảm xử lý bằng cách sử dụng các phương pháp tiếp cận số thập phân.


7

Thêm vào câu trả lời được chấp nhận, một vài tài liệu tham khảo bổ sung. Tôi sẽ không viết các công thức có thể tham gia. Những công thức này chủ yếu mang lại quy tắc ngón tay cái hoặc xấp xỉ để bắt đầu từ. Bạn có thể mân mê những con số này cho thiết kế thực tế của bạn.

Một trong những nguồn gốc cho thiết kế của Bellanger là: Về độ phức tạp tính toán trong các bộ lọc kỹ thuật số, 1981, Proc. Á Âu Conf. Thiết kế lý thuyết mạch, M. Bellanger. Nó là khá khó khăn để có được, nhưng nó có thể làm được . Thật thú vị, nó cũng chỉ định các công thức để đánh giá số lượng bit trên mỗi hệ số, cần được xem xét trong việc thực hiện số học hữu hạn. Một phiên bản dễ tiếp cận hơn trong tiếng Pháp là: Ev Assessment de la Complexité des lọcres numériques , 1982.

Một số công thức khác được tập hợp trong thiết kế bộ lọc đáp ứng xung hữu hạn , Sổ tay xử lý tín hiệu số, 1993, T. Samamaki.

Gần đây, bạn có thể đọc Ước tính chính xác về độ dài bộ lọc tối thiểu cho các bộ lọc kỹ thuật số FIR tối ưu , 2000, K. Ichige et al.

Cuối cùng, giấy Thiết kế hiệu quả các bộ lọc FIR với các đơn đặt hàng bộ lọc tối thiểu sử dụng tối ưu hóa định mức l0 , 2014 tuyên bố một thiết kế trong đó đơn hàng giảm dần.


4

giảm thiểu tối đa(|H(ω)|)cho tất cả ω trong băng chặn
tùy thuộc vào1δ|H(ω)|δ cho tất cả ω trong băng thông

Các vấn đề thực tế chính mà tôi có thể nghĩ đến là số lượng mẫu tần số được sử dụng khi thực hiện tối ưu hóa, vì hành vi mẫu giữa các tần số có thể gây ra các hiệu ứng không mong muốn. Làm thế nào tốt phù hợp có thể trở thành, tất nhiên phụ thuộc vào số lượng vòi. Tôi đoán bạn có thể nói rằng số lượng vòi tối thiểu là khi vấn đề trở nên không khả thi. Vì vậy, một giải pháp sẽ là giải quyết vấn đề khả thi.

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.