如何自动对不同位置测量的信号峰值进行分类?

信息处理 matlab 离散信号 插值 分类
2021-12-22 10:51:06

我有麦克风在空间的许多不同位置随时间测量声音。被记录的声音都来自空间中的同一位置,但由于从源点到每个麦克风的路径不同;信号将(时间)偏移和失真。先验知识已用于尽可能好地补偿时间偏移,但数据中仍然存在一些时间偏移。测量位置越接近,信号就越相似。

我对自动对峰值进行分类很感兴趣。我的意思是我正在寻找一种算法,它可以“查看”下图中的两个麦克风信号,并从位置和波形“识别”两个主要声音并报告它们的时间位置:

sound 1: sample 17 upper plot, sample 19 lower plot,
sound 2: sample 40 upper plot, sample 38 lower plot

为了做到这一点,我计划在每个峰值周围进行 Chebyshev 展开,并使用 Chebyshev 系数的向量作为聚类算法的输入(k-means?)。

作为一个例子,这里是在两个附近位置(蓝色)测量的时间信号的一部分,近似于两个峰值(蓝色圆圈)周围的 9 个样本(红色)的 5 项切比雪夫级数: 在此处输入图像描述

近似值非常好:-)。

然而; 上图的切比雪夫系数为:

Clu = -1.1834   85.4318  -39.1155  -33.6420   31.0028
Cru =-43.0547  -22.7024 -143.3113   11.1709    0.5416

下图的切比雪夫系数为:

Cll = 13.0926   16.6208  -75.6980  -28.9003    0.0337
Crl =-12.7664   59.0644  -73.2201  -50.2910   11.6775

我希望看到 Clu ~= Cll 和 Cru ~= Crl,但情况似乎并非如此 :-(。

也许还有另一个更适合这种情况的正交基?

关于如何进行的任何建议(我正在使用 Matlab)?

提前感谢您的任何答案!

1个回答

看起来您有一个源 x[n] 和多个麦克风信号yi[n]. 假设您从源到麦克风的传播路径是合理的线性且时间不变的,您只需将路径建模为传递函数。所以基本上你有

yi[n]=hi[n]x[n]
在哪里hi[n]是从源到麦克风“i”的传递函数的脉冲响应。这些传递函数具有不同的幅度和相位响应。如果它们足够不同,则各个麦克风信号也会有很大不同,因此没有理由相信峰值实际上会出现在同一位置。在大多数声学环境中,如果麦克风对于感兴趣的频率(或在频谱中存在重要能量)的距离超过四分之一波长,它们将是“不同的”。

如果您可以测量传递函数,则可以使用传递函数的倒数过滤每个麦克风信号。这应该使麦克风信号更加相似并减少过滤的影响。

另一种方法是将所有麦克风信号组合到一个波束形成器中,该波束形成器可以优化来自源的拾音器,但拒绝其他所有信号。这也应该提供一个相当“干净”的源信号版本。