เมื่อทำการถอดรหัสสัญญาณย่านความถี่แคบด้วยตัวกรองสัญญาณแบบรวมซ้อน (CIC) ตัวกรอง FIR ใดที่เหมาะสมกว่าในการชดเชยการตอบสนองของ CIC แบบอิสระ?
เมื่อทำการถอดรหัสสัญญาณย่านความถี่แคบด้วยตัวกรองสัญญาณแบบรวมซ้อน (CIC) ตัวกรอง FIR ใดที่เหมาะสมกว่าในการชดเชยการตอบสนองของ CIC แบบอิสระ?
คำตอบ:
ไม่มีคำตอบสำหรับคำถามของคุณ: เช่นเดียวกับปัญหาการออกแบบตัวกรองใด ๆ มันขึ้นอยู่กับความต้องการของคุณ ตามที่อธิบายไว้ค่อนข้างดีในหน้า Wikipediaตัวกรอง CIC (cascaded-integrator-comb) ประกอบด้วยจำนวนคู่ของตัวรวมและขั้นตอนการรวม (ชื่อจึงมี) แต่ละขั้นตอน integrator-comb มีการตอบสนองต่อแรงกระตุ้นแบบรวมซึ่งเทียบเท่ากับตัวกรองแบบ boxcar (เช่นขั้นตอนที่มีการตอบสนองความถี่รูปสี่เหลี่ยม) การตอบสนองความถี่ (ขนาด) ของ boxcar มีรูปร่างคล้ายกับฟังก์ชัน sinc ดังนั้นโครงสร้าง CIC โดยรวมจะมีการตอบสนองขนาดที่ดูเหมือนฟังก์ชั่น sinc ที่ใช้กับกำลังบางส่วนโดยที่คือจำนวนสเตเตอร์สำหรับหวีN
มีลูกบิดไม่มากสำหรับคุณในการปรับแต่งตามความต้องการเฉพาะแอปพลิเคชัน คุณสามารถปรับแต่งอัตราส่วนการทำลายล้าง / การแก้ไขของโครงสร้าง CIC ความล่าช้าในการหวีและจำนวนขั้นตอน แต่คุณยังคงติดอยู่กับการตอบสนองความถี่แบบซินซึ่งไม่เหมาะอย่างยิ่งเนื่องจากไม่แบน กลีบหลักและมีไซเดลเบอร์ค่อนข้างสูง ดังนั้นจึงเป็นเรื่องปกติที่ CIC จะตามด้วยตัวกรองอื่นที่ "ล้าง" การตอบสนองโดยรวม
การถู: สิ่งที่คุณต้องการจากตัวกรองชดเชยที่คุณใส่หลังจาก CIC จะถูกกำหนดโดยแอปพลิเคชันของคุณ สิ่งที่สำคัญจริงๆคือการตอบสนองของน้ำตกโดยรวมซึ่งคุณจะ จำกัด ตามความต้องการของแอปพลิเคชันของคุณ ไม่มีตัวกรองเฉพาะที่เหมาะสมที่สุด
มีคำถามที่คล้ายกันคือhttps://dsp.stackexchange.com/a/1551/306และต่อไปนี้เป็นส่วนย่อยของคำตอบจากโพสต์อื่น
โดยทั่วไปในการชดเชยตัวกรอง CIC การผกผันของการตอบสนองตัวกรอง CIC สามารถใช้ในการสร้างตัวกรองการชดเชย CIC มีการตอบสนอง2
โดยที่ D คือความแตกต่างที่ล่าช้า M คืออัตราการทำลายล้างและ N คือลำดับตัวกรอง (จำนวนตัวกรองแบบเรียงซ้อน) สามารถระบุผกผันเป็น
เมื่อเรามีการตอบสนองความถี่ของตัวกรองค่าตอบแทนเราสามารถเลือกความยาวของตัวกรอง FIR ที่เราต้องการ ความยาวของ FIR นั้นเฉพาะแอปพลิเคชัน เห็นได้ชัดว่ายิ่ง FIR กรองนานขึ้นค่าตอบแทนก็จะดีขึ้น
ต่อไปนี้เป็นแผนของการชดเชยล่วงหน้า
ต่อไปนี้เป็นรหัส Python เพื่อสร้างการตอบสนองความถี่และแปลง
numpy นำเข้าเป็น np จากบาปนำเข้า numpy, abs, pi นำเข้า 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')
ดูAltera, "การทำความเข้าใจฟิลเตอร์ชดเชย CIC"สำหรับวิธีการอื่น ๆ และประมาณ1
1 Altera "ทำความเข้าใจกับตัวกรองค่าตอบแทน CIC"
2ร. ลียง, "การทำความเข้าใจกับการประมวลผลสัญญาณดิจิทัล", 2 เอ็ด, Prentice Hall, Upper Saddle River, นิวเจอร์ซีย์, 2004
ISOP (พหุนามลำดับที่สองที่สอดแทรก) มักใช้เพื่อชดเชยค่าเสี้ยวของ passband CIC
Matlab การตอบสนองของตัวกรองนี้สามารถแสดงได้โดยใช้:
alpha = 0.01 ;
b = [1, alpha, -alpha] ;
h = mfilt.firsrc(1,1,b)
freqz( b )
การเลือกอัลฟาสำหรับความต้องการของคุณเป็นส่วนที่ยุ่งยาก กรณีเลวร้ายที่สุดในการจำลองกำลังของสัตว์เดรัจฉาน preform วนวน 0 ถึง 0.5 ในการเพิ่มขึ้น 0.001 ในการค้นหาอัลฟ่าซึ่งส่งผลให้การชดเชยที่ดีที่สุด การกำหนดค่าชดเชยการหลบหลีกที่ดีที่สุดเป็นข้อผิดพลาดน้อยที่สุดที่ขอบของ passband ของคุณ
เพื่อประสิทธิภาพตัวกรองนี้โดยปกติจะถูกวางไว้ที่อัตราข้อมูลที่ต่ำกว่าก่อน CIC สำหรับการแก้ไขและหลังจาก CIC สำหรับการทำลายล้าง