In [4]:
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
from pathlib import Path

import irutilities as irutil
In [6]:
# Load IR data
sessionName = "S1-M3969_npy"  # "S32-M441_npy"
sessionPath = Path('.').joinpath(sessionName)
posMic, posSrc, ir = irutil.loadIR(sessionPath)

# Sampling rate
samplerate = 48000

# Select IR data
srcIdx = 0
micIdx = 0
print("Source position (m): ", posSrc[srcIdx, :])
print("Mic position (m): ", posMic[micIdx, :])
Source position (m):  [2.  1.5 0. ]
Mic position (m):  [-0.5 -0.5 -0.2]
In [7]:
# Plot geometry
irutil.drawGeometry(posSrc, posMic)
2021-08-24T00:34:59.493667 image/svg+xml Matplotlib v3.3.3, https://matplotlib.org/
In [8]:
# IR plots
ir_plt = ir[srcIdx, micIdx, :]
irutil.irPlots(ir_plt, samplerate)
RT60 (ms):  387.5
2021-08-24T00:35:02.500307 image/svg+xml Matplotlib v3.3.3, https://matplotlib.org/
In [9]:
# Extract xy-plane at z=0
z = 0.0
posMic_z, ir_z = irutil.extract_plane(posMic, ir, z)
posMicX = np.unique(posMic_z[:, 0].round(4))
posMicY = np.unique(posMic_z[:, 1].round(4))
numXY = (posMicX.shape[0], posMicX.shape[0])
posMicXY, irXY, _ = irutil.sortIR(posMic_z, ir_z, numXY, posMicX, posMicY)
    
# Lowpass filter
maxFreq = 600
h = signal.firwin(numtaps=64, cutoff=maxFreq, fs=samplerate)
irXY_lp= signal.filtfilt(h, 1, irXY[srcIdx,:,:,:], axis=-1)

# Wave image
tIdx, _ = irutil.findPeak(irXY_lp, 0)
irutil.plotWave(posMicX, posMicY, irXY_lp, tIdx)
# irutil.plotWaveFronts(posMicX, irXY_lp, samplerate)
2021-08-24T00:35:05.875044 image/svg+xml Matplotlib v3.3.3, https://matplotlib.org/
In [10]:
# Wave movie
irutil.movWave(sessionPath, posMicX, posMicY, irXY_lp, samplerate)
2021-08-24T00:36:25.610931 image/svg+xml Matplotlib v3.3.3, https://matplotlib.org/
In [ ]: