Okay, let's have some fun with the Raspberry Pi 3 B+ motherboard, piCorePlayer, and my little "Touch" device I recently updated. As discussed before and in the picture shown above, these days, I have the inexpensive JustBoom Digi HAT (~US$40) board attached out the back for simple S/PDIF connectivity as well as USB when I need.
Today, let's hit a few topics related to the Pi 3 B+ setup above. Some little tweaks, things to get it working well, and fooling around with a piCorePlayer/SoX filter you can try for yourself without unnecessary hype nor expense...
I. Oh CRAAP™ (Optimizations) 😀
I've been asked about this in the last couple months. Remember that I like efficiency and value. While many Pi users probably want to try overclocking to increase speed when using it as a general purpose computer, a fixed-purpose audio streamer connected over the ethernet to my server doesn't need much processing power and I like keeping things running cool with minimum stress on the power supply. So, like before, I've been playing with the parameters to find a setting that works for my needs which includes the ability to use SoX for extreme quality oversampling (which we will be discussing below).
Remember back in early 2017, I suggested we could easily underclock and undervolt the Raspberry Pi 3 with the Convoluted Rationalizations And Audiophile Perceptions (CRAAP)™ settings. Well, here's what I'm using these days with the B+:
# Archimago's CRAAP Pi 3 B+ Settings...
# Force max current to USB 0=OFF (600mA) 1=ON (1.2A)
As usual, use your favourite text editor (I like Notepad++) to change the clock speed section of the config.txt file in the root directory of your piCorePlayer SD card with the above settings:
Notice I've also set max_usb_current=0. The B+ motherboard has the ability to supply more current to USB devices - great for external hard drives and perhaps SSDs. Since I don't intend to connect peripherals with higher power needs off the Pi, keeping it lower at the 600mA level (same as the original Pi 3 B) is fine for me.
The undervolt -3 value represents a -0.075V lower for CPU and SDRAM (1.2V nominal for CPU and RAM) isn't extreme and works for me without worries of hangs or crashes with high workloads - the machine has been running 24/7 for 4+ weeks. Since the Pi 3 B+ ARM CPU can run up to 1400MHz, I'm underclocking it with a maximum speed of 1GHz but keeping the SDRAM speed at 500MHz, we have a nice 2:1 ratio (Low Power DDR2 RAM has a 2X bandwidth). The CPU will automatically reduce the speed to 600MHz anyway when load is low. If you run into stability issues with the reduced voltage, it's potentially more an issue with the undervolting of the SDRAM than the CPU since I'm keeping RAM at stock 500MHz (so maybe try over_voltage_sdram=-2 if you run into unexplained crashes/hangs).
As with the Pi 3 B, the graphics parameters have remained unchanged with a low 400MHz core speed and 300MHz GPU and low gpu_mem=16 as per default; there's little demand for speed or memory even with the Jivelite user interface installed.
Remember, even while underclocking, we still have about 2000 Dhrystone MIPS and 150 Linpack double precision MFLOPS available under the hood to play with.
For you "hardcore" tweeker Raspberry Pi 3 B+ audiophiles probably with fancy linear power supplies already :-), give this a go and let me know if it fits your system...
Also, if you have one, let me know how a CRAAP Pi feeding a Schiit DAC sounds! 😏
II. Pi 3 B+ Ethernet Back to 100MbpsCertainly one of the major upgrades to the B+ motherboard is the faster Gigabit ethernet link (internally up to 300Mbps). Unfortunately this is through the USB bus and since the architecture is still USB 2.0, there's only so much bandwidth to go around if you have multiple USB devices hooked up such as communicating with a USB DAC while attending to the ethernet data flow.
Alas, I documented a few weeks back that I was experiencing issues with my USB DAC playback with high resolution PCM or DSD at gigabit link speed. As noted before, you might need to kick the ethernet speed back down to 100Mbps. To do this, remember to select the "Advanced" tab in piCorePlayer. Then go into the "Extensions" menu of piCorePlayer and "Load" ethtool.tcz:
Then put this parameter in the "Tweaks" tab:
|sudo ethtool -s eth0 speed 100 duplex full|
Also, I have not been successful with upsampling to 768kHz to either the RME ADI-2 Pro FS or Oppo UDP-205 DACs even with 100Mbps ethernet. I suspect this is a USB bandwidth limitation of the Pi 3 B/B+... I guess we will need to wait for the Pi 4 or perhaps try the ODROID-C2 (which I have not done yet) for such extreme sample rates.
III. Let's go "Extremus" with the SoX digital filter!Lastly, for some fun, now that we have even more processing speed under the hood with the B+ (not that we actually needed more, feel free to do this with the B), why not have a listen to an even more "ideal" brick wall digital filter setting?
Remember awhile back I discussed and suggested the steep intermediate phase filter?
|Upsample Setting: v::4:28:95:105:45|
Max sample rate:
That setting provides an opportunity to listen to a very strong "brick wall filter" while still using intermediate phase setting for some pre-ring suppression for poorly bandwidth limited signals.
Doing -3.05dB attenuation provides some overhead as this is typically enough for the vast majority of situations to prevent significant intersample overload (as discussed recently). Only very "pathological" music would require more overhead. These days, I use ReplayGain which for loud music will already attenuate the volume a bit and get us away from overload and might just use -0.5dB. SoX is using 28-bit precision - that's a potential resolution of 168.57dB in the digital domain, I've seen "big numbers" like these thrown around in audiophile presentations even though in reality no DAC could ever approach this.
Setting passband_end to 99.7% is extreme and signals an intent to maintain flat frequency response up to 22kHz (21,984Hz to be more exact). With stopband_start at 100%, we're aiming to suppress all "leakage" beyond Nyquist. The price for this is a little more CPU utilization; no big deal... Even with the CRAAP underclocking, we're still maxing out at <15% and typically <6% CPU load when doing the realtime upsampling of 44.1kHz to 176.4kHz sent over S/PDIF (about the same for 48kHz --> 192kHz).
Here's what that filter looks like on the "Digital Filter Composite" (based on Juergen Reis' suggestions a number of years back) - Raspberry Pi 3 B+, JustBoom Digi --> Oppo UDP-205 DAC via TosLink --> RME ADI-2 Pro FS ADC to capture:
We can also run the RME ADI-2 Pro FS @ 384kHz sample rate to make sure no unexpected ultrasonic noise all the way to 192kHz:
That's about as "extreme" as one can get with a strong "brick wall" filter. We can compare the frequency response with the other filters available in the Oppo UDP-205 which as I've described before are actually excellent already!
Here's a snapshot of the frequency response using 16/44.1 wideband noise with 0dBFS peaks zoomed in between 18-25kHz comparing the "Extremus" filter, my previous "Goldilocks" setting, and a selection of the Oppo/ESS filters available on the UDP-205 (click image for a better look):
Now that from the perspective of a low-pass filter is what I call "ideal" performance with very clean "brick wall" characteristics compared to the filters being offered by Oppo on its machine! It redefines the words "sharp" or "fast" or "steep" when describing filters.
Impulse response? Long as expected with significant pre-ring suppression thanks to the intermediate phase setting:
Remember that there will be some phase shifting with an intermediate phase setting:
A linear phase setting results in a straight line with no phase deviation. Notice that the "Extremus" setting results in minimal phase deviation thanks to the mild intermediate phase setting. As expected, with a minimum phase filter at a reasonable 95% passband, there's quite a bit more resulting phase shift.
The above phase information was all created digitally using SoX and its filter settings. But what about measured phase characteristics while playing back audio using the Raspberry Pi 3 (USB) --> Oppo UDP-205/TEAC UD-501 --> RME ADI-2 Pro FS (sharp linear phase ADC filter) so I can examine the actual DAC filters compared to the "Extremus" setting? Let's also add the PonoPlayer on the graph to show the effect of the Ayre "Listen" filter while we're at it. Remember that this is going through DA/AD conversion at 24/44.1 rather than straight SoX digital processing as in the graph above:
Notice that the Oppo minimum phase settings created the most phase shift, worse with the "fast" (steep) setting than the "slower", more gentle filter setting. For interest and completeness, we also see the TEAC with digital filter off (NOS mode) which also stayed flat to 20kHz. And I've also measured the Ayre "Listen" filter from the PonoPlayer which is a very slow roll-off minimum phase design with minimal phase shift as a result. The "Extremus" filter has a little more phase anomaly than the Ayre filter from 18-20kHz. Only super-duper Golden Ears will be able to hear that I suspect! 😏
But what about the dreaded pre-ringing you ask!? Should be horrible with such a steep brick-wall filter, right!? Well, let's have a look at some waveforms for comparison:
Those are bandwidth unlimited square waves passed through the digital filter with output at approximately the same level for each. Like an impulse response, this waveform will result in "ringing" in the analogue output. Using the Oppo UDP-205 as the reference device fed into the RME ADI-2 Pro FS (these were recorded at 768kHz sample rate), the top tracing is with the standard Oppo "Linear Phase Fast" filter, then "Minimum Phase Fast" filter below, and the bottom tracing the "Extremus" filter with intermediate phase.
As expected, the "Extremus" filter's intermediate phase setting will have ringing that is a combination of the linear and minimum settings. The post-ringing becomes accentuated similar to minimum phase but the amplitude is not as marked, with a little more pre-ringing just before the square wave transition, but nowhere as obvious as with the linear phase setting. IMO, it's a reasonable compromise of the two whenever your DAC runs into extremely compressed and poorly bandwidth limited "loudness war" casualty albums.
What happens when we respect the Nyquist limit (ie. no frequency content at/above 22.05kHz) with 44.1kHz samplerate material? Let's create and look at a band-limited "squarish" waveform:
Notice the odd-order harmonics as expected for these squarish-looking waves with the last component out at ~21kHz. What does this waveform look like when passed through the sharp/fast filters and the brick-walled "Extremus"?
Suddenly all that ringing is gone regardless of the type of filter used! This is a reminder that the impulse-response ringing that companies and reviewers like to drag up to differentiate DACs is not a big deal. Despite how dramatic an impulse response will look or the length of pre/post-ringing, the moment you send "legal" audio data to these digital filters, the resulting output will not be severely affected! In fact, what would be affected are things like frequency roll-off and phase deviations as noted above when the filter is not "sharp" enough and when linear phase is not used (the phase/time anomaly is why we see that extra little post-transition "beat" with the minimum phase filter squarish wave above).
Remarkable isn't it that all kinds of "golden ears" claim they can hear "pre-ringing" with linear phase filter settings with DAC playback (remember, we're not talking about DSP processing like EQ which could lead to audible pre-ringing)? This is despite the fact that ringing is really not an issue in the majority of recordings (absent in good recordings that respect the Nyquist limit), all the while, "golden ear" manufacturer and audiophile magazine writers seem not to notice potential phase shifts across the audible spectrum when using DACs with steep minimum phase filters, and seem to even prefer this. We can of course thank Meridian for this minimum phase trend, and I see their latest Meridian Ultra DAC doesn't offer anything other than various levels of minimum phase filtering. Remember that phase shifts are time domain variations. I guess Meridian doesn't really think that maintaining "time-aligned" frequencies is important ;-).
For completeness, some RightMark tests to make sure nothing significant has changed in distortion and noise level when using the 'Extremus' filter...
Slightly higher noise level and lower dynamic range due to the -3.05dB attenuation... Otherwise SoX upsampling looks/sounds great as expected.
Finally, anyone worried about jitter still?
Just the usual Oppo UDP-205 low level sidebands as previously discussed. No evidence that getting the Raspberry Pi to do some upsampling for us creates any jitter abnormality at all. This again should be no surprise for anyone following along as we've discussed jitter many times (not to mention of course the fact that jitter is likely inaudible unless very extreme).
I've been listening to this filter setting for the last while either just by itself or when I send music through Brutefir for digital correction with the appropriate room measurements of course. Sounds great IMO. Tight frequencies throughout. The "transparent" sound allowing everything up to ~22kHz through to the DAC with no compromises - no early roll-off, no "leakage" into ultrasonic frequencies. Remember that transparency has its "price". There is no romantic "euphonia" here; if the album is harsh, shrill, unnatural, distorted, that's what you're going to hear. That's what high-fidelity is about in my opinion. This is the antithesis of the NOS DAC.
Remember to manage expectations when thinking and talking about the effect of digital filters. There's all kinds of hoopla out there about digital filtering having almost magical qualities - whether we're talking very precise filters like the "Extremus" (consider Chord's Hugo M Scaler which I suspect is similar to this "Extremus" setting at linear phase - have a listen to piCorePlayer setting: "v::3.05:28:99.7:100:50"), or weak filters like Ayre's "Listen" and MQA.
Other than a significant effect on frequency roll-off that can be audible, my opinion is that the effect is subtle at best. By the way, if anyone has one of the Chord DACs, I'd be very curious how steep their filters are compared to "Extremus"!
Always remember, there's no need to freak out about the length of the impulse responses or extent of pre-ringing unless you're frequently listening to low quality poorly bandwidth limited music! And IMO, no audiophile who values high fidelity should be evaluating high quality audio gear with just poor quality albums anyway.
Give this a try if you're running piCorePlayer. Doesn't cost anything and it'll give you a taste of what a high quality essentially "ideal" brick-wall filter sounds like. After all, the processing power is there for you to use - a Pi has plenty of computational power to get this done at least to 24/192.
Notice that I'm only doing 4x oversampling here to 176.4/192kHz from 44.1/48kHz (and of course only 2x oversampling if playing 88.2/96kHz). Some have asked whether this makes a difference compared to going even higher like 352.8/384+kHz. IMO, no, there will be no difference unless your DAC somehow plays 176.4/192kHz material in an inferior fashion compared to even higher sample rates like 352.8/384kHz (or vice versa). Once we upsample with a good filter to even 2x (eg. 44.1 --> 88.2kHz), we're looking at bandwidth outside the audible range already... Sure, maybe 384kHz upsampling turns off any further internal interpolation in the DAC compared to 192kHz. So what? I have seen/heard no such issue in measurements and listening tests.
Finally, regardless of what filtering you use, if you're further upsampling 88/96kHz+ material, it really does not matter what algorithm because even if the algorithm creates significant imaging artifacts, phase shifts or somewhat early high-frequency roll-off, the effect would be more than likely beyond 20kHz. As such, it's of course no surprise when John Atkinson wrote in the Meridian Ultra DAC review: "I drove myself crazy trying to hear any differences between the Ultra DAC's three upsampling reconstruction filters with this 192kHz-sampled album". What did he expect to hear when trying different filter settings using a 24/192 album?! Even a 20-year old golden ear would not be able to hear a difference! Please, subjectivist/pseudo-objective audiophiles, think before writing this stuff!!!
Kudos and a shout out to the folks who made piCorePlayer. Great work on such as stable product with all kinds of potential for the audiophile tweaker.
Enough fun for a blog post I hope ;-). This article turned out to me much longer than I had anticipated when I started writing...
Over the week that I was writing this post (early October before going overseas) and off-and-on while traveling, I was listening to Casey Abrams' Put A Spell on You (Chesky, DR14). Nice recording if you're into light pop/vocal/mild jazz. I've always liked CCR's "Have You Ever Seen The Rain" which is covered on this album quite well, I thought. While these days, I almost never buy hi-res music since it makes no meaningful difference to the vast majority of recordings, for the occasional album like this I will when recommended by a friend. The dynamic range is great and clearly it was recorded and produced in high-resolution when pulled up and examined in an audio editor.
It was recorded in binaural and the liner notes say that the Mytek ADC was used. The binaural effect is excellent on headphones with 3D spatial envelopment. Bass extension is excellent on "Take The A Train". It also sounds great through the "Dolby Atmos" computer speakers of my Huawei Matebook X Pro though lacking a bit of bass on account of the small speakers.
However as a binaural recording, the music does sound different with my main speaker system. I see web pages and research papers looking at implementing crosstalk cancellation to convert binaural recordings for standard stereo loudspeakers (anyone vouch for a good binaural --> standard stereo DSP?). Without conversion I find binaural recordings do tend to have a "suck out" of sorts in the center of the soundstage when played with conventional speakers. This is overall a nice production with great attention to detail making this a good "male vocal" album to use for showing off a high fidelity headphone system. So, if you want to support "real hi-res", this is a good one to consider.
A friend recently also recommended a good "female country vocal" album - Mary Gauthier's Between Daylight and Dark (2007). Sounds great on my system.
Hope you're all enjoying the music...