Fast Modulation of Filter Parameters

DSP, Plugin and Host development discussion.
Post Reply New Topic
RELATED
PRODUCTS

Post

Z1202 wrote: Tue May 28, 2019 12:30 pm
S0lo wrote: Mon May 27, 2019 9:09 pmThe 3 wasn't for that one. It was for a 1-pole with 2-zero at nyquist.
You should be able to do with just 1 zero. Your goal 2-pole function should have no more than 2-zeros and (assuming the poles are complex) it should be expressible as an average of two complex 1-poles without any zeros mixed with the input (unfiltered) signal added to that or something like that. Mixing coefficients need to be found out. I'm not sure whether allowing 1-poles to have 1-zero will remove the need to mix in the input signal or not, but you shouldn't have 2 zeros in a 1-pole.

See partial fraction expansion for more detail.
All the zeros at nyquist (weather 1 or 2 or none) are put in serial prior to the pole. So they are just input to the 1-pole in all 3 cases. For example here is the 1-zero case:

Code: Select all

temp=re;
re = b0*(in0 + in1) + R*(x*re - y*im);
im = R*(x*im + y*temp);
out0 = re;
No mixing is done what so ever.

I tried all cases, no-zeros, 1-zero and 2-zero. In all cases, droping the imaginary part after the 1-pole to relief some CPU, causes the resultant slope to be as shown above. Slightly shallower than expected. Nothing is for free.

The reason I needed the transfer function is because I need to normalize it. i.e. find the b0 coefficient.

On paper, In all cases, weather I include the zeros in the transfer function or not, averaging generates an extra real zero that follows the real component of the poles (i.e not fixed to nyquist). If averaging is really what dropping the imaginary part does (which indeed seams correct), then that shallow slope is probably caused by that extra zero attenuating the poles. Thats all I wanted to say. Not trying to be too picky about it.
www.solostuff.net
Advice is heavy. So don’t send it like a mountain.

Post

S0lo wrote: Wed May 29, 2019 12:08 amAll the zeros at nyquist (weather 1 or 2 or none) are put in serial prior to the pole. So they are just input to the 1-pole in all 3 cases.
Normally the zeros would be "automatically" generated by mixing, if you properly tune the mixing coefficients(that is you can place them anywhere you want, but you need to find the mixing coefficients). That's the idea. If you try to "manually" add zeros, you may end up with having "extra" ones.

Post

E.g.

Code: Select all

(z+1)(z-1)         1/2+j       1/2-j
---------- = 1 + --------- + ---------
 z^2-z+1/2       z-(1+j)/2   z-(1-j)/2

Post

Z1202 wrote: Wed May 29, 2019 8:42 am E.g.

Code: Select all

(z+1)(z-1)         1/2+j       1/2-j
---------- = 1 + --------- + ---------
 z^2-z+1/2       z-(1+j)/2   z-(1-j)/2
EDIT: fixed a few thingies bellow

This clarifies allot. So we basically have:

Noname.jpg

I left the second zero out of it in serial. Finding the coefficients cr and ci leads to:

cr=1
ci=-(1/R + x)/y;

Final code works well. And the slope is perfect. However, not much to the CPU saving. Because ci now is an additional complex coefficient that wasn't needed before which involves 2 divisions and 1 addition . The original line that calculated the second pole is:

out0 = re1 + R*(x*out0)

Which involves 2 multiplications and 1 addition. This was supposed to be our saving. Which is now counter acted by ci calculation.

Edit: Actually it even requires more operations since now the imaginary part has to involve an extra multiplication and addition

Code: Select all

im = ci*in0 + R*(x*im + y*temp); 
instead of:

Code: Select all

im = R*(x*im + y*temp); 
However, I have to say that this thing sounds different at fast modulation. Different than both TPT and the CPS in the article!!. And I do like it, it has less gain jumps at high resonance.
You do not have the required permissions to view the files attached to this post.
Last edited by S0lo on Mon Jul 08, 2019 6:32 pm, edited 1 time in total.
www.solostuff.net
Advice is heavy. So don’t send it like a mountain.

Post

mystran wrote: Mon May 27, 2019 8:53 pm In the beginning, Mother Earth created the man and she saw that the man was lost in his filter design. So she created the state variable filter for the man to use, such that the man wouldn't have to be lost anymore. But man was stubborn and wanted to use digital filters on his digital computer. So she created the trapezoidal integrator, such that man could use a digital state variable filter with his digital computer. And man was happy with this digital state variable filter using the trapezoidal integrator and everything was good, until suddenly Mother Earth died due to catastrophic ecosystem collapse that man had caused covering every nook and cranny in plastic and by releasing excessive carbon dioxide into the atmosphere in order to generate electricity to mine blockchain-hashes with his digital computer ... but like ... fnord.
Signaldust, any chance you could assist with a new version of your convolution plugin - 32 bit and 64 bit, which did not have the restrictions of high and low pass filters (or these could be turned off)...?

Post

kodebode2 wrote: Tue Jun 11, 2019 4:04 pm Signaldust, any chance you could assist with a new version of your convolution plugin - 32 bit and 64 bit, which did not have the restrictions of high and low pass filters (or these could be turned off)...?
Offtopic... but yeah, there is some chance I might revisit the topic of convolution one day, but don't hold your breath, because it's almost certainly not going to happen within the next three years.

Post

mystran wrote: Tue Jun 11, 2019 6:51 pm
kodebode2 wrote: Tue Jun 11, 2019 4:04 pm Signaldust, any chance you could assist with a new version of your convolution plugin - 32 bit and 64 bit, which did not have the restrictions of high and low pass filters (or these could be turned off)...?
Offtopic... but yeah, there is some chance I might revisit the topic of convolution one day, but don't hold your breath, because it's almost certainly not going to happen within the next three years.
I only saw this now after many months. I am honored by your response, I will wait for as long as it takes, assuming I am still alive.. your work is valuable to many of us, and it would be a pleasure to look forward to a copy of your unfiltered convolution plugin, at such a time in the future as you are ready for this.

Post Reply

Return to “DSP and Plugin Development”