Convolution with Null filters are audible

@brian

I wanted to further evidence and qualify the “improper convolution file resampling” bug I have identified, by measuring the impulse response through Roon DSP in various configurations.

What I did:

  • create a “Dirac” file, sampling rate 96kHz, duration 2 secondes
  • record Roon outcome for various NULL convolution files : 1) 96KHz 2) 44KHz sampling 3) 384KHz
  • Compare outcome with initial “Dirac” file

Looking at the recordings it is obvious there is an issue with 44k and 384k NULL IR.

The 96k NULL IR turns the 96K DIrac into a Dirac as expected (minus dithering effect but this is normal and very low level anyway).

WIth REW, one can see that the improper resampling of 44K and 384K NULL IR at 96kHZ is creating a big mess to the phase in the mid/highs:

Here is the Audacity file with the 3 recordings.

Also I checked that the bug is not related to the filter’s file format, so I tried various ones, all at 384k:

  • IEEE 64bit
  • DBL 64bits
  • LPCM 32bit
  • IEEE 32bit
  • LPCM 24bit

All failed to bring a clean recording of my 96k reference track “Cecile”. So it seems that the resampling bug occurs whatever the convolution file format is.

On a side note: i don’t know if it’s the expected behaviour, I experienced the following with DBL files:

  • cannot be imported as a single file “unsupported file format” (whereas .wav can)
  • if I i put the file in a .ZIP container : it was imported, but nothing would play
  • it works well in a .ZIP container and a simple .cfg file
3 Likes

[post EDITED, my mistake, the graph was wrong as I forgot to reset CoreAudio@44k…]

Here is what is happening to a 44k stream with a 44k Null IR and 48kNull IR.

Once more, the phase is quite shaken with 48kNull filter applied to 44k Dirac. All is good with 44K Null.

1 Like

Great work ! It is also great to see just how far one get, by just and only working/deducting methodically :slight_smile: !

It seems that this thread is growing into at least two seperate issues.
Might be wise, to try and seperate those (?) :

  1. There is a problem in the automatic resampling of impulse responses. This certainly has potential for being audible.
  2. The problem of the topicstarter : until recently, he was sure to hear a difference by playing a 48kHz file, through a matching filter.
    Right now, it is starting to become clear, that this may have been a human mistake. Awaiting confirmation.

Allow me to focus on problem 2, for a moment. @Leong_Kin_Foong1 : You should listen you your favourite test track, again. But now with a proper 48kHz filter file. ( @alec_eiffel : could you supply your file, for Leong ?).
Point of interest is : do you feel, that you still hear any change ?

If so, there must either be an additional problem, or a perceptual problem. It cannot be the exact problem, that Alec is describing now.
If NOT, then Alec has nailed down the issue for you.

Simultaneously, you (all) can of course go on with problem 1.

  • It is good to see that all behaves well, when exectuted as suggested in the documentation
  • It is NOT so nice to see, that the quick&easy “automatic resampling”, does not behave as nice as you’d like.
    That is indeed some great spot from Alec !
1 Like

For @Leong_Kin_Foong1 tests:
Null 44.1k file
Null 48k file

1 Like

Interesting, tonight I’m having difficult telling the difference with 48K tracks using Alec’s single 44.1 NULL filter or without the filter. But can’t tell for sure when listening to 44.1 tracks with or without filters - sounds the same to me.

Using 48K track with 48K Null filter, can’t tell difference too. Sound the same to me.

I will do the same test as I wrote about in post 43 to check if I still hear a difference. Maybe I should record output from Roon for the two or three scenarios and just play them through Roon with no processing.
I remember the difference as quite small, but there is no doubt that there was a difference. It now seems that the current findings of Alec is different from the problem we thought we where dealing with in the beginning.

That would not be a nice conclusion. Not for you, not for anyone else :slight_smile:
Please. do try to get back in a relaxed state. Take all the time you need, for that.
Do not feel like being judged - you aren’t. Really :slight_smile: .

Once you feel up to it again: re-try, and report again.

I do already have ideas for a simple, but fairly conclusive A/B test, if interested. Not willing to do that publicly yet, however: it is not tamper-proof for people wanting to cheat. (Might do it on selected indivuals; I’ll see).
First I prefer to wait. I do not want to interfere with Alec, generating proper reports. And I prefer to have a proper understanding of Leong’s situation, first.

Looking at those impulse responses, only the original is linear phase; the two that have been resampled are minimum phase. In that latter case, some phase shift is to be expected – just like all MQA impulse responses are minimum phase and create some high frequency phase shift.

Out of curiosity, what is your Roon DSP sample rate conversion digital filter setting? The default is a minimum phase filter. And while that user setting may not affect under the hood sample rate conversion for convolution files, it could. I would be curious to see tests rerun with the user setting toggled to a linear phase filter.

