在日常生活中,我们的耳朵会听到各种声音并进行识别定位,即所谓的“听声辨位”。有人发出声响后,人耳可以很快分辨出声音所在的方位;人耳也可轻易判断出从身边驶过的汽车的来车方向,甚至能大致知道汽车有多远;经过专业训练,人耳还可以挑战一些难度比较高的声源定位要求,例如盲人也可以踢足球。

声源定位技术是对语音或其他声音方位和位置的定位。例如,安防机器人、服务机器人、远程会议系统,在工作过程中需要对声音进行响应。安防机器人听到某个方向的声音比较大时,需要将摄像头对准该方向进行录像;服务机器人需要确定说话人的方位,以便面对服务对象进行对话;远程会议系统需要确定参会发言者位置,以便控制摄像头对发言者进行特写,将其近景视频传输至远程端,达到更好的直播效果。

信号处理领域,互相关是两个序列的相似性的度量,作为一个序列相对于另一个序列的位移的函数,这也称为滑动点积或滑动内积。它通常用于在长信号中搜索较短的已知特征,在模式识别、单粒子分析、电子断层扫描、密码分析和神经生理学等领域都有应用。互相关在本质上类似于两个函数的卷积。

一维互相关——信号匹配

——相关性曲线

二维互相关——图像识别

——相关性曲面

声源定位算法主要有以下两大类:

1.声全息法(Holography)
Holography 算法能够重构被测物周围的整个声场,从而可以获得任何面上的声压大小分布。通过假设被测物周围符合一定声场的数学模型,麦克风阵列采集到声场中多点的声压值,从而可以解出数学模型中的未知参数,得到整个声场信息。

2.时差定位法(Time Difference of Arrival,TDOA)
TDOA 算法主要核心是计算声源到达各个麦克风的时间差,以此得到声源、麦克风相对距离用于位置估计。其中时差定位法由互相关或广义互相关算法计算得到。

时差定位法示例

本文以时差定位法为例作为信号处理工具箱的实践应用,下文代码及图片均为 MWORKS.Syslab 编写及生成。

仅考虑二维平面空间,采用基于时延的声源定位算法,布置 N 个传感器进行坐标解算。

未知声源坐标 ,已知传感器……,传感器间时延 、 ……,为实现声源位置解算,需要至少布置三个及以上的传感器,构成有效方程个数大于未知数个数的超定方程组,并采用优化方法得到最优解。针对非线性方程数组求解的优化方法有很多,本文针对仅布置三个麦克风(下文亦称之为“传感器”),基于 NLsolve 算法包(NLsolve 为 Julia 非线性方程求解算法包),通过迭代求解非线性方程数组的数值解。

基于 TDOA 算法的多传感器定位方法

信号检测

信号检测阶段的主要目标是计算不同麦克风对同一声源信号的时延,需要依次完成采样、互相关分析、时延估计操作。

◎ 信号采样

模拟声源在安静室内发出持续时间约 0.2 秒的声波,三组麦克风持续监听,并完成音频信号的采样记录,采样率越高,信号检测算法越精确,本文采用采样频率为常规 44100 Hz。

麦克风采样信号时域分析

◎ 互相关与时延分析

选择传感器 3 作为基准信号,用于计算接收信号的时延,基于相关性理论,采用核心函数 xcorr 对信号序列计算互相关及自相关,得到相关性分布曲线。

相关性分布曲线

搜寻峰值相关点用于时延计算,其中对传感器 3 信号做自相关估计用于计算基准时间,对传感器 1/3、2/3 做互相关估计用于计算相对时延,因而得到传感器 1/3 时延(delay13)约 -3 微秒、传感器 2/3 时延(delay23)约为 16 微秒。

信号时延时域比较

附 Julia 计算代码:

# Julia Code
xCorr33, lags33 = xcorr(ro3)
xCorr13, lags13 = xcorr(ro1, ro3)
xCorr23, lags23 = xcorr(ro2, ro3)
_, I33 = findmax(abs.(xCorr33))
_, I13 = findmax(abs.(xCorr13))
_, I23 = findmax(abs.(xCorr23))
dealy13 = (I33 - I13) / fs
dealy23 = (I33 - I23) / fs
dealy13 = -0.0030385489
dealy23 = 0.018594105f0

声源定位

针对布置有三组麦克风的室内环境,描述声源平面坐标的方程组如下:

