Bộ bù FIR khi sử dụng bộ lọc decimation CIC


Câu trả lời:


3

Không có câu trả lời duy nhất cho câu hỏi của bạn: như với bất kỳ vấn đề thiết kế bộ lọc nào, nó phụ thuộc vào yêu cầu của bạn. Như được mô tả khá tốt trên trang Wikipedia , các bộ lọc CIC (cascaded-integrator-comb) bao gồm một số cặp tích hợp và các giai đoạn lược (do đó có tên). Mỗi giai đoạn tích hợp-lược có một đáp ứng xung tổng hợp tương đương với bộ lọc boxcar (nghĩa là một bộ lọc có đáp ứng tần số hình chữ nhật). Đáp ứng tần số (cường độ) của một chiếc xe có hình dạng giống như hàm chân, do đó, cấu trúc CIC tổng thể sẽ có đáp ứng cường độ trông giống như một hàm chân được đưa đến một công suất , trong đó N là số giai đoạn kết hợp tích hợp.NN

Tuy nhiên, không có nhiều nút để bạn điều chỉnh dựa trên bất kỳ yêu cầu cụ thể nào của ứng dụng, tuy nhiên. Bạn có thể điều chỉnh tỷ lệ số thập phân / nội suy của cấu trúc CIC, độ trễ của lược và số lượng giai đoạn, nhưng bạn vẫn bị mắc kẹt với đáp ứng tần số giống như chân thật, không đặc biệt lý tưởng, vì nó không bằng phẳng thùy chính và có sidelobes tương đối cao. Vì vậy, nó là điển hình cho một CIC được theo sau bởi một bộ lọc khác "dọn sạch" phản hồi tổng thể.

Chà: những gì bạn cần từ bất kỳ bộ lọc bù nào mà bạn đặt sau CIC sẽ được xác định bởi ứng dụng của bạn. Điều thực sự quan trọng là phản ứng của dòng thác tổng thể mà bạn sẽ giới hạn dựa trên nhu cầu của ứng dụng. Không có bộ lọc cụ thể nào là "phù hợp nhất".


Trường hợp bạn đã viết "một với đáp ứng tần số hình chữ nhật", không có nghĩa là "một với đáp ứng xung hình chữ nhật ?
nibot

Vâng bạn đã đúng. Cảm ơn đã chỉ ra sai lầm.
Jason R

4

Có một câu hỏi tương tự, /signals//a/1551/306 , và sau đây là một tập hợp con của câu trả lời từ bài đăng khác.

Nói chung, để bù cho bộ lọc CIC, có thể sử dụng nghịch đảo của phản ứng bộ lọc CIC để tạo bộ lọc bù. CIC có phản hồi là 2

H(ω)=|sin(ωD/2)sin(ωM/2)|N

Trong đó D là độ trễ phân biệt, M là tốc độ giảm dần và N là thứ tự bộ lọc (số lượng bộ lọc xếp tầng). Nghịch đảo có thể được chỉ định là

H(ω)=|sin(ωM/2)sin(ωD/2)|N

Khi chúng tôi có đáp ứng tần số của bộ lọc bù, chúng tôi chỉ cần chọn độ dài của bộ lọc FIR mà chúng tôi mong muốn. Độ dài của FIR là ứng dụng cụ thể. Rõ ràng bộ lọc FIR càng dài thì bù càng tốt.

Sau đây là các lô của bồi thường thẳng về phía trước này.

Sau đây là mã Python để tạo ra các đáp ứng tần số và âm mưu.

nhập numpy như np từ numpy nhập sin, abs, pi nhập pylab

D = 1; M = 7; N = 3

Hfunc = lambda w : abs( (sin((w*M)/2)) / (sin((w*D)/2.)) )**N
HfuncC = lambda w : abs( (sin((w*D)/2.)) / (sin((w*M)/2.)) )**N

w = np.arange(1024) * pi/1024

G = (M*D)**N
H = np.array(map(Hfunc, w))
Hc = np.array(map(HfuncC, w))
# only use the inverse (compensation) roughly to the first null.
Hc[int(1024*pi/M/2):] = 1e-8
plot(w, 20*log10(H/G))
plot(w, 20*log10(Hc*G))
grid('on')

sinc1

1 Altera, "Tìm hiểu các bộ lọc bù CIC"

2 R. Lyons, "Tìm hiểu về xử lý tín hiệu số", tái bản lần thứ 2, Hội trường Prentice, Thượng Yên River, New Jersey, 2004


Bạn hiển thị đáp ứng tần số mong muốn trong bộ lọc bù ... nhưng làm thế nào để bạn có được hệ số bộ lọc tạo ra bộ lọc gần đúng với đáp ứng này? Tôi nghĩ đó là những gì câu hỏi đang hỏi.
nibot

0

ISOP (Đa thức bậc hai nội suy) thường được sử dụng để bồi thường cho việc bỏ qua băng thông CIC.

Phản hồi Matlab của bộ lọc này có thể được hiển thị bằng cách sử dụng:

alpha = 0.01 ;
b     = [1, alpha, -alpha] ; 
h     = mfilt.firsrc(1,1,b)
freqz( b )

Chọn alpha cho yêu cầu của bạn là phần khó khăn. Trường hợp xấu nhất mô phỏng lực lượng vũ phu, lặp lại từ 0 đến 0,5 trong 0,001 gia số tìm thấy alpha dẫn đến bù trừ tốt nhất. Xác định bù trừ tốt nhất là lỗi tối thiểu ở rìa băng thông của bạn.

Để đạt hiệu quả, bộ lọc này thường được đặt ở tốc độ dữ liệu thấp hơn, trước CIC để nội suy và sau CIC để xác định.


Xem Xem dsp.stackexchange.com/questions/19584/ Khăn để biết cách giải thích / giải thích khác về phương pháp bồi thường này.
Dan Boschen
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.