Support

If you have a problem or need to report a bug please email : support@dsprobotics.com

There are 3 sections to this support area:

DOWNLOADS: access to product manuals, support files and drivers

HELP & INFORMATION: tutorials and example files for learning or finding pre-made modules for your projects

USER FORUMS: meet with other users and exchange ideas, you can also get help and assistance here

NEW REGISTRATIONS - please contact us if you wish to register on the forum

Users are reminded of the forum rules they sign up to which prohibits any activity that violates any laws including posting material covered by copyright

Making filters more efficient (CPU)?

For general discussion related FlowStone

Making filters more efficient (CPU)?

Postby guyman » Sat Apr 25, 2020 1:50 am

Hellooooooo . I hope the quarantine treateth you kindly.


I am fooling with both RBJ shelves, and Martin's 1 pole matched shelf filters... I am going to have static settings on the filters, no modulation of slope,res, cutoff nor amplitude. I know that stages and hop can make static calculation save a huge load on cpu, but some of these are in assembly, and I've never really implemented stages as of yet...

Would anyone like to chime in on the best way to make filter's super efficient on cpu? I'd love to have dozens of these running at any given moment. How would I go about altering a filter that's already in assem? it's latin to me.
User avatar
guyman
 
Posts: 207
Joined: Fri Mar 02, 2018 8:27 pm

Re: Making filters more efficient (CPU)?

Postby tektoog » Sat Apr 25, 2020 3:17 am

hey,
Hope you're doing good yourself! ;)
IMHO, you have 3 choices...
Get help, learn latin or ... learn ASM... ;) :? Latin being a dead language you're better off learning ASM ;)
Most reasonable one would be to wait for someone willing to help...
Most pragmatic one would be to learn the languages you wanna write with...
But first thing to do, is to post what you would like people to help you with...
I'm no good at ASM, I just copy and paste most of the ASM code I use, and then suit it to my needs...
But I'm pretty sure you can find the original filter which was probably first coded with FS code... that's the case most of the time, and then, it's ported to ASM... that's easier (at least for me) to read, understand and then to alter ;)
I'm pretty sure some good soul(s) over here will give you a hand...
Take care
"Essential random order for chaotic repetitive sequences"
User avatar
tektoog
 
Posts: 141
Joined: Sat Oct 30, 2010 11:49 pm
Location: Geneva - Switzerland

Re: Making filters more efficient (CPU)?

Postby guyman » Sat Apr 25, 2020 3:35 am

thanks for the response. my concern is static filter optimization, without a loss of quality.
User avatar
guyman
 
Posts: 207
Joined: Fri Mar 02, 2018 8:27 pm

Re: Making filters more efficient (CPU)?

Postby juha_tp » Sat Apr 25, 2020 5:04 am

If those are static filters then why calculate anything in runtime ... use static coefficients.

EDIT:
Dunno if this would be an efficient way but worth to try (one filter fc@1000Hz):

Code: Select all
switch x
  case { 44100, 88200, 176400, 352800 }
    b(1) = x * ((1.71962425129703E-11 - 2.60013231898188E-17 * x) * x - 3.53741686355636E-06) + 1.67970352331451;
    b(2) = x * ((1.7196242512970E-11 - 2.6001323189818E-17 * x) * x - 3.5374168635563E-06) - 1.145371565931;
    a(1) = x * ((8.6185372138594E-12 - 1.3031531240154E-17 * x) * x - 1.7729081720323E-6) + 1.5464377224026;
    a(2) = x * ((8.6185372138593E-12 - 1.3031531240154E-17 * x) * x - 1.7729081720323E-6) - 1.27863736684291;

  case { 48000, 96000, 192000, 384000 }
    b(1) = x * ((1.33279187011394E-11 - 1.85142995570431E-17 * x) * x - 2.98433575868698E-6) + 1.65790207111673;
    b(2) = x * ((1.3327918701139E-11 - 1.8514299557042E-17 * x) * x - 2.9843357586869E-6) - 1.16717301812879;
    a(1) = x * ((6.67978270383326E-12 - 9.27913057754111E-18 * x) * x - 1.49571098311128E-6) + 1.53551111288653;
    a(2) = x * ((6.67978270383326E-12 - 9.27913057754111E-18 * x) * x - 1.49571098311128E-6) - 1.28956397635897;
  otherwise
    b = [1 0 ];
    a = [1 0 ];
  end


This calculation supports those commonly used sample rates but, you would need to make separate function for each filter.
Last edited by juha_tp on Sat Apr 25, 2020 6:44 am, edited 1 time in total.
juha_tp
 
Posts: 60
Joined: Fri Nov 09, 2018 10:37 pm

Re: Making filters more efficient (CPU)?

Postby guyman » Sat Apr 25, 2020 6:31 am

I think I got it... I'll report back
User avatar
guyman
 
Posts: 207
Joined: Fri Mar 02, 2018 8:27 pm

Re: Making filters more efficient (CPU)?

Postby martinvicanek » Sat Apr 25, 2020 7:17 am

When I post filters I often include a static and a dynamic version. In the static version the filter coefficients are evayluated in green (or Ruby), while the filter iteration is optimized in ASM. Additional CPU gains can be had from Mono4 packing.
User avatar
martinvicanek
 
Posts: 1328
Joined: Sat Jun 22, 2013 8:28 pm


Return to General

Who is online

Users browsing this forum: Google [Bot] and 78 guests