主要内容

使用音频测量创建一个回声计

这个例子展示了如何使用音频数据采集和信号处理来创建回声声纳,它可以通过确定声音脉冲从表面反射的飞行时间来测量距离。

本例采用了音频输出和输入数据时间戳的后同步方法,当输入信号响应输出和/或输出/输入时间相关性相关时,这是应用程序所需要的。示例应用包括声学表征设置或刺激响应实验。使用信号处理工具箱中的相关函数确定和校正相对输出/输入滞后。

需求

  • MATLAB R2020a或更高版本

  • 数据采集工具箱

  • Windows声卡的数据采集工具箱支持包

  • 信号处理工具箱

硬件设置

运行这个例子需要:

  • Focusrite Scarlett 2i2音频接口设备,或具有两个输出和两个输入音频通道的另一个设备/声卡

  • 音频接口设备DirectSound驱动程序由供应商提供,或使用默认的Windows设备驱动程序(如果有的话)

  • 一个电源扬声器和一个与音频接口设备兼容的麦克风

  • 音频补丁电缆和连接器适配器

数据采集工具箱支持的典型DirectSound音频接口设备不支持输出和输入通道之间的硬件同步。音频输入或输出通道对由音频设备同步,但是输出和输入通道可能有一个不可忽略的相对启动延迟。

为了在后处理中同步输出和输入数据时间戳,可以使用以下设置:

  • 将其中一个输出通道(立体声插头的输出1或左通道)连接到其中一个输入通道(输入1或左通道),以在环回配置中生成和获取同步信号。

  • 另一个输出(输出2或右通道)和输入通道(输入2或右通道)用于输出激励/刺激信号,分别获得测量/响应信号。

  • 从两个音频输入通道读取数据,其中一个通道用于读取同步信号,另一个通道用于读取实际响应信号。

  • 通过这种设置,您可以从两个音频输入通道读取数据,并同时向两个音频输出通道写入数据。

听诊器声纳

作为这种方法的演示,您可以使用一个音频设备、一个动力扬声器和一个麦克风来组合一个回声声纳设置。脉冲回波计通过发射短声脉冲测量到物体的距离,测量反射的脉冲回波,并通过将原始输出脉冲信号与测量的输入响应信号进行比较来确定飞行时间。

扬声器和麦克风相邻放置,并朝向声音脉冲反射的墙壁,如下图所示。

setup_diagram.png

合成脉冲信号

通常用于声纳应用的脉冲信号是一种短持续时间的扫频或啁啾。由于平坦啁啾信号的开始和结束处的尖锐振幅边缘会导致测量伪影,脉冲被包络函数衰减/塑造。选项包括汉宁,高斯,凯撒等。频率范围,脉冲宽度或持续时间,脉冲包络/形状取决于预期的应用。在本例中,测量采用3 ms持续时间脉冲,具有1-5 kHz线性频率啁啾和汉宁窗口。合成的信号如下图所示。左边是原始的啁啾信号,右边是形状的脉冲。Hanning窗口显示为虚线。

确保使用的信号频率范围能够被扬声器正确地产生,被麦克风接收,并被音频接口设备采样。用于音频设备测量的采样率为192khz。

脉冲宽度% (s)T = 3 e - 3;采样率(Hz)Fs = 192 e + 3;初始和最终脉冲频率(Hz)f0 = 1 e + 3;f1 = 5 e + 3;%的时间向量t = (0:1 / Fs: t) ';脉冲信号,通过加窗函数衰减的啁啾yc =唧唧声(t, f0, t(结束),f1);w =汉宁(元素个数(t));y = yc。* w;绘制信号图tileplot = tiledlayout(1,2);tileplot。TileSpacing =“紧凑”;tileplot。填充=“紧凑”;yc nexttile情节(t)情节(t w,“——”)包含(“时间(s)”) ylabel (“振幅”)标题(原始啁啾信号和汉宁包络nexttile plot(t,y) xlabel(“时间(s)”)标题(“形脉冲”

数据采集

使用两个独立的DataAcquisition对象,一个用于音频输出通道,一个用于音频输入通道。因为在音频输入和输出通道对之间没有自动同步的可能,即使一个公共DataAcquisition对象用于所有通道,这种方法允许对数据采集操作进行更多的控制。

