Number of Zero-crossings - Equation

梦想与她 提交于 2019-12-11 11:55:21

问题


I have written an algorithm that calculates the number of zero-crossings within a signal. By this, I mean the number of times a value changes from + to - and vice-versa.

The algorithm is explained like this:

If there are the following elements:

v1 = {90, -4, -3, 1, 3}

Then you multiply the value by the value next to it. (i * i+1)

Then taking the sign value sign(val) determine if this is positive or negative. Example:

e1 = {90 * -4} = -360 -> sigum(e1) = -1 
e2 = {-4 * -3} =  12  -> signum(e2) = 1
e3 = {-3 *  1} =  -3  -> signum(e3) = -1
e4 = {1 *   3} =  3   -> signum(e4) = 1

Therefore the total number of values changed from negative to positive is = 2 ..

Now I want to put this forumular, algorithm into an equation so that I can present it.

I have asked a simular question, but got really confused so went away and thought about it and came up with (what I think the equation should look like).. It's probably wrong, well, laughably wrong. But here it is:

Now the logic behind it:

I pass in a V (val)

I get the absolute value of the summation of the signum from calculating (Vi * Vi+1) .. The signum(Vi * Vi+1) should produce -1, 1, ..., values

If and only if the value is -1 (Because I'm only interested in the number of times zero is crossed, therefore, the zero values.

Does this look correct, if not, can anyone suggest improvements?

Thank you :)!

EDIT:

Is this correct now?


回答1:


You are doing the right thing here but your equation is wrong simply because you only want to count the sign of the product of adjacent elements when it is negative. Dont sum the sign of products since positive sign products should be neglected. For this reason, an explicit mathematical formula is tricky as positive products between adjacent elements should be ignored. What you want is a function that takes 2 arguments and evaluates to 1 when their product is negative and zero when non-negative

f(x,y) = 1 if xy < 0
       = 0 otherwise

then your number of crossing points is simply given by

sum(f(v1[i],v1[i+1])) for i = 0 to i = n-1 

where n is the length of your vector/array v1 (using C style array access notation based on zero indexing). You also have to consider edge conditions such as 4 consecutive points {-1,0,0,1} - do you want to consider this as simply one zero crossing or 2??? Only you can answer this based on the specifics of your problem, but whatever your answer adjust your algorithm accordingly.



来源:https://stackoverflow.com/questions/13504019/number-of-zero-crossings-equation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!