[PD] [lop~] coefficient calculation

Miller Puckette msp at ucsd.edu
Wed May 21 18:31:58 CEST 2014


Hi Joe -

That code is an approximation that works well for low cutoff
frequencies but badly for high ones.  (I should probably warn
about this in the help window... that'll go on my dolist)

cheers
M


On Fri, May 16, 2014 at 12:58:31PM +0100, Joe White wrote:
> Hi,
> 
> I've been looking at the [lop~] implementation (Pd-0.45-4) and noticed
> something that seem weird to me.
> 
> In d_filter, line 176:
> 
> static void siglop_ft1(t_siglop *x, t_floatarg f)
> {
>     if (f < 0) f = 0;
>     x->x_hz = f;
>     x->x_ctl->c_coef = f * (2 * 3.14159) / x->x_sr;
>     if (x->x_ctl->c_coef > 1)
>         x->x_ctl->c_coef = 1;
>     else if (x->x_ctl->c_coef < 0)
>         x->x_ctl->c_coef = 0;
> }
> 
> 
> Is it correct that for:
> 
> y[n] = x[n] * a + y[n-1] * b
> 
> *a = 2π * Fc / Fs*
> b = 1.0 - a
> 
> where Fc is the cut-off frequency and Fs the sampling frequency.
> 
> I appreciate the a coefficient is bounded afterwards but wouldn't that mean
> that Fc values greater than Fs / 2π will have no impact on the sound being
> processed.
> 
> For example if Fs is 44100, then Fc values above ~7020Hz will not affect
> the filter.
> 
> Have I missed something crucial or could this a bug in the code?
> 
> The simple IIR filter described in
> http://en.wikipedia.org/wiki/Low-pass_filter suggests that the actual
> coefficient calculation should be more like:
> 
> a = 2π*Fc / (2π*Fc + Fs)
> 
> Looking forward to understand this more!
> 
> Cheers,
> Joe
> 
> -- 
> Follow me on Twitter @diplojocus

> _______________________________________________
> Pd-list at lists.iem.at mailing list
> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list




More information about the Pd-list mailing list