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