Good Evening Giuseppe,

This gives me weird behavior I can't explain.

Here is my test audio which contains vocals in mono-mid, mono-left,
mono-right, mono-half-left, mono-half-right, stereo:
https://cloud.4ohm.de/s/y9oZzqFGyrZT5ej

And my test code. I only put in the meter instead of three separate outs.

import("stdfaust.lib");
//phase(l,r) = (l/r) : aa.arctan;
phase(l,r)= (l/r):atan;
magnitude(l,r)= (l^2+ r^2)^(1/2);
correlate(l,r)= phase(l,r)* magnitude(l,r);
correlate_meter(x,y)=
x,y<:x,attach(y,(correlate:hbargraph("corr",-1,1))):_,_;
process= _,_:correlate_meter;
//process = os.osc(10),os.osc(10.1) <: _,_,phase, magnitude,
correlate;//, correlate_meter;

Another email will follow in response to Dario's solution.

Thanks very much!
Klaus


On 04.08.21 20:47, Giuseppe Silvi wrote:
> Hi Klaus,
> I suppose the fixed magnitude line is
>
> magnitude(l,r) = (l^2 + r^2)^(1/2);
>
> and you can use `atan` in phase().
>
> import("stdfaust.lib");
>
> //phase(l,r) = (l/r) : aa.arctan;
> phase(l,r) = (l/r) : atan;
> magnitude(l,r) = (l^2 + r^2)^(1/2);
> correlate(l,r) = phase(l,r) * magnitude(l,r); 
>
> correlate_meter(x,y) = x,y <: x , attach(y, (correlate : 
> hbargraph("corr",-1,1))) : _,_;
>
> process = os.osc(10),os.osc(10.1) <: _,_,phase, magnitude, correlate;//, 
> correlate_meter;
>
>> On 4 Aug 2021, at 16:50, Klaus Scheuermann <kla...@posteo.de> wrote:
>>
>> Thanks Giuseppe,
>>
>> I checked it out, but somehow it still does not give me the desired result...
>> I did some more research and found this, which indicates that it can be done 
>> with arctan more easily.
>>
>>> The way this is done on phase (correlation) meters in audio equipment is 
>>> rather simple:
>>>
>>> Phase = arctan(L/R)
>>>
>>> With phase of 45 or 225 = 1, and phase of 135 and 315 (-45) is -1.
>>>
>>> Essentially, the Y Axis is the L, and the X axis is the R. The phase is 
>>> simply the polar angle of the vector between the two.
>>>
>>> This type of meters will show 1 if the signal is mono, and -1 if the left 
>>> and right are perfectly phase inverted.
>>>
>>> Notice however, that phase meters of this type also account for the 
>>> magnitude in the polar coordinates. So:
>>>
>>> Magnitude = (L^2 + R^2)^1/2
>>>
>>> Thus the actual meter display is a normalised version of:
>>>
>>> Correlation = Phase * Magnitude
>>>
>>> I'm not sure that satisfies your requirements, but this answers the 
>>> question in the subject.
>>>
>> So I transfered this to faust, but it still behaves weired...
>>
>> import("stdfaust.lib");
>>
>> phase(l,r) = (l/r) : aa.arctan;
>> magnitude(l,r) = (l^2 + r^2)^1/2;
>> correlate(l,r) = phase(l,r) * magnitude(l,r); 
>>
>> correlate_meter(x,y) = x,y <: x , attach(y, (correlate : 
>> hbargraph("corr",-1,1))) : _,_;
>>
>> process = _,_ : correlate_meter: _,_;
>>
>> Any ideas?
>>
>> Klaus
>>
>> On 03.08.21 14:48, Giuseppe Silvi wrote:
>>> Hi Klaus,
>>> The filters are necessary to obtain a -1 +1 range, I think.
>>>
>>> import("stdfaust.lib");
>>>
>>> correlate(l,r) = l*l ,r*r , l*r : par(i,3, si.smooth(0.9)) : sqrt, sqrt, _ 
>>> : *,_ : /;
>>> correlate_meter(x,y) = x,y <: x , attach(y, (correlate : 
>>> hbargraph("corr”,-1,1)));
>>>
>>> process = correlate_meter;
>>>
>>> Try playing with the si.smooth coefficient. 
>>>
>>> best,
>>> giuseppe
>>>
>>>
>>>> On 3 Aug 2021, at 14:09, Klaus Scheuermann <kla...@posteo.de>
>>>>  wrote:
>>>>
>>>> Could it be something like this?
>>>>
>>>> (according to the 'correct' algorithm in 
>>>> https://www.beis.de/Elektronik/Correlation/CorrelationCorrectAndWrong.html
>>>>  )
>>>> import("stdfaust.lib");
>>>>
>>>> correlate(l,r) = l*l ,r*r , l*r : sqrt, sqrt, _ : *,_ : / :_;
>>>> correlate_meter(x,y) = x,y <: x , attach(y, (correlate : 
>>>> hbargraph("corr",-1,1))) : _,_;
>>>>
>>>> process = _,_ : correlate_meter: _,_;
>>>>
>>>> I am not sure about the lowpass filters though. Maybe not needed in the 
>>>> digital domain?
>>>>
>>>> Also, my code only returns -1 or 1 while it should be returning a range of 
>>>> -1 and 1, right?
>>>>
>>>>> The correlation is either expressed in % from -100% to +100% or as the 
>>>>> correlation factor, which ranges from -1 to +1. Note that due to the 
>>>>> correlation algorithm the level of both signals does not matter, i.e., it 
>>>>> does not influence the measured result.
>>>>>
>>>>> When a mono source is used for a stereo signal both stereo channels will 
>>>>> be +100% correlated. When e.g. in a stereo signal both channels contain 
>>>>> completely different signals, e.g. left (and only left) is the trumpet 
>>>>> and right (and only right) is the guitar these stereo channels will be 0% 
>>>>> correlated. With a third instrument appearing in both channels, the 
>>>>> correlation will be somewhere between 0 and +100%.
>>>>>
>>>>>
>>>> Ideas?
>>>> Danke :)
>>>> Klaus
>>>>
>>>>
>>>>
>>>>
>>>> On 03.08.21 12:48, Klaus Scheuermann wrote:
>>>>
>>>>> Hello List,
>>>>>
>>>>> I just wondered, if anyone has implemented a stereo audio correlation
>>>>> meter/analyser in faust?
>>>>>
>>>>> If yes - great!
>>>>> If no - I have another project :)
>>>>>
>>>>> Here is what I found about the algorithm(s):
>>>>>
>>>>>
>>>>> https://www.beis.de/Elektronik/Correlation/CorrelationCorrectAndWrong.html
>>>>>
>>>>>
>>>>>
>>>>> I never learned analog electronic schematics, but it seems it should not
>>>>> be extremely hard to transfer to faust.
>>>>>
>>>>> Cheers, Klaus
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Faudiostream-users mailing list
>>>>>
>>>>>
>>>>> Faudiostream-users@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/faudiostream-users
>>>> _______________________________________________
>>>> Faudiostream-users mailing list
>>>>
>>>> Faudiostream-users@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/faudiostream-users
_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-users

Reply via email to