Stereo guitar/bass cabinet emulation

One major problem I see with the WM8731 is high DC offset that seems to originate from the internal gain stage. This directly impacts the ADC dynamic range to an unusable level, as the signal will clip on the affected side no matter how the HPF is configured.

I have 3 of these chips, and the best one I have (which happens to be from my TGAmkII) exhibits an offset of -0.0026 on one input, and -0.0035 on the other. Works kind of ok for simple effects, not so much for high gain applications

Marc
 
Yes, I'm using your library
While doing the calibration eliminates the DC offset from the I2S input, however if you feed it with a full scale signal, you'll see that it begins to clip much sooner than it should on one side.

I'll try the test program & report results shortly

Marc
 
This is what i'm getting, no calibration done, peak values taken for all gain settings (0x00-0x1F) over a 1 sec step between them. ADC is not muted internally, only the input audio via the jack contacts, there is an opamp buffer before the ADC.
WM8731_PeakBias_1s.gif
 
Here's what I get with both #define MEASURE_CODEC_PERFORMANCE commented & uncommented (I let it run for +5min each):
Code:
...
Accumulator: 0
RAW RMS: 4.11
AudioEffectRmsMeasure: the RMS figure is -78.03 dBFS over 345 audio blocks
...

Is this representative of what you get with your boards in general? 78dB of dynamic range should be useable, but I feel like I'm not able to reach that. My theory is that the DC offset is subtracted at the bitstream level, after the ADC (probably before downsampling), i.e. the actual range becomes asymmetrical, with one side having less range than the other
I will try to find my USB scope, a picture would help to better illustrate the issue

Apologies for hijacking this thread, I would love to be able to run this on my TGAmkII board - I really appreciate the help!

Marc
 
If you mean with 'go bit crazy' that you go with higher quality, low latency converters then that sounds the way to go. You are spending lots of time with getting best out of those effects and doing fantastic job with that so it makes sense to use higher quality codecs or adc/dac's also.
 
I mean 32bit converters are a bit an overkill, but also a chance to play with them (literally too). Guitar signal with all the playing techniques is very dynamic. Plus the high gain - i'm curious how will they behave combined with the neural amp modelling.

Apologies for hijacking this thread, I would love to be able to run this on my TGAmkII board - I really appreciate the help!
No need to apologize. You highlighted an interesting problem, relevant to what is being done here.

I have done a worst-case scenario (only the analog input is muted via jack contacts, no internal adc mute, no HPF enabled) noise floor test for the two codecs i have, the SGTL5000 and the WM8731. 10 seconds for each gain step, both operate at 24bits (i2s components are modified for that).
Interesting results, around 0dB-5dB gain SGTL seems to be less noisy than WM8731. WM is then more consistent, pretty much flat over the whole gain range. I marked the 0dB and max for WM8731 +12dB points.
The test has been repeated several times and showed similar results.

sgtl5000_wm8731_noise.gif
 
Version 1.4 dropped in including:
  • new way to define and add hardware platforms. Minimal is now a standard T40 + Audio Adaptor Board
  • pre built hex files for T40 & T41 + Audio Board
  • added ES8388 codec (i'm quite disappointed with this one, but might dig deeper later on)
  • lots of under the hood finetunings.
I'd like to make the project relatively easy adaptable to custom hardware platforms, as some might like classic knobs and switches better, some like touch screens or go completely remote. The bare minimum is to supply a codec driver with correct configuration.

T40 or T41 without PSRAM won't have the ReverbSC enabled and the max delay time is limited. The rest works the same.

Don't forget to git pull the library or use Dependencies/Update in PlatformIO.

Also hacked one of my ESP32 boards with ES8388 to make a driver for it. Unfortunately it oscillates as the SGTL5000 with the high gain sounds. I hoped the diff ADC input + input noise gate will help, but i'm having problems with getting it to work. Might be also a layout related, this board was not designed for gain-domain effects. The new hardware using AKM AD/DA will be.
t40_ES8388.jpg
 
I followed Steve's suggestions and I'm now getting better results out of my TGA mkII board. Doing the offset calibration after a few minutes did the trick.
I'm running into a few compile issues with the Arduino versions; I might give up on it and switch to PlatformIO, at least for this project

Marc
 
Back
Top