• These commercial threads are for private transactions. diyAudio.com provides these forums for the convenience of our members, but makes no warranty nor assumes any responsibility. We do not vet any members, use of this facility is at your own risk. Customers can post any issues in those threads as long as it is done in a civil manner. All diyAudio rules about conduct apply and will be enforced.

Reference DAC Module - Discrete R-2R Sign Magnitude 24 bit 384 KHz

Soekris,

The following is from correspondence with TEXAS COMPONENTS.

I just ordered some resistors and asked them to explain what they do there which turns out to be what I thought they did and you felt otherwise.

Not to be contentious but credit is due where it belongs.

"We are the original creators of the famous TX2575 audio Foil resistor, and it is manufactured here at our facility in Houston, Texas. We are an authorized Vishay Precision Center for the Bulk Metal® Foil high precision resistors. We get the raw material from Vishay and handcraft the resistors to the requirements and specifications needed by our customers."

Maybe that could be considered value-added just as the way turning sheet metal into an automobile is also a value added process though some might consider this manufacturing.

Hoping to get my board working this weekend. Looking forward to the improved filters. Thanks for the product and the work you have put into it.

he means they trim some of the resistors
 
Hi there. I have trouble connecting to the rs232 connectors.
Running an usb-serial (whick works)

I had connection the other day and the umanager said v0.8. (used puttytel)

It got "stuck" and I had to disconnect.
Now I am not able to connect at all.

Is it possible that the fpga is "out of order" or something?
Total cable length is about 1m.

Best Regards.
 
Hi there. I have trouble connecting to the rs232 connectors.
Running an usb-serial (whick works)

I had connection the other day and the umanager said v0.8. (used puttytel)

It got "stuck" and I had to disconnect.
Now I am not able to connect at all.

Is it possible that the fpga is "out of order" or something?
Total cable length is about 1m.

Best Regards.

Did you power cycle ? Just by going in and look can't break anything. And check you communication programs settings.

From our experiences: Hyperterminal just works. Most *unix programs works. Other might need to adjust settings.

Seems like there are problems downloading with some of those others, will work on making it more robust.
 
Last edited:
Disabled Account
Joined 2005
If people want to start then I now have the tools on our website:

http://www.soekris.dk/1021filt.txt -- ascii file with all filters
http://www.soekris.dk/1021filt.skr -- binary file for downloading onto a dam1021
http://www.soekris.dk/MKROM.EXE -- 32 bit dos utility to convert txt file to skr file, usage "mkrom 1021filt"

OK so I've created a 1000 tap filter that is -6dB a 22050Hz in rePhase, saved this out as a C snippet, cleaned up the FIR parameters in excel, and moved the FIR parameters to the 1021filt.txt. After a bit of messing around I worked out that you need to have the 1021filt.txt in the same directory as MKROM.exe, and you need to cd to the directory to run or you get invalid filename errors. So now I have a new 1021filt.skr file.

I've connected to the uManager and there are no options I can see for uploading the new .skr file.

Code:
dam1021 uManager Rev 0.80  20150121  FPGA Rev 0.9  Press ? for help.

# ?
uManager Commands

?/Help               show this help
set par=value        set paramter to value, set alone to show
exit                 exit uManager
update               update uManager firmware
download             download and update system flash
idf                  show ID of flash
df [adr]             dump flash content

#

So how do we update filters?

cheers
Paul
 
Disabled Account
Joined 2005
I am buying a board but I did not decide which resistor tolerance to get.

Did anybody hear versions with different tolerances?

How much difference in distortion is between different tolerances?

TIA.

I suspect Søren might be the only person who might be able answer that at present. I'd guess most people will have ordered the same tolerance for all their boards if they purchased more than one.
 
Disabled Account
Joined 2005
So how do we update filters?

Not sure if this is correct but the answer seems to be:

Exactly the same way you update the firmware.

Code:
# download

Start sending file using XMODEM/CRC protocol.
CCCCCCCCCCCCCCCCCCCCCCCCCCC
### Send (X) 1021filt.skr: 10752 bytes, 0:02 elapsed, 3644 cps, 31%

