Filter brewing for the Soekris R2R

Disabled Account
Joined 2005
With full respect to your constraints of time I was wondering if you had compared what you are getting with your filters versus an upsampled file of 24/384?

I will post the address of the software mentioned later today. Do you think this could have any meaning? Is there a possibility of a reference of what the "perfect" filter would sound like? Curiosity FORCED me to write this.

I compare on a fairly regular basis with Audirvana+ upsampling to 24/352.8kHz. This uses Izotope SRC which is apparently one of the better resamplers available, although dbPoweramp look comparable judging from the results at SRC Comparisons

You are going to get better results if you stick with an even multiplier of the original sampling rate. 44.1 x 8 = 352.4kHz whereas 384/8 = 8.70748299319728 which is going to introduce rounding errors in the worst case, and significantly increase the processing load in the best case.

The perfect filter pass the signal on the disc without alteration. Unfortunately at 44.1 there are significant constraints on how close you can get to that, so you are unlikely to even hear a perfect 44.1 or 48 kHz filter.

When we get the next software update from Søren we'll have added filter length to play with, which will allow much steeper filter roll-off and bring the on-board filter very close to what is achievable with computer based resampling. At the moment the filters are getting close, but Izotope still has an edge in SQ.
 
Disabled Account
Joined 2005
Making some use of time waiting for an early appointment...

The conclusion I've reached is that Kaiser windowing sound richer and fuller than Chebyshev. Chebyshev gives slightly steeper roll-off but after some experimentation it's clearly giving a much leaner, less satisfying result. TNT then made observation early in the thread that he didn't like Chebshev windowing, and I think there is probably good reason with the brick wall filters.

I've created a base filter that rolled off slightly higher than the SoX Fixup which is closer to the passband response of the Izotope "Best" setting in A+.
The difference between the two is the windowing used. C150 has a Chebyshev window with side lobe attenuation of 150dB. The other uses Kaiser window with beta=16. They have similar levels of stop band attenuation but roll-off differently.

I'd hazard a guess that the reason the SoX filter is preferred is almost entirely down to the fact it uses the Kaiser window. :rolleyes:

I've attached the two filters plus .txt files for each.

Doing a quick comparison the Kaiser window version sounds closer to the Izotope SRC than the Chebyshev version. The impression I have is that the Chebyshev window removes some of the "body" from instruments. I'd be interested in thoughts on the difference between the SoX Fixup and 1021filt_1015_Kb16_BW.skr has these are close with the region around 20.5 - 21kHz being the area of greatest difference.
 

Attachments

  • ChebVsKaiser.zip
    58.1 KB · Views: 188
Last edited:
Agreed. Kb16_BW is very very nice. Don't know it is elusion or not, but somehow Kb16_BW sounds cleaner to me than C150_BW. I am comparing the two using Bruno-Leonardo Gelbar's Beethoven: The Sonatas for Piano, Vol. 3. The first piece is Piano Sonata No.23 in F Minor, Op. 57: 1. Allegro Assai.

I am playing repetitively between 4 min 00 and 4 min 30 seconds. But the whole piece is just really awesome, extremely dynamic. You can hear birds chirping in the background throughout the playing, very interesting.
 
Disabled Account
Joined 2005
Agreed. Kb16_BW is very very nice. Don't know it is elusion or not, but somehow Kb16_BW sounds cleaner to me than C150_BW. I am comparing the two using Bruno-Leonardo Gelbar's Beethoven: The Sonatas for Piano, Vol. 3. The first piece is Piano Sonata No.23 in F Minor, Op. 57: 1. Allegro Assai.

I am playing repetitively between 4 min 00 and 4 min 30 seconds. But the whole piece is just really awesome, extremely dynamic. You can hear birds chirping in the background throughout the playing, very interesting.

The difference is most obvious in the Log square impulse response. The SoX and Kb16_BW have virtually the same response shape, so they will sound very similar tonally. The C150_BW has a wider spread below -40dBFS, which I think give's louder sounds a slight boost cf the SoX /Kb16. Because LF tends to have more energy it seems to tilt the tonal balance towards the LF making the filter sound darker and slightly less detailed. I suspect it's these subtle shifts that result from the filtering that we are picking up on.

I've been using Vivaldi's Concerto For 4 Violins & Cello In B Minor • Si Mineur • H-Moll, Op. 3 No. 10 performed by The Academy of Ancient Music as a reference for the sound staging and tonal balance. It's a 1983 release so not exactly the finest CD reference material but sounds captivating via the DAM.
 
