ar biquad asig, kb0, kb1, kb2, ka0, ka1, ka2[, iskip] ar rezzy asig, xfco, xres[, imode] ar moogvcf asig, xfco, xres[, iscale]
Implementation of a sweepable general purpose filter and two sweepable, resonant low-pass filters.
iskip (optional) - if non-zero, itialization will be skipped. Default value 0. (New in Csound version 3.50)
imode (optional) - if zero rezzy is low-pass, if nonzero, high-pass. Default value is 0. (New in Csound version 3.50)
iscale (optional) - internal scaling factor. Use if asig is not in the range +/-1. Input is first divided by iscale, then output is mutliplied iscale. Default value is 1. (New in Csound version 3.50)
asig - input signal
xfco - filter cut-off frequency in Hz. As of version 3.50, may i-,k-, or a-rate.
xres - amount of resonance. For rezzy, values of 1 to 100 are typical. Resonance should be one or greater. For moogvcf, self-oscillation occurs when xres is approximately one. As of version 3.50, may i-,k-, or a-rate.
biquad is a general purpose biquadratic digital filter of the form:
a0*y(n) + a1*y[n-1] + a2*y[n-2] = b0*x[n] + b1*x[n-1] + b2*x[n-2]
This filter has the following frequency response:
B(Z) b0 + b1*Z-1 + b2*Z-2 H(Z) = ---- = ------------------ A(Z) a0 + a1*Z-1 + a2*Z-2
This type of filter is often encountered in digital signal processing literature. It allows six user-defined k-rate coefficients.
rezzy is a resonant low-pass filter created empirically by Hans Mikelson.
moogvcf is a digital emulation of the Moog diode ladder filter configuration. This emulation is based loosely on the paper "Analyzing the Moog VCF with Considerations for Digital Implemnetation" by Stilson and Smith (CCRMA). This version was originally coded in Csound by Josep Comajuncosas. Some modifications and conversion to C were done by Hans Mikelson.
Note: This filter requires that the input signal be normalized to one.
;biquad example kfcon = *3.14159265*kfco/sr kalpha = -2*krez*cos(kfcon)*cos(kfcon)+krez*krez*cos(2*kfcon) kbeta = *krez*sin(2*kfcon)-2*krez*cos(kfcon)*sin(kfcon) kgama = +cos(kfcon) km1 = *kgama+kbeta*sin(kfcon) km2 = *kgama-kbeta*sin(kfcon) kden = (km1*km1+km2*km2) kb0 = .5*(kalpha*kalpha+kbeta*kbeta)/kden kb1 = kb0 kb2 = 0 ka0 = 1 ka1 = -2*krez*cos(kfcon) ka2 = krez*krez ayn biquad axn, kb0, kb1, kb2, ka0, ka1, ka2 outs ayn*iamp/2, ayn*iamp/2 ; Sta Dur Amp Pitch Fco Rez i14 8.0 1.0 20000 6.00 1000 .8 i14 + 1.0 20000 6.03 2000 .95 ;rezzy example kfco expseg 100+.01*ifco, .2*idur, ifco+100, .5*idur, ifco*.1+100, .3*idur, .001*ifco+100 apulse1 buzz 1,ifqc, sr/2/ifqc, 1 ; Avoid aliasing asaw integ apulse1 axn = asaw-.5 ayn rezzy axn, kfco, krez outs ayn*iamp, ayn*iamp ; Sta Dur Amp Pitch Fco Rez i10 0.0 1.0 20000 6.00 1000 2 i10 + 1.0 20000 6.03 2000 10 ;moogvcf example apulse1 buzz 1,ifqc, sr/2/ifqc, 1 ; Avoid aliasing asaw integ apulse1 ax = asaw-.5 ayn moogvcf ax, kfco, krez outs ayn*iamp, ayn*iamp ; Sta Dur Amp Pitch Fco Rez i11 4.0 1.0 20000 6.00 1000 .4 i11 + 1.0 20000 6.03 2000 .7
Hans Mikelson
October 1998
New in Csound version 3.49