-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Crossover distortion in triode pre-amp stages #13
Comments
Hello! |
Hello, Thank you for answering. Further, where do the ampsim/xxx.dsp files come from? |
They all are generated from these schematic files: The way of how to use DK Builder tool is given here: I've reproduced the schematic of each cascade according to what I've found in Internet and combined all cascades together into one single faust file for each amplifier. |
Aha, there it is. In that forum topic. |
If you'll find solutions, you're welcome to submit PRs and fixes. |
I will. Thanks again. |
Oh, one more question; |
I don't remember at this moment. |
Ok. Thank you. |
I've a short look at the tables and see that sig_max is set to 10.0. That may be the culprit. To generate the tables we send a numpy array from zero to sig_max to the circuit and capture the response. Those array represent the expected input signal range, which properly never will be much higher then 1.0. Looking at the table values it seems as if the circuit is smoked up, as the response is going down to near zero. You may not noticed that in the audio because 90% of the table will never be used in real, because the input signal never gets so high to force a response at that level. It may help to regenerate the tables with a lower sig_max value ( default is 1.4) so that the resolution of the table moves into the range which you really use. |
"which properly never will be much higher then 1.0. " |
Keep in mind we talk about the input signal, not the one which may result by amplification of the circuit, that comes on top. |
Yes of course the input signal at the first triode stage is usually at guitar level (~1v). |
Well, we are already in the digital domain here. We don't calculate the response voltage, that is already part of the circuit simulation and therewith part of the calculation for the response, but the difference from input to output. This way we keep the table in the range of the digital domain and lower the dsp load which is needed to calculate the response. This calculation is already done by the dkbuilder. |
In other words; everything is scaled down to fit -1.0 .. +1.0 range? |
It's not that easy. It depends as well were you split a circuit. Hence there are options in the build-plug.py file to adjust the signal range, as well as the table stepper, and other related stuff. But as I said for the circuits simulated here, it looks to me wrong to use a input signal such high. |
I see. Then I will try to generate new tables and see if the "crossover distortion" disappears. |
Hello,
Very nice work. Thank you.
However, all the amp models suffer from too much crossover distortion.
That is the constant fizzing sound in the background you hear even when there is no clipping at the stages.
Looking at your faust dsp code I noticed that all your tube clipping stages process pos/neg halves separately.
Usually this is done only in push-pull power amp simulation.
Most likely the 2 generated LUTs are not exactly matched resulting in a broken waveform at the crossover point.
To investigate this further, I looked at vox_ac30_brilliant.dsp and took only the first clipping stage;
s01_stage1clip =
<:
ba.if(signbit(), s01_stage1_neg_clip, s01_stage1_clip)
:>_
process = *(pregain):s01_stage1clip;
I then wrote a test audio plugin and indeed, the crossover distortion occurs there too.
To be clear, triode preamp stages do not produce crossover distortion.
Only push-pull power amp circuits do that.
Could you please shed some light on the issue so we may fix it ourselves?
Like;
Please don't take the above the wrong way.
It is meant as constructive criticism.
Regards,
Falc.
The text was updated successfully, but these errors were encountered: