Element IV now Supports DSP over Optical

Last week we rolled out Core™ Firmware v1.2.0. It’s easy to gloss over changelogs like this:

  • Added LED Mode: OFF
  • Reimplemented the OLED DSP Menu, including Gain/Freq/Q for all 10 bands
  • Added XMOS based decoding of S/PDIF (optical) input, with full 10-band EQ support
  • Added ability to toggle between S/PDIF input modes from the OLED menu or Core Device Settings:
    • ESS: 44.1-192 kHz, no DSP
    • XMOS: 44.1- 96 kHz, full DSP support

What’s not clear from these brief notes is the incredible amount of thought and development that went into S/PIDF-to-I2S decoding. Implementation began years ago. If you had asked me in 2022, I would have told you we’d wasted months on software development—we abandoned the project after AKM’s factory fire. There was no reason to build an S/PDIF converter when ESS gives one away for “free” with every chip.

As Element IV took shape, the archived S/PDIF-to-I2S project suddenly made perfect sense. We could decode S/PDIF on Element IV, unlocking the ability to run its 10-band EQ in both USB and Optical modes.

In this post, we’ll walk through the high level architecture and performance considerations when using Element IV’s new S/PDIF modes.

Element IV’s Optical Modes

Element IV’s incoming optical signal is fed directly to its ESS DAC, as well as to a GPIO pin of its XMOS processor. As of firmware v1.2.0, you can now choose between the following modes from Core’s Device Settings or the OLED menu:

  • XMOS S/PDIF Mode [default]: Optical decoding at up to 96 kHz with full DSP support
  • ESS S/PDIF Mode: Optical decoding at up to 192 kHz (no DSP)

If you have no need for equalization, choose ESS mode. ESS’s patented algorithm decodes S/PDIF remarkably well—arguably the best in the industry.

Element IV’s XMOS S/PDIF mode is tuned in firmware to balance performance and computational resources. Keep in mind that Core firmware running on Element IV currently consumes 60-80% of available resources to run its 10-band EQ and general functionality.

Three of 16 XMOS cores are now dedicated to S/PDIF decoding. Under the current computational budget, jitter sidebands are slightly higher and THD is elevated by 1 dB when decoding optical in XMOS mode vs. ESS mode. These minor differences are imperceptible, and obviously more than compensated for by the ability to run the 10-band EQ in optical mode!

Element IV decoding TOSLINK @ 48 kHz in XMOS S/PDIF Mode

System Architecture: S/PDIF Reception to I2S Output

The S/PDIF-to-I2S engine uses a custom Asynchronous Sample Rate Converter (ASRC) implementation and a lock-protected ring buffer to hold I2S audio stream data at a nominal 50% fill level, protecting against underruns or overruns.

Precision & Buffer Management

  • Mathematical Precision: Fixed-point arithmetic is used throughout
    • Q4.28 format for sample rate ratios
    • Q8.24 format for ASRC processing
    • 32-bit integer sample representation
  • Polyphase FIR Filters: The ASRC leverages a polyphase FIR filter bank, maintaining linear-phase response.
  • Circular FIFO: A simple FIFO with hysteresis keeps audio latency consistent, while also filtering out minor timing variations.

Please keep in mind that v1.2.0 is our initial release of XMOS S/PDIF mode! While it’s been tediously tuned and auditions well, S/PDIF signals from some consumer devices can be unpredictable. Let us know if you encounter anything unexpected.


What’s Next

With DSP-over-optical complete, our devs are now hard at work on your feature requests! I’m pushing for on-device profile storage next (yes, it’s possible). One of our lead developers is optimizing the DSP stage this week, so stay tuned for spring Core firmware updates.

