Nice video, thanks! I have one question though - why do we need to use the bilinear mapping instead of just using the mapping z = e^sT or s = (log z) / T ?
If I would have to guess: you would get very nasty z-transforms which would be very hard to create using digital hardware, how would you even go about defining the order of a function of log(z)? Using the bilinear transform gives you the property that filter order and that stability remains, and while you do get some frequency warping (high omega scales a lot quicker than low omega, think of the relation omega_a ~ tan(omega_d) indicating that omega_a -> infinity means omega_d = pi) you can counteract this by transforming the frequencies between the domains and design it in this way. I am not really that experienced in the field of filter design but I hope this helps.
If anyone is curious I came up with an explanation that makes sense to me. A digital signal can be interpreted as a continuous signal with impulses at integer multiples of the sampling period. In this sense, replacing z=e^sT is basically equivalent to interpreting the continuous filter as a digital filter. But this is only possible if the continuous filter has an impulse response that is an impulse train with a frequency equal to the sampling frequency. In other words, you cannot use the mapping z=e^sT unless your continuous signal is already sampled! Therefore, in order to use this mapping, you need to first sample the impulse response of the continuous filter. Then you can simply interpret the filter as a digital filter. This is an established method for converting continuous filters to digital ones and it is called impulse invariance. The reasons you might avoid impulse invariance and would instead use the bilinear transform is that the impulse invariance method is susceptible to aliasing and is flat out impossible to use for a high pass filter.
Having watched a lot of your videos, and others from Phils Lab and Guitars.AI, I think what’s missing on RU-vid are videos that go from theory, to math, to Z domain, to code in C/C++. Where everyone seems to stop is at the math and Z transform. Phils Lab has 1 video that covers an RC filter in C, but he cuts and pasted the code from a website. So it’s not complete from theory to working DSP code.
Hi Jason, thanks for the feedback! I really admire Phil's Lab so that's a nice comparison for me :) To fill the gap that you mention, I will be providing A to Z tutorials on filter design (including derivation and implementation). How does that sound? :)
That sounds awesome! I’m looking forward to it. The missing part has always converting it to C. Phil has 2 videos that do that but that’s all I’ve found online across RU-vid and Udemy. The other gap I’ve noticed is modeling analog circuits from theory to math to code. Most examples only cover simple RC circuits and stop there.
@@velvetsound thanks for the feedback. Virtual Analog modeling is my favorite field of audio research ;) But I can't promise the videos on it soon. If you have any specific questions, maybe you can contact me personally?