[DSP module discussion] New classes in the maths folder

dsp_module

#1

It’s me again ! This time I’m going to talk about some of the classes provided in the DSP module that you can find in the maths folder, so you’ll be able to discover them and give me your opinion about them !

During the development of the DSP module, the JUCE team and I wanted to code classes that can be easily understandable and included in JUCE team projects, but also some elementary functions which could be useful in topics related with DSP in general and a bit less with classic plug-in development. For example the FFT isn’t something that even I use in all my projects, but it is the most important tool in a lot of audio research areas not all the time associated with commercial plug-ins. Have a look for the word “cepstrum” in Google for example for interesting and not well known applications of FFT.

Other examples are the functionalities provided in the classes SpecialFunctions, Polynomial and Matrix that are in JUCE 5.1 since the release of the DSP module. As I said in another topic, when I wrote these classes (with a significant help from @fabian, the class Polynomial being his at first by the way, and @jules also of course who cleaned up and improved the code everywhere), I wanted everything I needed to code the Oversampling class in JUCE, including filter design on the fly instead of the use of precalculated coefficients and ways to obtain the frequency amplitude response + phase response + additional delay of these filters. That’s why I code the functions in the class FilterDesign first. And these functions rely a lot on the use of very specific math functions such as the “complete elliptic integral of the first kind”, polynomial manipulation, and matrix operations such as addition, multiplication and inversion. Hence the development of the associated classes in JUCE as well.

But these classes can be useful in a lot of other applications as well ! OK, not so much for the SpecialFunctions class member functions :slight_smile: However, the Polynomial class could be used for plotting complex filter frequency responses, for creating waveshapers, for computing automatically the discrete filter transfer function associated with a given electronic schematic, for designing your own filters, for regression (in the same sense that in machine learning)…

And the Matrix class is something I needed for a long time so I could stop using huge extern librairies like Eigen to compute my Newton-Raphson’s algorithm iterations fast. Matrices are the cool way to solve systems of linear equations, but also to make reverberation algorithms with FDN structures. They have a lot of applications in the “virtual analog” context as you might have guess already. And since I designed the Matrix class so it doesn’t create temporary copies at each operation, using dsp::Matrix is almost as fast as the Eigen equivalents, and even faster in some specific cases !

So tell me if you have already used on these classes, what you think about them etc :wink: