Reg :: Combined Response of Two filters running at different rates

Sumit Adhikari sumit.adhikari at gmail.com
Mon Nov 30 11:34:01 CET 2009


Hello All,
  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
  see the entire spectrum. Is there any way out for that ?
Regards,
Sumit



//
======================================================================================================
//
// Author      : Sumit Adhikari
// Contact     : sumit.adhikari at gmail.com
// Description : Script to find out the Frequency Response of the Droop
Correction
//             : Filter for a 3rd Order CIC filter with M downsample ratio
//
======================================================================================================
//


// ------------------------------------ Initial setup
--------------------------------------------------- //
   clear all ;
   funcprot(0);
   stacksize('max');

// ------------------------------------ Function Declarations
------------------------------------------- //

function [hzm,frm] = cic_resp(M,Npoints,SBW,Fact)
   z = poly(0,'z');

   Hn = syslin('c',(z^M - 1.0), (z^M));
   Hcic_num = Hn*Hn*Hn;   // Hcic_num = Hn^3 --> Is Wrong !

   Hd = syslin('c',(z - 1.0), (z));
   Hcic_den = Hd*Hd*Hd ;  // Hcic_den = Hd^3 --> Is Wrong !

   Hcic = (Hcic_num / Hcic_den) / Fact ;

   [hzm,fr] = frmag(Hcic,Npoints);
   frm = fr*SBW;

endfunction

// ------------------------------------- CIC Filter
------------------------------------------------------- //

// Calling cic_resp :
   Npoints   = 1024*1024 ;
   M         = 1024 ;
   SBW       = 1024*1024 ;
   Fact      = 2^14*2^16 ;
   [hzm,frm] = cic_resp(M,Npoints,SBW,Fact);

clf(0);xset('window',0);plot(frm(1:Npoints),20.0*log10(hzm(1:Npoints)),"red");
mtlb_grid("on");


// -------------------------------- CIC Compensation Response
--------------------------------------------- //
// CIC Compensation (IIR Response):
   DSR  = 1024      ;
   Nd   = SBW/DSR   ;
   fdu  = frm(1:Nd) ;
   fd   = 2*fdu/Nd  ;
   hzd  = hzm(1:Nd) ;
   hzc  = 1.0./hzd  ;
   Fs   = SBW/DSR   ;
   f    = Fs*fd/2   ;

// Extra Edits :
   fd(1)            = 0.0 ;
   fd(size(fd,"*")) = 1.0 ;

   Order = 5 ;
   Hcomp = yulewalk(Order,fd,hzc);
   clf(1);xset('window',1);plot(f(1:Nd),20.0*log10(hzc(1:Nd)),"red");
mtlb_grid("on");



// --------------------------------- Low Pass Filter
-------------------------------------------------- //
   Hlpf       = iir(5,'lp','ellip',[.3 .5],[.01 .0001]);
   [hlpf,fr]  = frmag(Hlpf,1024);
   clf(2);xset('window',2);plot(Fs*fr',20*log10(hlpf'),"red");
mtlb_grid("on");



// --------------------------------- Combined Response of Two Filters
--------------------------------- //
   Hiir       = Hcomp*Hlpf ;
   [hiir,fr]  = frmag(Hiir,1024);
   clf(3);xset('window',3);plot(Fs*fr',20*log10(hiir'),"red");
mtlb_grid("on");




// ---------------------------------------- Quantizing Hiir
------------------------------------------ //
   Qfact               = 2^12 ;
   b_iir               = coeff(numer(Hiir)) ;
   a_iir               = coeff(denom(Hiir))
   b_iir_quantized     = int(Qfact*b_iir);
   a_iir_quantized     = int(Qfact*a_iir);
   Hiir_quantized      =
poly(b_iir_quantized,'z','c')/poly(a_iir_quantized,'z','c');
   [hiir_quantized,fr] = frmag(Hiir_quantized,1024);

clf(4);xset('window',4);plot(Fs*fr',20*log10(hiir'),"red");plot(Fs*fr',20*log10(hiir_quantized'),"green");
mtlb_grid("on");
   clf(5);xset('window',5);plzr(Hiir_quantized); mtlb_grid("on");


// ---------------------------------------- Transient Simulation
------------------------------------------ //
   Time = 1.0 ;
   Fin  = 50.0 ;

   t = 0.0:1.0/Fs:Time ;
   x = sin(1.0*%pi*Fin*t);
   Xhiir = mtlb_filter(b_iir($:-1:1),a_iir($:-1:1),x);
   Xhiir_quantized =
mtlb_filter(b_iir_quantized($:-1:1),a_iir_quantized($:-1:1),x);
   clf(6);xset('window',6);plot(t,x,"blue");plot(t,Xhiir,"red");
plot(t,Xhiir_quantized,"green") ;mtlb_grid("on");




-- 

--------------------------------------------
Sumit Adhikari
System Design Engineer
austriamicrosystems AG
Business Unit : Automotive
Mob : 00-91-9885271710/00-91-9000161710
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20091130/be79dbe2/attachment.htm>


More information about the users mailing list