Schiit (MultiBit) Bifrost (DAC digital filter techno-discussion)

Discussion in 'Digital: DACs, USB converters, decrapifiers' started by ultrabike, Oct 9, 2015.

  1. ultrabike

    ultrabike Measurbator - Admin

    Staff Member Pyrate MZR
    Joined:
    Sep 25, 2015
    Likes Received:
    8,960
    Trophy Points:
    113
    Location:
    Irvine CA
    You can do a maximally flat filter also known as the Butterworth approach as opposed to an equi-ripple filter also known as the Chebyshev approach.

    The price you pay for a maximally flat filter is a less step roll-off.

    You can have something in between known as the Legendre filter I think.

    There are no "gimmicks". Just trade-offs.

    The tone and some of the things Bruno is claiming in that brief do not inspire me confidence TBH.

    Also, don't think much of what Bruno is alluding to relates to what Schiit is doing. I believe Schiit is concerned about input samples coming out untouched at the output of the filter while doing a great job at interpolation by using a fairly large FIR, among other things.

    BTW, You can do a fairly large equi-ripple window filter with vanishing ridiculously amoeba fart ripple.
     
    Last edited: Oct 16, 2015
  2. ultrabike

    ultrabike Measurbator - Admin

    Staff Member Pyrate MZR
    Joined:
    Sep 25, 2015
    Likes Received:
    8,960
    Trophy Points:
    113
    Location:
    Irvine CA
    I couldn't see the whole brief before. Second part he seems to be having issues with "brickwall" filters.

    Usually "brickwall" filters are implemented using IIR class filters. In particular, the Elliptical filter is used often due to it's sharp cut off. IIR filters usually don't exhibit linear phase, and have issues close to the corner frequency. There are Bessel IIRs that have a slow roll-off, but better phase response. None of that is an issue here.

    Most of the filters mentioned here (including the specific Parks-McClellan, LS, Window diz, Window dat, Burrito Frijolero) are FIRs and exhibit linear phase. My understanding is that they are all sort of "brickwall" but through brute force, i.e. having relative large number of taps. So, again, his concerns don't apply AFAIK to the class of filters we are discussing:

    Large Linear-phase FIRs

    Looking at the Mola Mola page, dude claims a 6th order Cheby Polynomial Interpolator. Maybe he is using a polynomial approach using a Farrow or maybe he is using a FIR. It is not clear. But his filter may exhibit ripple since he claims to be using a Chebyshev approach. And then he using a "7th order ripple compensated PWM noise shaper"... 1-bit at that.

    It may sound awesome. But I feel this approach is not very close to what I think Mike/Jason are doing.
     
  3. Madaboutaudio

    Madaboutaudio Friend

    Pyrate
    Joined:
    Sep 28, 2015
    Likes Received:
    545
    Trophy Points:
    93
    Location:
    Singapore
    While his design is definitely not the same approach as schiit, but what he mentions is the same issues/trade offs with typical digital filters found in other dacs(especially those without dedicated dsp) is that they do not have enough computing horsepower/die space/power/thermal reserves to implement more accurate filtering and thus take the most fastest/less computing intensive/(maybe)lossy method.
     
    Last edited: Oct 17, 2015
  4. Madaboutaudio

    Madaboutaudio Friend

    Pyrate
    Joined:
    Sep 28, 2015
    Likes Received:
    545
    Trophy Points:
    93
    Location:
    Singapore
    Here's a visual example of Soekris DAM1021 r2r dacs custom filter:
     
  5. ultrabike

    ultrabike Measurbator - Admin

    Staff Member Pyrate MZR
    Joined:
    Sep 25, 2015
    Likes Received:
    8,960
    Trophy Points:
    113
    Location:
    Irvine CA
    Well, yup. When designing an audio IC I believe corporations try to target as wide a market as possible. This means size, weight and power considerations, as you mention, are important.

    One of the things I didn't like about his write up was:

    "Another classicical short cut is making a fairly sharp filter like the classical brick wall filter which is then centered around exactly half the sampling rate which means that you still get some aliasing which is not as evil as you would think but which is just kind of a mathematical gimmick again to reduce the number of cycles and the amount of processing power that you need."

    I don't agree that aliasing is "not as evil", or "kind of a mathematical gimmick". Aliasing is a very real form of unpleasant non-linear distortion. And dealing with it does not mean reduction of the number of cycles and the amount of processing power. It means the opposite. To generate a very sharp filter that will still have linear phase and remarkable interpolation performance one needs a fairly large filter. The sharper the cut off the more the number of taps and horse power required, if all other requirements remain the same. So to me this is kind of an Obi-Wan statement.

    It is based on some truth though. If one fixes (or reduces) the number of taps and resorts to IIR filtering (which is likely what many ICs may be doing), then a sharp cut-off may require an approach that compromises phase response and ripple. But if we are talking a situation where you are going to use a dedicated processor instead of the built-in digital filters, then saying aliasing is "not as evil", but passband ripple "which corresponds to a small pre-echo and a small post-echo... completely kills all body in the sound" seems a bit of a hand-wavy statement putting too much weight on passband ripple, and too little in anti-aliasing for whatever possible self-serving purposes.

    As far as the "Filter Stopband Comparision" for the Soekris DAM1021 r2r dacs custom filter, the youtube link says the following:

    "Comparison of stop band performance of stock and custom high attenuation filters for the Soekris DAM1021. Filters coefficients were applied to a short music sample using SoX to illustrate the behaviour of the stop band. Static filter response plots don't capture the way the stop band behaves whilst filtering audio."

    This is sort of misleading IMO as well. AFAIK "static" (they are really not exactly static) filter response plots do capture the way the stop band behaves whilst filtering audio. But music files may or may not have significant ultrasonic noise. The filter attenuation is relative to input signal level. And this is true whether you are in digital or analog domain.
     
    Last edited: Oct 17, 2015
  6. schiit

    schiit SchiitHead

    Pyrate
    Joined:
    Sep 28, 2015
    Likes Received:
    9,972
    Trophy Points:
    93
    Location:
    Texas and California
    Home Page:
    Aliasing and quantization error are probably the elephants in the room with digital audio. I would personally rather have 20/48 audio with a good filter than 16/192 with any filter.

    Of course, this is the opinion of a predominantly analog designer, so take it for what it's worth.
     
    Last edited: Oct 17, 2015
  7. Luckbad

    Luckbad Traded in a unicorn for a Corolla

    Pyrate
    Joined:
    Sep 27, 2015
    Likes Received:
    3,408
    Trophy Points:
    113
    Location:
    Holly Springs, NC
    Quick thoughts:

    chebySincThune18001_64.wav: Sounds very similar to standard NOS mode. Gains a slight veil, though.
    KaiserW_1p0_18001_64.wav: Super broken. Everything repeats/echoes.
    LS_0p96_855_64.wav: Sounds like singing through a tin can with reverb.
    ParksMcClellan_0p907_329_64.wav: Sounds like singing through a twisty tube slide at Chick-fil-a.
     
  8. ultrabike

    ultrabike Measurbator - Admin

    Staff Member Pyrate MZR
    Joined:
    Sep 25, 2015
    Likes Received:
    8,960
    Trophy Points:
    113
    Location:
    Irvine CA
    Messed up with the files. Will give you new ones.

    Basically the left and right channel are in a single channel mono! And it would give you some nasty echo for sure. Sorry about that.

    Matlab handles stereo different than Octave :confused:
     
    Last edited: Oct 20, 2015
  9. ultrabike

    ultrabike Measurbator - Admin

    Staff Member Pyrate MZR
    Joined:
    Sep 25, 2015
    Likes Received:
    8,960
    Trophy Points:
    113
    Location:
    Irvine CA
    Here are the new files. Sorry about that.

    NOTE THESE ARE TWO CHANNEL FILES (left and right channel). I one needs only one channel and JRiver takes care of putting the same thing on both channels let me know and I'll create single channel files.
     

    Attached Files:

  10. Luckbad

    Luckbad Traded in a unicorn for a Corolla

    Pyrate
    Joined:
    Sep 27, 2015
    Likes Received:
    3,408
    Trophy Points:
    113
    Location:
    Holly Springs, NC
    These sound a lot less like I'm at a fast food playground. All of them are within a few percent of stock in sound.

    ParksMcClellan_0p907_329_64.wav - Brighter than stock, less smooth.
    LS_0p96_855_64.wav - This one is pleasant. Slightly harsher than stock and longer decay. Female operatic voice is at once lusher and less detailed.
    KaiserW_1p0_18001_64.wav - Very similar to stock. A little more spacious. Almost feels like crossfeed is on.
     
  11. ultrabike

    ultrabike Measurbator - Admin

    Staff Member Pyrate MZR
    Joined:
    Sep 25, 2015
    Likes Received:
    8,960
    Trophy Points:
    113
    Location:
    Irvine CA
    Kaiser indeed is likely closer to stock. AWESOME DUDE. Multiply my "like" by 1k. :headbang::punk::headbang::punk:

    Note LS and ParksMcClellan are shorter filters. I feel that once you get in the kilo taps range, one might actually want to consider window methods. It's hard to get Parks to converge when you have tons of taps, perhaps due to precision errors in the calculation of the tabs.

    And with kilo taps, you are really getting pretty close to a sinc anyway.

    Will put other window filters in the mix later today. :D
     
  12. ultrabike

    ultrabike Measurbator - Admin

    Staff Member Pyrate MZR
    Joined:
    Sep 25, 2015
    Likes Received:
    8,960
    Trophy Points:
    113
    Location:
    Irvine CA
    Here is the corrected chebySincThune_18001_64 filter...

    EDIT: Shit, that one was correct. Attaching regenerated file here anyway.
     

    Attached Files:

    Last edited: Oct 20, 2015
  13. ultrabike

    ultrabike Measurbator - Admin

    Staff Member Pyrate MZR
    Joined:
    Sep 25, 2015
    Likes Received:
    8,960
    Trophy Points:
    113
    Location:
    Irvine CA
    So, so far Kaiser mega filter appears to be doing bestest, correct Lucks?

    EDIT: BTW, one could built in headphone compensation (equalization) to the DAC filter.
     
    Last edited: Oct 20, 2015
  14. Clemmaster

    Clemmaster Friend

    Pyrate Contributor
    Joined:
    Sep 28, 2015
    Likes Received:
    3,273
    Trophy Points:
    113
    How do you use the filter with JRiver?

    Simply selecting the wav file in the "Convolution" panel does output 44.1kHz, not 176.4 (As shown on my Geek Pulse).

    I could process the song in Matlab, but I was wondering how the others tested the filter?
     
  15. ultrabike

    ultrabike Measurbator - Admin

    Staff Member Pyrate MZR
    Joined:
    Sep 25, 2015
    Likes Received:
    8,960
    Trophy Points:
    113
    Location:
    Irvine CA
    From what I'm reading here:

    http://wiki.jriver.com/index.php/Convolution

    One might need to rename the filters by appending 2.0_1764 to the name of the file.

    But not sure.

    Audio files might need to be 176.4 kHz. I could change the wav label to 192 kHz too.
     
  16. Clemmaster

    Clemmaster Friend

    Pyrate Contributor
    Joined:
    Sep 28, 2015
    Likes Received:
    3,273
    Trophy Points:
    113
    Nah, it won't work. This naming scheme simply allows JRiver to switch the filters automatically depending on the input sample rate. It does not allow for upsampling.

    Matlab it is, then.
     
  17. ultrabike

    ultrabike Measurbator - Admin

    Staff Member Pyrate MZR
    Joined:
    Sep 25, 2015
    Likes Received:
    8,960
    Trophy Points:
    113
    Location:
    Irvine CA
    Oh! I think I know what you mean.

    I guess try just upsampling the 44.1kHz sound file w/o interpolation (just insert 3 zeros in between samples, S/H does some sinc stuff in the passband). Then let JRiver apply the filter... I think.
     
  18. Clemmaster

    Clemmaster Friend

    Pyrate Contributor
    Joined:
    Sep 28, 2015
    Likes Received:
    3,273
    Trophy Points:
    113
    Well, it's not very convenient that way. I went the all matlab route and generated the interpolated 176.4 file.
    I'm in an audioconference now, I'll test later on the Pulse, see if I can hear a difference (I'm well aware that the Pulse own filter will still apply, but it probably will be less noticeable than on 44.1 contents).
     
  19. ultrabike

    ultrabike Measurbator - Admin

    Staff Member Pyrate MZR
    Joined:
    Sep 25, 2015
    Likes Received:
    8,960
    Trophy Points:
    113
    Location:
    Irvine CA
    Seems like so. Would be nice if JRiver allowed to specifiy filter for upsampling.
     
  20. Luckbad

    Luckbad Traded in a unicorn for a Corolla

    Pyrate
    Joined:
    Sep 27, 2015
    Likes Received:
    3,408
    Trophy Points:
    113
    Location:
    Holly Springs, NC
    I just used files of the correct sample rate because I didn't want anything muddying my perspective on the sound.

    I'd rank them something like...

    (Best to Worst)
    Kaiser | Stock
    Cheby
    LS | Parks

    In general, something around that order. The Kaiser vs. Stock flipflops between songs. I think stock actually feels a little more natural but Kaiser seems to enhance detail just a touch.

    Kaiser imparts a sense of spaciousness without changing the sound too much. Stock has better timbre; instruments sound more real. Cheby is fine but not terribly exciting. It softens things up a little, maybe gives a tiny bit of a veil. LS and Parks are both a rung down, starting to sound a bit artificial (though LS does have nice impact to it).
     

Share This Page