ADAU-1467 Slew and Distortion - updating parameters

Hi, I have implemented 5 band filter (based on Double Precision, Text-In (unlinked) SW Skew) with Biquad coeffs  calculated on Host CPU. I have a 50uS delay after each Param write.

GOAL:

Any update to any filter parameter will result in smooth audio transition to that new parameter. The parameter update rate should allow up to 20 updates per second.

PROBLEM:

1. When using Skew setting (say 0.99 or 0.5) and rapidly updating parameters we can get very loud distorted audio output from the filter that can only be stopped by resetting the dsp. 

2. When using a Skew setting of zero and rapidly updating parameters we can hear an audio 'thump' if the value change is wide (for example if band freq changes from 50Hz to 1kHz in single step). 

*We've assumed problem 1 to be that we are updating parameters while Skew transition on the DSP is in process and we somehow corrupt this. If this is the case then what is the workaround?

Any guidance here would be great.Thanks!!

  • 0
    •  Analog Employees 
    on Oct 26, 2020 5:57 PM 29 days ago

    Hello Avrobot,

    First I feel I should mention that I would usually reach for the HW Slew version rather than the SW slew. The Hardware Slew uses hardware accelerators to perform most of the slew freeing the DSP core to do other things. The Software Slew will use more MIPS. It would also be interesting to see if switching over solves the issue. 

    How are you writing to the DSP from your host CPU? Are you using Safeload Writes? If you are not then that may be part of the issue. Although I just experimented using the sequencer in SigmaStudio and I could not get it to become unstable. However, SigmaStudio writes rather slowly. 

    Yes, you are interrupting the slew but it supposed to be able to handle it. I suppose you might get a slight audio artifact but it should not be going unstable. 

    If you can supply your project then I can look more specifically to what you are doing and I might be able to replicate the issue here. 

    Oh, one more thing. 20 updates per second is almost like you are providing your own manual slew. If you are going to write that quickly then change the slew rate to like 0.02 so it would slew in 20ms. If you know you are about to write a bunch of updates quickly then change the slew then write the fast changes and then change the slew back. In other words, you might have to make some dynamic changes. The other way to do it is to just eliminate 19 of the writes and set the slew to 1 second max setting. Then it will skew through from the starting point to the ending point in one write with the slew rather than 20 writes with small slews between them. 

    Dave T

  • Hi Dave, thanks.
    I assumed HW slew required some external filter so was using SW instead.. I will try HW slew on all my blocks and see if it improves things;

    All writes are safemode.

    One interesting finding that you may be able to help clarify is: that I was writing the SW slew value each time I wrote the coeffs (following what SigmaStudio does). I read somewhere maybe we don't need to write slew every time and only once. Making this change helped a great deal. I still have more testing and would like to hear your thoughts on this.

    Thanks!

  • Hi Dave, its been 8 days waiting reply for your clarification on my 28th oct post - can you help?