Appendices for Burkhard Vogel's Challenging BJT noise in Vol 13
Mr. Vogel provided several appendices for his article that did not make it into the printed Volume 13. They are downloadable here; with thanks to author Vogel.
M-files for the electro-acoustic test system by VanderKooy and Mann in Vol 13
The article in Vol 13 describes the hardware and software setup for an electro-acoustic measurement system based on a soundcard driven by a MathLab / Octave compatible collection of test routines. You can develop your own test routines for your own specific test needs, but the authors have kindly provided a set of test scripts to get you going. Each set of scripts also has a readme file to explain the flow and use.
Design data package for Marcel van de Gevel's Valve DAC from Vol 13
Although Marcel's article in Vol 13 is very complete, some of the more practical desing information like FPGA code and PCB layouts didn't make it into the printed version. Marcel has graciously agreed to make the complete Tube Dac data package available here. This has everything needed for adventurous builders to replicate this design.
Appendices for Rudolf Moers' V13 article An investigation into the screen tap
Rudolf has published earlier articles in Linear Audio related to finding the lowest distortion solution for an ultra-linear circuit. However, on closer examination it turned out that his solution provided the most linear anode characteristic, which is not the same as lowest THD. In this article the author leads you through his investigation and the hidden arguments why the lowest THD is achieved at a certain screen grid tap. Not all material could be published in the article, and Rudolf added several Appandices which are posted here as PDF. Recommended reading!
Addendums to Ian Hegglun's CubeA and Current Source Driven output stage amplifiers (Vol 8 & Vol 13)
Ian Hegglun has published his Cube Law amplifier in Volume 8 and returned in Volume 13 with a CSD (Current Source Driven) output stage. Ian builds on several earlier publications to improve on the concept. He maintains a PDF addendum to his article(s) documenting his progress on further developments, insights and measurements. Please see also the Oops section on any corrections to the original article.
There is also a discussion thread on this subject at diyaudio.com.
This is one of those very rare occasions when something really new is proposed for audio power amplification - thank you Ian!
Hans Polak Non-plus-ultra Phono pre Vol 12
Linear Audio Vol 12 contains an article by Hans Polak on the design of a 'non-plus ultra' phono preamp. Hans has kindly agreed to make the PCB layout Gerber files available for interested readers.
Update: after several requests for an MM-version, Hans has worked out some changes to the original design to make it a better fit for MM cartridges. Here are the changes, which only affect the input stage:
- 2x AD797 to be replaced by 2x OPA1641, matching these op-amps is not necessary;
- R3 becomes 165 Ohm instead of 15 Ohm;
- R4 becomes 47K instead of 1K;
- R8 becomes 47pF instead of 111Ohm, which may be a better value for optimum damping of your cartridge, but you may have to adjust it to your cartridge;
- R7 becomes 100pF, for the same reason as above;
- C32 and C33 change from 220pF to 120pF, or possibly lower depending on the required capacity for your MM cartridge and the tonearm cable;
- C21 & C22 (both 47pF) are no longer required.
With these changes, the SNR figures are:
- Input shorted: 80.7 dBA ref 5mv @5cm/sec;
- With cartridge connected: 76.5 dBA ref 5mv @5cm/sec.
PCB for Bob Cordell´s KT88 tube amp from Vol 2
Bob Coldell´s high quality KT88 tube amp article in Vol 2 generated quite some interest. In fact, I had a friend build one for myself! I designed a small PCB to hold the input and driver stages, to keep te construction clean and repeatable. For those who want to build it too, here are the particulars of the PCB and the circuit it holds:
Finally, here is the complete article.
Note: one reader has produced a few PCBs; if you are interested, let me know.
Worksheets and simulation files for Chris Paul's What's Mu with you? Volume 12
Chris Paul's article looked in much detail into the aspects of Mu followers and related circuitry. Chris developed a spreadsheet and an LTspice file that enabled him (and you) to explore the impact of various variables as explained in the article.
The spreadsheet and LTspice file and instructions can be downloaded here for personal use. Enjoy!
Thermal spreadsheet for John Escallier's Volume 9 article
The article by John Escalier in Volume 9 'Semiconductor junction dissipation and temperature - theory and practice' discussed a spreadheet, developed by John, to facilitate calculating the various parameters for thermal management.
John has been so kind to make the spreadsheet available for L|A readers. It can be downloaded here.
Effective tip mass for record replay cartridges
Follwing the publication of Volume 10 which contained several articles concerning record replay, John Jones send author Hannes Allmaier and yours truly a long list of effective tip mass data for many well-known cartridges. I reproduce the list here, with thanks to John!
Any additional data would be quite welcome!
6.000mg ELAC STS-200 (1958, first stereo MM pickup?? 4-6g VTF)
6.000mg GE VR-II (1955, mono, variable reluctance, 4-7g VTF)
4.500mg Sonotone 9T (1960, stereo, ceramic)
3.000mg Philips GP316 (1958, crystal, mono, 5-7g VTF)
1.400mg Philips GP380/GP390 (1968, high fidelity ceramic cartridge)
1.200mg Shure V15 first generation (MM)
1.000mg Ortofon SPU (all classic and 'mono' models)
0.970mg Shure "bi-radial" (0.4x0.7mil, MM)
0.800mg (less than) Philips GP400, 401 1st gen (MM)
0.750mg Ortofon X1-MCP (p-mount, high output MC)
0.600mg Nagaoka JT-555 (pseudo "carbon fiber" cantilever)
0.600mg (less than) Philips GP412 1st gen (MM)
0.500mg Ortofon OM10 stylus (bushed elliptical, MI)
0.500mg Philips GP922 (high end MC)
0.450mg Shure V15-II (MM)
0.400mg Ortofon OM20 stylus (nude elliptical, MI)
0.700mg Ortofon X5-MC (HOMC, nude FG)
0.370mg Shure Elliptical (0.2x0.7mil, MM)
0.330mg Shure bi-radial on V15-III (MM) (berillium control rod)
0.300mg Ortofon OM30 stylus (nude Fine Line), OM40 (nude FG), MI
0.290mg Technics EPC-P202C (p-mount, MM, boron cant)
0.290mg Shure HE on V15-IV (MM) ("telescopic shank")
0.270mg Denon DL-301 (MC)
0.250mg Denon DL-207 (MC)
0.240mg Van den Hul Colibri (MC)
0.230mg Technics EPC-P310MC (p-mount, MC, boron cant)
0.230mg Technics EPC-100CMK2 (MM, boron pipe)
0.220mg Ortofon Jubilee (MC)
0.200mg Empire 2000-Z (shielded moving iron, stylus 0.2 mil x 0.7 mil diamond)
0.180mg Denon DL-303 (MC)
0.170mg Shure Micro-Ridge (0.15x3.00mil, MM, beryllium cant)
0.168mg Denon DL-305
0.149mg Technics EPC-(P)205CMK3 (MM, boron pipe)
0.139mg Technics EPC-P310MC2 (MC, boron pipe)
0.109mg Technics EPC-(P)205CMK4 (0.2x0.7mil, MM, boron pipe)
0.098mg Technics EPC-100CMK3 (MM, boron pipe)
0.077mg Denon DL1000 (MC, boron cant.)
0.055mg Technics EPC-(P)100CMK4 (MM, boron pipe cant.)
Test waveforms for Scott Wurcer's digital RIAA article in Volume 10
The following collection of test- and source files was submitted by Scott Wurcer to complement his article on Volume 10 on digital RIAA correction.
For those of you who wish to download the material, there is a pair of .zip files at the end which contain all the files and matrial posted here.
FIR Filters for RIAA
There are several sets of files containing minimum phase FIR filter coefficients for RIAA equalization in both text and wav format. There are files for 48K, 96K and 192K sampling rates as well as duplicates employing the extra 50K time constant that some recommend to compensate for cutter head roll-off/phase. The text files are in the SoX .dat format as shown below.
; Sample Rate 48000
; Channels 1
Here the first two lines contain the sample rate and the number of channels and each subsequent line contains the sample time and value at that time. Excel can be set to import just the second column skipping the first two lines from its import dialog so a simple text file of just the coefficients can be easily created. The files all have the peak value and hence the processing delay at different points, in general a slight delay which is equal in both channels does not matter for the purpose of simply listening. The text version of the files are all normalized to 1.0 so the peak can be found by a simple search in the second column if this is important in a particular application.
SoX Batch Files
It’s very easy to create a drag and drop .bat file to facilitate file conversions and other signal processing in SoX. It only requires an awareness of a small subset of DOS batch file commands and syntax. For instance, to convert a .wav file to a .dat (plain text) file one would do this…
FOR %%A IN (%*) DO sox -D %%A %%~nA.dat
When you drag a set of files onto this batch file ~dp0 contains the directory that the batch file is in and you cd to that directory first. Then for each file in all the files dropped run sox with no dither (-D) and save the result in this directory as a .datfile with the same name. Whenever possible SoX uses the file extension to figure out the “right thing” to do so dropping a .wav file results in the simple translation of .wav to .dat with no dither. There are many web resources for translating the sometimes cryptic batch file syntax, and the SoX manual describes building a command line which can include both IIR and FIR filters as well as several options for adjusting gain or normalization of the output. The reverse process…
FOR %%A IN (%*) DO sox -D %%A -e signed -b32 %%~nA.wav gain -2
Here we read a .dat file and set the output format to 32bit signed integers, the highest resolution 32 bit format. I have set the gain to 2dB below full scale for .wav files because I have run across some low cost sound cards that clip internally with files that go to full scale. For both of these SoX has to be in your $path or the same folder as the batch file.
These folders contain test waveforms (all in .wav format) with several possible uses. All files come in both a 48kHz and 96kHz versions. They are based on the concept of spectral contamination in the presence of a noise or music like stimulus. The first set consists of four multi-tone files where there are 30 tones at 1/3 octave spacing with random phases. In the time domain it sounds a little like one big 6 handed chord. There are both a general use, flat, version and a version with RIAA pre-emphasis applied which can be used as a simple test for RIAA conformance. The numerical noise filling the space between the tones is below the noise floor of a 24 bit DAC so any imperfections in the signal path will fill the space between the tones with IM/THD components. The files with a flat spectrum are generally useful for DAC/ADC testing as well as any amplifier/speaker chain. It may be difficult to find a DAC or ADC to reproduce these without excessive spectral contamination of their own, in that case a comparative analysis might be useful. These file are designed to be analyzed with a 65536 point FFT and with no (rectangular) windowing though some window functions have low enough leakage to still be useful. With any other length FFT the relationship of the tones to the FFT bins is lost. The next two folders contain pseudo-random noise waveforms containing equal energy at every FFT bin but again with random phase so the resulting time domain waveform looks and sounds like random noise. Each waveform comes in versions with all tones and with four logarithmically spaced gaps to again do the spectral contamination test, and with or without RIAA pre-emphasis for a total of eight files. Since the RIAA pre-emphasized files see the full 40dB of the RIAA curve and do not take into account that the spectral content of most music rolls off with frequency, they are an extreme test of your signal path.
To close this section, here are the tables with filter coefficients as shown in the Article Appendix. If you want to play with them you can cut-'n-paste from these files:
Python functions and filter Optimizer
This is a very basic example of using scipy’s brute force optimizer to optimize the z domain poles and zeros to match an s domain prototype filter. Since the optimizer starts by doing an exhaustive search over a range of values for any number of variables, this becomes very slow rapidly as the number of variables or fineness of the search grid grows. This example is set up for a peaking equalizer where the gain , Q, and frequency of interest (fo) are specified. I suggest the reader familiarize themselves with the optimizer by reading the online description as well as The Audio EQ Cookbook.
The function fun(x) is minimized by the optimizer via the array (x) of variables. Here x is fo, x is A (gain), and x is Q. The poles and zeros are extracted as the roots of the characteristic polynomial and the peak to peak error between the z domain response and the s domain response is returned.
The values in the body of the routine will need to be edited for different frequencies, other parameters, and different types of filters. Start and stop give a range of frequencies over which to optimize. The ranges are the set of ranges for the array of variables (x) passed by the optimizer (brute()). I use these to multiply the filter parameters so (.8, 1.2) is an ~ +- 20% range while the variable Ns is the fineness of the search. There is lots of room for experimentation with the values that are left up to the user.
The optimizer returns the optimized values for the x array which are then used to compute the optimized poles and zeros and the coefficients for the IIR filter which are printed out at the end.
This example is for a 5dB, 10kHz peaking filter with a Q of .5 and a sampling frequency of 48kHz. I chose to optimize only to 12kHz because increasing this rapidly degrades the fit due to the frequency warping. In fact it is easy to get no better a fit than by simply using the suggested “tweek” to the Q mentioned in the main article. Running the script generates output which consists of the poles and zeros of the prototype followed by the optimum z domain poles and zeros with the computed IIR filter coefficients.
optimizer.py note: rename to optimizer.py to run!
Python functions library
These are the basic functions that I use to go back and forth between the s and z domain, compute IIR coefficients and plot phase and frequency responses. As mentioned in the article I am not a programmer by trade and there are probably many improvements possible here. It is easy with Python to get a little confused around arrays, lists, and other ways of packing and unpacking data. Usually what seems obvious works but there are times when an explicit declaration is necessary. Also there is not thorough checking for bad inputs so they will simply fail or give a bad output. As noted also I use positive frequency for both the s and z domain in my computations, the built-in roots() function returns negative values as it should and they are inverted as necessary in my code.
dB(x) - Returns 20*log10(abs(x)) for any length argument.
f_warp(f, fs) – Returns the “warped” frequency of interest (f) for IIR filter coefficients. Fs is the sampling frequency.
f_from_z(z, fs) – Returns a frequency from the point z inside the unit circle.
z_from_f(f, fs) – Returns the point z inside the unit circle corresponding to frequency f.
Fs_at_f(Poles, Zeros, f, norm = 0) – Returns the complex value/s for s domain frequency response at list of frequencies f. The transfer function is described by its poles and zeros. If norm is true (1) the output is normalized to 1 at the maximum value.
Fz_at_f(Poles, Zeros , f, fs, norm = 0) – Returns the same for the z domain poles and zeros (here fs is needed also). The pole and zero frequencies are those that would be returned from f_from_z(z, fs).
z_coeff(Poles, Zeros, fs, g, fg, fo = 'none') – Returns the a and b coefficients of the IIR filter defined by the poles and zeros. G and fg are the gain in db and frequency at which that gain is set. Fo is the frequency of interest, that is, for a peaking filter fo would be the peak while for a low pass or high pass filter it would be the break point. If ‘none’ or not specified there is no frequency warping and all mapping is simply by the bilinear transform.
biquad_filter(xin, z_coeff) – Returns xin filtered by the biquad filter defined by the z domain coefficients, [[a0, a1, a2] ,[ b0,b1,b2]]. By convention the b coefficients are the numerator and the a are the denominator with a0 = 1.
write_txt(filename, y) – Writes a simple text file of the values of the array y.
read_txt(filename) – Returns an array from the values in a text file.
read_dat(filename) – Returns a mono or stereo file in the SoX .dat format.
write_dat(filename, sr, left, right='none') – Writes a file in the SoX .dat format. Sr = the sample rate. Left and right are equal sized arrays of time samples.
plot_fft_log(fs, data, diff = 'none', start = 0,stop = 0, delay = 0) – Plots the FFT of a time domain waveform. Fs is the sampling frequency and data are the samples. If diff is specified the difference between data and diff is plotted. Start and stop are the start and stop frequencies for the plot, 20Hz and 20kHz are the defaults. A delay in samples is specified to compensate for phase wrapping, the default is 0. This function compensates for actual bin frequencies so, for example, a 65536 point FFT of a waveform sampled at 48kHz gives the right frequencies.
plot_fft_lin(fs, data,diff = 'none', start = 0, stop = 0, delay = 0) – Same function for a linear with frequency plot.
plot_dat(sound) – Plots a sound file read by read_dat() or in the .dat format.
plot_gain_phase(Poles, Zeros, zPoles = , zZeros = , fs = 48000.,fo = 1000. ,start = 20, stop = 20000,style = 0) – Plots the gain and phase vs frequency of a frequency response defined by a set of Poles and Zeros. If zPoles and zZeros are specified it becomes a comparison between the s and z domain with fs being the sampling frequency. Fo is the frequency where both responses are equalized. Start and stop are again the limits on the plot while style = 1 is a difference plot and style = 0 is a plot of both responses on the same axes.
min_phase_FIR(Poles, Zeros, fs, outfile, plot = 0) – Generates a minimum phase FIR filter in mono .dat format from the s domain poles and zeros at a sampling frequency fs. The output is written to ‘outfile’ and it expects a HOME directory to exist. You can change the code to output to whatever you want. Plot = 1 plots the result so you can examine it.
Linear_Audio_Lib.py note: rename to Linear_Audio_Lib.py to run!
Design considerations for a class A enclosure.
EUVL's class A enclosure
Patrick K. (aka EUVL) wrote an interesting article for Vol 3, "Design Considerations for a Class A Amplifier Enclosure". This is an subject that is very rarely treated at all. The article gives a complete treatment of all involved issues and can be used as a procedure to calculate the required heatsink capacity for a project, as well as selecting a suitable product to mee those requirements. Therefor, Patrick and I have agreed to place it online for further dissemination.
'The LTspice IV Simulator' by Gilles Brocard, reviewed by Bob Cordell
Linear Technoloy's LTspice simulator is a free, very high performance Spice simulator that is very much appreciated by professional designers and serious hobbyists alike. Gilles Brocart has written an extensive book with reference material, applications information and simulation methods. The book has a preface by LTspice's development manager Mike Engelhardt.
Bob Cordell, an avid LTspice user himself, has reviewed this book for Linear Audio Volume 9.
The review is available for download free of charge. The book itself is published by Würth Electronic but they have agreed to make it available for Linear Audio readers in an English and a German version. You can get it in our store for slightly less than at the other places... ;-) .
PCBs for Stuart Yaniger's Equal Opportunity phono preamp / gain block
In his Volume 7 article Staurt presented a universal gain block, with a particular application to phono preamps. Because it uses JFETs, tubes, MOSFETs and IC regulators, it was baptised 'The Equal Opportunity gain block'.
I designed a PCB layout for the gain block with positions for RIAA corrction components, and the board files and relevant schematics are available here for anyone whoi want to buiild it, as long as it is not for a commercial purpose. If you want to commercialise it, please check with Stuart for license arrangements.
Additional material for Hegglun Cube Law power amp
In his Volume 8 article on Cube Law power amplifiers Ian Hegglun mentions that he has a lot of additional information available on the subjet. This additional info can be accessed on line courtesy of Mason Green. There's even more info and also the possibility to get additional PCBs from Mason at his own site.
As if that is not enough, there's more interesting info Ian collected including simulation models and files to simulate his amp with LTspice...
Appendices Audio Equalisation
In his article on Audio Equalisation in Volume 7, Malcolm Hawksford provided three Appendices. These contain Matlab scripts that can be used to explore the various circuit concepts described in the article.
Those Appendices can be downloaded in text format for immediate use in Matlab or any of it's equivalent applications.
Testing One, Two, Three...
Stuart Yanigers' Linear Audio Volume 2 article with this title has drawn considerable interest from both audio professionals as well as serious amateurs and hobbyists.
Many readers requested to make it available on line, so here it is.
LSJ74B preliminary data sheet
Linear Systems has send me the preliminary data sheet for the LSJ74B, the long-awaited replacement for the discontinued Toshiba 2SJ74B. This is posted here for the benefit of those who purchased Linear Audio Vol 6 asnd received a free LSJ74B and LSK170B.
Power Supply for Gary Galo's Archival Phono Preamp
Gary Galo's article in Vol 5, "An Archival Phono Preamp" mentioned that a suitable power supply would be posted online - here it is.
It is based on the Jung/Didden regulator published in Audio Amateur in 1995, amended by Walt Jung's article in issue 4/2000 in Audio Xpress. The original articles can be downloaded from Walt's web site.
Gerbers and PCB layout for Bruno Putzeys' article in Vol 5
The article from Bruno Putzeys in Vol 5 'The G-word, or, how to get your audio off the ground' is accompanied by a complimentary PCB for the demo project (courtesy Eurocircuits.com). It's a busy PCB and to help with parts placement, a larger version of the stuffing guide, the top layer and the bottom layer is available here. The Gerbers can also be downloaded if you want to make your own.
Color graphs for Jack Walton's regulator article in Vol 4
Linear Audio Volume 4 has a long-awaited article by Jack Walton, comparing a large number of low power supply regulators. Comparison includes measurements and controlled listening tests by the New Jersey Audio Club.
The article has a several rather busy graphs with curves in various shades of grey. The readability could be better, so I regenerated those graphs in color and posted them here on-line.
MathCad resources for the audio enthousiast
Update 5 July 2012: Mason Green send me some info on an alternative to MathCad/MatLab: Scientific Python. He included a link to an excellent tutorial on Scientific Python. For an example of a practical application of Scientific Python, see Mason's PORC (Python Open Room Correction) project. Thank you Mason!
There have been several articles in Linear Audio supported by MathCad calculations and graphs; Burkhard Vogel's articles come to mind. If you are the curious type you probably discovered that a MathCad license can set you back $ 1500 or so. Not really DIY territory. However, here's a well kept secret: the student/educational version of MathCad is available for less than $ 100 and is identical to the expensive version, the only difference being that you don't get on-line support. And you need a professor- or student ID to be able to buy that version.
But it gets still better: if you buy Brent Maxfields'book Essential MathCad for Engineering, Science and Math for less than $ 50 you get an included MathCad 15 one-year student license for free. And the book is a great reference to the application so you can do without the on-line support. For beginners, I recommend Stephen P. Tubbs' MathCad for Electrical Engineers and Technologists. This last book takes you in slowly with calculating and graphing things like the current in a C-R circuit, for example. Both books are highly recommended! Note: the Maxfield book was published in 2009 so I don't know how many copies are still on offer.
Audio files for Wurcer mic preamp article V1, V3.
The mic preamp Scott Wurcer developed in his articles in Vol 1 (Part I) and Vol 3 (Part II) were used to record a live concert at Stuart Yaniger's residence in Austin, TX in Nov 2011. I have placed two files online, and you can download them to listen to: the song 'An Army of Kittens' (a 15Mb (!) .flac) and a section of the subsequent applause (.wav). These are uncompressed files recorded in 24 bit / 96kHz.
These are excellent examples of the incredible realistic recordings that can be made with relatively simple means, with enough attention to detail. Files are reproduced here with kind permission from the artist, Southpaw Jones.
Zen > Cen > Sen - Evolution of a Minimalistic IV Conversion Circuit
This is the online version of Patrick K (alias EUVL) article in Linear Audio Vol 2. This article has generated considerable interest at diyaudio and with the publication of Vol 3 I have decided to place this article online for free download. For further details and building experiences, see the diyaudio thread.
Everything about record replay characteristics, recording speeds and such.
This is not an article that has been published in Linear Audio, but I believe the data in the linked table is of importance to anyone seriously involved with record replay and reproduction, especially historical records.
The first reference is a comprehensive list of record manufacturers and speed formats and the pre-emphasis that has been used in producing the recording. It is clear that the ubiquitous RIAA pre-emphasis/ de-emphasis standard isn't really a standard, at least not in the early days of records.
The list has been compiled by Katsuyoshi Miguchi, the owner of SoundBox, an Antique Audio shop in Tokyo. It was originally published in Radio Technology magazine in Japan in October 2011. Reproduced here by kind permission of the Author and the Editor of RT magazine. I am indebted to Mr. Nakamura for arranging the permissions and for providing the English language translation.
If you have any additions and/or corrections to this table I would very much like to receive these, and I will update the list as needed. The last update will be noted at the end of the list.
The second reference is an article by Linear Audio author Gary Galo, who taught audio engineering at the Crane School of Music at SUNY, Potsdam. Gary wrote an article for the Association for Recorded Sound Collections (ASRC) on the Columbia replay equalisation curve.
The Association kindly agreed to place this article online. The powerpoint slides Gary uses for his presentations on the subject is also attached.
The F-Word - or, why there is no such thing as too much feedback
In Linear Audio Volume 1, Bruno Putzeys wrote The F-word - or, why there is no such thing as too much feedback. He addresses many issues related to the use of feedback in audio, as well as several misconceptions. The section on 'slow' and 'fast' amplifiers will be an eyeopener for many. He also traces historical events that puts us in the situation we are now. A critical attitude towards negative feedback is certainly healthy, and Bruno gives us the information to base our opinion on.
The Arch Nemesis
The first issue of Linear Audio had an article by Nelson Pass inspired by a vintage Western Electric design, later revived by Jean Hiraga in the French journal L'Audiophile. It's a model of minimalistic design and I placed it on-line for you to read and/or build. Nelson Pass - The Arch Nemesis (Vol 0)