dsp question on "analyzing the moog vcf"
-
- KVRer
- Topic Starter
- 23 posts since 12 Jun, 2004
i'm just reading the the stilson and smith paper "analyzing the moog vcf with considerations for digital implementation" (http://ccrma-www.stanford.edu/~stilti/p ... oogvcf.pdf) and i've got a problem in understanding the bilinear transformation in it. i hope someone here read it too and can help me with that.
for the transformation the transfer function s/(s+a) is used, but before the transfer function was given with wc/(wc+s). (wc is cutoff frequency). so i don't get it.
isn't s/(s+a) a highpass?
what is the variable a?
i hope someone can help me.
i'm desperate.
for the transformation the transfer function s/(s+a) is used, but before the transfer function was given with wc/(wc+s). (wc is cutoff frequency). so i don't get it.
isn't s/(s+a) a highpass?
what is the variable a?
i hope someone can help me.
i'm desperate.
-
- KVRist
- 250 posts since 17 Jun, 2004 from Magdeburg
It seems to me that s/(s+a) is simply a typo - what's meant is actually a/(s+a). If you substitute 2*(z-1)/(z+1) for s in that, you arrive at 1/2*(p+1)*(z+1)/(z+p) with p=(a-2)/(a+2), the form given. Presumably that part was copied and pasted for the backward difference transform later in the paper, repeating the typo. The backward difference transform is a bit weird also - it isn't quite clear to me why (1+1/z)/T=(z-1)/(zT). It ought to be (z+1)/(zT), if I'm not insane. Either way, I couldn't figure out what exactly was done to get (p+1)*z/(z+p) with p=a+1 out of a/(s+a) or s/(s+a), though with p=a+1 and s=(z+1)/z I get a/(s+a)=(p-1)*z/(1+p*z), which appears to have the same magnitude for z on the unit circle at least (couldn't be bothered to look at this properly tonight), times a constant depending on p.
-
- KVRAF
- 2458 posts since 3 Oct, 2002 from SF CA USA NA Earth
-
- KVRer
- Topic Starter
- 23 posts since 12 Jun, 2004
ok, if it's a typo, things gettin clearer.
if i substitute with s=2/T*(z-1)/(z+1) i get:
G(z)=(a*T*(z+1))/(a*T*(z+1)+2(z-1))
and not: 1/2*(p+1)*(z+1)/(z+p) with p=(a-2)/(a+2). at least i don't see it.
for easier calculating i set a*T=b:
G(z)=(b*(z+1))/(b*(z+1)+2(z-1))
if you set G(z)=Y(z)/X(z) you'll come to:
(2+b)*z*Y(z) + (b-2)*Y(z) = b*z*X(z) +b*X(z)
transformed in discrete time domain:
(2+b)*y(k+1) + (b-2)*y(k) = b*x(k+1) + b*x(k)
this could be written as:
y(k) = b/(2+b)*x(k) + b/(2+b)*x(k-1) + (2-b)/(2+b)*y(k-1)
i implemented this and it worked. if anybody finds a mistake please correct me, this is part of my project work (studienarbeit) for my studies
@fuzzpilz
sorry, had no time checking the backward difference transform, i have to finalize my project work till wednesday. but thanks for your answer, it helped me.
if i substitute with s=2/T*(z-1)/(z+1) i get:
G(z)=(a*T*(z+1))/(a*T*(z+1)+2(z-1))
and not: 1/2*(p+1)*(z+1)/(z+p) with p=(a-2)/(a+2). at least i don't see it.
for easier calculating i set a*T=b:
G(z)=(b*(z+1))/(b*(z+1)+2(z-1))
if you set G(z)=Y(z)/X(z) you'll come to:
(2+b)*z*Y(z) + (b-2)*Y(z) = b*z*X(z) +b*X(z)
transformed in discrete time domain:
(2+b)*y(k+1) + (b-2)*y(k) = b*x(k+1) + b*x(k)
this could be written as:
y(k) = b/(2+b)*x(k) + b/(2+b)*x(k-1) + (2-b)/(2+b)*y(k-1)
i implemented this and it worked. if anybody finds a mistake please correct me, this is part of my project work (studienarbeit) for my studies
@fuzzpilz
sorry, had no time checking the backward difference transform, i have to finalize my project work till wednesday. but thanks for your answer, it helped me.