This commit is contained in:
CroneKorkN 2025-06-01 13:19:38 +02:00
parent a363d12c61
commit fc28354db8
Signed by: cronekorkn
SSH key fingerprint: SHA256:v0410ZKfuO1QHdgKBsdQNF64xmTxOF8osF1LIqwTcVw

27
process
View file

@ -13,17 +13,12 @@ RECORDINGS_DIR = "recordings"
PROCESSED_RECORDINGS_DIR = "recordings/processed" PROCESSED_RECORDINGS_DIR = "recordings/processed"
DETECTIONS_DIR = "events" DETECTIONS_DIR = "events"
DETECT_FREQUENCY = 211 DETECT_FREQUENCY = 211 # Hz
DETECT_FREQUENCY_TOLERANCE = 2 DETECT_FREQUENCY_TOLERANCE = 2 # Hz
DETECT_FREQUENCY_FROM = DETECT_FREQUENCY - DETECT_FREQUENCY_TOLERANCE DETECT_FREQUENCY_FROM = DETECT_FREQUENCY - DETECT_FREQUENCY_TOLERANCE # Hz
DETECT_FREQUENCY_TO = DETECT_FREQUENCY + DETECT_FREQUENCY_TOLERANCE DETECT_FREQUENCY_TO = DETECT_FREQUENCY + DETECT_FREQUENCY_TOLERANCE # Hz
ADJACENCY_FACTOR = 2 ADJACENCY_FACTOR = 2 # area to look for noise around the target frequency
AMPLITUDE_THRESHOLD = 200 # rDB
CLIP_SECONDS = 3
THRESHOLD_BASE = 0.1
OCTAVE_FACTOR = 0.1
CLIP_PADDING_BEFORE = 1
CLIP_PADDING_AFTER = 6
def process_recording(filename): def process_recording(filename):
@ -41,6 +36,7 @@ def process_recording(filename):
# iterate blocks # iterate blocks
for num, block in enumerate(soundfile.blocks(path, blocksize=blocksize, overlap=int(blocksize*0.8))): for num, block in enumerate(soundfile.blocks(path, blocksize=blocksize, overlap=int(blocksize*0.8))):
block_date = recording_date + datetime.timedelta(seconds=num * CLIP_SECONDS)
complex_amplitudes = rfft(block) complex_amplitudes = rfft(block)
amplitudes = np.abs(complex_amplitudes) amplitudes = np.abs(complex_amplitudes)
labels = rfftfreq(len(block), d=1/samplerate) labels = rfftfreq(len(block), d=1/samplerate)
@ -54,10 +50,13 @@ def process_recording(filename):
max_amplitude_index = np.argmax(adjacent_amplitudes) max_amplitude_index = np.argmax(adjacent_amplitudes)
max_freq = adjacent_labels[max_amplitude_index] max_freq = adjacent_labels[max_amplitude_index]
if DETECT_FREQUENCY_FROM <= max_freq <= DETECT_FREQUENCY_TO: # check for detection criteria
print(f'{recording_date + datetime.timedelta(seconds=num * CLIP_SECONDS)}: {max_amplitude:.2f}rDB @ {max_freq:.2f}Hz') max_freq_detected = DETECT_FREQUENCY_FROM <= max_freq <= DETECT_FREQUENCY_TO
breakpoint() amplitude_detected = max_amplitude > AMPLITUDE_THRESHOLD
# conclude detection
if max_freq_detected and amplitude_detected:
print(f'{block_date}: {max_amplitude:.2f}rDB @ {max_freq:.2f}Hz')