|AudioQuest Dragonfly Black - "rendering" MQA playback. Dragonfly logo turns purplish...|
With the recent firmware upgrade to version 1.06, the Dragonfly Black DAC now belongs to this latter category of "Renderer". As far as I am aware, it is the first of these kinds of devices to be released without "Decoding" capability.
If we take a step back and look at the big picture, there are implications to this two-step technique:
1. The Dragonfly DAC does not have enough horsepower to decode the "MQA Core" algorithm itself. I've already written about this back in January 2017 suggesting that the Dragonfly 1.5's Microchip PIC32MX microcontroller wasn't a particularly powerful device. Therefore, it has to offload the processing step to the computer. In the image above, I have Audirvana+ 3.0.6 running on a recent USB-C MacBook which is able to perform software decoding. At this time, the only other general computer software that performs MQA Core decoding is the aforementioned TIDAL app.
2. The 24/88 or 24/96 "origami unfolded" output then must contain within the bitstream instructions for the MQA Renderer (whether it be the Dragonfly or another render-compatible DAC like the Mytek Brooklyn) to perform the "proper" final processing.
Other than those who have signed NDA agreements with MQA, how exactly all this works is a bit of a mystery. Technically, the presumption is that the MQA Core step is more complicated as it takes the encoded standard sample rate data and expands it to "fill in" what's needed to create the higher samplerate output up to 96kHz. The "Render" step however would have to be simpler for low-power devices like the Dragonfly. It would involve the DAC examining the bits to look for the MQA fingerprint, decode embedded instructions, and using whatever it finds to presumably tell the DAC to output the intended analogue signal.
Based on the comments from MQA over the years, especially their insistence that digital filters make a huge difference in sound (see their PR video for example), it is literally a given that whatever the "Renderer" does would involve the use of "special" filter parameters. And given their apparent dislike of linear phase filtering (perhaps fear of the the "acausal" pre-ringing bogeyman?), it's pretty well also a given that whatever MQA is doing with the sound, minimum phase filtering will be the technique of choice.
In preparing for this post, I reached out to Måns Rullgård on Computer Audiophile as he has been digging around the MQA firmware since earlier this year. In his research, he has been able to discover enough about the decoded stream such that an arbitrary WAV file can be encoded with the MQA parameters to explore how a device like the Dragonfly Black performs when responding to these instructions!
To be clear, obviously while this "reverse engineering" can shed light into the device, it's of course not necessarily complete. Also, although certain features may be uncovered, it doesn't mean these features are actually being used in real MQA-encoded music out there.
So... With Måns' gracious assistance, let's have a look at some of the main parameters that an "MQA Renderer" like the Dragonfly Black appears to respond to...
This is relatively straight forward. The DAC can be instructed to perform dithering on the 24-bit MQA Core unfolded data to a certain bit-depth. The options appear to be 15, 16, 18, and 20-bits.
1. DITHER BIT DEPTH
Here's what the noise floor looks like on the Dragonfly Black with a "digital silence" track played back and recorded with my Focusrite Forte ADC (note that the recording was done to demonstrate relative differences, not measure the absolute noise floor):
The 18-bit and 20-bit options didn't seem to make a difference in my testing. As usual, ignore the 37kHz noise which is originating from the ADC, not the Dragonfly and also the ADC modulation noise is obvious from 55kHz onward.
2. DITHER NOISE SHAPINGIn the graph above, I noted "noise shaping off". Well, the MQA stream can specify if noise shaping should be turned on and of what variety.
As you can see, there are 4 options from 0-3. In the Dragonfly, settings 0 and 2 appear to be the same. Setting 1 is quite different. One interesting comment when I showed Måns this result was that it appears the Dragonfly is applying the dithering before upsampling from 96kHz with the first peak around 35kHz. In his examination of another device, the noise shaped dithering seems to be performed after upsampling to 192kHz with the 35kHz peak pushed up to ~70kHz. Interesting how different devices can be performing the technique differently.
I have also asked my friend with the Mytek Brooklyn to examine this phenomenon. From preliminary results, with the recent Booklyn 2.34 firmware, the device doesn't seem to be responding to the noise shaping parameter. Another interesting observation is that Meridian's Explorer 2 DAC (latest 1717 firmware) doesn't seem to recognize the "MQA Render" embedded data at all. I suspect this is a result of the evolution of MQA since the Explorer 2 was one of the earliest MQA-decode DACs and the firmware was not programmed to acknowledge these "Render" instructions. Basically it looks like different MQA devices could behave differently!
Embedded within the MQA stream is another parameter that tells the Renderer DAC the "original" samplerate of the encoded music. This can range from 44/48kHz all the way to samplerates no audio device currently supports :-).
3. RESAMPLING FILTER SELECTION
With the Dragonfly, by default, if we just send a non-MQA 24/96 signal to it, it uses a filter with the following impulse response:
As you can see, this is the normal sharp minimum phase response similar to what we saw last week when looking at the non-MQA measurements.
However, if the device is told that this is "originally" a 24/96 signal and the MQA DAC should "render" it as such, the filter changes and the impulse response looks like this:
A very short minimum phase filter is used. Hmmm. OK, no surprise given the MQA PR material.
Where it gets interesting however is when the Renderer is told that the "original" resolution requires further upsampling. For example, if the "original" samplerate is specified as 192kHz, the Dragonfly will then pick from up to 32 pre-specified filters selected within the data stream to use. I don't know if all 32 potential settings are defined or not, and it really don't matter for the sake of this article. For illustration, I'll just show you the impulse responses from settings 0-8 along side the standard filter shown above:
I have no idea how or why MQA selected these filter variants. I'm not even sure if there's some kind of systematic order to them! At least we can say filters 0-8 are all minimum phase, of very short duration with minimum post-ringing. Of these first 9 filters, clearly "MQA 2" looks most different. According to Måns, analysis of MQA files "in the wild" suggests that filters 4, 6, and 8 appear to be the common ones with 4 being somewhat of a default.
Because of this kind of stuff happening, I applaud HiresAudio for taking a stand on not selling MQA files because of an inability to verify the content as true high resolution. The fake high frequency material is easy to see here, but if it were not for the 20kHz roll-off to create that ugly "gap", it would certainly be much more difficult to realize that there is something very wrong.
There is no magic in digital audio. And as far as I can see, there is no "gnostic" wizardry in MQA either when we look a little deeper. To all the "evangelists" out there... Beware of worshipping at the alter of the god of "time-domain" with salvation offered in the form of MQA and its weak filters. You'll likely find your faith challenged and ultimately recognize that it was misplaced despite a genuine desire for higher fidelity.
Remember, you can find significant levels of satisfaction in frequency & time-domain accuracy with room correction measurements and DSP. There is no free lunch, and it will likely take time and effort to get it just right for your DAC, speakers and sound room. For reference, here's the zoomed in 24/96 correction impulse response used for my DAC (TEAC UD-501), room and speakers (Paradigm Reference Signature S8) created with measurements using Acourate meant to be used with a convolution engine like with JRiver or BruteFIR. Notice that in real life, when customizing the impulse response for the system, the coefficients are more complex than those MQA filters and also varies for each stereo channel depending on arrangement and slight differences between speakers:
Finally we're seeing some great weather here in Vancouver. It's summer time and as I mentioned weeks ago, I've got some R&R coming plus exciting projects on the go at work. Hope the weather's good wherever you are...
I'll likely be "gone fishing" for a little bit :-).
Enjoy the music!
Addendum December 2017:
Check out Mans Rullgard's Audioquest Dragonfly Black Teardown. Great stuff!