コード例 #1
0
def SSL_TDOA_LIN(tdoa1, tdoa2, micA, micB, micC, micD):
    std1 = tdoa1 * 343.2
    std2 = tdoa2 * 343.2
    steep1 = KarstenDOA_calculateSteep_linear_simple(distance(micA, micB),
                                                     std1)
    steep2 = KarstenDOA_calculateSteep_linear_simple(distance(micC, micD),
                                                     std2)
    solutions, m1_a, m1_b, m2_a, m2_b, b1_a, b1_b, b2_a, b2_b = getMicrophonePair_DOA_Intersection_linear(
        micA, micB, micC, micD, steep1, steep2)
    estimation = plausibleFilter_TDOA(solutions)
    return estimation
def SSL_TDOA_LIN(s_tdoaMAT, micPosList, indA, indB, indC, indD):
    std1 = s_tdoaMAT[indB][indA]
    std2 = s_tdoaMAT[indD][indC]
    rstd1 = getRealDeltaS(source_pos, micPosList[indA], micPosList[indB])
    rstd2 = getRealDeltaS(source_pos, micPosList[indC], micPosList[indD])
    print("STDOA 1: ", std1, rstd1)
    print("STDOA 2: ", std2, rstd2)
    steep1 = KarstenDOA_calculateSteep_linear_simple(
        distance(micList[indA], micList[indB]), s_tdoaMAT[indB][indA])
    steep2 = KarstenDOA_calculateSteep_linear_simple(
        distance(micList[indC], micList[indD]), s_tdoaMAT[indD][indC])
    solutions, m1_a, m1_b, m2_a, m2_b, b1_a, b1_b, b2_a, b2_b = getMicrophonePair_DOA_Intersection_linear(
        micList[indA], micList[indB], micList[indC], micList[indD], steep1,
        steep2)
    estimation = plausibleFilter_TDOA(solutions)
    return estimation
コード例 #3
0
def getRealDeltaS(source_pos, micAPos, micBPos):
    return distance(micAPos, source_pos) - distance(micBPos, source_pos)
