Нахождение и подсчет отсева аудио в экологической записи

Я пытаюсь оценить, сколько звуковых выпадений содержится в данном звуковом файле экологического звукового ландшафта.

Format: Wave
Samplingrate (Hertz):   192000
Channels (Mono/Stereo): Stereo
PCM (integer format):   TRUE
Bit (8/16/24/32/64):    16 

В моем проекте был двухэлементный гидрофон. Элементами были разные бренды / модели, и мы пытаемся определить, какой элемент лучше сформировался в нашем конкретном эксперименте. Один анализ, который мы хотели бы провести, - это измерение частоты выпадения или потери сигнала каждого элемента. Эти пропуски не связаны с амплитудой сигнала, другими словами, пропадания не вызваны максимизацией амплитуды. Элемент или связанная электроника просто вышли из строя.

Я пытался сделать это в R, так как эта программа мне наиболее знакома. У меня очень ограниченный опыт работы с Matlab и regex, но я открываюсь для того, чтобы попробовать эти программы / языки. Я биолог, поэтому прошу прощения за любое невежество.

В R я поиграл с пакетом 'seewave', и хотя смог создать несколько очень симпатичных спектрограмм (честно говоря, это единственный контекст, в котором я ранее использовал этот пакет). Я попытался использовать функцию огибающей и автоматических временных измерений в пределах морской волны (таймер). Я получил некоторые интересные, но противоположные результаты.

    foo=readWave("Documents/DASBR/DASBR2_20131119$032011.wav", from=53, to=60, units="seconds")
    timer(foo, f=96000, threshold=6.5, msmooth=c(30,5), colval="blue")

Я изменял значения msmooth и threshold бесчисленное количество раз, но это просто замечательно. Эта функция преформ измеряет длительность между пиками амплитуды при заданном пороговом значении. Что мне нужно сделать: а) найти выборки в сигнале без амплитуды или б) измерить длительность между областями без амплитуды. Я могу работать с любым из этих выходов. По сути, я хочу изменить направление измерения порога, имеет ли это смысл? Поэтому любая выборка, которая находится ниже порогового значения, будет инициировать измерение, а не любая выборка, которая находится выше порогового значения.

Я все еще играю с seewave, чтобы посмотреть, как получить нужные мне данные, но мне нужно немного руководства. Возможно, есть функция в seewave, которая выполнит то, что я пытаюсь сделать более эффективно. Или, если есть какой-либо способ вывести числовые данные, сгенерированные из таймера, я мог бы использовать пакетную функцию 'quantmod' findValleys', чтобы получить список всех пробелов в данных.

Так что да, руководство - это то, что я запрашиваю, о боги хруста данных.

Приветствия.

2 ответа

Решение

Я просто хотел подвести итог тому, что я в итоге сделал, чтобы другие люди знали. К сожалению, среднеквадратичное измерение не то, что я искал. Хотя rms технически может дать мне базовую идею о том, что могут возникнуть отсева, потому что я работаю с экологическими записями, но в игре слишком много других факторов.

Справочная информация: звуковые потоки, с которыми я работаю, исходят из двухэлементного гидрофона, разделенного вертикально на 2 метра и записывающего на высоте 100 м ниже уровня моря. Мы обнаруживаем, что элемент, находящийся на расстоянии ~100 метров, испытывает сильные выпадения, тогда как элемент на расстоянии ~102 метра в основном в порядке. В настоящее время мы связываем это с выявленной электрической проблемой. Если бы оба элемента были готовы к автоматическому приему точно так же, среднеквадратичное значение сработало бы при обнаружении пропаданий, но поскольку звук принимается независимо, на среднеквадратичное значение слишком сильно влияют другие факторы. Два метра могут иметь большую разницу, чем вы думаете, когда речь идет об уровнях источника и приеме сигнала, нам достаточно локализовать вокализующихся животных (с левой / правой неоднозначностью) на основе задержки между прибытием сигнала.

Все таки вот что я сделал:

library(seewave)
library(tuneR)
foo=readWave("Sound_file_Path")
L=foo@left
R=foo@right
rms(L)
rms(R)

Затем я зациклил этот процесс в каталоге, который подробно описан здесь: for.loop с файлами WAV

Пока что этот вопрос до сих пор не решен, но спасибо за обсуждение!

~ ETG

Эта проблема напоминает проблемы передачи энергии, часто встречающиеся в электротехнике. Один из способов решения этой проблемы - взять среднеквадратичное значение (корень среднего квадрата) отсчетов в сигнале по времени, усредненное за короткие промежутки времени (возможно, несколько секунд или даже меньше). Длительности, когда вы видите низкую среднеквадратичную величину, это то, где выпадают Он аналогичен измерителям уровня громкости, которые вы иногда видите на аудиоусилителях - которые указывают мощность, передаваемую на динамики от усилителя.

Другие вопросы по тегам