Thanks to Dimitris (DIMDIM's BLOG) pointing out that one cannot access the DAM with the wrong speed in the terminal manager I should finally be able to try them.

I had 192000 obsession with my upsampling bandaid and kept putting that in instead of the correct number. What an idiot ...

NOW to hear what you have wrought.

Sincere thanks to Dimitris and the cryptic spzzzzkt!, the only man who has ever succeeded in keeping a thread on track. Well, he has let me get away with getting off topic a couple of times. This note would be the fourth ...
 
Disabled Account
Joined 2005
I had 192000 obsession with my upsampling bandaid and kept putting that in instead of the correct number.

Not sure if dBPoweramp allows you to apply FIR filters, but if it does you could always copy the coefficients from the .txt files (where supplied) and process a test track offline.

It's simple enough with SoX command line...

Code:
sox -V /path/to/input/file.wav -b24 -r352.8k /path/to/output/upsampled.wav upsample 8 fir /path/to/fir/filter.txt vol 8

I've been very tempted to use this to do "quick and dirty" filter comparisons as it's avoids having to go through the relatively slow process of swapping between filters.

As it is possibly useful to have a common reference I've made a 60 second edit of the Vivaldi track mentioned above which is roughly 10% of the track length and should qualify as "fair use".

The original 16/44.1kHz (10Mb):
https://www.dropbox.com/s/unr283mie0gu7cp/Vivaldi_Test.wav?dl=0

Upsampled to 24/352.8kHz using Izotope RX Standard with:
- Filter Steepness: 150
- Cutoff Shift: 0 (Fc = 22050)
- Pre-ringing: 1 (Linear Phase)
Which replicates as far as possible Audirvana Plus' Izotope SRC "Best" setting.
File is a 127Mb uncompressed .wav
https://www.dropbox.com/s/8oh0w4sk0lcsdm1/Vivaldi_Test_Izo.wav?dl=0

The Izotope settings used above are my brick wall filter benchmark. As I understand it the SRC module in A+ exposes some advanced settings but the underlying SRC is the same as used in RX, so I think this should be a fair basis of comparison.
 
Disabled Account
Joined 2005
Just a note of caution with using offline sampling. I did a comparison on the same filter coefficients applied off-line in SoX and as an skr to upsample 16/44.1 in the DAM. They do not sound the same.

The offline sampling seems to result in a softer, slightly warmer sound. The onboard filters have more air and sharper definition. It's subtle difference but noticeable.
 
Disabled Account
Joined 2005
I've done a couple of mods to the DAM1021 today so thought I'd make note here just in case someone thinks this will make a difference to the filters :D

- LME49710 buffer op-amps replaced with LME49990.
- 47uf/35V Panasonic FC electrolytic cap soldered between out and gnd pins on the ZLDO1117-3.3 regulator.

Both were done at the same time so can't isolate improvements, but the result is a significant improvement in sound stage depth and definition. Well worth the $10 parts cost ;) I'm very tempted to say that the LME49710 is the weak link in the onboard buffer!

I'll be replacing the PSU caps with Panasonic OS-CON's as per Søren's "if you must" suggestion early next week. Also have 220uF/10V FC caps hiding somewhere so might see if this does anything useful on the 3.3 reg.
 
Last edited:
I've done a couple of mods to the DAM1021 today so thought I'd make note here just in case someone thinks this will make a difference to the filters :D

- LME49710 buffer op-amps replaced with LME49990.
- 47uf/35V Panasonic FC electrolytic cap soldered between out and gnd pins on the ZLDO1117-3.3 regulator.

Both were done at the same time so can't isolate improvements, but the result is a significant improvement in sound stage depth and definition. Well worth the $10 parts cost ;) I'm very tempted to say that the LME49710 is the weak link in the onboard buffer!

I'll be replacing the PSU caps with Panasonic OS-CON's as per Søren's "if you must" suggestion early next week. Also have 220uF/10V FC caps hiding somewhere so might see if this does anything useful on the 3.3 reg.

Probably offtopic here, but according to Zetex's datasheet, it recommended 100uF for the 5v reg with a note that a larger capacitance can help stability and transient response.. it also suggested a slightly smaller capacitor in parallel to the resistor coming out of the adj pin for better ripple rejection (scratch that.. only if we have the adj version which this board doesn't have I think).

Do report back on your PSU caps change. I replaced them with panasonic OS-CONs also, but also did a few other changes so I can't tell if those individually made a difference :p
 
Last edited:
Just a note of caution with using offline sampling. I did a comparison on the same filter coefficients applied off-line in SoX and as an skr to upsample 16/44.1 in the DAM. They do not sound the same.

The offline sampling seems to result in a softer, slightly warmer sound. The onboard filters have more air and sharper definition. It's subtle difference but noticeable.