File downloaded and programmed, size 010752 Bytes.

The DAC still behaves so there are two possibilities a) it did nothing and the original filters are installed, or b) the upload was successful. Not sure how to confirm this.
 
The DAC still behaves so there are two possibilities a) it did nothing and the original filters are installed, or b) the upload was successful. Not sure how to confirm this.

Interested in your progress.

Either Soren will confirm the correct method, or you could build a filter with something ridiculous such as low pass at some very low frequency, upload it, then have a listen.
 
OK so I've created a 1000 tap filter that is -6dB a 22050Hz in rePhase, saved this out as a C snippet, cleaned up the FIR parameters in excel, and moved the FIR parameters to the 1021filt.txt. After a bit of messing around I worked out that you need to have the 1021filt.txt in the same directory as MKROM.exe, and you need to cd to the directory to run or you get invalid filename errors. So now I have a new 1021filt.skr file.

I've connected to the uManager and there are no options I can see for uploading the new .skr file.

....

So how do we update filters?

cheers
Paul

As others already suggested, the same download command, the .skr files have headers so the download command knows what to do with them....
 
I suspect Søren might be the only person who might be able answer that at present. I'd guess most people will have ordered the same tolerance for all their boards if they purchased more than one.

When testing we do a FFT and measure distortion at -1db, we don't really see any difference between the different version as the initial precision is so good, even on less precise resistors.

But I expect long term the boards with more precise resistors will change less than the less precise resistors as temperature and long term drift are significant better with the more precise resistors....
 
OK so I've created a 1000 tap filter that is -6dB a 22050Hz in rePhase, saved this out as a C snippet, cleaned up the FIR parameters in excel, and moved the FIR parameters to the 1021filt.txt. After a bit of messing around I worked out that you need to have the 1021filt.txt in the same directory as MKROM.exe, and you need to cd to the directory to run or you get invalid filename errors. So now I have a new 1021filt.skr file.

I've connected to the uManager and there are no options I can see for uploading the new .skr file.

Code:
dam1021 uManager Rev 0.80  20150121  FPGA Rev 0.9  Press ? for help.

# ?
uManager Commands

?/Help               show this help
set par=value        set paramter to value, set alone to show
exit                 exit uManager
update               update uManager firmware
download             download and update system flash
idf                  show ID of flash
df [adr]             dump flash content

#

So how do we update filters?

cheers
Paul
Hi Paul,

For the 44.1kHz 8x filter you need to manually set the sampling rate to 352800 in rePhase (this will be included in the drop menu for the next version...)

Make sure you use a gentle windowing algorithm such as Blackman-Nuttall or Blackman-Harris to get a low ripple floor.
Set the number of taps to an odd value to get a better ripple rejection (there seems to be a bug there, sorry about that).

If you use iterative optimization make sure the optimization floor dB to a low value (default to -80dB, which means that iterative steps to fit the target might results in ripples rising up to that point during optimization...).
You will want to check the result curve in both large scale (for example -150dB) and a more closeup scale (like +/- 0.1 dB) to observe the behavior of the filter and decide what optimization and windowing parameters to use.

As for the output format, choose the '32 bits floats mono (.txt)' one, and you should then be able to easily replace the coefficient within Soren's example file with a simple text editor.
It might probably be a good idea to only replace the 44.1kHz filter in Soren's file for your tests.
If 1016 taps (use 1015! ;) ) are available then there is probably plenty of room for improvement compared to the existing 383 taps windowed brickwall.

You might try minimum-phase filters, or "intermediate" phase filters by combining a linear-phase and a minimum-phase LP filters (similar to what sox resampler does). You can also set a minimum-phase L-R filter and partially linearize its phase with the "phase linearization" tab...

When using non linear-phase filter you might want to set the centreing to "energy", or do it manually with percentages (something like 1% or a bit more for purely minimum-phase filters, and 50% for linear phase-filters, and any proportional ratio in between for intermediate ones...).This will ensure you make the best use of the available taps.

You can also play with EQ to adjust some specific areas.

Lastly, you might want to remove something like 1dB (in the "general" tab) to ensure to saturation will not take place...
 
