用树莓派的线性阵列麦克风估计到达方向
本示例展示了如何使用Simulink®支持包用于树莓派硬件,在线性阵金宝app列中使用多金宝app个麦克风对来估计声源的到达方向(DOA)。利用伺服电机根据估计的DOA指向声源。
先决条件
有关如何使用树莓派硬件的Simulink支持包在树莓派硬件上运行Simulin金宝appk模型的金宝app详细信息,请参见树莓派硬件的Simulink支持包入门金宝app金宝app.
有关如何使用树莓派硬件处理音频信号的更多信息,请完成这些示例。
所需的硬件
树莓派硬件板
移动电话或任何以。wav格式播放音频的音频来源
线性麦克风阵列或四个USB麦克风线性排列在固定位置
以太网电缆
伺服电机
硬件设置
在“硬件设置”对话框中,单击网络设置屏幕上,选择
直接连接到主机
避免任何网络延迟。将伺服电机连接到树莓派硬件板的GPIO引脚18。
配置Simulink金宝app模型和校准参数
本例使用树莓派硬件的Simulink支持包中的预配置Simulink金宝app模型。金宝app
要打开模型,请在MATLAB®命令窗口中运行此命令。
open_system (“raspberrypi_audio_directionOfArrival”)
模拟源
打开声源模拟区域,在MATLAB命令窗口中执行该命令。
open_system ('raspberrypi_audio_directionOfArrival/音频源模拟')
在模拟模式下,您可以使用预先录制的音频样本Kinect_Recorded.wav
使用Microsoft®Kinect™for Windows®录制。这个音频文件包含了用微软Kinect for Windows获取的4个原始音频通道的20秒录音,当时有噪声源在阵列前面移动,大约从-40度移动到+40度,然后又回到初始位置。在主机计算机上播放此音频文件。观察音频信号从左边的耳机传到右边,然后回到它的起始位置。
您可以捕获自己的音频文件,并在音频文件读取块。
的Int16到单个子系统将音频输出转换为单个数据类型。双击Int16到单个子系统打开它。
子系统的输出是控件的输入之一手动开关.
树莓派传感器和输入
你可以使用你自己的麦克风线性阵列,也可以使用四个彼此固定在一定距离的麦克风。本例中的算法独立地使用一对麦克风。然后,它结合各个DOA估计来提供单个实时DOA输出。麦克风间距离越大,DOA估计越敏感。使用原理图笔记在线状阵列中为传声器分段并标记一个参考点。对于微软Kinect,这个参考点是RGB摄像头的相对位置。注意到此参考点的距离,并将其输入麦克风的位置.从参考点开始,在一个方向上输入麦克风的负距离值,在另一个方向上输入正距离值。
打开来自麦克风阵列的音频区域,在MATLAB命令窗口中执行该命令。
open_system ('raspberrypi_audio_directionOfArrival/来自麦克风阵列的音频')
配置Mic1音频捕获块参数对话框。
1.进入设备名称与树莓派硬件接口的USB麦克风。要知道您的设备名称,请在MATLAB命令窗口中执行这些命令。
a.建立与树莓派硬件的连接。
覆盆子“树莓派IP地址”,“用户名”,“密码”);
b.列出树莓派硬件所连接的输入设备。
a = listAudioDevices(r,“捕捉”)
一个=
结构体与字段:名称:“USB-Audio-USBPnPSoundDevice”设备:“1 0”渠道:{' 1 '} BitDepth: {的16位整数} SamplingRate: {“44100”“48000”}
设备ID在设备函数的属性。
使用此格式输入设备名称.
“plughw:设备ID > <”
例如,对于设备属性1,0,输入'plughw:1,0'。
的插头插件自动转换ALSA音频捕获块块参数对话框中指定的速率、格式和通道,并使它们与音频设备的输出兼容。
2.选择设备位深指向音频设备读取或发送数据的数据类型的音频数据的。
3.进入通道数(C)金宝app音频设备支持。
4.集音频采样频率来fs
.
5.集每帧样本来audioFrameLength
.
类似地,配置的参数Mic2,Mic3,Mic4在ALSA音频捕获块中。
注意:若要使用Microsoft Kinect捕捉声源,请配置来自麦克风阵列的音频子系统。
在这里设计算法
在Array Preprocessor系统对象中,您可以输入麦克风的位置并配置麦克风对。Array Preprocessor系统对象仅针对此示例。
在Array Preprocessor系统对象中配置这些参数。
中输入麦克风间的空间距离麦克风位置作为空间坐标参数。以米为单位输入这些值。
中输入麦克风配对麦克风对参数。例如,值
[1,4;1、3;1,2]
表示第一个麦克风与所有其他麦克风配对,因为麦克风之间的距离最大。集输出缓冲区长度来
64
.集模拟使用来
代码生成
.
将音频信号的重塑帧和麦克风对之间的距离作为输入输入到确定DOA的MATLAB函数块。这个方位是以弧度为单位的。使用弧度/度块将DOA从弧度转换为角度。该值在-90度到+90度之间。在此值上加上+90的偏移量,使该值从0到180度,用于将伺服电机与树莓派硬件连接。
显示和可视化
树莓派执行器和输出
的标准伺服写入块指向声源并确定DOA。该块被配置为默认参数。
运行Si金宝appmulink模型
在设计你的算法区域,位置手动开关属性的输出模拟源区域。
在模拟在Simulink模型金宝app页签中,单击运行.
观察显示块和半量规块以度显示DOA。
部署Simul金宝appink模型
在设计你的算法区域,位置手动开关属性的输出Rapsberry Pi传感器和输入区域。
在硬件选项卡中的Simuli金宝appnk模型模式部分中,选择在船上跑然后点击监视和调优.观察伺服电机指向声源。
其他可以尝试的事情
使用不同的麦克风配对并观察音频源的DOA。