Hello All,<br> Following is a acript in which CIC block runs at a sampling rate of 1024*1024 and Hiir runs at a rate of 1024. I want to find out the combined effect of two filters (Hcic*Hiir) so that I can <br> see the entire spectrum. Is there any way out for that ?<br>
Regards,<br>Sumit<br><br><br><br>// ====================================================================================================== //<br>// Author : Sumit Adhikari<br>// Contact : <a href="mailto:sumit.adhikari@gmail.com">sumit.adhikari@gmail.com</a><br>
// Description : Script to find out the Frequency Response of the Droop Correction<br>// : Filter for a 3rd Order CIC filter with M downsample ratio <br>// ====================================================================================================== //<br>
<br><br>// ------------------------------------ Initial setup --------------------------------------------------- //<br> clear all ;<br> funcprot(0);<br> stacksize('max');<br><br>// ------------------------------------ Function Declarations ------------------------------------------- //<br>
<br>function [hzm,frm] = cic_resp(M,Npoints,SBW,Fact)<br> z = poly(0,'z');<br> <br> Hn = syslin('c',(z^M - 1.0), (z^M));<br> Hcic_num = Hn*Hn*Hn; // Hcic_num = Hn^3 --> Is Wrong !<br> <br> Hd = syslin('c',(z - 1.0), (z));<br>
Hcic_den = Hd*Hd*Hd ; // Hcic_den = Hd^3 --> Is Wrong ! <br> <br> Hcic = (Hcic_num / Hcic_den) / Fact ;<br> <br> [hzm,fr] = frmag(Hcic,Npoints);<br> frm = fr*SBW;<br><br>endfunction<br><br>// ------------------------------------- CIC Filter ------------------------------------------------------- //<br>
<br>// Calling cic_resp :<br> Npoints = 1024*1024 ;<br> M = 1024 ;<br> SBW = 1024*1024 ;<br> Fact = 2^14*2^16 ; <br> [hzm,frm] = cic_resp(M,Npoints,SBW,Fact);<br> clf(0);xset('window',0);plot(frm(1:Npoints),20.0*log10(hzm(1:Npoints)),"red"); mtlb_grid("on");<br>
<br><br>// -------------------------------- CIC Compensation Response --------------------------------------------- //<br>// CIC Compensation (IIR Response):<br> DSR = 1024 ;<br> Nd = SBW/DSR ; <br> fdu = frm(1:Nd) ;<br>
fd = 2*fdu/Nd ;<br> hzd = hzm(1:Nd) ;<br> hzc = 1.0./hzd ;<br> Fs = SBW/DSR ; <br> f = Fs*fd/2 ; <br><br>// Extra Edits :<br> fd(1) = 0.0 ;<br> fd(size(fd,"*")) = 1.0 ;<br>
<br> Order = 5 ;<br> Hcomp = yulewalk(Order,fd,hzc);<br> clf(1);xset('window',1);plot(f(1:Nd),20.0*log10(hzc(1:Nd)),"red"); mtlb_grid("on");<br><br><br><br>// --------------------------------- Low Pass Filter -------------------------------------------------- //<br>
Hlpf = iir(5,'lp','ellip',[.3 .5],[.01 .0001]);<br> [hlpf,fr] = frmag(Hlpf,1024);<br> clf(2);xset('window',2);plot(Fs*fr',20*log10(hlpf'),"red"); mtlb_grid("on");<br>
<br><br><br>// --------------------------------- Combined Response of Two Filters --------------------------------- //<br> Hiir = Hcomp*Hlpf ;<br> [hiir,fr] = frmag(Hiir,1024);<br> clf(3);xset('window',3);plot(Fs*fr',20*log10(hiir'),"red"); mtlb_grid("on");<br>
<br><br><br><br>// ---------------------------------------- Quantizing Hiir ------------------------------------------ //<br> Qfact = 2^12 ;<br> b_iir = coeff(numer(Hiir)) ;<br> a_iir = coeff(denom(Hiir))<br>
b_iir_quantized = int(Qfact*b_iir);<br> a_iir_quantized = int(Qfact*a_iir);<br> Hiir_quantized = poly(b_iir_quantized,'z','c')/poly(a_iir_quantized,'z','c');<br> [hiir_quantized,fr] = frmag(Hiir_quantized,1024);<br>
clf(4);xset('window',4);plot(Fs*fr',20*log10(hiir'),"red");plot(Fs*fr',20*log10(hiir_quantized'),"green"); mtlb_grid("on");<br> clf(5);xset('window',5);plzr(Hiir_quantized); mtlb_grid("on");<br>
<br><br>// ---------------------------------------- Transient Simulation ------------------------------------------ //<br> Time = 1.0 ;<br> Fin = 50.0 ;<br><br> t = 0.0:1.0/Fs:Time ;<br> x = sin(1.0*%pi*Fin*t);<br>
Xhiir = mtlb_filter(b_iir($:-1:1),a_iir($:-1:1),x);<br> Xhiir_quantized = mtlb_filter(b_iir_quantized($:-1:1),a_iir_quantized($:-1:1),x);<br> clf(6);xset('window',6);plot(t,x,"blue");plot(t,Xhiir,"red"); plot(t,Xhiir_quantized,"green") ;mtlb_grid("on");<br>
<br><br><br clear="all"><br>-- <br><br>--------------------------------------------<br>Sumit Adhikari<br>System Design Engineer<br>austriamicrosystems AG<br>Business Unit : Automotive<br>Mob : 00-91-9885271710/00-91-9000161710<br>