Skip to content

Instantly share code, notes, and snippets.

@sinc
Last active June 16, 2023 13:55
Show Gist options
  • Save sinc/1a7aa9c034b77f3a8195b725a6440179 to your computer and use it in GitHub Desktop.
Save sinc/1a7aa9c034b77f3a8195b725a6440179 to your computer and use it in GitHub Desktop.
Parametrics phase methods
def phase1MNK(sig1, sig2, N, K = 0, Q = 1):
    num = 0.0
    denom = 0.0
    for n in range(K+4, N+K):
        x1n  = sig1[n - Q*0]
        x1n1 = sig1[n - Q*1]
        x1n3 = sig1[n - Q*3]
        x1n4 = sig1[n - Q*4]
        x2n  = sig2[n - Q*0]
        x2n1 = sig2[n - Q*1]
        x2n3 = sig2[n - Q*3]
        x2n4 = sig2[n - Q*4]
        A1 = x1n4*x2n - x1n*x2n4
        A2 = x1n3*x2n1 - x1n1*x2n3
        A3 = x1n3*x2n1 + x1n1*x2n3
        A4 = x1n1*x2n1 + x1n3*x2n3
        C = A1*A3-2*A2*A4
        if 4*(A2**2)-A1**2 >= 0:
            num += abs(A2)*math.sqrt(4*(A2**2)-A1**2)*C
            denom += C**2
    if denom > 0:
        return math.atan(num/denom)
    return 1000
def phase2MNK(sig1, sig2, N, Q = 1):
    num = 0.0
    denom = 0.0
    for n in range(4, N):
        x1n  = sig1[n - Q*0]
        x1n1 = sig1[n - Q*1]
        x1n2 = sig1[n - Q*2]
        x1n3 = sig1[n - Q*3]
        x1n4 = sig1[n - Q*4]
        x2n  = sig2[n - Q*0]
        x2n1 = sig2[n - Q*1]
        x2n2 = sig2[n - Q*2]
        x2n3 = sig2[n - Q*3]
        x2n4 = sig2[n - Q*4]
        A1 = x1n4*x2n - x1n*x2n4
        A2 = x1n3*x2n1 - x1n1*x2n3
        A5 = x1n3*x2n1 - x1n2*x2n2
        A6 = x1n1*x2n3 - x1n2*x2n2
        if 4*(A2**2)-A1**2 > 0:
            num += ((A5**2)-(A6**2))*math.sqrt(4*(A2**2)-A1**2)
            denom += ((A5+A6)**2)*(2*A2+A1)
    if denom != 0.0:
        if num > 0:
            return math.atan(-num/denom)
        return math.atan(num/denom)
    return 1000
def phase_aver(sig1, sig2, N, K = 0, Q = 1):
A1 = 0.0
A2 = 0.0
A5 = 0.0
A6 = 0.0
for n in range(K+4, N+K):
x1n = sig1[n - Q*0]
x1n1 = sig1[n - Q*1]
x1n2 = sig1[n - Q*2]
x1n3 = sig1[n - Q*3]
x1n4 = sig1[n - Q*4]
x2n = sig2[n - Q*0]
x2n1 = sig2[n - Q*1]
x2n2 = sig2[n - Q*2]
x2n3 = sig2[n - Q*3]
x2n4 = sig2[n - Q*4]
A1 += x1n4*x2n - x1n*x2n4
A2 += x1n3*x2n1 - x1n1*x2n3
A5 += x1n3*x2n1 - x1n2*x2n2
A6 += x1n1*x2n3 - x1n2*x2n2
#A1 /= N-4
#A2 /= N-4
#A5 /= N-4
#A6 /= N-4
num = (A5-A6)*np.sqrt((2.0*A2 - A1) / (2.0*A2 + A1))
den = (A5+A6)
if den != 0.0:
if num > 0:
return math.atan(-num/den)
return math.atan(num/den)
return 1000
def ph3p(sig1, sig2):
N = min(len(sig1), len(sig2))
b1, b2, b3 = 0.0, 0.0, 0.0
for n in range(2, N):
b1 += sig1[n-0]*sig2[n-2] - sig1[n-2]*sig2[n-0]
b2 += sig1[n-0]*sig2[n-1] - sig1[n-1]*sig2[n-0] + sig1[n-1]*sig2[n-2] - sig1[n-2]*sig2[n-1]
b3 += 2.0*sig1[n-1]*sig2[n-1] - sig1[n-0]*sig2[n-2] - sig1[n-2]*sig2[n-0]
return np.arctan2(np.sqrt(b2**2 - b1**2), b3)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment