0

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

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 和 threshold 的值,但这只是修修补补。该函数执行的是测量给定阈值处幅度峰值之间的持续时间。我需要它做什么a)在没有幅度的信号中找到样本或b)测量没有幅度的区域之间的持续时间。我可以使用这些输出中的任何一个。基本上我想反转阈值测量的方向,这有意义吗?因此,任何低于阈值的样本都会触发测量,而不是高于阈值的任何样本。

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

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

干杯。

4

2 回答 2

0

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

于 2014-01-31T18:39:56.537 回答
0

我只是想总结一下我最终做了什么,以便其他人知道。不幸的是,RMS 测量值不是我想要的。虽然 rms 在技术上可以给我一个基本的想法,即可能发生辍学,因为我正在处理生态记录,但还有太多其他因素在起作用。

背景:我正在使用的声音流来自一个双元素水听器,垂直间隔 2 米,并在海平面以下 100 m 处录制。我们发现约 100 米处的元素正在经历严重的辍学,而约 102 米处的元素大部分都很好。我们目前将此归因于一个待确定的电气问题。如果两个元素都准备好以完全相同的方式接收 auto,则 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

到目前为止,这个问题还没有解决,但感谢大家的讨论!

〜等

于 2014-02-13T22:05:03.877 回答