• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

Okto DAC8 update with DSP

Hi
From a request of @montyliam, here is an example for 6 channel bass management which gives possibility to offload this from JRiver as an example.
Playing with delays on each channels gives the possibility to better align phase shift between SUB and other speaker to minimize excess or cancellation depending on the difference between Lowpass applied on LFE vs crossover frequency applied on the mains channels.
The best is to adjust all of this with mic measurement in the room for each channel instead of developing too much theory :)
The file is also on the AVDSP_DAC8 GitHub in folder users_examples.
 

Attachments

  • BASS_mgt.txt
    3.9 KB · Views: 120
I will be trying this code this coming weekend and will report back with results.

The low down is that using a 120hz LPF on the LFE channel will result in some cancellation between the LFE channel and re-directed bass managed content from the main channels if the main channels -> subwoofer crossover is below 120hz. Thankfully for my system, I usually use a 120hz crossover between mains and subs anyway, so there should be no interaction/cancellation/summation between the two different slopes. If for example, I was to use an 80hz crossover between mains and subs and a 120hz LPF for the LFE, there would be an approximate 1.5db hump at 100hz due to the interaction between the two different slopes.

To combat this, one can use either an all-pass filter on the main channels or a calculated delay on the main channels to bring the phase of the main slopes and the LFE slopes in line. The latter method is preferred due to the increase in group-delay when using APFs.

There is also a third, more complicated method to deal with this issue which it is reported Genelec uses. That is, set the LPF of the LFE channel and the crossover from subs -> mains as the same, and redirect any content above the LPF for LFE to the center channel. For example, using an 80hz crossover all around, the sub only ever receives up to the filter, the main channels undergo the normal bass management and the centre receives the extra content from 80-120hz from the LFE channel. Arguably, a LPF for LFE would not be needed if sending content to the centre, but many have reported that there is esentially some 'artefacts/garbage' above the usual 120hz LPF cutoff for the LFE channel which when not using a LPF can become distracting.

Thank you very much for your help Fabrice.

 
Pleased to add I've got the bass management document from Fabrice uploaded and working like a treat. There were a few hicups on the way, namely with the Special USB VID: ID section which caused the Okto to stop recognising USB connection. This was solved by doing a hard reboot of the Okto and it worked perfectly again afterwards. I will perform some more extensive testing with REW loopback soon but so far so good. The only problem I have identified which I have contacted Fabrice about is that the channel delay seems to be limited to 1ms for some reason. This isn't much use when subwoofers are involved when delays reach multiple ms so I'm hoping there is a fix for this. It seems much more stable running this directly from Tidal now rather than Tidal -> WDM -> JRiver -> DSP -> Okto.
 
First off, I just wanted to say a massive thanks to @fabriceo . He has been a great help and guide throughout the process, and managed to quickly resolve any issues I had/found. The software works great. The process for implementing the dsp program to the DAC is quick once you get used to it, but can be a little tedious to do and I encountered a few problems early on when the DAC would not recognise USB input at all and had to be unplugged and replugged to work again. For some reason, and I don’t know why because the firmware has remained the same, I use the dsp program loading routine often, and no longer encounter the issue above. I would say once you understand the file format, it’s very quick and easy to implement changes based on measured responses in REW. I use MMM to generate PEQ filters between 80-500hz for the main channels where needed. MMM for the LFE. And a single point measurement at the MLP for mains and LFE to determine delays. All of this is used with the Harman Curve profile importable into REW, which I think sounds especially good in a small room like mine.

I was originally doing the room correction ETC in JRiver and using the WDM driver for Tidal. I had heard a few pops and clicks occasionally from this setup with a latency of 100ms. With the room correction now in the Okto, it connects directly to the app using it AKA Tidal or JRiver for films and TV. There are now no pops or clicks of any kind with a latency of 20ms.

Although a slight process, it is worth it for any Okto DAC owners using Jriver to EQ.
 

Attachments

  • IMG_3431.jpeg
    IMG_3431.jpeg
    154 KB · Views: 107
Last edited:
Hi All,

From the Github

"9) how powerfull is this ? is it enough for my use case ?
The firmware is enabled up to 192Khz sampling rate but this is a challenging limit for this processor. In short at 192k it is possible to apply 6 biquads and 1 delay line on 8 channels. At 96k we have a more comfortable 20 biquads capabilities for 8 channels."

My use case is 192k specific.

Do we know if the 6 x biquads and 1 delay line limit at 192k is per channel, or if that's what's available total to be shared across all 8 channels?

