Пример #1
0
def calculateSNR(arr, sig, dis, angl, time_windowNoise, time_windowSignal):
    # Lade Daten
    data, meta_data = load_measurement(arr, sig, angl, dis)

    pNoise = list()
    pSigna = list()
    snr_FC = list()
    snr_DB = list()

    for channel in [1, 2, 3, 4, 5, 6, 7, 8]:
        # Für jedes Mikrofon die Signalleistungen Bestimmen
        signal = data[channel]

        # Schneide Aufnahmen
        time2, signal2 = cutSignal(signal, meta_data, time_windowNoise)
        time3, signal3 = cutSignal(signal, meta_data, time_windowSignal)

        pNoise.append(getSignalPower_UsingTime_AverageFree(signal2))
        pSigna.append(
            getSignalPower_UsingTime_AverageFree(signal3) -
            getSignalPower_UsingTime_AverageFree(signal2))
        snr_FC.append((getSignalPower_UsingTime_AverageFree(signal3) -
                       getSignalPower_UsingTime_AverageFree(signal2)) /
                      (getSignalPower_UsingTime_AverageFree(signal2)))
        snr_DB.append(10 * np.log(
            (getSignalPower_UsingTime_AverageFree(signal3) -
             getSignalPower_UsingTime_AverageFree(signal2)) /
            (getSignalPower_UsingTime_AverageFree(signal2))))

    return pNoise, pSigna, snr_FC, snr_DB
Пример #2
0
def calculateSNR(data, meta_data, time_windowNoise, time_windowSignal):
    # Lade Daten
    pNoise = list()
    pSigna = list()
    snr_FC = list()
    snr_DB = list()
    K_values = [
        1.0000000, 1.12685472, 1.06518856, 1.47356999, 1.19323192, 1.54429486,
        1.38300818, 1.21535447
    ]

    for channel in [1, 2, 3, 4, 5, 6, 7, 8]:
        # Für jedes Mikrofon die Signalleistungen Bestimmen
        signal = data[channel]
        # Schneide Aufnahmen
        time2, signal2 = cutSignal(signal, meta_data, time_windowNoise)
        time3, signal3 = cutSignal(signal, meta_data, time_windowSignal)
        pNoise.append(K_values[channel - 1] *
                      getSignalPower_UsingTime_AverageFree(signal2))
        pSigna.append(K_values[channel - 1] *
                      getSignalPower_UsingTime_AverageFree(signal3) -
                      getSignalPower_UsingTime_AverageFree(signal2))
        snr_FC.append((getSignalPower_UsingTime_AverageFree(signal3) -
                       getSignalPower_UsingTime_AverageFree(signal2)) /
                      (getSignalPower_UsingTime_AverageFree(signal2)))
        snr_DB.append(10 * np.log(
            (getSignalPower_UsingTime_AverageFree(signal3) -
             getSignalPower_UsingTime_AverageFree(signal2)) /
            (getSignalPower_UsingTime_AverageFree(signal2))))
    return pNoise, pSigna, snr_FC, snr_DB
def getSNR(signal):
    mx = np.max(signal)
    thrFil = np.asarray([signal > mx * 0.9])
    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)
    return powerSig, powerNoi, snrFac, snrDB
micD_pos = convertPoint(config["microphone_positions"][3])
source_pos = convertPoint(config["source_position"])

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

time_window_noise = {"from": 0.01, "to": 0.5}
time_window_signal = {"from": 0.3, "to": 0.4}
signal0 = cutSignal(np.asarray(signals[0]), meta, time_window_signal)
signal1 = cutSignal(np.asarray(signals[1]), meta, time_window_signal)
signal2 = cutSignal(np.asarray(signals[2]), meta, time_window_signal)
signal3 = cutSignal(np.asarray(signals[3]), meta, time_window_signal)

# Do Power Calculations
powerA = getSignalPower_UsingTime_AverageFree(signal0[1])
powerB = getSignalPower_UsingTime_AverageFree(signal1[1])
powerC = getSignalPower_UsingTime_AverageFree(signal2[1])
powerD = getSignalPower_UsingTime_AverageFree(signal3[1])
powerSrc = getSignalPower_UsingTime_AverageFree(source_signal)

