查找和统计生态录音中的音频丢失

时间:2014-01-31 18:29:24

标签: r audio signal-processing amplitude acoustics

我正在尝试评估生态音景的给定声音文件中有多少音频丢失。

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

我的项目有一个双元素水听器。元素是不同的品牌/型号,我们正在尝试确定哪个元素在我们的特定实验中更好地预先形成。我们想要进行的一项分析是衡量每个元素丢失或信号丢失的频率。这些丢失与信号幅度无关,换句话说,跌落不是由幅度最大化引起的。元素或相关的电子元件失败了。

我一直试图在R中这样做,因为这是我最熟悉的程序。我对Matlab和正则表达式的经验非常有限,但我很乐意尝试这些程序/语言。我是生物学家,所以请原谅任何无知。

在R中,我一直在玩'seewave'包,虽然我已经能够生成一些非常漂亮的光谱图(公平地说,这是我之前使用过的唯一上下文包) 。我试图在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和阈值的值,但这只是很好的修补。该功能预先形成的是测量给定阈值处的振幅峰值之间的持续时间。我需要做什么a)在没有幅度的信号中找到样本或b)测量没有幅度的区域之间的持续时间。我可以使用其中任何一个输出。基本上我想扭转阈值测量的方向,这有意义吗?因此,任何低于阈值的样本都将触发测量,而不是任何高于阈值的样本。

我还在玩seewave看看如何制作我需要的数据,但我正在寻找一些指导。也许seewave中有一个功能可以完成我想要更有效地做的事情。或者,如果无论如何输出从计时器生成的数值数据,我可以使用'quantmod'包函数'findValleys'来获取所有数据空白的列表。

所以是的,指导就是我要求的,哦数据处理神。

干杯。

2 个答案:

答案 0 :(得分:0)

这个问题听起来让人联想到电气工程中常见的电力传输问题。解决该问题的一种方法是随时间取信号中样本的RMS(平方均值的根),在短持续时间内(可能是几秒甚至更短)取平均值。您看到低RMS的持续时间是辍学的地方。它类似于您有时在音频放大器上看到的VU表 - 它表示从放大器传输到扬声器的功率。

答案 1 :(得分:0)

我只是想总结一下我最终做了什么,以便其他人知道。不幸的是,RMS测量不是我想要的。虽然rms在技术上可以让我了解辍学的基本概念,因为我正在研究生态录音,还有太多其他因素在起作用。

背景:我正在使用的声音来自两个元素的水听器,垂直分开2米,在海平面以下100米处录制。我们发现位于~100米处的元素正在经历大量辍学,而在~102米处的元素大部分都是精细的。我们目前将此归因于一个待识别的电气问题。如果两个元素都准备以完全相同的方式接收自动,则rms在检测到辍学时会起作用,但由于声音是独立接收的,因此rms计算受到其他因素的太大影响。在信号源和信号接收方面,两米可以产生比您想象的更大的差异,这足以让我们根据信号到达之间的延迟来定位发声动物(左/右模糊)。

同样,这就是我所做的:

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

然后我通过一个目录循环这个过程,我在这里详述:for.loop with WAV files

到目前为止,这个问题仍未解决,但感谢您的讨论!

~etg