Questions about digital noise and grounding

That scenario is definitely a ground loop

Hi. Over the last few months i’ve managed to reduce the amount of this digital noise on my Seed based circuit by trying out lots of the methods suggested on this thread - including using a PDS1-S5-S5-D Isolator and lot’s of decoupling capacitors.

The noise now only occurs on the left channel of the audio output, the right channel is completely clean.

I wanted to ask about the software solutions that are mentioned on this thread:

  1. @kshep - moving LED function from main loop to AudioCallback
  2. changing the block size by dividing up code

My problem here is that I’m using Pure Data and pd2dsy so I don’t think I’m able to have this kind of control over the code - does anyone know if there is a way?

Thanks

Just thought I’d throw my experience into the pile here as I’ve had some decent success with only software refinements and no change to my audio callback.

The specific noise issue for me has been the high pitch whine at the frequency of (sample rate / audio block size) - in my case (48k / 8 = 6kHz).

I had about 5 different functions, within my main loop, that use pow(), and I swapped these out for either explicit multiplication (x squared becomes x*x) or if the exponent was a variable, I created a precomputed array of values and accessed those. This obviously only works when you have a limited amount of exponent choices… if your exponent is a float within a large range, that won’t likely increase efficiency.

Just doing that lowered my high pitch whine by ~15db. I’m fairly new to C++, but apparently the pow() function for smaller exponents, especially int exponents, is less efficient than explicit multiplication, and of course less efficient than precomputed values.

Mind you, I’m running a fairly jam packed project, so those may have simply been pushing me over the edge… your mileage may vary.

All this to say, if you’ve got a lot of math happening in your primary loop like I do, it’s worth a look to see if you can unload some of that processing power.

2 Likes

I’ve had a major development in my 6kHz (48kHz / block size 8) whiney noise issues. I have zero whine, and it was a result of a very simple change to my circuit ground path.

tl;dr; The change that solved my noise issue, was placing a jumper cable from DGND to as close to AGND as possible. Explanation below:

I’m a novice to circuit design / DIY electronics, so bear with me if this is simple stuff. I built my circuit on a breadboard and then, to make it more permanent, recreated the circuit on a “solder breadboard” - a prototype board with + / - rails and two disconnected sides. I mention this because it gives you an idea what the ground plane looks like.

I had the Daisy across the center. Digital ground to the left and analogue ground to the right, then the two ground rails bridged at the top of the board.

The change that solved my noise issue, was disconnecting DGND from the left rail, and instead placing a jumper cable from DGND to directly adjacent AGND.

I presume this means that the distance the ground points were traveling in the initial circuit, was long enough that it was able to soak up noise along the way.

I discovered this while trying to address noise I picked up from a new midi circuit I was adding - every individual midi signal came through the audio out as a “click”. In that case, I had to bring the ground for my midi circuit very close to AGND as well.

Again, I presume these issues are exacerbated by the limitations of the breadboard style design… but I can see how the same principle would apply to a custom PCB. Hopefully this gives hope or help to someone :sweat_smile:

3 Likes

hi - I was wondering: has it been established that the power management strategy can not be altered so that this ground ripple does not occur in the first place?

Here is a working backup link:
https://sebiik.github.io/community.axoloti.com.backup/t/connecting-audio-output-to-an-amp-with-shared-power-supply-same-ground/3785.html

1 Like

I’ve been able to greatly reduce the whine by making a Ground Loop Break (GLB) circuit as used in the Axoloti and described in the forum post above, and the application note it refers to: https://www.ti.com/lit/an/sloa143/sloa143.pdf

I used an off-the-shelf TPA6132 board similar to the one @SmashedTransistors used; what was necessary was to break the SGND-GND connection on it, and use the SGND separately as described in the note.

The circuit can also be seen on page 4 of the Axoloti schematic:

If anyone knows of a (headphone) amp board that has a separate SGND connection already, that might be very handy.

3 Likes