print(powerA, "\n", powerB, "\n", powerC, "\n", powerD)

import matplotlib.pyplot as plt
plt.subplot(5, 1, 1)
plt.plot(source_signal)
plt.subplot(5, 1, 2)
plt.plot(signal0[0], signal0[1])
plt.subplot(5, 1, 3)
plt.plot(signal1[0], signal1[1])
plt.subplot(5, 1, 4)
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]))
powerB = getSignalPower_UsingTime_AverageFree(np.asarray(signals[1]))
powerSrc = getSignalPower_UsingTime_AverageFree(source_signal)

# Calculate TDOA
arr = array_parameters.ArrayParameters(config["microphone_positions"])
tdoa = basic_tdoa.BasicTDOA(loaded, 0, 0.0, arr)
delta_n = tdoa.tdoa_gcc_phat(0.0)[1][0][1][0]
delta_t = delta_n*meta["sampling_spacing"]
delta_s = delta_t*343.2

# TDOA LINEAR VERFAHREN
X_NOL_CURVE, Y_NOL_CURVE = KarstenDOA_calculateCurve_nonlinear(micA_pos, micB_pos, delta_s, res=0.01, rang=10)
X_LIN_CURVE, Y_LIN_CURVE = KarstenDOA_calculateCurve_linear(micA_pos, micB_pos, delta_s, res=0.01, rang=10)

# Plot Data
# 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"])
source_signal = getSourceSignal(time)

# Do Power Calculations
powerA = getSignalPower_UsingTime_AverageFree(np.asarray(signals[0]))
powerB = getSignalPower_UsingTime_AverageFree(np.asarray(signals[1]))
powerC = getSignalPower_UsingTime_AverageFree(np.asarray(signals[2]))
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)
TDOA_mat = tdoa.tdoa_gcc_phat(0.0)[1][0]

K_list = list()

for i in range(0,7):
    for j in range(0,7):
        if(i!=j):
Пример #7
0
    # Starte Simulation
    loaded = simulate(config)
    signals = loaded.get_measurements()
    meta = loaded.get_meta_data()

    # Source Signal
    time = generateTime(meta["sampling_rate"], meta["number_samples"])
    source_signal = np.zeros_like(time)
    for t in range(0, time.shape[0]):
        source_signal[t] = signal_function(time[t])

    # Do Power Calculations
    powers = list()
    for s in signals:
        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
# Schneide Zeitfenster auf relevante Bereiche
time_window_noise = {"from": 0.01, "to": 0.05}
time_window_signal = {"from": 0.3, "to": 0.4}
signalsCutNoise = list()
signalsCutSignal = list()
for sig in signals:
    signalsCutNoise.append(cutSignal(np.asarray(sig), meta, time_window_noise))
    signalsCutSignal.append(
        cutSignal(np.asarray(sig), meta, time_window_signal))

# Berechne Signalleistungen
powerNoise = list()
powerSignal = list()
for sig in signalsCutNoise:
    powerNoise.append(getSignalPower_UsingTime_AverageFree(sig[1]))
counter = 0
for sig in signalsCutSignal:
    powerSignal.append(
        getSignalPower_UsingTime_AverageFree(sig[1]) - powerNoise[counter])
    counter += 1

# Plot Data
import matplotlib.pyplot as plt

plt.figure(figsize=(20, 10))

# Zeichne Geometrie
plt.subplot(1, 2, 2)
plt.xlim(-10, 10)
plt.ylim(-1, 19)
# Starte Simulation
loaded = simulate(config)
signals = loaded.get_measurements()
meta = loaded.get_meta_data()

# Source Signal
time = generateTime(meta["sampling_rate"], meta["number_samples"])
source_signal = np.zeros_like(time)
for t in range(0, time.shape[0]):
    source_signal[t] = signal_function(time[t])

# Do Power Calculations
powers = list()
for s in signals:
    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]