sox-users@lists.sourceforge.net unofficial mirror
 help / color / mirror / code / Atom feed
* SOX mcompand crossover algorithm?
@ 2019-07-23 19:44 Dr. Thomas Tensi
  2019-07-24 19:26 ` Dr. Thomas Tensi
  0 siblings, 1 reply; 2+ messages in thread
From: Dr. Thomas Tensi @ 2019-07-23 19:44 UTC (permalink / raw)
  To: sox-users

Dear all,


I am currently trying to emulate some of the sox effects by
scripting them in Reaper.  I need those for exactly mirroring
an external effects chain in sox within a DAW.

For most of the effects reprogrammed, this works fine
(the results are bit-exact).

But I have significant problems with mcompand.

mcompand uses a 4-th order Linkwitz-Riley-filter for
crossovers.  I am able to reproduce the crossover algorithm
quite faithfully, but nevertheless I am not convinced about
the filter coefficients.

sox biquad filters produce the following IIR coefficients
for a sample rate of 44.1kHz and a crossover frequency of
1kHz (the numbers gained by checking the source-code):

     ======================================
     butterworth 2 biquad filters from sox:
     ======================================
     lb = [ 4.604E-03,  9.208E-03, 4.604E-03 ]
     hb = [ 9.042E-01, -1.808E+00, 9.042E-01 ]
     a  = [ 1.000E+00, -1.799E+00, 8.175E-01 ]

Those perfectly match the values from scipy.signal:
     signal.iirfilter(2, 1000/22050, btype="lowpass")
     signal.iirfilter(2, 1000/22050, btype="highpass")

     ==========================================
     butterworth 2 crossover from scipy.signal:
     ==========================================
     bLow2  = [ 0.004604,   0.009208,   0.004604  ]
     bHigh2 = [ 0.9041522, -1.80830441, 0.9041522 ]
     a2     = [ 1.,        -1.79909641, 0.8175124 ]

Using full debug mode for mcompand with a 1kHz crossover
frequency reveals the following coefficients:

     =================================
     butterworth 4 crossover from sox:
     =================================
     DBUG mcompand_xover:
     lb=[2.119680195800917e-005 8.47872078320367e-005
         0.000127180811748055
         8.47872078320367e-005 2.119680195800917e-005]
     DBUG mcompand_xover:
     hb=[0.8174912065828001 -3.2699648263312 4.9049472394968
         -3.2699648263312 0.8174912065828001]
     DBUG mcompand_xover:
     a=[1 -3.598192818969336 4.871772697390141 -2.9415672592774
        0.6683265296879234];

This does _not_ match the output from scipy.signal:

     ==========================================
     butterworth 4 crossover from scipy.signal:
     ==========================================
     lb=[2.15209512e-05, 8.60838049e-05, 1.29125707e-04,
         8.60838049e-05, 2.15209512e-05 ]
     hb=[ 0.82999258, -3.31997033, 4.97995549, -3.31997033,
          0.82999258 ]
     a=[ 1., -3.6278442, 4.95122513, -3.01192428, 0.68888769 ]

They are near, but not identical.  Is the coefficient
transformation for the iir filter cascade in
mcompand_xover.h possibly incorrect?


           Best regards,

                  Thomas


_______________________________________________
Sox-users mailing list
Sox-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sox-users

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-07-24 19:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-23 19:44 SOX mcompand crossover algorithm? Dr. Thomas Tensi
2019-07-24 19:26 ` Dr. Thomas Tensi

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/sox.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).