9 thoughts on “Element IV now Supports DSP over Optical”

  1. Amazing work! Congrats on the team for shipping this feature, and thank you for the technical explanation, this is much appreciated. I must also say that the update procedure was as painless and fast as you could hope, really impressive!

    I have one feature request, if it isn’t already hidden somewhere, a mode to auto shut down Element IV after a set inactivity time (similar to the option to turn of the LED). I think it could prevent unnecessary power consumption and device heat if it is forgotten during the night, or during a week-end not home. What do you think?

    1. Thanks, Thomas! I’m not sure that we have provisions for auto shutdown, as power state is managed by the boot processor, but I will pass this thought along.

  2. If you could unlock the filter type in Core, that would be fantastic. Two shelf filters is okay in some cases, but really each filter in the stack should have not just the frequency, gain and Q adjustable, but the type too. In other words, all parameters for all filters should be freely adjustable.

    If the very tiny Qudelix 5k can do it, then I’m sure you guys could do it too. 🙂

    The day you do that is the day I place an order for the new Element. I still have the original Element, and it still works well, but a true and complete parametric EQ would be a tremendous step forward which would justify the upgrade.

    1. Hi Florin – We are first implementing more filters, profile storage, and other feature requests. By the way, you can freely move any of the bands and enable/disable filters as you see fit. Filter selection becomes a UI trick when enough filters are available!

      1. John,

        Yeah, I know.

        10 filters actually cover quite a lot of ground. In terms of filter types: peak, low shelf and high shelf are essentially all you need – heck, you can even use low shelf instead of high shelf if you negate the gain – so that’s fine too.

        Allowing free selection of the filter type for each filter is more important than all of the above. This is the more restrictive limitation at this point for Core, by far. Look at Qudelix. Look at miniDSP. They give you 10 filters, but each filter’s type can be freely chosen. Heck, look at Equalizer APO (I know that’s not a fair comparison).

        I’m thinking of the oratory1990 presets, which are very high quality, measurements-based presets for various headphones and IEMs:

        https://www.reddit.com/r/oratory1990/wiki/index/list_of_presets

        They all assume you only have 10 filters. Many don’t need more than 2 shelf filters, but some do. The Dan Clark Audio Aeon 2 Noire preset uses 3 shelves to match the measurements. Etymotic ER4XR (the oratory1990 target) also needs 3 shelves. The Sennheiser HD800S (which I’m wearing right now, plugged into the original JDS Element, with the parametric EQ running on a miniDSP 2x4HD) also has 3 shelves in the preset. These are just some examples off the top of my head.

        You guys are that rare audio company that tends to do the right thing. Do it now, too. Finish the job. Put a true, complete parametric EQ in the new Element.

        These days I don’t even look at any new audio device, unless it promises to offer an embedded parametric EQ. So many times, those are just promises – the EQ turns out to be limited in some bizarre, arbitrary way.

        I trust you’re going to do it right eventually. I just hope it happens sooner rather than later.

        Cheers!

        1. @Florian – Thanks again for your thoughts! Please know we are not ignoring this request! Many of us are working rather long days. Development is steady, with new commits pushed to the internal codebase daily. We avoid frequently pushing public firmware updates, which perhaps gives the impression that we are sitting idle. That is not the case. Rather, we spend an enormous amount of time testing and iterating. The goal is to release updates upon reaching each stable milestone, every 1-3 months.

          Element IV firmware is unique and will take time to integrate all requests we’ve received. Filter selection is an active feature request. There are simply prerequisites to avoid a disastrous codebase.

  3. Hi John! I really like what Core DSP has to offer. There is one small thing I wanted to mention regarding the UI though –sometimes when I am trying to use more than 1 band in relatively close proximity the circular labels begin to obscure the changes I am making on the graph. Maybe there could be an option to reduce the size of those labels or temporarily disable them if one wants to get a clear look? Thank you and appreciate the effort from you and your team.

    1. Thanks, Ted. We’ve noticed that node size varies with DPI Scaling. The nodes are large on some screens and small on others. Please email a screenshot and I will pass your feedback along.

  4. Hey John!

    Thanks for the hard work and effort you guys put in this product. One idea for a feature: Would it be possible to autodetect a headphone (from the impedance or sth) and autoload a profile? That would be a killer feature…

Leave a Reply to Ted Wiechelman Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.