Sau đây giải quyết vấn đề bồi thường CIC và không phải là một kỹ thuật "bóp méo" chung. Nhưng nó là một phương pháp đơn giản để "bù đắp" "biến dạng" không thay đổi. Nếu đáp ứng tần số được biết thì nghịch đảo của tần số có thể được sử dụng để bù. Các ví dụ như bộ lọc CIC, trong đó bộ lọc kém có thể được sử dụng do độ phức tạp giảm, sẽ được bù sau chuỗi tín hiệu. Trong ví dụ này, đáp ứng tần số là biết và nghịch đảo có thể được sử dụng. Lưu ý, với các bộ lọc đa tốc độ, bạn chỉ muốn sử dụng phổ "có thể sử dụng" sau khi giảm.
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 (xem tài liệu tham khảo [r2] hoặc [r3])
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.
import numpy as np
from numpy import sin, abs, pi
import 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')
Xem [r1] để biết các cách tiếp cận khác và xấp xỉ .sinc−1
[r1] Altera, "Tìm hiểu về bộ lọc bù CIC"
[r2] 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
[r3] R. Lyons, "Tìm hiểu bộ lọc tích hợp xếp tầng"