Book: The Art of VA Filter Design 2.1.2

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

Post

Hello Z1202 !

So, I have finally been able to read the entire new version of the book. Nice work and thanks for sharing again !

I think I have seen a few typos :
- page 85, the expression of H(s)_BP and H(s)_LP are wrong
- page 96, the decomposition should be a sum of H(s)_LP/BP/HP instead of HP/HP/HP

The final section was really heavy :lol: But very interesting ! Besides, out of curiosity, what was your motivation for writing it inside your book ?

I'm probably going to implement the nonlinear versions of the SVF and the TSK filters, to hear how much their lowpass outputs sound different.

Post

mystran wrote:You can design Hilbert IIR pairs the same way you design poly-phase half-band IIR filters (as parallel all-pass filters).
That is essentially the same EMQF procedure done in the digital domain for a specific center frequency of the HT's "passband". The pi/2 rotation is exactly the "LP to analytic" transformation. I'm kind of not too exited about it because, while saving some CPU, this forces you to a specific centering of the frequency band. If you later "shift the cutoff", you get exactly the same result, since the minimax solution should be unique (+/- ;) ).
Last edited by Z1202 on Mon Jul 13, 2015 9:58 am, edited 1 time in total.

Post

Wolfen666 wrote: I think I have seen a few typos :
- page 85, the expression of H(s)_BP and H(s)_LP are wrong
- page 96, the decomposition should be a sum of H(s)_LP/BP/HP instead of HP/HP/HP
Thanks! It's good I have been holding off with the bugfix update ;)
Wolfen666 wrote:The final section was really heavy :lol: But very interesting ! Besides, out of curiosity, what was your motivation for writing it inside your book ?
Because "dome filter style" Hilbert transformers are a "mystery" with highly insufficient information available on the www. So I thought I'd give it a shot and try to crack it. Seems it worked ;) As for writing it inside the book, it kind of fits to the topic (being not the most but still an important technique in the VA) and I rather dislike the modern approaches (see my other reply to mystran).

Post

Thanks for the extra information !

Oh and I have a stupid question : what are the applications of the Hilbert filters you are thinking about ? I don't know them well, I have already used them for a few things (a chorus algorithm and a frequency shifter), but I may have missed a few important ones ;)

Post

Wolfen666 wrote:Thanks for the extra information !

Oh and I have a stupid question : what are the applications of the Hilbert filters you are thinking about ? I don't know them well, I have already used them for a few things (a chorus algorithm and a frequency shifter), but I may have missed a few important ones ;)
Can be used in envelope detection. Returning the absolute max of the two signals should produce a smoother envelope, but I'm unsure how much aliasing would be generated switching between two signals like that.

Post

matt42 wrote:
Wolfen666 wrote:Thanks for the extra information !

Oh and I have a stupid question : what are the applications of the Hilbert filters you are thinking about ? I don't know them well, I have already used them for a few things (a chorus algorithm and a frequency shifter), but I may have missed a few important ones ;)
Can be used in envelope detection. Returning the absolute max of the two signals should produce a smoother envelope, but I'm unsure how much aliasing would be generated switching between two signals like that.
You can make an envelope follower with near-zero distortion by squaring the pair, adding, then taking the square root. Except the hilbert pair still has phase lag, and in the linear phase case pre-ring. Unfortunately when I tried this (in my DAW using plugins) I had problems with spurious noise bursts, no idea why.
It might have been related to the phase problem.
Last edited by camsr on Mon Jul 13, 2015 11:05 pm, edited 1 time in total.

Post

Practical envelope followers most likely are built similarly to practical pinking filters. Rather than attempting to build a complex single stage such as with a hilbert filter it can make far more sense to build a multi-stage approximation.

The dome filter method is such an approximation.

If a method can be found where the approximation convergence is greater than linear it is likely to be cheaper and more accurate than any real hilbert filter implementation would be.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

Thanks guys !

Post

Released the bugfix
http://www.native-instruments.com/filea ... _1.1.1.pdf
Fixed the Hilbert transformer formulas and the typos found by Wolfen666 (much appreciated).

Post

Never said it so far: thanks Vadim for publishing this :-)

