Hi, Can anybody point me in the direction of a decent 'stereo expansion' algorithm (by this I mean the sort of thing commonly found in e.g. TVs, that makes a normal stereo image sound wider than it actually is)? Thanks, Jesper
Stereo expansion algorithm
Started by ●July 6, 2004
Reply by ●July 6, 20042004-07-06
float mono = (left+right)*.5; left -= amount * mono; right -= amount * mono; For 0. < amount <= 1. That's basically all there is to it. --smb jbek@altavista.net (Jesper B. Kristensen) wrote in message news:<71e1e102.0407060151.1dc86912@posting.google.com>...> Hi, > > Can anybody point me in the direction of a decent 'stereo expansion' > algorithm (by this I mean the sort of thing commonly found in e.g. > TVs, that makes a normal stereo image sound wider than it actually > is)? > > Thanks, > Jesper
Reply by ●July 6, 20042004-07-06
Jesper B. Kristensen wrote:> Hi, > > Can anybody point me in the direction of a decent 'stereo expansion' > algorithm (by this I mean the sort of thing commonly found in e.g. > TVs, that makes a normal stereo image sound wider than it actually > is)? > > Thanks, > JesperLets take it from half way. Suppose the signal were like FM: a mono signal, or S(um), and the channel difference, or D(ifference). Then to get L(eft) and R(ight), we use the relations (ignoring scale factors) L = S - D and R = S + D Of course, we can also perform L' = S - kD and R' = S + kD where the primed values have more or less separation than the unprimed depending whether k is more or less than unity. OK, you say, but I start with L and R.; then what? Again ignoring scale factors, S = L + R (that's why it's the sum) and D = R - L (that's ...). The fewer adds and subtracts you do, the healthier your signals will be, so crank through the algebra and come up with expressions of the form L' = L + f(k, R) I could do it for you, but I won't unless you admit you know so little algebra that can't do it yourself. You don't actually need the scale factors, but you need to keep track of where they're left out in order to get the right action for your k. Jerry -- Engineering is the art of making what you want from things you can get. �����������������������������������������������������������������������
Reply by ●July 6, 20042004-07-06
If the original source was mono, then it seems this algorithm would result in a softer overall level, no? I have a Sony "boombox" that makes stereo sounds wider and leave mono sounds unaffected. I wonder how this works? BTW, another way to make something sound wider is to delay the L relative to the R (tens of milliseconds range). I doubt that TV's use this algorithm since it is fairly difficult to do in the analog domain, but it does have an interesting effect and is usually trivial to do digitally. On a related note, I read about an algorithm used to synthesize stereo from mono that goes like this: L = mono + amount*mono_delayed R = mono - amount*mono_delayed where mono_delayed is mono delayed in the tens of milliseconds range and amount is a scaling factor. The main advantage of this algorithm is that it is perfectly "mono compatible", i.e. if played back in mono you end up with just the original mono signal (no phase cancellation). "Stephan M. Bernsee" <spam@dspdimension.com> wrote in message news:42c34ef.0407060649.43aea0d0@posting.google.com...> float mono = (left+right)*.5; > left -= amount * mono; > right -= amount * mono; > > For 0. < amount <= 1. > > That's basically all there is to it. > > --smb > > > jbek@altavista.net (Jesper B. Kristensen) wrote in messagenews:<71e1e102.0407060151.1dc86912@posting.google.com>...> > Hi, > > > > Can anybody point me in the direction of a decent 'stereo expansion' > > algorithm (by this I mean the sort of thing commonly found in e.g. > > TVs, that makes a normal stereo image sound wider than it actually > > is)? > > > > Thanks, > > Jesper
Reply by ●July 6, 20042004-07-06
Stephan M. Bernsee wrote:> float mono = (left+right)*.5; > left -= amount * mono; > right -= amount * mono; > > For 0. < amount <= 1. > > That's basically all there is to it.Typo? right += amount * mono; ?> > --smb > > > jbek@altavista.net (Jesper B. Kristensen) wrote in message news:<71e1e102.0407060151.1dc86912@posting.google.com>... > >>Hi, >> >>Can anybody point me in the direction of a decent 'stereo expansion' >>algorithm (by this I mean the sort of thing commonly found in e.g. >>TVs, that makes a normal stereo image sound wider than it actually >>is)? >> >>Thanks, >>JesperJerry -- Engineering is the art of making what you want from things you can get. �����������������������������������������������������������������������
Reply by ●July 7, 20042004-07-07
No typo. You subtract the center part of the stereo image from both the left and right channels. This will emphasize anything that is not present in both channels, therefore making the stereo image appear "wider". It is true that the overall signal level drops if you have a mono signal, but I guess you could just switch the algorithm off in that case. Checking for mono is fairly easy, for example by making sure fabs(left-right) is always below a certain threshold. --smb Jerry Avins <jya@ieee.org> wrote in message news:<40eb15e6$0$3088$61fed72c@news.rcn.com>...> Stephan M. Bernsee wrote: > > float mono = (left+right)*.5; > > left -= amount * mono; > > right -= amount * mono; > > > > For 0. < amount <= 1. > > > > That's basically all there is to it. > > Typo? right += amount * mono; ? > > > > --smb > > > > > > jbek@altavista.net (Jesper B. Kristensen) wrote in message news:<71e1e102.0407060151.1dc86912@posting.google.com>... > > > >>Hi, > >> > >>Can anybody point me in the direction of a decent 'stereo expansion' > >>algorithm (by this I mean the sort of thing commonly found in e.g. > >>TVs, that makes a normal stereo image sound wider than it actually > >>is)? > >> > >>Thanks, > >>Jesper > > Jerry
Reply by ●July 7, 20042004-07-07
> BTW, another way to make something sound wider is to delay the L relativeto the> R (tens of milliseconds range). I doubt that TV's use this algorithmsince it> is fairly difficult to do in the analog domain, but it does have aninteresting> effect and is usually trivial to do digitally.To delay L relative to R is basically the same as changing its phase (or delaying whole periods). A simple capacitor circuit would do the trick then. So not difficult at all ;-) You even get this type of channel delay if you're messing up your pcb design or using inferior components (with a huge deviation factor). Done that a million of times ;) Cheers, Rob
Reply by ●July 7, 20042004-07-07
Rob Vermeulen wrote:>>BTW, another way to make something sound wider is to delay the L relative > > to the > >>R (tens of milliseconds range). I doubt that TV's use this algorithm > > since it > >>is fairly difficult to do in the analog domain, but it does have an > > interesting > >>effect and is usually trivial to do digitally. > > > To delay L relative to R is basically the same as changing its phase (or > delaying whole periods). A simple capacitor circuit would do the trick then. > So not difficult at all ;-)I think you want a delay independent of frequency. Not so easy with R-C.> You even get this type of channel delay if you're messing up your pcb design > or using inferior components (with a huge deviation factor). Done that a > million of times ;)What is "deviation factor"? Deviation from what? Jerry -- Engineering is the art of making what you want from things you can get. �����������������������������������������������������������������������
Reply by ●July 7, 20042004-07-07
Stephan M. Bernsee wrote:> No typo. You subtract the center part of the stereo image from both > the left and right channels. This will emphasize anything that is not > present in both channels, therefore making the stereo image appear > "wider". It is true that the overall signal level drops if you have a > mono signal, but I guess you could just switch the algorithm off in > that case. Checking for mono is fairly easy, for example by making > sure fabs(left-right) is always below a certain threshold. > > --smbDanke! Jerry -- Engineering is the art of making what you want from things you can get. �����������������������������������������������������������������������
Reply by ●July 7, 20042004-07-07
Hi Stephen,> Jerry Avins <jya@ieee.org> wrote in message news:<40eb15e6$0$3088$61fed72c@news.rcn.com>... > > Stephan M. Bernsee wrote: > > > float mono = (left+right)*.5; > > > left -= amount * mono; > > > right -= amount * mono; > > >Note that this degenerates to: L -= k*R; R -= k*L; If k can vary from -1 to +1 then you get a control that will go from MONO to full centre cancelation (karaoke?) which is also MONO, but speakers out of phase. Regards Robert