AJ

Ah, thank you for your kind consideration (!) but I’m simply reporting what I heard or rather didn’t hear. Conclusions or judgments have nothing to do with this :grin:

Have to admit I was pretty tired and busy with the family so its not a good mixture for critical listening. Will find time to do it again.

In the meantime, please continue to think it out and hopefully discover the entire picture

Oops do not assume the 3 rows are time aligned. There is no pre response and a tail, so it looks like a minimum phase filter has been applied. Considering the size of the tail and spectral content I am thinking aliasing, and a serious one! My sampling rate converter in Roon DSP is set to linear phase but it should not be at play for conv filter resampling as you pointed out.

I don’t know what could be a good resampling algortihme for conv files, maybe a linear phase with small apodizing ? Linear phase only ?

To be 100% sure I ran the same test of a 44k DIrac through a 48k Null Convolution file in HQPlayer.
The outcome looks much cleaner. The phase shift is very low (the lower blue curve).


1 Like

If it’s minimum phase filter, then certainly it’ll show up in DIffMaker because there’s a real difference. Also DiffMaker doesn’t properly compensate for sub-sample timing differences so that will show up too.

This is not even phase shift because the filter used is linear phase. But it is sub-sample delay and REW is just unable to calculate the delay for lower frequencies and higher attenuation at top as accurately so the phase curve variation from 0 is more like measurement artifact.

2 Likes

I’ve a plan to listen to Roon with files I recorded on DiffMaker. I used the same settings as earlier to make the recordings. VAC as ‘soundcard’ and zone in Roon. Three different settings in Roon; no DSP (=lossless), +0.1dB at 18kHz Q 10 and convolution with the famous NULL filter. Format 24/44.1.Amplifier is a Devialet 250 Pro CI and Roon streaming directly to the ethernet port (via a switch) using Roon/AIR. For playback of the three files I will use Roon with all processing disabled.

It is all very well planned, but it is not that easy to find the right time to sit down and actually do the test. I usually play music to relax and have fun. A session like this is different. I should be relaxed and prepared before I start the test. I’ll do it at some point, but it will take more time than I thought.

1 Like

The resampling of the convolution filter is now linear phase in the latest version 1.6. Means that convolution with null filters should not be audible anymore.

3 Likes

I still don’t like how inconclusive this topic is, regarding the (in)audibility of previous resampling methods :slight_smile: . But I guess we’ll never know for sure :slight_smile: .

@alec_eiffel : Do you mean, that you have actually checked the correlation between input, and resampled output with the new resampling ? (Or did you just read the release notes ?)

If so : it would be nice to post the results, here. Could be a nice way for visitors to gain ‘trust’ in the level of transparency in DSP processing. And a nice way of showing : 'look, the Roon team really DOES hear us :slight_smile: '.

If not : no problem; I don’t need it, and I know it takes quite a bit of work.

@Marco_de_Jonge yes I checked, see my report:
"I confirm that the convolution filters are now properly resampled and are linear phase, which allows to keep all the “dynamics” of the signal as well as soundstage accuracy.
Blue is with Roon 1.5, Red with 1.6. The Null IR is 384KHz, the Dirac test signal is at 96KHz.

Next chart: In comparison with HQPlayer, 48k Null IR and 44.1K signal. Both phases are linear and Roon is now as good as HQPlayer.

For your information the phase in this configuration looked like this before the fix (in green) :slight_smile: "

7 Likes

Thanks ! It doesn’t literally answer the question (what is the correllation between input and output?), but still : it shows the step forward. Phase errors are now non-existant or much smaller (and if asked for my opinion : they were quite small, in the first place… :slight_smile: ).

I do not yet quite grasp, what I see in the second picture (phase still declining somewhat). On first thought, it looks like latency (which cannot be troublesome at all). I’ll give it another thought, tomorrow. It is night time, over here. But please comment, if you have your own thoughts :slight_smile: .

Anyway, to the entire communtity : Shall we give Alec (=Remi) the credits ? I think he deserves that.
Let’s make this post, the most-liked post of this forum : Convolution with Null filters are audible

2 Likes

I will run correlation depths test when I have time but I am very certain Roon will be good considering the behaviour on a Dirac.
The « declining » phase is corresponding to a very small delay (3/4 of a sample approximately). Could be an artefact of the visualisation in REW,not always very accurate at the subsample level. It’s a non issue, a linear phase shift is simply a delay.

Hi @Leong_Kin_Foong1, I;m just too curious :slight_smile: . Do you feel like sharing how you think about the current sound of Roon, convolving your music ?

Hi Marco,

Yes I will when I find a little time. Just a bit busy now. I’m curious if this has been solved too.

Also enjoying Roon 1.6 as I’m finding this sounds very nice now.

Cheers, Kin

1 Like