Jump to content
IGNORED

Help me to understand filters


Recommended Posts

5 hours ago, manisandher said:

1. The ‘minimum-phase’, ‘minimum-ringing’ and ‘non-ringing’ filters are clearly not transparent in the audio band. So, what's the point of using them?

 

2. The humble FIR is essentially totally transparent from 0 to 19 kHz. So, what’s the point of using anything else?

 

You are oversimplifying it, to begin with assuming that your source data is "transparent" to the original analog signal without needing fixing...

 

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment
3 hours ago, manisandher said:

But a -190dB null suggests that the difference between the resampled file and the original is 0.000001dB (I think) in the audio band. And bear in mind that the resampled file has been through both an anti-alias and a reconstruction filter.

 

sinc-S, sinc-M and poly-sinc-ext2, and poly-sinc-xtr have about -240 dB stop-band attenuation. But since this exceeds resolution of 32-bit PCM you cannot get more out of HQPlayer as PCM.

 

3 hours ago, manisandher said:

OK, not quite perfect. But orders of magnitude more accurate to the original file than any of the 'minimum-phase', 'minimum-ringing' and 'non-ringing' filters.

 

First define "accurate"... ;)

 

You are constantly assuming that your source data is accurate representation of the source analog signal. Which is not the case with most modern ADCs.

 

The minimum phase variants have exactly same attenuation and response as the linear phase ones. 

 

 

P.S. Your method seems to have trouble keeping up with sub-sample delays with linear phase filters.

 

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment
5 hours ago, manisandher said:

But I can get a perfect null:

 

When you do processing in HQPlayer, the processing will have more precision than for example 32-bit integer PCM. So you need to use for example TPDF dither to avoid truncation distortion. Your "null" (difference) will end up showing at least the dither...

 

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment
7 minutes ago, manisandher said:

When I go from 176.4 to 44.1 to 176.4, I can get a nice null below 20 kHz or so. But using exactly the same filters, when I go from 44.1 to 176.4 to 44.1, I don't. Is is because in the former case that decimation filter has already cleaned things up ready for the interpolation filter?

 

How are you doing the nulls in first place? Taking possible sub-sample delays into account?

 

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment
5 hours ago, Steve B said:

I think pkane2001's DeltaWave null comparator should take care of sub sample delay.  Have you tried that?  It's a wonderful program.

 

Yes, that should likely do it. I have not used it myself, but I would assume it does the right thing, or at least gets closer.

 

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment
3 hours ago, manisandher said:

I've had a chance to play around with Deltawave now, and it's fantastic! Especially seeing as it's corroborated my initial findings 🙂. Apart from being out by a single sample on a couple, my original plots were bang on (Deltawave plots in inset).

 

Some of the results are still looking somewhat wrong. What are you using for downsampling in the cases where the same filter cannot be used for that? So what is the conversion to the other direction and what is the entire process?

 

 

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment

Overall the differences are:

 

minringFIR-lp is very short and has some amount of pass-band ripple in pass-band frequency response. This is also actually what you get with DAC chip filters too.

 

polynomial-2 behaves somewhat better than a NOS DAC, but still has some frequency response roll-off towards high frequencies. This makes the pass-band difference.

 

IIR and other minimum-phase filters have modified phase response, so the null reflects the difference between minimum phase and linear phase responses. You could actually revert the process in second processing round and get the same result as with a linear phase version.

 

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment
3 hours ago, manisandher said:

1. 24/176.4 (original) to 24/44.1_sinc-M to 24/176.4_FUT* -> null against original

 

I used sinc-M for the downsample stage in all cases here, as I wanted as much HF content preserved in the downsampled file as possible. This process produces the nulls shown above.

 

2. 24/44.1 (original) to 24/176.2_FUT* to 24/44.1_sinc-M -> null against original

 

 

That explains part of it, since sinc-M is still apodizing filter, giving somewhat wrong result with for example minringFIR or any other half-band filter. In fact you cannot have a correct result with this type of test with half-band filters. poly-sinc-xtr-lp could get you a little closer.

 

