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)'
H =inv(Gm+Cm*s)*Is;
H(idn)
ans =
625/(s + 625)
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)'
H = inv(Gm+Cm*s)*Is;
H(idn)
ans =
390625/(s^2 + 1875*s + 390625)
a2 = [ 1 1875 625^2];
b2 = 625^2;
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
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)'
H = inv(Gm+Cm*s)*Is;
H(idn)
ans =
390625/(s + 625)^2