Filter brewing for the Soekris R2R

Disabled Account
Joined 2005
With exately the same musik playing? I have not noticed influence of filters (however I did not chenagged them that frequently, as you), but a heavy dependence on what is actully played.

It's just general usage. I usually have to warn my partner when I do a filter change as the loud pops startle her otherwise. With the 171dB+ attenuation filters the pop is insignificant. Ristar has also made the observation the pops were much quieter with these filters. The shaped stop-band also seems to have a similar effect.
 
Disabled Account
Joined 2005
Yes, just filter info, ascii text with no formatting. Planning to be able to printout in uManager.

So really there is nothing constraining us to use the exiting information?

I was thinking it might be useful to have the filter designator rather than "Input FIR" so it's easy to see which filter is loaded, and possibly the -3dB or -6dB point instead of pass band frequency.
 
So really there is nothing constraining us to use the exiting information?

I was thinking it might be useful to have the filter designator rather than "Input FIR" so it's easy to see which filter is loaded, and possibly the -3dB or -6dB point instead of pass band frequency.

Yes, you can write anything you want to describe the filters, up to 80 chars.
 
Hey Spzzzzkt are you able to post a coefficients file for your latest filter (importable via fdatool)? I'm trying to compare various filters based on resulting time domain waveforms - would love to use your filter as a benchmark if available :)

Edit: At the moment I'm using one of your previous fdatool screenshots as a reference.
 
Disabled Account
Joined 2005
I don't think that you can.

Anyway, this was an experiment setting the interpolation to x1 for all FIR.

I'm surprised but the DAM actually makes sound, so...

interpolation coefficient = 1
Taps = 1
gain = 1

Code:
dam1021,44100,1,1,1,1
Input FIR, 44.1 Khz Samplerate, bypass
1.000

Code:
dam1021,352800,1,2,1,1
Final FIR, 352 Khz Samplerate Bypass
1.000

I suspect that there is still a sampling rate change between fir1 and fir2, and fir2 and output, and the interpolation setting doesn't actually alter this but I'm not really in a position to test any further today.

Anyway I think this is about as close as it possible to configure the DAM to non-oversampling. As far as I've understood it's not possible to completely eliminate upsampling with this DAC design, but I might be wrong...
 

Attachments

  • test_TrueNOS.zip
    1.5 KB · Views: 78
Last edited:
Disabled Account
Joined 2005
Actually on further consideration, I'll say no you can't avoid up sampling. Fir1 is always 352.8 or 384 kHz and fir2 is always 2.8224 or 3.072 MHz.

The interpolation coefficient is only setting the number of zeros to be inserted between samples not altering rate of up sampling. What I think is happening here is that by setting the coefficient to 1 the Dam repeats the last buffered input sample 8 times.

Anyway that's my hypothesis
 
The previous NOS filter does what you require. Sure it's "up sampled" in that there are more samples but it's just filling the inserted zeros with the previous original sample (a hold function) - try it, convolution of [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] with an example vector of [2 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0].

Odd that your single tap filter of "1.0" worked - based on the previous NOS filter I always assumed zero insertion was done as separate step and the filter convolved with the new zero inserted vector to obtain your output as above..... Maybe soekris can confirm.
 
Last edited:
Disabled Account
Joined 2005
The previous NOS filter does what you require. Sure it's "up sampled" in that there are more samples but it's just filling the inserted zeros with the previous original sample (a hold function) - try it, convolution of [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] with an example vector of [2 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0].

Odd that your single tap filter of "1.0" worked - based on the previous NOS filter I always assumed zero insertion was done as separate step and the filter convolved with the new zero inserted vector to obtain your output as above..... Maybe soekris can confirm.

I could be wrong, but this is what I think is happening..

If you specify x8 interpolation, the input buffer is read once, and the next seven samples have a zero value inserted (or perhaps more correctly, are replaced with zeros), as you show above.

By specifying x1 there is no zero insertion but the audio is still up sampled to 352.8kHz. My theory is that in this case the buffered input sample is read 8 times.

So instead of:
2 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
you end up with:
2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 1 1 1 1 1 1 1 1

And if this is correct a single filter coefficient of 1.0 would work, because it's not being convolved with inserted zero values.

It certainly would be a more elegant solution to simply use the buffered input samples from the start rather than replacing seven of them with zeros and then replace the zeros with the original value using a hold function as we are currently doing.

It should be easy enough to test if this is actually occurring.
 
Last edited:
So I ran a simulation comparing upsampling of an audio track (16/44.1) via FFT zero insertion and an FIR filter shown in one of your previous screen shots. Other than the start and the end (~1M samples) the interpolated results were near identical. What's the min PCM value of difference that is audible? Visually amplitude differences were really minimal in the middle section, 0.001 magnitudes of difference...
 
Last edited:
Would prefer to keep this thread focused on the filter work. I'm requesting we keep hardware mods on the other threads.

There are plenty of conversations taking place there already.

The hardware mod reflecting the filter though. It might be through hardware or software both doing the same work so this is the only mod that i think which can be done easily and does filtering though...
 
Disabled Account
Joined 2005
I could be wrong, but this is what I think is happening..

If you specify x8 interpolation, the input buffer is read once, and the next seven samples have a zero value inserted (or perhaps more correctly, are replaced with zeros), as you show above.

By specifying x1 there is no zero insertion but the audio is still up sampled to 352.8kHz. My theory is that in this case the buffered input sample is read 8 times.

So instead of:
2 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
you end up with:
2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 1 1 1 1 1 1 1 1

And if this is correct a single filter coefficient of 1.0 would work, because it's not being convolved with inserted zero values.

It certainly would be a more elegant solution to simply use the buffered input samples from the start rather than replacing seven of them with zeros and then replace the zeros with the original value using a hold function as we are currently doing.

It should be easy enough to test if this is actually occurring.

As far as I can see this from some basic testing this filter does behave in the same way as the NewNOS.

The main difference is the noise floor is higher with the "trueNOS", which is what you'd expect. One of the advantages of upsampling is spreads the energy of the noise component across the up sampled bandwidth, which lowers the noise energy in the audio band.