3 hours ago, manisandher said:

With this process, I can't get anywhere near a null with any of the HQP filters. As I mentioned in an earlier post, the 24/44.1 original files I used (both pink noise and music) have a lot of content right up to 22.05 kHz. (The Audacity filter happily nulls to <-200dB in the pass band with these files.)

 

That just gives incorrect results with something like minringFIR-lp or polynomial near Nyquist of the lower rate. Because pass-band comes from the other filter.

 

 

Anyway, for linear phase filters (minringFIR-lp and polynomial, although polyomial is not even a filter but instead interpolator) the non-perfect nulls are due to frequency response difference (amplitude vs frequency). These are more like side-effects of those filters due to other (time domain) design goals. For minimum phase filters the non-perfect null being due to minimum-phase response which is totally intended side effect. So two different reasons.

 

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment
3 hours ago, John Dyson said:

2) Actual music. someone took the care to provide wide bandwidth to the consumer.

3) Distortion products as created by signal processing (of any type.)

 

(2) would be combined with (3), aliasing in this case always. Because you cannot have a decimation filter that passes content exactly up to Nyquist frequency while not aliasing at all.

 

Modern ADC decimation filters go flat or almost up Nyquist and stop-band begins only after 0.5 frequency. Meaning you can see the amount of this high frequency hash they have from the 0.5 to beginning of stop-band response. So if the stop-band starts at 0.55, then 10% of the bandwidth will have this distortion.

 

In addition they have typically fairly small stop-band attenuation of 120 dB, so they will also reach at max about 20-bit resolution. Same goes for DAC chip filters too. On DAC side you can find even lower figures though.

 

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment
20 minutes ago, John Dyson said:

I agree 100% that on digital material, the various artifacts can become noticeable - but it is the noise modulation that I see most often.

 

I'm not seeing noise modulation because the sources are newly recorded straight with ADC and of course no Dolby or similar involved. From spectrum analysis you can see it is the signal plus it's aliasing products, since typically the content will hit the Nyquist of RedBook pretty hard.

 

22 minutes ago, John Dyson said:

but the NR/dynamics processing noise modulation is strongly prominent on material recorded/sourced with analog tape

 

I don't think there is so much new material recorded within last ten years on analog tape...

 

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment
4 minutes ago, John Dyson said:

If the aliasing products on new stuff are as bad as the hiss modulation, then there is some really ham handed design going on.

 

It is pretty bad, but of course not as bad as almost all content driven heavily into digital clipping thanks to loudness wars.

 

Of course another source of hiss modulation you now get is MQA...

 

In any case, if the source is proper, no harm is done with apodizing filters. If the source content is not proper, apodizing filters can help fixing various issues...

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment
2 hours ago, manisandher said:

So should I expect to get a null with the following:

 

24/44.1 (original) to 24/176.4_non-apodizing-lp to 24/44.1_non-apodizing-lp ?

 

No, you are going to wrong direction. I'm not sure what you are looking for. You will just get different kind of errors. But for down conversion step with half-band filters you may get better results with poly-sinc-xtr-lp.

 

minringFIR is a half-band filter and there's no way you can get correct result with such if you do upsample with such, followed by downsample.

 

I can understand this can be sort of fun exercise if you know how to interpret the results and also want to assume the source data you begin with is correct in respect to analog signal that entered ADC to begin with, assuming your ADC analog and digital filters, and production chain is perfect. For me the more interesting are the many cases where that is not the case. In such case fixing the problems obviously requires also changing the signal. In addition, what your test doesn't look at all is what comes (or doesn't) come out of the upsampling filter beyond Nyquist of the source, because on down-conversion you are removing all that again.

 

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment
2 hours ago, John Dyson said:

What FA means, if used with an un-normalized MQA recording, is that the noise from MQA might be at least partially removable.

 

Remember that MQA adds it's noise shaped scrambled mess at the final encoding stage, so it will just mess all the other stuff that is there. So it is just a process that adds random looking shaped noise.

 

