麦克风阵列声源定位四通道麦克风数据库及TDOA双曲交汇定位算法实验

信号处理之声源定位 由于噪声和混响的存在,导致互相关函数的峰值不明显,导致估计不准,考虑采用广义互相关方法。即先将时域转换为频域,在频域进行归一化操作,达到降噪的效果,再傅里叶逆变换至时域。本文讨论,通过麦克风阵列,判断声音的方位(距离、方位角azimuth和俯仰角elevation)。根据Wiener-Khichine定理,互功率谱(一般用大写字母。互相关函数取最大值时的p值,即对应的时延,此时。信号源s到观察信号y1和y2的时间差为。可以采用如下方法计算时间差。1. 什么是声源定位?附上Matlab代码。 阅读详情
AI摘要

该文介绍了利用四通道麦克风阵列进行声源定位的方法,基于TDOA相关法求解时延,采用双曲交汇定位算法确定声源坐标。实验通过MATLAB代码展示了原始和预处理信号的xcorr及频谱分析,证实了立方预处理能提高定位精度。后续将针对算法进行优化以提升定位准确性。

麦克风阵列声源定位四通道麦克风数据库建立

图一 四通道麦克风数据库建立物理模型
四通道麦克风数据库建立物理模型的建立,来源于文献:SLoClas: A DATABASE FOR JOINT SOUND LOCALIZATION AND CLASSIFICATION图二 参考文献1
根据图一,声源处于红色圆形上,且声源距离麦克风阵列中心O点的距离为1.5m,其中
mic1(0,-d)、mic2(d,0)、mic3(0,d)、mic4(-d,0) d为0.03m
声源会沿着红色圆圈按照θ角度旋转,麦克风阵列会依次按照一定的采样率每θ角度采集相同数据长度的声源数据,不同麦克风会因为距离角度而导致采集到的信号的幅度和相位不同。实验数据是按照θ=5°采集完成的,实验部分数据集如下图:
图三 不同角度下的麦克风阵列定位数据集
图四 麦克风阵列定位数据集下的声音文件
图五 麦克风阵列定位数据集下采集的四通道声音时域波形图

TDOA相关法时延求解

TDOA相关法时延求解原理与算法

双曲交汇定位算法

参考文献:运 用 双 曲 线 知 识 测 定 声 源
———研究性学习课题成果

图六 参考文献二双曲交汇算法
结合图一,以mic2、mic4为焦点构建双曲线方程1:
图七 双曲线方程1
以mic1、mic3为焦点构建双曲线方程2:
图七 双曲线方程2
现在定义,T42为声源到mic4的时间与声源到mic2的时间的差,T13为声源到mic1的时间与声源到mic3的时间的差c为声音传播的速度,在这里c=340m/s。
根据双曲线的特性,其中,
图八 双曲线方程1的参数
图九 双曲线方程2的参数
两个双曲线方程联立求解,双曲线的交点就是声源的坐标。根据作者何晓东 郑东风 指导教师 支 静的文献,联立两个双曲线方程组求解得:
图十 声源位置
我们只需要根据T42和T13和0的关系来判定声源的具体位置即可,如下图所示:
图十一 T42和T13和0的关系与声源的具体位置判定

声源位置、角度求解与算法代码验证

matlab的算法代码如下:

clc;
clear;
close all
m=100;
filedir=('E:\***\SoClas_database\Segmented_Sound\class06\class06_360\*.wav');%%
infiledir=('E:\***\SoClas_database\Segmented_Sound\class06\class06_360\');
files = dir(filedir);
for num = 1:m
    infile = [infiledir,files(num).name];
    [y0,Fs]= audioread(infile);
    for j = 1:3
        [c,lags] = xcorr(y0(:,j+1),y0(:,1));
        [Am,Lm] =  max(c);
        d = Lm - (length(c)+1)/2;
        Delay(num,j)=d/Fs;
    end
    for k = 1:2
        [c1,lags1] = xcorr(y0(:,k+2),y0(:,2));
        [Am1,Lm1] =  max(c1);
        d1 = Lm1 - (length(c1)+1)/2;
        Delay(num,k+3)=d1/Fs;   
    end
    [c2,lags2] = xcorr(y0(:,3),y0(:,4));
    [Am2,Lm2] =  max(c2);
    d2 = Lm2 - (length(c2)+1)/2;
    Delay(num,6)=d2/Fs;   
end

Length = length(y0);
T = 1 / Fs;
t = (1 : Length) * T;
t = t';
figure;
 subplot(411);
plot(t,y0(:,1));
title('mic1');
xlabel('(秒)')
ylabel('幅度(V)')
subplot(412);
plot(t,y0(:,2));
title('mic2');
xlabel('(秒)')
ylabel('幅度(V)')
subplot(413);
plot(t,y0(:,3));
title('mic3');
xlabel('(秒)')
ylabel('幅度(V)')
subplot(414);
plot(t,y0(:,4));
title('mic4');
xlabel('(秒)')
ylabel('幅度(V)')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
c = 340;
ddd = 0.03;
a1 = c*Delay(1,5);
b1 = sqrt(ddd*ddd - a1 * a1);
a2 = c*Delay(1,2);
b2 = sqrt(ddd*ddd - a2 * a2);
kk = b1*b1*b2*b2 - a1*a1*a2*a2;
mm1 = a1*a1*b2*b2;
mm2 = a2*a2*b1*b1;
nn1 = a2*a2+b1*b1;
nn2 = a1*a1+b2*b2;
ppp = sqrt(mm1*nn1/kk);
qqq = sqrt(mm2*nn2/kk);
if a2 > 0
    yyy = -qqq;
else
    yyy = qqq;
end 
if a1 > 0
    xxx = ppp;
else
    xxx = -ppp;
end
angle = atan(xxx / yyy)*180/pi
% if angle <= 0
%     theta = -angle + 180
% else
%     theta = angle
% end



上述代码可以通过c语言移植到具备算力的开发板中,根据数据集中的按照不同θ角度的麦克风阵列数据,分别进行角度验证,锁定声源的坐标,根据求得的角度在代入R即可求出声源的实际距离。测试结果如下:
360度声源的测试结果
45度声源的测试结果
90度声源的测试结果
120度声源的测试结果
135度声源的测试结果
180度声源的测试结果
225度声源的测试结果
270度声源的测试结果
315度声源的测试结果
可以看出,双曲交汇定位算法是有一定效果的。良好的定位效果和声源距离麦克风阵列的距离、声源所发声信号的类型频率、背景噪声等有关,下一步将继续优化定位算法,使定位结果更加精准。

上述结构四通道麦克风定位数据集下载

链接:https://pan.baidu.com/s/1t63N73ZDFx9Ih6aeBISrRA
提取码:esnp

定位精度时延改进——时域预处理

为了提高数据精度,需要对时域信号进行预处理——立方处理。就是对时域信号的每个点做三次幂处理。

未预处理实验

close all;
clear;
clc;
[time_txt,Fs] = audioread('E:\***\SoClas_database\Segmented_Sound\class06\class06_270\class06_270_001.wav');
LEN = 7361;
x1 = time_txt(:,1);
x2 = time_txt(:,2);
% xxx1 = x1.*x1.*x1;
% xxx2 = x2.*x2.*x2;
xxx1 = x1;
xxx2 = x2;
X1=(fft(xxx1));
X2=(fft(xxx2));
Sxy=X1.*conj(X2);
Bxy=fftshift(abs(ifft(Sxy)));
figure;
subplot(211);
Xxy=xcorr(xxx1,xxx2);
plot(Xxy);
title('DSP hxg')
subplot(212);
plot((Bxy));
title('MATLAB hxg')

在这里插入图片描述

预处理实验

close all;
clear;
clc;
[time_txt,Fs] = audioread('E:\***\SoClas_database\Segmented_Sound\class06\class06_270\class06_270_001.wav');
LEN = 7361;
x1 = time_txt(:,1);
x2 = time_txt(:,2);
xxx1 = x1.*x1.*x1;
xxx2 = x2.*x2.*x2;
X1=(fft(xxx1));
X2=(fft(xxx2));
Sxy=X1.*conj(X2);
Bxy=fftshift(abs(ifft(Sxy)));
figure;
subplot(211);
Xxy=xcorr(xxx1,xxx2);
plot(Xxy);
title('DSP hxg')
subplot(212);
plot((Bxy));
title('MATLAB hxg')

在这里插入图片描述

智能音箱声源定位避坑指南:基于DNN的混响环境优化方案(附开源数据集) 本文针对智能音箱在复杂家庭环境中声源定位不准的痛点,提供了一套基于深度神经网络(DNN)的工程化解决方案。文章深入剖析了混响、噪声等挑战,并详细介绍了从开源数据集应用、轻量化网络设计、针对性训练策略到嵌入式部署落地的全链路实践指南与避坑要点,旨在帮助开发者打造更鲁棒的智能语音交互体验。 阅读详情

相关推荐

用MATLAB复现四通道麦克风阵列TDOA定位:从数据集构建到双曲线交汇算法实战

本文详细介绍了如何使用MATLAB实现四通道麦克风阵列的TDOA(Time Difference of Arrival)声源定位技术。从数据集构建、信号处理到双曲线交汇算法的实战应用,全面解析了麦克风阵列在声源定位中的关键技术和工程实现,帮助开发者快速掌握这一核心技术。

weixin_30627341的博客 371

基于TDOA声源定位算法仿真.rar

代码说明: 基于TDOA声源定位算法仿真,基于TDOA声源定位算法仿真 声源定位算法是利用麦克风阵列进行声音定位,属于宽带信号,传统的MUSIC和DOA算法并不适用该场景,本仿真主要用TDOA算法进行定位。

用MATLAB复现TDOA声源定位:从四通道麦克风数据到双曲线交汇算法的保姆级教程

本文详细介绍了如何使用MATLAB实现基于TDOA(到达时间差)和双曲线交汇算法的声源定位系统。通过四通道麦克风阵列采集数据,结合广义互相关(GCC-PHAT)方法进行时延估计,并利用双曲线交汇算法精确定位声源位置。教程包含完整代码示例、常见问题排查和性能优化技巧,适合信号处理工程师和研究人员参考。

weixin_30607659的博客 331

声学——声源定位阅读笔记

范围特征是基于距离的特征,首先假设只考虑距离引起的相位差,与角度特征提取类似,距离中的每个点表示信号与基于自由空间传播的预期波束形成期响应的相似性;的快速傅里叶变换(STFT)的输出,这里。是针对单个测量情况计算的。(仅考虑频率段的正一半),可得到。个噪声信号,它表示房间的混响。的所有传感器接收的信号的集合。是常规波束形成器的幅度输出,上传统波束形成输出的幅度为。是控制衰减速率的超参数,在。个麦克风接收到的信号(处的常规波束形成输出为。个频段的STFT输出;个独立的测量值,那么。

飞华的博客 1052

用MATLAB复现四麦克风阵列定位:从TDOA算法到双曲线交汇的完整代码解析

本文详细介绍了如何使用MATLAB实现四麦克风阵列的声源定位系统,重点解析TDOA(到达时间差)算法与双曲线交汇定位的核心原理与实现细节。通过代码示例和实战技巧,帮助读者掌握从信号预处理到时延估计,再到双曲线方程求解的完整流程,适用于智能家居、视频会议等场景。

weixin_30681615的博客 464

手把手教你用MATLAB复现四通道麦克风阵列TDOA定位(附完整代码与数据集)

本文详细介绍了如何使用MATLAB实现四通道麦克风阵列的TDOA(Time Difference of Arrival)定位技术,涵盖从信号采集到位置解算的全过程。通过互相关法和双曲交汇定位算法,结合完整代码示例,帮助开发者快速掌握声源定位技术,适用于智能家居、机器人导航等应用场景。

weixin_30940783的博客 348

从数据到定位:四通道麦克风阵列数据库构建与TDOA双曲交汇算法实践

本文详细介绍了四通道麦克风阵列数据库的构建与TDOA双曲交汇算法在声源定位中的实践应用。通过优化数据采集、时延计算和双曲交汇算法,实现了高精度的声源定位,适用于智能家居、安防监控等领域。文章还分享了MATLAB代码实现和性能优化技巧,帮助开发者快速掌握核心技术。

weixin_29047919的博客 223

用MATLAB复现四麦克风阵列定位:从SoClas数据库到TDOA算法验证(附完整代码)

本文详细介绍了如何使用MATLAB实现四麦克风阵列的声源定位系统,从SoClas数据库加载数据到TDOA算法验证。通过广义互相关法和双曲交汇定位算法,实现高精度声源定位,并提供完整代码和性能优化技巧,适用于智能音频处理和工业应用场景。

weixin_30701575的博客 433

智能家居中的声源定位实战:如何用麦克风阵列和TDOA算法让设备“听懂”你在哪

本文详细介绍了智能家居中声源定位技术的实战应用,重点解析了如何利用麦克风阵列和TDOA算法实现精准定位。通过硬件设计、核心算法优化及环境噪声对抗方案,显著提升语音交互的准确性和实时性,为智能设备赋予更自然的听觉感知能力。

weixin_30920597的博客 496

声音源定位:利用YOLO与麦克风阵列定位声音来源YOLOv5、YOLOv8、YOLOv10

YOLO(You Only Look Once)是一个用于目标检测的深度学习模型。YOLO的最大特点是其通过一次前向传播即可完成多个目标的检测,速度和精度相对其他目标检测算法具有显著优势。YOLO模型的版本不断更新,从YOLOv1到YOLOv10,算法精度和速度都有了显著的提升。声音源定位是利用多个麦克风阵列收集的声音信号,通过算法计算声音源的位置。声音源定位的关键在于准确估计每个麦克风的声音到达时间,从而确定声音源的空间坐标。基于时延估计(TDOA)

YOLO 673

深度学习实现声源定位项目实战

声源定位技术是音频信号处理领域的一个关键分支,其目的在于通过分析音频信号来确定声源在空间中的位置。随着无线技术的发展和智能设备的普及,声源定位技术已成为语音交互、智能监控、安全防护等多个领域的核心技术之一。这一技术不仅涉及到信号处理和模式识别等基础理论,还融入了机器学习、深度学习等先进的算法和模型,为声源定位提供了更加精准和高效的应用解决方案。在本章中,我们将探讨声源定位技术的基本概念、发展历程以及当前在各个行业的应用现状和未来发展趋势。

weixin_42284380的博客 1360

【声源定位】四麦克风阵列TDOA时间差定位Matlab实现

声源定位技术作为非接触式声学感知的核心支撑技术,在智能家居语音交互、工业设备异响故障检测、安防监控入侵预警、无人机声源追踪等场景中得到了越来越广泛的应用。基于到达时间差(Time Difference of Arrival, TDOA)的麦克风阵列声源定位方案,凭借无需发射主动探测信号、硬件实现成本低、定位响应速度快的突出优势,成为工程领域落地应用最广泛的声源定位技术路线。

Matlab_jiqi的博客 175

肯塔基大学分布式音频阵列工具箱matlab源码

肯塔基大学分布式音频阵列工具箱matlab源码 麦克风阵列是空间分布的麦克风系统,其在感兴趣的区域上相干地收集声学数据。主要应用包括: 声源位置 检测并定位声源,例如说话的人,机器嗡嗡声和来自风障的湍流点。 信噪比增强 通过所有通道上的延迟和求和将所有麦克风聚焦在房间中的特定兴趣点上,从而在感兴趣点处产生相长干涉,并在其他空间产生破坏性(或至少很少建设性)的干扰。位置。 在过去的半个世纪中,已经为阵列处理开发了许多有趣的工作和想法。此工具箱(仍在开发中)是Matlab函数的集合,可用于模拟和处理音频阵列系统收集的数据。这些课程是在肯塔基大学的音频系统实验室开发的。工具箱中程序的贡献者包括: Phil Townsend,ArulKumaran Muthukumarasamy,Satoru Tagawa和Jens Hannemann。 在阵列系统中,相对于麦克风和源的空间几何形状处理信号。因此,除了音频源和接收器的典型时间和频率特征之外,还必须知道位置和空间路径并将其合并到处理中。此工具箱中的Matlab函数具有提供位置信息的矢量和矩阵的标准约定。围绕这些约定开发的函数允许有效地重用,兼容和修改工具箱函数。 以下矩阵和向量约定适用于所有适用的工具箱函数: 与阵列相关联的信号的集合(例如,来自麦克风的数据)以列方式存储在矩阵中,并且行索引对应于随时间采集的样本。较大的行索引对应于更近的时间样本(行索引1是记录的第一个和最旧的样本)。 数组元素(麦克风),源和其他元素在空间中的位置用列向量表示或在矩阵中用列表示,其中每列对应于空间中的对象位置,行对应于x,y和z坐标的位置。如果仅给出2个维度(2行),则算法将在平面(2D)中工作。如果给出一个维度,则算法将沿着一条线工作,这可能适用于诸如端射阵列的校准程序或声音测量速度的应用。 视场(FOV)定义分析或成像的空间限制。FOV限于矩形/立方体尺寸,并且是表示相对角点的坐标的2列矩阵。阵列元素和FOV的坐标必须相对于相同的空间参照系。 上述约定简化了工具箱功能的编程和使用,几乎没有限制。请注意,对数组元素的数量或数组元素的几何形状没有限制。

手把手教你用MATLAB复现四麦克风阵列TDOA定位实验(附完整代码与数据集)

本文详细介绍了如何使用MATLAB复现四麦克风阵列TDOA定位实验,涵盖从环境搭建、数据准备到核心算法实现的全过程。通过广义互相关法(GCC-PHAT)和双曲交汇定位算法,实现高精度声源定位,并提供完整代码与数据集,助力开发者快速掌握麦克风阵列技术在智能家居、安防监控等领域的应用。

weixin_30471561的博客 462

新手必看!Stata工具变量分析中的三大陷阱:如何正确解读LM统计量、CDW检验和Hansen J值

本文深度解析Stata工具变量分析中的三大核心检验:不可识别检验、弱IV检验和过度识别检验,帮助新手避开常见陷阱。详细解读LM统计量、CDW检验和Hansen J值的正确使用方法,提供实战案例和Stata操作指南,确保研究结论的可靠性。

weixin_29231027的博客 572

SoapUI 5.0 模拟WebService接口实战:从WSDL文件到Mock服务端完整流程

本文详细介绍了如何使用SoapUI 5.0模拟WebService接口,从解析WSDL文件到搭建完整的Mock服务端流程。通过实战案例和效率技巧,帮助开发者快速掌握接口模拟技术,提升开发与测试效率。

weixin_26833139的博客 406
上一篇: 共享内存分配与ARM+DSP核间通信IPC(MessageQ)
下一篇: Linux C语言磁盘U盘容量读取、目录列表读取、文件夹大小读取
SlaveOpen
博客等级 码龄5年 3607粉丝 5原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值