Cheers,
Ruairi
 
Hi Ruairi,
this is per channel .
you can create a program to handle 2 channels per task and having 4 tasks.
each task will be able to provide 6 second orders biquad and 1 delay line for each of the 2 channels so 8 in total.
the input can be from the stereo USB (mode PureUSB) or stereo AES1 (mode PureAES).
if you need more than 2 input channels , say 4,6 or 8 then it is fine in PureUSB.
But not on PureAES, because enabling AES 2,3,4 will use 1,2,3 xmos tasks at full speed and thus reducing total mips available for your dsp task.
don't hesitate to contact me on the avdspproject mailbox
 
Hi Ruairi,
this is per channel .
you can create a program to handle 2 channels per task and having 4 tasks.
each task will be able to provide 6 second orders biquad and 1 delay line for each of the 2 channels so 8 in total.
the input can be from the stereo USB (mode PureUSB) or stereo AES1 (mode PureAES).
if you need more than 2 input channels , say 4,6 or 8 then it is fine in PureUSB.
But not on PureAES, because enabling AES 2,3,4 will use 1,2,3 xmos tasks at full speed and thus reducing total mips available for your dsp task.
don't hesitate to contact me on the avdspproject mailbox

Fantastic info, thank you.

My use case is 2 in 8 out for a 4 way crossover running at 192k. This will provide enough DSP for what I need to achieve.

Cheers,
Ruairi
 
Hi All,

From the Github

"9) how powerfull is this ? is it enough for my use case ?
The firmware is enabled up to 192Khz sampling rate but this is a challenging limit for this processor. In short at 192k it is possible to apply 6 biquads and 1 delay line on 8 channels. At 96k we have a more comfortable 20 biquads capabilities for 8 channels."

My use case is 192k specific.

Do we know if the 6 x biquads and 1 delay line limit at 192k is per channel, or if that's what's available total to be shared across all 8 channels?

Cheers,
Ruairi

In case you do not have an Okto, I am happy to test out your DSP program on mine.

For reference I have 32 biquads total applied over 8 channels (although some of these are duplicate that use the load/save memory functionality), and it works fine at 192 kHz.

Michael
 
In case you do not have an Okto, I am happy to test out your DSP program on mine.

For reference I have 32 biquads total applied over 8 channels (although some of these are duplicate that use the load/save memory functionality), and it works fine at 192 kHz.

Michael

Wonderful Michael. I do not yet but will likely be ordering today!

I will absolutely reach out if I need some input.

Cheers,
Ruairi
 
Does it get much better than this?

I do not think so!! My full dsp configuration in one simple text file? And after a couple of clicks (well, and the direct help of Fabriceo) sounding this good?? This is too good.

Thanks @fabriceo. Very much!


Cheers!
 
Does it get much better than this?

I do not think so!! My full dsp configuration in one simple text file? And after a couple of clicks (well, and the direct help of Fabriceo) sounding this good?? This is too good.

Thanks @fabriceo. Very much!


Cheers!
your efforts deserved it!
a 3 way crossover inside dac8pro-dsp is a perfect use case for this device and provides a very rewarding sound quality with user friendly integration. Your welcome !
 
Does it get much better than this?

I do not think so!! My full dsp configuration in one simple text file? And after a couple of clicks (well, and the direct help of Fabriceo) sounding this good?? This is too good.

Thanks @fabriceo. Very much!


Cheers!
Happy to report a similar experience. I recently swapped the miniDSP 4x10 for a Okto dac8 in my 4-way LX521 system and I'm very pleased with the sound quality and elegant functionality. And Fabriceo was very helpful when I was getting started.
 
Hi Ruairi,
this is per channel .
you can create a program to handle 2 channels per task and having 4 tasks.
each task will be able to provide 6 second orders biquad and 1 delay line for each of the 2 channels so 8 in total.
the input can be from the stereo USB (mode PureUSB) or stereo AES1 (mode PureAES).
if you need more than 2 input channels , say 4,6 or 8 then it is fine in PureUSB.
But not on PureAES, because enabling AES 2,3,4 will use 1,2,3 xmos tasks at full speed and thus reducing total mips available for your dsp task.
don't hesitate to contact me on the avdspproject mailbox
I have been thinking about using this DSP program on my DAC8 Pro, but am using AES inputs 1, 2, and 3 for my 5.1 setup. I have a couple sources that like to output 2.0 or 4.0, and I'd like to do some light bass management to utilize my subwoofer in these cases, if not do some delays as well (less important). Until seeing this post, I didn't realize using PureAES would consume some of the processing. Are there any potential capabilities here, even at lower sampling rates such as 48kHz?
 