做=采集(“声音处理软件”);addoutput(做什么,“Audio4”“1”“音频”);addoutput(做什么,“Audio4”“2”“音频”);做的。率= f;di =采集(“声音处理软件”);addinput (di,“Audio1”“1”“音频”);addinput (di,“Audio1”“2”“音频”);di。率= f;

由于脉冲持续时间相对较短,请将脉冲信号的结尾填充为零值(持续时间为200毫秒),以确保脉冲正确生成。

你= [y;0 (Fs * 200 e - 3,1)];

首先启动输入作为连续的背景采集,然后在两个音频输出通道上生成相同的信号。其中一个通道被用作同步信号。

开始(di,“连续”例如:写(做,[youtyout])

将获取的数据读入工作区。默认情况下,函数返回一个时间表

data =阅读(di,“所有”);

绘制获取的数据。Audio1_1和Audio1_2信号分别对应音频输入通道1和2。输入通道1用于记录输出通道1在环回配置中产生的同步信号。输入通道2用于记录麦克风选取的实际响应信号。在响应信号中观察到两个脉冲,其次是其他二次回波,这取决于房间声学。还要注意输入和输出通道之间较大的相对启动延迟时间。

图stackedplot(数据)

同步输出和输入数据时间戳

通过丢弃检测到的同步信号之前的点,找到滞后并对齐输出和输入信号时间戳。

滞后= finddelay(y, data.Audio1_1);t0 =延迟/ Fs
t0 = 0.3058
alignedData =数据(滞后+ 1:最终,);alignedData。时间= alignedData.Time-alignedData.Time (1);figure s = stackedplot(alignedData);xlim(秒(0.025 [0]))s.AxesProperties(1)。YLimits = [-0.55 0.55];

通过将合成脉冲数据与测量的环回信号进行比较,直观地验证时间校准的质量。

图绘制(秒(t), y, alignedData.Time(1:元素个数(t)), alignedData.Audio1_1(1:元素个数(t))) ylabel (“振幅”)包含(“时间(s)”)传说([“脉冲信号输出”“测量回路信号”),“位置”“bestoutside”

确定脉冲传播时间和距离

您可以使用xcorr互相关函数来确定和可视化原始脉冲信号和被测响应信号之间的相似性。

[xCorr,滞后]= xCorr (alignedData.Audio1_2 y);图绘制(滞后/ Fs, xCorr)包含(“滞后(s)”) ylabel (互相关的)轴

交叉相关图显示了一些相似之处,两个较大的峰值和其他来自回响的较小峰值。

找出测量信号中对应于前两个观察到的相关脉冲的时间戳和总传播距离。第一个观察到的脉冲对应于从扬声器到麦克风的直接传播路径。第二个观测到的脉冲是墙壁反射的回波脉冲。这个函数finddelay返回归一化互相关具有最高值的延迟,在这种情况下,它对应于响应信号中的第一个脉冲。

t1 = finddelay (y, alignedData.Audio1_2) / Fs
t1 = 0.0011

您可以计算回波脉冲的传播时间作为响应信号中第二个脉冲的起始时间戳finddelay在第一个脉冲后的信号区。

t2 = t1+T + finddelay(y,alignedData(timerange(seconds(t1+T)),“正”): .Audio1_2) / Fs
t2 = 0.0122
绘制响应信号并突出显示前两个检测到的脉冲。图图(alignedData.Time,alignedData.Audio1_2) xlim(seconds([0 t2+2*T]))保持firstPulse = alignedData (timerange(秒(t1),秒(t1 + T)),:);plot(firstPulse.Time,firstPulse.Audio1_2) echoPulse = alignedData(timerange(seconds(t2),seconds(t2+T)),:);情节(echoPulse.Time echoPulse.Audio1_2) ylabel (“振幅”)包含(“时间(s)”

计算回波脉冲对应的距离(m)20℃时空气中声速%(米/秒)v = 343.1;d2 = t2 * v / 2
d2 = 2.1006

回声声纳设置测量的距离(2.10米)(总路径的一半)非常接近扬声器/麦克风设置和反射回声脉冲的墙壁之间的实际距离(2.06米)。

Baidu
map