fir [coefs-file|coefs]
Use SoX’s FFT convolution engine with given FIR filter coefficients. ...
So SOX uses the Fourier transform for the FIR filter. That is circular convolution. When doing it right (wastefully enought) you can do it so that you get the same as with ordinary convolution (as in the DAM). But that opens options of alias effects, truncation, arithmetic effects, ... as explanation of the difference.
Probably only loking at the source code will show what is happening.
 
Disabled Account
Joined 2005
So SOX uses the Fourier transform for the FIR filter. That is circular convolution. When doing it right (wastefully enought) you can do it so that you get the same as with ordinary convolution (as in the DAM). But that opens options of alias effects, truncation, arithmetic effects, ... as explanation of the difference.
Probably only loking at the source code will show what is happening.

That will explain it. The general character is the same but the difference between SoX and DAM is enough to be noticeable.
 
Have fitted Black Gate 2200uF 6v3 across 5v regs, theory being to give plenty of clean energy for the ladder dac. Not tried without, perhaps I should? Getting deep soundstage back to front with latest filters, and overall sounds lovely as per my experience with Black Gates elsewhere. Will keep an eye on mods folk are trying and get back to listening next week.
 
spzzzzkt,

Finally am able to hear your filter, the last one you felt particularly good about two or three pages back, and can hear that upsampling is not necessary at all. In fact the dbpoweramp upsampled files sounded better with that filter but I like the sound of an unatered file even better. Thanks! All of the space savings ...

Reading of you output opamp exchange one can only conclude your fingers are as nimble as your mind.

When I get more attuned to what is happening with this filter I will try some of the other ones.

Sincere THANKS for your work,
 
Disabled Account
Joined 2005
spzzzzkt,

Finally am able to hear your filter, the last one you felt particularly good about two or three pages back, and can hear that upsampling is not necessary at all. In fact the dbpoweramp upsampled files sounded better with that filter but I like the sound of an unatered file even better. Thanks! All of the space savings ...

Reading of you output opamp exchange one can only conclude your fingers are as nimble as your mind.

When I get more attuned to what is happening with this filter I will try some of the other ones.

Sincere THANKS for your work,

Hi Rick,

Glad you've been able to get the filter uploads working.
The SoX_Fixup_HiAtt and 1015_Kb16_BW are probably good places to start. the Kb16_BW is what I'm listening to at present, but there really isn't much between them.

It seems like there may be some advantage to processing on board with 30bit filters over processing offline at 64bit and sending the data at 24bit to the DAM. My feeling is that the DAM filters are now getting close enough to what something like Audirvana+ does using Izotope SRC. I suspect if the filter characteristics were matched you'd be hard pressed to tell the difference. Where the DAM is currently at a disadvantage is on very steep brickwall filters.

SO-8 is about as small as I can comfortably deal with - eyesight is the limiting factor. ChipQuik, SMD tweezers and a magnifier help. https://www.youtube.com/watch?v=7kyaz4Zrd78
I was a bit careless adding one of the LME49990 and lifted a pad, which thankfully was "Not Connected". :rolleyes:

cheers
Paul
 
Disabled Account
Joined 2005
Yesterday I've been to Rob Watts presentation of Chord's new dac. He was very proud of his new filter; it has 164 000 taps! Use as many as you can, he said.

The information on the Chord site is obviously a bit out of date, but still interesting. Especially the comments regarding the improvement from going to 2048 tap filters.

DAC Technology

In order to do this the filters need to have infinite long tap lengths. Currently all reconstruction filters have relatively short tap lengths - the largest commercial device is only about 256 taps. It is due to this short tap length and the filter algorithm employed that generates the transient timing errors. These errors turned out to be very audible. Going from 256 taps to 2048 taps gave a massive improvement in sound quality - much smoother, more focused sound quality, with an incredibly deep and precise sound stage.

The initial experiments used variations on existing filter algorithms. Going from 1024 taps to 2048 taps gave a very big improvement in sound quality, and it was implying that almost infinite tap length filters were needed for the ultimate sound quality. At this stage, a new type of algorithm was developed - the WTA filter. This was designed to minimise transient timing errors from the outset, thereby reducing the need for extremely long tap lengths. The WTA algorithm was a success - a 256 tap WTA filter sounded better than all other conventional filters, even with 2048 taps. WTA filters still benefit from long tap lengths; there is a large difference going from 256 taps to 1024 taps.
 
With the DAM we upsample and filter after FIR1 again. The equivalent total filter we use with the DAM has thus ~8000 taps ... although we can not choose these individually.

I think it is also important to compare the number of taps with the used oversampling.
With 8x oversampling and 1024 tabs you use 128 of the original samples as inputs.
With 64x oversampling and 1024 tabs you use 16 of the original samples as inputs.
Without oversampling and 1024 tabs you use 1024 of the original samples as inputs.