I have been thinking about using this DSP program on my DAC8 Pro, but am using AES inputs 1, 2, and 3 for my 5.1 setup. I have a couple sources that like to output 2.0 or 4.0, and I'd like to do some light bass management to utilize my subwoofer in these cases, if not do some delays as well (less important). Until seeing this post, I didn't realize using PureAES would consume some of the processing. Are there any potential capabilities here, even at lower sampling rates such as 48kHz?

Fabrice would know best, but I believe you can use the DAC8PRODSP4 firmware to get 8 channels of AES input. As he mentioned this firmware has less processing power than the 2 channel input version (DSPPRODSP7).

1745948423732.png


Michael
 
Last edited:
Yes this is the correct answer.
in the dac8pro, there is 1 spdif/aes chip decoder and the 3 other AES connector are assigned directly to a xmos core for decoding the spdif pattern in software (yep that is a beast), the master clock is always recovered from the pll of the hardware chip from AES1.
So this limit the capacity to 264 mips ish and allows only 4 dsp cores to spread the user program.
This might be perfectly enough for 44 or 48k programs, but more difficult for 88/96k, depending on the crossover or filtering requirement.
Also for the kind people I can deliver a DAC8PRODSP5 version with only 3 AES connector enabled (1 hardware+2 software), so 5 cores become available for dsp processing and the total number of mips would raise to about 330mips. this is more comfortable for 96k program. Still 192k will be accepted but reduced to 96k internally.
fabriceo
 
Hi !
Some news and teasing, and request for potential help:

Since the release of v1.61, I m still working hard on the AVDSP compiler (dspcreate utility) and the XMOS runtime to increase capabilities and improve performances with DAC8PRO.
A lot has been done and I beleive I could release something this summer.

For the dspcreate utility I have added the possibility to write expressions with parenthesis and it is now possible to have cascaded included files. Also printing comments and value of labels in the console is possible.
It is also possible to change the cpu precision for the biquad coefficients or gain values and for the headroom of the 64 bit accumulator. (in fact I wanted to find optimal values and then I decided to open this to the user)
Also there is now a code highlight support for vscode editor which can be downloaded already in the avdsp_dac8 github, folder avdsptools/vscode.

the XMOS runtime has been optimized further: the number of instructions per keyword is reduced. At 192k it is possible to have 10 biquads for each of the 8 channels. The unused cores do not take any cpu at all and spreading the load across cores is better managed. The number of instructions displayed in the dacstatus command is also more accurate. So it is possible to push the beast to the limits.

Regarding the new functions supported by dspcreate and in the XMOS runtime, I have put emphasis on moving average filters and FIR filters and Warped FIR filters !
For FIR filters, each taps requires 3 cpu instructions and for Warped FIR only 5,25 per taps which really brings a key capability to correct loudspeaker or room response including magnitude and phase.

I recently heard about Warped FIR when reading the documentation of the Outline Newton DSP and someone mention this on asr:
post
They did something good here. Then googling a little bit I found this document which I recommend reading :
link

The problem with FIR is that you need tons of TAPs at low frequencies (so very demanding cpu), and this also brings too much delay. By Warping the frequency on a semi-logarithmic scale, you can divide the number of taps by 5 to 10 ! then this become compatible with XMOS device !

a picture taken with REW this morning while testing this in DAC8PRO with a small 21 taps low pass filter at pi/4 and various Lambda factors. Amazing.
warpedFIR_21taps.png


same picture with a 101 taps low pass filter: we can see that changing the lambda factor gives the possibility to shift the area where the filter is applied, without compromising the quality.
warpedFIR_101taps.png


But unfortunatelly I cannot provide any help for creating these special Warped FIR impulse and this is where I m looking for help, so that this capability inside DAC8PRO could be used really. Ok for today. If you are interrested by this capability, or if you could help with some Python toolbox, please let us know!
 
Last edited:
More than a year later (and after starting this thread), I'm excited to finally take a crack at installing this, once Fabriceo gets a chance—hopefully very soon!—to hold my hand through all of it.
 
Boy, that sure took a lot longer to find time for than I thought it would. :p
 
Boy, that sure took a lot longer to find time for than I thought it would. :p
Hi ! firmware dac8prodsp5 with 3 AES connector enabled + 5 dsp cores is now in your mail box. will update the BASS_MGT to your use case later. lets keep in touch over email, but you might also get support here from other folks. cheers
 
Back
Top Bottom