And thanks for the update, too.
... when time becomes a loop ...
---
Intel i7 3770k @3.5GHz, 16GB RAM, Windows 7 / Ubuntu 16.04, Cubase Artist, Reaktor 6, Superior Drummer 3, M-Audio Audiophile 2496, Akai MPK-249, Roland TD-11KV+

Post

Code: Select all

yB[n] = g*yH[n] + s1;
s1 = g*yH[n] + yB[n]; // state update in 1st integrator

// compute lowpass output by applying 2nd integrator to bandpass output:
yL[n] = g*yB[n] + s2;
s2 = g*yB[n] + yL[n]; // state update in 2nd integrator
[/size]
Robin - I've been working my way through Vadim's paper here, and then saw your code. You've got

Code: Select all

yl(n) = g * yb(n) + s2 
s2 = g * yb(n) + yl(n)
here - which makes:

Code: Select all

s2 = 2 * g * yb(n) + s2
Is that 2 * g * yb(n) definitely right, and if so do you remember why? I'm prepared to believe I'm wrong, but I'm buggered if I can work out where that 2 comes from ;)

UPDATE: You definitely are right ... I'm missing something somewhere .. back to the pen and paper ...

UPDATE2: Solved it. I was failing to refer to the original integrator diagram from 40 pages back ... the new state of the integrator = output of the section + g * input of the section. So it all sounds good now ... ;)
Devious Machines

Post

Basil Rush wrote: UPDATE2: Solved it. I was failing to refer to the original integrator diagram from 40 pages back ... the new state of the integrator = output of the section + g * input of the section. So it all sounds good now ... ;)
OK, good. i think, i don't have my derivations around anymore anyway. it's some time ago and they were just scribbled down on a piece paper which meanwhile ended up in the paper recycling bin. i could have tried to re-derive, if something seems amiss, but you solved it, so i don't need to. after all, the code is working as expected, which would be highly improbable, if there would be an error in the equations somewhere
My website: rs-met.com, My presences on: YouTube, GitHub, Facebook

Post

Cheers Robin, much appreciated.

My error made the gain of the resonant peak drops off at higher frequencies, which was obvious after a slightly longer play.

Off to re-digest chapter 4 now. It's a pretty huge library of information this book ! I'm going to new a new pen and notebook before I'm finished.
Devious Machines

Post

Thanks for your book Vadim !

I haven't played with filter theory for a decade or so, and it was delightful to read this (even if i don't like you calling the Euler integrator "naive").

In the case of the RC low pass filter, won't it be better to use the step invariant transform (exp of coefficient matrix) instead of the bilinear transform ?

Code: Select all

for y' = a(x-y)
the coefficient matrix M is
   x   y
x' 0   0
y' a  -a

exp(M) = I + M + M2/2! + M3/3! +...
gives the digital domain step invariant transform
Again, thank you for your pdf
Thierry
See you here and there... Youtube, Google Play, SoundCloud...

Post

Smashed Transistors wrote:Thanks for your book Vadim !
You're welcome!
Smashed Transistors wrote:I haven't played with filter theory for a decade or so, and it was delightful to read this (even if i don't like you calling the Euler integrator "naive").
It's actually the other way around. I didn't call Euler's backward-difference integration scheme "naive", but introduced a "naive" integration approach, which for a single integrator happens to coincide with Euler's backward-difference scheme. For the 1-pole lowpass this doesn't hold anymore.
Smashed Transistors wrote:In the case of the RC low pass filter, won't it be better to use the step invariant transform (exp of coefficient matrix) instead of the bilinear transform ?

Code: Select all

for y' = a(x-y)
the coefficient matrix M is
   x   y
x' 0   0
y' a  -a

exp(M) = I + M + M2/2! + M3/3! +...
gives the digital domain step invariant transform
I'm a little bit puzzled by the fact that you incorporate the input signal into the system state. I also believe there is the discretization step missing somewhere in that expression ;) Anyway, off the top of my head, I kind of doubt that the application of the step invariant method to a whole system is equivalent to applying it to the underlying integrators. Or, which is the same, whether it is expressible as s- to z-plane mapping. Also the BLT transforms the frequency response of a system in a particularly nice and highly useful way.

Post Reply

Return to “DSP and Plugin Development”