其中,声源坐标为,已知传感器坐标、  ,传感器间时延差为、 ,  为传感器  到声源的距离。

考虑麦克风信号采样及互相关算法存在一定误差,需采用优化方法求解方程组,给定声源坐标迭代初值,并寻求非线性方程最优数值解。

这里,选择 为系统状态变量  ,即:

则系统方程为:

推导关于状态变量的雅可比矩阵为:

其中, ,并且根据信号检测得到的时延结果为 =- 0.0030385489、 = 0.018594105,代入上式。

构建 F! 函数用于计算非线性系统残差,附 Julia 计算代码:

# Julia Code
function F!(F, x)F[1] = x[1]^2 + (x[2] - 20)^2 - (x[3] + 0.0030385489 * 340)^2F[2] = x[1]^2 + x[2]^2 - (x[3] - 0.018594105 * 340)^2F[3] = (x[1] - 30)^2 + (x[2] - 10)^2 - x[3]^2
end

构建 J! 计算系统的雅可比矩阵,附 Julia 计算代码:

# Julia Code
function J!(J, x)J[1, 1] = x[1] * 2J[1, 2] = x[2] * 2 - 20 * 2J[1, 3] = -x[3] * 2 - 0.0030385489 * 340 * 2J[2, 1] = x[1] * 2J[2, 2] = x[2] * 2J[2, 3] = -x[3] * 2 + 0.018594105 * 340 * 2J[3, 1] = x[1] * 2 - 30 * 2J[3, 2] = x[2] * 2 - 10 * 2J[3, 3] = -x[3] * 2
end

给定迭代算法初值,调用 NLsolve.nlsolve 函数求解。附 Julia 计算代码:


# Julia Code
result =# Julia Code
function J!(J, x)J[1, 1] = x[1] * 2J[1, 2] = x[2] * 2 - 20 * 2J[1, 3] = -x[3] * 2 - 0.0030385489 * 340 * 2J[2, 1] = x[1] * 2J[2, 2] = x[2] * 2J[2, 3] = -x[3] * 2 + 0.018594105 * 340 * 2J[3, 1] = x[1] * 2 - 30 * 2J[3, 2] = x[2] * 2 - 10 * 2J[3, 3] = -x[3] * 2
end nlsolve(F!, J!, [5.0; 5.0; 10.0])
Results of Nonlinear Solver Algorithm* Algorithm: Trust-region with dogleg and autoscaling* Starting Point: [5.0, 5.0, 10.0]* Zero: [12.002910310528083, 3.9953155842785555, 18.97238709871018]* Inf-norm of residuals: 0.000000* Iterations: 5* Convergence: true* |x - x'| < 0.0e+00: false* |f(x)| < 1.0e-08: true* Function Calls (f): 6* Jacobian Calls (df/dx): 6

最终得到估计声源坐标 [12.002910310528083, 3.9953155842785555],与场景中模拟的真实坐标 [12,4] 偏差为 0.005514857933001404 米。

声源位置估计

考虑到真实环境下噪声不可避免,而环境背景噪声影响互相关定位算法精度,易造成定位精度不佳,可以为此引入信号滤波算法,估计声源信号的频率范围,使用带通滤波器 bandpass 函数过滤非相关频率噪声,可以在一定程度上提高算法鲁棒性,由于篇幅限制,不在本文介绍。

信号处理工具箱(TySignalProcessing)是 MWORKS.Syslab 推出的专业工具箱之一,由同元软控完全自主开发,提供一系列函数用于包括信号分析、预处理与特征提取,滤波器设计和分析、重新采样、平滑处理、去趋势和功率谱估计等场景。

本文以声源定位为例,简要介绍了信号处理工具箱的功能,在具体工程实践中,结合通信、DSP 系统等专业工具箱,可广泛应用在音频、图像、医疗、通信、安防、定位等行业。

MWORKS.Syslab 的基础版供用户免费使用,信号处理工具箱内嵌于软件安装包内,欢迎大家前往同元软控官网自行下载。官网的 MWORKS.Syslab 仅兼容 Win10 及以上系统,若需在 Win7、Linux 或其他系统上运行,请联系同元软控公司技术支持。

