RC Filters

Contents

rcf1.net

filename='rcf1.net';
type(filename);
parse;
sysbuild
s = sym('s');
tau = 1600*1e-6;
fc = 1/(2*pi*tau);
fprintf('cut-off frequency %g Hz\n',fc);
yname
idn = find(strcmp(yname,'V(out)'));
% simple RC filter

R R1 in out 1.6K
C C1 out 0 1u
V Vs in 0 1

cut-off frequency 99.4718 Hz

yname = 

    'V(in)'
    'V(out)'
    'I(Vs)'

% Transfer function
H =inv(Gm+Cm*s)*Is;
H(idn)
 
ans =
 
625/(s + 625)
 
% coefficients
a1 = [1 625];
b1 = 625;

rcf2.net

filename='rcf2.net';
type(filename);
parse;
sysbuild
s = sym('s');
yname
idn = find(strcmp(yname,'V(out)'));
% cascaded RC filters

R R1 in 2 1.6K
C C1 2 0 1u
R R2 2 out 1.6K
C C2 out 0 1u
V Vs in 0 1


yname = 

    'V(2)'
    'V(in)'
    'V(out)'
    'I(Vs)'

% Transfer function
H = inv(Gm+Cm*s)*Is;
H(idn)
 
ans =
 
390625/(s^2 + 1875*s + 390625)
 
% coefficients
a2 = [ 1 1875 625^2];
b2 = 625^2;

% note that
a2x = conv(a1,a1)
a2x =

           1        1250      390625

f = logspace(1,3,201);
s = 1j*2*pi*f;
h1 = polyval(b2,s)./polyval(a2x,s);
h2 = polyval(b2,s)./polyval(a2,s);
db1 = 20*log10(abs(h1));
db2 = 20*log10(abs(h2));
ph = semilogx(f,db1,f,db2,'LineWidth',2);
legend(ph,'transfer function cascade','circuit cascade');
axis([10 1000 -10 0]);
hold on
dbx = 20*log10(1/2);
plot([10 1000],[dbx dbx],'b--');
fc = interp1(db1,f,dbx);
plot([fc fc],[-10 0],'b--');
hold off;
grid
xlabel('frequency (Hz)');
ylabel('response (dB)');
fprintf('frequency at %g db = %g Hz\n',dbx,fc);
frequency at -6.0206 db = 99.4718 Hz

rcf3.net

% two RC circuits buffered by opamp voltage follower
filename='rcf3.net';
type(filename);
parse;
sysbuild
s = sym('s');
yname
idn = find(strcmp(yname,'V(out)'));
% cascaded RC filters

R R1 in 2 1.6K
C C1 2 0 1u
OA u1 2 3 3
R R2 3 out 1.6K
C C2 out 0 1u
V Vs in 0 1


yname = 

    'V(2)'
    'V(3)'
    'V(in)'
    'V(out)'
    'I(Vs)'
    'I(u1)'

% Transfer function
H = inv(Gm+Cm*s)*Is;
H(idn)
 
ans =
 
390625/(s + 625)^2