I've just designed an upsampling filter to clean that up. It also works very well on hires recordings that have either hiss or just noise-shaping noise left overs from the ADC. Since >= 176.4k PCM output of most ADCs look just like DSD128 converted to PCM.

 

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment

For example here's digital filter response for AK5572 ADC chip at 48k sampling rate:

Screenshot_2020-10-15_17-45-59.png.5ad6b698a68285fd4b0731e2f9c3a0a4.png

 

This a typical on-chip half-band filter. You can see the filter transitions between 24 and 28 kHz. Meaning it will have 4 kHz wide aliasing band, thus between 20 kHz and 24 kHz. Signals above 28 kHz are attenuated 85 dB, so it is fully accurate in pass-band to about 14.5 bit resolution. Good example of modern ADC that needs some fixing at playback stage.

 

This filter would look somewhat similar to minringFIR-lp in the null test, but since the pass-band and stop-band ripple is flat throughout the frequency band it would have higher and horizontal pass-band difference at about -100 dB, unlike minringFIR-lp where it is mostly close to Nyquist:

Screenshot_2020-10-15_17-05-21.png.aff6ddab6770d742c21f7ac8ef888bcf.png

 

Slope here follows the increasing pass-band ripple. The step at the end is from the sinc-M filter:

 

Quote

2031653713_4.PinkNoise24_44.1_sinc-Mto24_176.4_minringFIR-lpvs.Original.thumb.jpg.9e5c9493ddb820cd910a7e8036ccfb12.jpg

 

 

 

While if we look at frequency response:

Screenshot_2020-10-15_18-24-59.png.c5a2269c7e544a1aab6ec0494db4c743.png

And pass-band ripple:

Screenshot_2020-10-15_18-27-15.png.91c72dbaba9f7e58b86f4fccb08bc125.png

Of sinc-M filter it is all totally different. I actually got bored zooming in the pass-band ripple plot at that point, it being less than 0.00000000001 dB.

 

 

Now the question is if the latter is "perfect"? Or if the truth is somewhere in the middle? I personally don't use either one of the two. If you use minringFIR-mp (non-apodizing) or poly-sinc-mqa-mp (apodizing) filter, you get something that is closer to what MQA says. And if you use sinc-M (apodizing) or sinc-L (non-apodizing) you get something that is closer (or actually beyond) what Chord says (since sinc-M has way more attenuation than the Chord filter). My personal take is that they are both partially right, but just rule out the other argument. But also different people are particularly sensitive to different aspects, so there's not even one right answer to this. That is why I prefer to offer various different approaches. It is also educating because you can switch while keeping everything else the same.

 

What you cannot do much about is the source content. So for that, we need to come up with various ways of dealing with it's inherent baked-in properties.

 

 

P.S. You can also compare yourself whom you think is more correct. For me, sinc-S is sort of "sinc-sane" version, and poly-sinc-ext2 and poly-sinc-short-mp do the rest. Depending on source content.

 

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment
53 minutes ago, manisandher said:

Captures are 24-bit and the nulls are 32-bit. I tried 32-bit captures, but they didn't seem to improve my nulls, so I just assumed HQPlayer must be outputting 24 bits. Also, using dither worsened the nulls ever-so-slightly.

 

If HQPlayer detects that target device is 24-bit, or looks like S/PDIF or AES/EBU or similar max 24-bit device, it enforces limit at 24-bit. You cannot get past the detected maximum resolution with the settings.

 

45 minutes ago, manisandher said:

It was interesting hearing the effects various filters had on the sound. I then wondered if I could null the upsampled redbook against the hires to determine which filter was actually the most accurate, and whether this correlated with what I was hearing.

 

Yes, it is all valid. The nulling just gives one kind of answer.

 

You need to note here that the algorithm used for the RedBook conversion matters (that's one reason HQPlayer Pro exists). Same way as the ADC filter matters too. And then later also the upsampling algorithm matters.

 

Signalyst - Developer of HQPlayer

Pulse & Fidelity - Software Defined Amplifiers

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...