Borrar filtros
Borrar filtros

Express the sum of squares as a percentage of how well two signals match?

5 visualizaciones (últimos 30 días)
Ronan
Ronan el 6 de Ag. de 2015
Respondida: Adam el 6 de Ag. de 2015
So I am using matlab to compare two signals using the sum of squares. So I assume the best possible match will be zero. eg ∑(y2−y1)^2 where y2=y1 would be 0. The larger the sum of squared value the worse the match. So I d like to see how good one signal compares to the other in terms of percentage. So I figured that if i define a baseline value as the worst match this can act as a reference. eg if the best sum of squared value was 0 and the worst was 10 then 5 would be matched 50%. So what i m doing here is subtracting the worst value from the actual value and express this as a fraction. eg a sum of squared value of 1 is good because its closer to 0 so 10−1=9⋯(9/10)×100=90%. So, where the sum of square value is defined as ∑(y2−y1)^2, the baseline (worst case) would be ∑(y2−0)^2. Is this a correct way of doing this. Are the better ways?
  2 comentarios
Walter Roberson
Walter Roberson el 6 de Ag. de 2015
The worst case is not (y2-0), it is (y2-infinity).
If y1 is limited range, then the worst case is the end of the range "opposite" the side that y2 is on. For example if the range is 0 to 255, and y2 is 83, then the worst case is not y1 = 0 but rather y1 = 255.
The worst worst case is y1 maximum and y2 minimum or y1 minimum and y2 maximum, either one of which have an absolute difference of (maximum - minimum)
Ronan
Ronan el 6 de Ag. de 2015
ok, so if my max possible value is 6000 and min is 0. Then worst possible ess value for 360 points would be (6000^2)*360 = 1.29x10^10 Then if I had a good match where other signal just differed by 1000 for each 360 points, then (1.29x10^10 - 3.6x10^8) = 1.25x10^10.
Then (1.25x10^10/1.29x10^10)x100 = 97% match.

Iniciar sesión para comentar.

Respuestas (1)

Adam
Adam el 6 de Ag. de 2015
The two methods I have tended to use are:
absDiff = abs( y1 - y2 );
absDiffEnergy = sum( absDiff.^2 );
y1Energy = sum( y1.^2 );
diffEnergyPercent = absDiffEnergy / y1Energy * 100;
To give a percentage representing the energy in the difference between signals vs the energy in the first signal (usually I am comparing a signal to its approximation so in that case the first signal provides my baseline)
OR
Use use some measure of signal correlation - e.g.
dot( y1, y2 ) / ( norm(y1) * norm(y2) )
though the latter will give a perfect (1) match for a signal that is a linear multiple of another which would obviously be considered significantly different by other measures.

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by