MWORKS.Syslab 使用攻略 | 信号处理工具箱实践-基于时差定位法的声源定位相关推荐

  1. 同元Syslab使用攻略 | 数据插值与数据拟合

    数据插值 在图像处理领域,图像的放缩.去畸变.旋转会用到插值:在机器学习.深度学习等领域,面对样本较少的情况时同样会用到插值.当我们进行数据分析时,遇到数据量小.样本点不足的情况,这时就需要利用插值. ...

  2. 阿里云安骑士购买优惠攻略以及使用实践教程

    很多人问我阿里云安骑士值不值得购买?说发现最近阿里的安骑士总是提示有漏洞,因为是基础版的,看不到漏洞详情. 我来说下,觉得还是有必要装的,我自己也有阿里云主机,前一阵子/tmp目录下多了很多的jrli ...

  3. Cursor攻略,吃个螃蟹

    Cursor攻略,吃个螃蟹 1.1 工具下载与安装 1.2 工具的原理 2.Api key生成与配置 2.1 生成Api key 2.2 设置Api key 3.工具插件多元化使用手册 3.1 汉化插 ...

  4. CV之FD之HOG:图像检测之基于HOG算法、简介、代码实现(计算图像相似度)之详细攻略

    CV之FD之HOG:图像检测之基于HOG算法.简介.代码实现(计算图像相似度)之详细攻略 图像检测之基于HOG算法.简介.代码实现(计算图像相似度)之详细攻略 相关文章:CV之FD之HOG:图像检测之 ...

  5. ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻略

    ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树&RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻 ...

  6. # Markdown全攻略

    Markdown 全攻略 我们很多人听过 Markdown 的大名,然而不是很了解具体应该怎么去运用 Markdown 来美化我们的文档排版界面,如果是对于计算机.编程.电子信息等与计算机技术相关的专 ...

  7. Vsftpd完全攻略

    (来自51CTO  运维工程师 "技术在于折腾"的博客 http://viong.blog.51cto.com ) http://viong.blog.51cto.com/8447 ...

  8. 等保三级安全要求简要攻略-安全通信网络和安全区域边界

    之前有两篇文章写了为什么要做等保测评.等保测评的含义以及等保测评这份工作的一些职责和一些常见的FAQ,没有看过的朋友可以先去看下我的另外两篇文章:一起聊聊等保测评 和 一起聊聊等保测评工作内容以及FA ...

  9. 等保三级安全要求简要攻略-安全计算环境

    今天我们来攻略一下等保2.0国家标准中 <信息安全技术网络安全等级保护基本要求> 所对三级系统所提出的要求项以及针对这些要求项如何去应对或者说是如何去做防护.废话不多说直接上正题 在等保三 ...

最新文章

  1. Fisheye camera
  2. 数字图像处理4:图像的像素级运算
  3. Visual Studio 各个版本下载地址
  4. Caffe源码解析5:Conv_Layer
  5. SQL having 子句示例 - 使用Sqlite演示
  6. 牛客题霸 NC7 买卖股票的最好时机
  7. 我是如何用6个月,从0编程经验变成数据科学家的?
  8. 组合数学 —— 康托展开
  9. 一线互联网企业面试题总结(帮你成功拿到offer)
  10. 求0-999之间的水仙花数。
  11. oracle存储过程如何传递一个bean对象_java程序员如何在短期内抓住面试重点,成为大厂offer收割机...
  12. java二维码生成代码_java快速开发平台功能特点之代码生成器
  13. 自定义服务器控件的元数据属性(MSDN)
  14. 纯原生js自定义弹窗
  15. 切比雪夫不等式与马尔可夫不等式
  16. zigbee学习之串口通信
  17. word文档页眉清除和页码设置
  18. 为什么很多人吐槽谭浩强的C语言程序设计,端碗吃饭放碗骂娘?
  19. 监控摄像头服务器维护要多久,监控摄像头如何维护 监控摄像头维护方法【详解】...
  20. oracle在表中增加字段

热门文章

  1. 天大博士/硕士学位论文Latex模板2021年
  2. 蔡氏电路matlab,蔡氏电路matlab仿真报告.doc
  3. js禁止鼠标滑轮_JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
  4. 2020Android手机专业摄影,这 7 款手机,就是 2020 上半年的拍照巅峰
  5. 模板编程:模板特例化以及特例化inline的做用
  6. ZOJ 3797 Sister's Noise 组合+DP
  7. 期货、股票行情、交易源码
  8. 使用nssm将STAF安装为windows系统服务
  9. Staf/Stax安装
  10. mongo执行逻辑表达式_Mongo学习记录