Thank you very much for your very quick and detailed comments! I find that it is very helpful (when working in a system with multiple spam controls and hence with multiple digrees of freedom of adjustmens) not only to go by the feel during live monitoring, but also understand what exactly each slider does to the sound and why it does what it does.
I studied the reference to the center cut algorithm which you kindly provided, and also found some interesting history and background in the manual to SPEC v.4. The hostory of SPEC described in v.4 manual indicated that you first implemented center cut algorithm in Bidule, then expanded it to SLICE, and only later developed ArcTan. While ArcTan is in many ways superior to SLICE, you found that SLICE gives somewhat different output and included the option of blending into the ArcTan output for the rears either the original stereo source or SLICE rears, which based on the manual and your reply appears to work like this:
I am still a little fuzzy on how two-stage SLICE conversion works. The diagram below shows my best guess: the first stage likely uses left and right channels of the original stereo to separate center channel, while the second stage uses pairs "right & center" and "center & left" as inputs:
The next question becomes how SLICE output is different from ArcTan output...
I carefully read description of the Center Cut algorithm. I am still confused why the author refers to output of Fast Hartley Transform as a 2D vector. Normally, FHT should transform a one-dimensional data array in time domain to a one dimensional array of data in frequency domain. It appears that the author of Center Cut may have used cos and sin transforms in parallel to get information on both phase and magnitude, thus using essentially FFT but without complex numbers.
His computation of the center channel uses scalar products of vectors. He seeks a solution of the equation
(L - alpha * C) [dot] (R - alpha * C) =0
Where [dot] is the scalar vector product operator (defined as the length of one vector times the projection of the second one along the first), L and R are phase/magnitude vectors of left and right channels in the frequency domain, C is the vector sum of normalized vectors L and R (hence it determines the direction in the phase/magnitude space in which there are significant components in both L and R channels exist), and alpha is the fitting coefficient.
This equation may have three solutions:
1) L-alpha*C = 0
2) R-alpha*C = 0
3) alpha chosen in such a way that vector L-apha*C is perpendicular to R-alpha*C and scalar vector product is zero.
With 2D vector inputs for L and R, solutions (1) and (2) are very unlikely. They are possible only when vectors L and R point into the same direction, hence C is parallel to both L and R. In nearly all practical cases, L and R are not parallel and L - alpha*C can't become zero. Therefore, one has to solve a quadratic equation to find alpha for the solution (3).
To the best of my understanding, Plogue Bidule does not enable one to use full FFT with complex output; only amplitudes are available. I found a discussion on Plogue Bidule development forum which I believe was originated by you and which discusses possible solutions to this problem:
http://www.plogue.com/phpBB3/viewtopic. ... SDK#p22051It seems that your approach was to solve quadratic equation from the Center Cut algorithm with the difference that L and R are no longer two-dimensional vectors. In this case, C becomes just a scalar C=2, and quadratic equation has a fairly simple solution outlined at the bottom of the thread on Bidule forum (oddly, my calculation stubbornly give me "+4LR" under the square root at the end of the formula instead of "-4LR", but this is not the point of my question).
However, I do not quite understand why one would even attempt to solve this equation in the one-dimensional case. Unless I am confused about outputs of spectral bidules, L and R are no longer 2D vectors, and they CAN NOT have orthogonal components. They are one dimensional vectors which are always parallel. Vector product becomes just a product of two scalars. From the 3 possible solutions of the Center Cut equation listed above, only solutions 1 and 2 become meaningful, and only they are feasible:
1) L-alpha*C = 0
2) R-alpha*C = 0
What does this mean conceptually? We starts with L and R channels in stereo. We do conversion to frequency domain. We compare amplitudes of left and right channels for each frequency component. If for a given frequency L>R, then the sound is located to the left of the "future center channel". Hence, we remove the signal from the right channel completely (thus satisfying the condition R-alpha*C=0) and move it all to the center channel. Since in our one-dimensional case C is a scalar and C=2, the solution for alpha is just alpha = R/2.
With that, SLICE appears to boil down to essentially panning to 5 channels which ZPAN and ArcTan use, with the difference that speaker positions are not variable but fixed at 360 / 4 = 90 degrees (4 because 5 speakers are separated by 4 gaps between them). My thinking is that SPEC output can be reproduced with ArcTan if speakers are positioned in a non-standard (for a surround sound system) way. I am not sure, though, if SLICE can do such a careful job of panning with constant power equations as ArcTan does.
It appears that due to extreme setting of speakers, SLICE is bound to emphasize in its rear channels sounds located on extreme left and extreme right in the stereo sound field - to a greater extend than ArcTan would do with its usual settings. Blending of SLICE component into ArcTan output may either make rears better defined. In the extreme case, too much SLICE blended in (especially for stereos with strong stereo separation) may make rears excessively dominant. This matches what I am hearing when experimenting with SLICE.
Does this make sense at all? Is there something that I am missing in my attempt to understand the background of how this wonderful algorithm works?
Thanks - and Happy New Year !!