コード例 #4
0
                                         2000)
            TDOA_CSOM1, t, csom = tdoa_csom(signalAF,
                                            signalBF,
                                            fs=meta_data["sampling_rate"],
                                            window=200)
            TDOA_CSOM2, t, csom = tdoa_csom(signalCF,
                                            signalDF,
                                            fs=meta_data["sampling_rate"],
                                            window=200)
            TDOA_real1 = getRealTDOA(source_pos, micA, micB)
            TDOA_real2 = getRealTDOA(source_pos, micC, micD)

            # Get Real Data
            angleReal = 90 - angle_degree(
                getAngle_angle1(getPoint(0, 0), source_pos))
            distanceReal = distance(source_pos, getPoint(0, 0))

            # Calculate True K
            K_true = 0
            for k in range(0, len(micList)):
                K_true += signalsPower[k] * distance(
                    micList[k], source_pos) * distance(micList[k], source_pos)
            K_true /= len(micList)

            # Calculate K estimation
            K_estim_exakt = list()
            K_estim_noise = list()
            for i in range(0, len(micList)):
                for j in range(0, len(micList)):
                    if (i != j):
                        a = getRealTDOA(source_pos, micList[i], micList[j])
                                            signalDF,
                                            fs=meta["sampling_rate"],
                                            window=2000)
            TDOA_real1 = getRealTDOA(source_pos, micA, micB)
            TDOA_real2 = getRealTDOA(source_pos, micC, micD)

            # SSL - TDOA_LIN
            estimationLIN = SSL_TDOA_LIN(TDOA_CSOM1, TDOA_CSOM2, micA, micB,
                                         micC, micD)

            # SSL - TDOA_NOL
            estimationNOL = SSL_TDOA_NOL(TDOA_CSOM1, TDOA_CSOM2, micA, micB,
                                         micC, micD, estimationLIN)

            # Distance
            distanceReal = distance(source_pos, getPoint(0, 0))
            angleReal = 90 - angle_degree(
                getAngle_angle1(getPoint(0, 0), source_pos))

            distanceLIN = distance(source_pos, estimationLIN)
            distanceNOL = distance(source_pos, estimationNOL)
            angleLIN = 90 - angle_degree(
                getAngle_angle1(getPoint(0, 0), estimationLIN))
            angleNOL = 90 - angle_degree(
                getAngle_angle1(getPoint(0, 0), estimationNOL))

            #            print("angles ° ",angleReal,angleLIN,angleNOL)
            #            print("distances m ",distanceReal,distanceLIN, distanceNOL)

            TDOA_error1 = np.sqrt(
                (TDOA_real1 - TDOA_CSOM1) * (TDOA_real1 - TDOA_CSOM1))
            signals = loaded.get_measurements()
            meta = loaded.get_meta_data()
            signalsFiltered = list()
            signalsPower = list()
            signalsSNR = list()
            for s in signals:
                sf = butterWorthFilter(s, meta["sampling_rate"], 2000)
                powerSig, powerNoi, snrFac, snrDB = getSNR(sf)
                signalsFiltered.append(sf)
                signalsPower.append(powerSig)
                signalsSNR.append(snrDB)

            # Calculate True K
            K_true = 0
            for k in range(0, len(micList)):
                K_true += signalsPower[k] * distance(
                    micList[k], source_pos) * distance(micList[k], source_pos)
            K_true /= len(micList)

            # Calculate K estimation
            K_estim_exakt = list()
            K_estim_noise = list()
            for i in range(0, len(micList)):
                for j in range(0, len(micList)):
                    if (i != j):
                        a = getRealTDOA(source_pos, micList[i], micList[j])
                        b = getFakeTDOA(a, 48000)
                        K1_exakt, K2_exakt = estimateK_Pair(
                            signalsPower[i], signalsPower[j], micList[i],
                            micList[j], a * 343.2)
                        K1_noised, K2_noised = estimateK_Pair(
                            signalsPower[i], signalsPower[j], micList[i],
from GraphicLibrary import drawPoint, drawPointL, initDrawing, finishDrawingL
from MicrophonePositionLibrary import getMicrophonePositions_SIM_A, getMicrophonePositions_SIM_B, getMicrophonePositions_SIM_C, getMicrophonePositions4_TDOA, getMicrophonePositions4_AMP

# Define Physics
c_speed = 300

# Define Microphones
micPosList = getMicrophonePositions_SIM_C(0.3)
micPosList_TDOA = getMicrophonePositions4_TDOA(micPosList)
micPosList_AMP  = getMicrophonePositions4_AMP(micPosList)

# Define Soundsource
soundSource = getPoint(10, 5)

# Signal Processing which is fake
tdoa1 = (1/c_speed) * (distance(micPosList_TDOA[0], soundSource) - distance(micPosList_TDOA[1], soundSource))
tdoa2 = (1/c_speed) * (distance(micPosList_TDOA[2], soundSource) - distance(micPosList_TDOA[3], soundSource))

distA = distance(micPosList_AMP[0], soundSource)
distB = distance(micPosList_AMP[1], soundSource)

# Calculate Estimations
point1 = SSL_TDOA_LN(micPosList_TDOA, tdoa1, tdoa2, c_speed)
point2 = SSL_TDOA_NL(micPosList_TDOA, tdoa1, tdoa2, c_speed, point1)
point3 = SSL_AMPL(micPosList_AMP, distA, distB)

# View Results
fig, ax = initDrawing()

# Draw Microphones
for p in micPosList:
            
# AMP Verfahren
FILTER_LOW = int(len(K_list)*0.4)
FILTER_HIGH = len(K_list)-1
K_list = [x for x in K_list if str(x) != 'nan']
K_list.sort()
K_list_filt = [x for x in K_list if x > 0.05] #K_list[FILTER_LOW-1:FILTER_HIGH]
estim_K = np.median(K_list_filt)

import matplotlib.pyplot as plt
#plt.plot(K_list)
#

real_K = 0
for i in range(0,7):
    real_K += distance(convertPoint(config["microphone_positions"][i]), source_pos) * np.sqrt(getSignalPower_UsingTime_AverageFree(np.asarray(signals[i])))
real_K /= 8

print("Real K ",real_K)
print("Estim K ",estim_K)

rA = estim_K/np.sqrt(powerA)
rB = estim_K/np.sqrt(powerB)

estimPoints = list()
for i in range(0,7):
    for j in range(0,7):
        if(i!=j):
            rI = estim_K/np.sqrt(getSignalPower_UsingTime_AverageFree(np.asarray(signals[i])))
            rJ = estim_K/np.sqrt(getSignalPower_UsingTime_AverageFree(np.asarray(signals[j])))
            solutions = getIntersectionPointsCircle(convertPoint(config["microphone_positions"][i]), rI, convertPoint(config["microphone_positions"][j]), rJ)
K1, K2 = estimateK_Pair(powerB, powerC, micB_pos, micC_pos, delta_s4)
K_list.append(K1)
K_list.append(K2)
K1, K2 = estimateK_Pair(powerB, powerD, micB_pos, micD_pos, delta_s5)
K_list.append(K1)
K_list.append(K2)
K1, K2 = estimateK_Pair(powerC, powerD, micC_pos, micD_pos, delta_s6)
K_list.append(K1)
K_list.append(K2)

K_list.sort()

import matplotlib.pyplot as plt
plt.plot(K_list)

real_K = distance(micA_pos, source_pos) * np.sqrt(powerA)
print("Real K ",real_K)
real_K = distance(micB_pos, source_pos) * np.sqrt(powerB)
print("Real K ",real_K)
real_K = distance(micC_pos, source_pos) * np.sqrt(powerC)
print("Real K ",real_K)
real_K = distance(micD_pos, source_pos) * np.sqrt(powerD)
print("Real K ",real_K)

print(" ")
print(" ")

print(distance(micA_pos, source_pos), "\t", real_K/np.sqrt(powerA))
print(distance(micB_pos, source_pos), "\t", real_K/np.sqrt(powerB))
print(distance(micC_pos, source_pos), "\t", real_K/np.sqrt(powerC))
print(distance(micD_pos, source_pos), "\t", real_K/np.sqrt(powerD))
            K1, K2 = estimateK_Pair(powerA, powerB, micA_pos, micB_pos,
                                    delta_s1)
            K_list.append(K1)
            K_list.append(K2)

# AMP Verfahren
K_list = [x for x in K_list if str(x) != 'nan']
K_list.sort()
K_list_filt = K_list[int(len(K_list) / 13 * 6):len(K_list) - 1]
estim_K = np.median(K_list_filt)

import matplotlib.pyplot as plt
#plt.plot(K_list)
#

real_K = distance(micA_pos, source_pos) * np.sqrt(powerA)

print("Real K ", real_K)
print("Estim K ", estim_K)

rA = estim_K / np.sqrt(powerA)
rB = estim_K / np.sqrt(powerB)

fig = plt.figure(figsize=(16, 8))

plt.subplot(1, 2, 1)
plt.plot(K_list, label="sorted K list")
plt.plot(np.arange(int(len(K_list) / 13 * 6),
                   len(K_list) - 1),
         K_list_filt,
         label="filtered K list")
コード例 #11
0
powerD = getSignalPower_UsingTime_AverageFree(np.asarray(signals[3]))
powerSrc = getSignalPower_UsingTime_AverageFree(source_signal)

# Calculate TDOA
arr = array_parameters.ArrayParameters(config["microphone_positions"])
tdoa = basic_tdoa.BasicTDOA(loaded, 0, 0.0, arr)
tdoaMAT  = tdoa.tdoa_gcc_phat(0.0)[1][0]
delta_n1 = tdoaMAT[1][0]
delta_n2 = tdoaMAT[3][2]
delta_t1 = delta_n1*meta["sampling_spacing"]
delta_t2 = delta_n2*meta["sampling_spacing"]
delta_s1 = delta_t1*343.2
delta_s2 = delta_t2*343.2

# TDOA LINEAR VERFAHREN
steep1 = KarstenDOA_calculateSteep_linear_simple(distance(micA_pos, micB_pos), delta_s1)
steep2 = KarstenDOA_calculateSteep_linear_simple(distance(micC_pos, micD_pos), delta_s2)
solutions, m1_a, m1_b, m2_a, m2_b, b1_a, b1_b, b2_a, b2_b = getMicrophonePair_DOA_Intersection_linear(micA_pos, micB_pos, micC_pos, micD_pos, steep1, steep2)
estimationLIN = plausibleFilter_TDOA(solutions)

curveA = get_tCurve(micA_pos, micB_pos, delta_s1)
curveB = get_tCurve(micC_pos, micD_pos, delta_s2)
estimationNOL = optimizeIntersectionPoint_nonLinear_numeric(estimationLIN, curveA, curveB)
    
# Kurven zur Darstellung
X_NOL_CURVE1, Y_NOL_CURVE1 = KarstenDOA_calculateCurve_nonlinear(micA_pos, micB_pos, delta_s1, res=0.01, rang=10)
X_LIN_CURVE1, Y_LIN_CURVE1 = KarstenDOA_calculateCurve_linear(micA_pos, micB_pos, delta_s1, res=0.01, rang=10)
X_NOL_CURVE2, Y_NOL_CURVE2 = KarstenDOA_calculateCurve_nonlinear(micC_pos, micD_pos, delta_s2, res=0.01, rang=10)
X_LIN_CURVE2, Y_LIN_CURVE2 = KarstenDOA_calculateCurve_linear(micC_pos, micD_pos, delta_s2, res=0.01, rang=10)

# Plot Data
コード例 #12
0
        z = np.asarray(s)
        power = getSignalPower_UsingTime_AverageFree(np.asarray(s))
        powers.append(power)
    #    print("microphone ",power,"W")
    #print("Source Power ",getSignalPower_UsingTime_AverageFree(source_signal),"W")

    # Calculate TDOA
    arr = array_parameters.ArrayParameters(config["microphone_positions"])
    tdoa = basic_tdoa.BasicTDOA(loaded, 0, 0.0, arr)

    # Do Amplitude Verfahren
    powerA = powers[0]
    powerB = powers[1]
    micA_pos = convertPoint(config["microphone_positions"][0])
    micB_pos = convertPoint(config["microphone_positions"][1])
    dTDOA = tdoa.tdoa_gcc_phat(0.0)[1][0][1][0]
    dSDOA = dTDOA * meta["sampling_spacing"] * 343.2

    K1, K2 = estimateK_Pair(powerA, powerB, micA_pos, micB_pos, dSDOA)
    rA_1 = K1 / np.sqrt(powerA)
    rA_2 = K2 / np.sqrt(powerA)
    rB_1 = K1 / np.sqrt(powerB)
    rB_2 = K2 / np.sqrt(powerB)

    solutions = getIntersectionPointsCircle(micA_pos, rA_2, micB_pos, rB_2)
    estimPos = getPlausibleOne(solutions[0], solutions[1])
    sourcePos = convertPoint(config["source_position"])

    print(i, config["source_position"], estimPos, " ", sourcePos, " > ",
          distance(estimPos, sourcePos))
コード例 #13
0
    tdoa = basic_tdoa.BasicTDOA(loaded, 0, 0, arr)
    tdoaMAT  = tdoa.tdoa_gcc_phat(0.0)[1][0]
    delta_n1 = tdoaMAT[1][0]
    delta_n2 = tdoaMAT[3][2]
    delta_t1 = delta_n1*meta["sampling_spacing"]
    delta_t2 = delta_n2*meta["sampling_spacing"]
    delta_s1 = delta_t1*343.2
    delta_s2 = delta_t2*343.2
#    
    delta_tX1 = gcc_phat(np.asarray(signals[0]), np.asarray(signals[1]), fs=meta["sampling_rate"])[0]
    delta_tX2 = gcc_phat(np.asarray(signals[2]), np.asarray(signals[3]), fs=meta["sampling_rate"])[0]
    delta_sX1 = delta_tX1*343.2
    delta_sX2 = delta_tX2*343.2
    
    
    true_s1 = distance(source_pos, micA_pos) - distance(source_pos, micB_pos)
    true_s2 = distance(source_pos, micC_pos) - distance(source_pos, micD_pos)
    print(true_s1, delta_s1, true_s2, delta_s2, delta_sX1, delta_sX2)
#    print(true_s1, true_s2, delta_sX1, delta_sX2)

#    delta_s1 = delta_sX1
#    delta_s2 = delta_sX2
    
    # TDOA LINEAR VERFAHREN
    steep1 = KarstenDOA_calculateSteep_linear_simple(distance(micA_pos, micB_pos), delta_s1)
    steep2 = KarstenDOA_calculateSteep_linear_simple(distance(micC_pos, micD_pos), delta_s2)
    solutions, m1_a, m1_b, m2_a, m2_b, b1_a, b1_b, b2_a, b2_b = getMicrophonePair_DOA_Intersection_linear(micA_pos, micB_pos, micC_pos, micD_pos, steep1, steep2)
    estimation = plausibleFilter_TDOA(solutions)
      
    # Kurven zur Darstellung
    X_NOL_CURVE1, Y_NOL_CURVE1 = KarstenDOA_calculateCurve_nonlinear(micA_pos, micB_pos, delta_s1, res=0.01, rang=10)