Last edited:
If using the direct connection output, does the balanced opamp circuit load or affect the direct connection in any way?

Not in my opinion....

I'll be cutting the traces on my board when I get it going as I'm not a fan of feedback opamps, but wonder if anyone has tried this.

But if you insist I would recommend to remove the opamps instead of damaging the board. It's pretty easy to cut the opamp pins close to their housing using a sharp scalpel.
 
Hi Paul,

For the 44.1kHz 8x filter you need to manually set the sampling rate to 352800 in rePhase (this will be included in the drop menu for the next version...)

Make sure you use a gentle windowing algorithm such as Blackman-Nuttall or Blackman-Harris to get a low ripple floor.
Set the number of taps to an odd value to get a better ripple rejection (there seems to be a bug there, sorry about that).

If you use iterative optimization make sure the optimization floor dB to a low value (default to -80dB, which means that iterative steps to fit the target might results in ripples rising up to that point during optimization...).
You will want to check the result curve in both large scale (for example -150dB) and a more closeup scale (like +/- 0.1 dB) to observe the behavior of the filter and decide what optimization and windowing parameters to use.

As for the output format, choose the '32 bits floats mono (.txt)' one, and you should then be able to easily replace the coefficient within Soren's example file with a simple text editor.
It might probably be a good idea to only replace the 44.1kHz filter in Soren's file for your tests.
If 1016 taps (use 1015! ;) ) are available then there is probably plenty of room for improvement compared to the existing 383 taps windowed brickwall.

You might try minimum-phase filters, or "intermediate" phase filters by combining a linear-phase and a minimum-phase LP filters (similar to what sox resampler does). You can also set a minimum-phase L-R filter and partially linearize its phase with the "phase linearization" tab...
You can also play with EQ to adjust some specific areas.

You might want to remove something like 1dB (in the "general" tab) to ensure to saturation will take place.

When I looked at rePhase I didn't see any "intermediate phase" setting ? Or how to combine ? I would be nice if I don't have to mess with the SoX source code....

You don't need to worry about saturation, the filters coefficients floats are converted to 2.30 fixed format.
 
Disabled Account
Joined 2005
When I looked at rePhase I didn't see any "intermediate phase" setting ? Or how to combine ? I would be nice if I don't have to mess with the SoX source code....

You don't need to worry about saturation, the filters coefficients floats are converted to 2.30 fixed format.

The filters appear to "stack" and are combined when you generate the filter.
 
Disabled Account
Joined 2005
Thanks POS for all the hints, they are very helpful for getting a handle on the process. Still just stumbling around with what can be done but it's a start.
Add: I keep reading back over POS' post and finding more information that I didn't pick up on the first pass. It's going to take me a while to digest everything I think.

I'm basically just having a play around at the moment - as I'm not sure what does what ;)

I've attached a .skr with the 44.1 filter replaced with a minimum phase filter, linkwitz riley "shape" and 12dB filter slope and corner frequency of 159994.8Hz. My numbers are probably off but I'm setting the corner frequency at 0.4535*fs where the fs is 44100 * 8. (I re-read POS's post and corrected from 384 -> 352.8, oops)

I'm not sure why, but the rePhase filter is about 6dB quieter than the one Søren made, so

******* Beware, Warning, Actung, Alert, Danger *******
The 44.1khz filter is significantly quieter than the official filters. If you change to a higher sampling rate without adjusting volume it will be significantly louder. Be warned!!
*************

Anyway don't expect perfection, because I'm no expert in filter design, but might be of interest to someone!

And a question... is there a way to visualise impulse response in rePhase?

cheers
Paul
 

Attachments

  • 1021filt_MPLR12db159994Khz.skr.zip
    5.6 KB · Views: 63
Last edited:
Did you power cycle ? Just by going in and look can't break anything. And check you communication programs settings.

From our experiences: Hyperterminal just works. Most *unix programs works. Other might need to adjust settings.

Seems like there are problems downloading with some of those others, will work on making it more robust.

BTW: This is the usb to serial adapter I "try" to use.. :headbash: