Greetings Csound Developers,
I've been learning about designing filters in octave/matlab. I am wondering about the opcodes filter2 and zfilter2. Three issues: 1: Is there any reason to have a limit of 50 for the number of A or B coefficients? One article I read on waveguide strings uses a filter with 300 poles! 2: Could we include code to not initialize when the note is tied (iskip)? 3: It seems to me they operate slightly non-intuitively. M is the number of B-coefficients - fine. N is the number of A-coefficients, but the initial coefficient (always "1", I think) is assumed (that is, supplied by the code for the opcode), so the user has to paste in A-coefficients, leaving out the "1", and supply N = number of user-supplied A-coefficients, which means N does not equal the number of actual A-coefficients. I think it would be more beautiful if it worked like biquad, where the user supplies all the A-coefficients, including the initial "1". At least a note in the manual page might save someone having to figure it out. To avoid breaking the opcode for existing scores, maybe something (ugly) like: if (A_coefficient1 == 1) then use the rest of the given coefficients, and N = N-1; endif Many thanks, and thanks for what you do for Csound, Jim Croson |
I have had doubts about these two opcodes for a very long time. If the
poles are near the unt curcle then there is real problems with floting point rounding, at least tere was when I last tried. Regarding the change of definituons of A valus wghat if A_1 is supposed to be 1? I think it would need a new opcode for that change; anyway it is just a scaling issue methinks. OTOH it might be easy to raise the 50 liit with little effort or cost -- but am about to splot for today. On Thu, 12 Apr 2018, jcroson wrote: > Greetings Csound Developers, > > I've been learning about designing filters in octave/matlab. I am wondering about the opcodes filter2 and zfilter2. Three issues: > > 1: Is there any reason to have a limit of 50 for the number of A or B coefficients? One article I read on waveguide strings uses a filter with 300 poles! > > 2: Could we include code to not initialize when the note is tied (iskip)? > > 3: It seems to me they operate slightly non-intuitively. M is the number of B-coefficients - fine. N is the number of A-coefficients, but the initial coefficient (always "1", I think) is assumed (that is, supplied by the code for the opcode), so the user has to paste in A-coefficients, leaving out the "1", and supply N = number of user-supplied A-coefficients, which means N does not equal the number of actual A-coefficients. > > I think it would be more beautiful if it worked like biquad, where the user supplies all the A-coefficients, including the initial "1". At least a note in the manual page might save someone having to figure it out. > > To avoid breaking the opcode for existing scores, maybe something (ugly) like: > if (A_coefficient1 == 1) then > use the rest of the given coefficients, and > N = N-1; > endif > > Many thanks, and thanks for what you do for Csound, > > Jim Croson |
Free forum by Nabble | Edit this page |