return getPoint(p[0], p[1])


def cutSignal(signal, meta_data, time_window):
    time = np.arange(meta_data["number_samples"]) / meta_data["sampling_rate"]

    fromIndex = int(time_window["from"] / meta_data["duration"] *
                    meta_data["number_samples"])
    toIndex = int(time_window["to"] / meta_data["duration"] *
                  meta_data["number_samples"])

    return time[fromIndex:toIndex], signal[fromIndex:toIndex]


# Lade Konfiguration
config = load_configs("configSNR.json")[0]

config["source_position"] = [0, 40]

# Starte Simulation
loaded = simulate(config, config["source_position"], signal_function)
signals = loaded.get_measurements()
meta = loaded.get_meta_data()
micA_pos = convertPoint(config["microphone_positions"][0])
micB_pos = convertPoint(config["microphone_positions"][1])
micC_pos = convertPoint(config["microphone_positions"][2])
micD_pos = convertPoint(config["microphone_positions"][3])
source_pos = convertPoint(config["source_position"])

# Source Signal
time = generateTime(meta["sampling_rate"], meta["number_samples"])
    return np.arange(0,number_samples)/sampling_rate

def getSourceSignal(time):
    source_signal = np.zeros_like(time)
    for t in range(0,time.shape[0]):
        source_signal[t] = signal_function(time[t])
    return source_signal

def signal_function(x): 
    return math.sin(x * (2 * math.pi * 400.0)) if (x > 0.1 and x < 0.3) else 0

def convertPoint(p):
    return getPoint(p[0],p[1])

# Lade Konfiguration
config = load_configs("config.json")[0]

# Starte Simulation
loaded = simulate(config, config["source_position"], signal_function)
signals = loaded.get_measurements()
meta    = loaded.get_meta_data()
micA_pos = convertPoint(config["microphone_positions"][0])
micB_pos = convertPoint(config["microphone_positions"][1])
source_pos = convertPoint(config["source_position"])

# Source Signal
time = generateTime(meta["sampling_rate"],meta["number_samples"])
source_signal = getSourceSignal(time)

# Do Power Calculations
powerA = getSignalPower_UsingTime_AverageFree(np.asarray(signals[0]))
    fromIdx = np.where(thrFil == True)[1][0]
    toIdx = thrFil.shape[1] - np.where(np.flip(thrFil) == True)[1][0]
    time_window_signal = {"from": fromIdx, "to": toIdx}
    sig_cut = cutSignal_sample(signal, meta, time_window_signal)
    time_window_signal = {"from": 0, "to": 2000}
    noi_cut = cutSignal_sample(signal, meta, time_window_signal)
    powerSig = getSignalPower_UsingTime_AverageFree(sig_cut[1])
    powerNoi = getSignalPower_UsingTime_AverageFree(noi_cut[1])
    snrFac = (powerSig - powerNoi) / (powerNoi)
    snrDB = 10 * np.log(snrFac)
    #    print(powerSig, powerNoi, snrFac, snrDB)
    return powerSig, powerNoi, snrFac, snrDB


# Lade Konfiguration
config = load_configs("configEXP.json")[0]
N = 10

distances = [1, 5, 10, 20, 40, 60, 80, 100]
angles = [0, 10, 20, 30, 45, 60, 70, 80, 90]

f = open('out-dist-0,40m_D.txt', 'w')
print(
    "dis;ang;source_pos;TDOA_Fehler1;TDOA_Fehler1_std;TDOA_Fehler2;TDOA_Fehler2_std;DistanceErrorLIN;DistanceErrorLIN_std;DistanceErrorNOL;DistanceErrorNOL_std;AngleErrorLIN;AngleErrorLIN_std;AngleErrorNOL;AngleErrorNOL_std;"
)
print(
    "dis;ang;source_pos;TDOA_Fehler1;TDOA_Fehler1_std;TDOA_Fehler2;TDOA_Fehler2_std;DistanceErrorLIN;DistanceErrorLIN_std;DistanceErrorNOL;DistanceErrorNOL_std;AngleErrorLIN;AngleErrorLIN_std;AngleErrorNOL;AngleErrorNOL_std;",
    file=f)

mic_dist = 0.4
    for p in solutions:
        if(p[1]>0):
            result.append(p)
    if(np.linalg.norm(result[0])>np.linalg.norm(result[1])):
        return result[0]
    else:
        return result[1]

def plausibleFilter_AMP(solutions):
    if(solutions[0][1]<0):
        return solutions[1]
    else:
        return solutions[0]
    
# Lade Konfiguration
config = load_configs("configAMP.json")[0]


config["source_position"] = [10, 20]

# Starte Simulation
loaded = simulate(config, config["source_position"], signal_function)
signals = loaded.get_measurements()
meta    = loaded.get_meta_data()
micA_pos = convertPoint(config["microphone_positions"][0])
micB_pos = convertPoint(config["microphone_positions"][1])
micC_pos = convertPoint(config["microphone_positions"][2])
micD_pos = convertPoint(config["microphone_positions"][3])
source_pos = convertPoint(config["source_position"])

# Source Signal