基于matlab使用麦克风阵列进行声波束成形

news2024/11/26 7:36:26

一、前言

此示例说明了麦克风阵列波束成形,以便在干扰为主的嘈杂环境中提取所需的语音信号。此类操作可用于增强语音信号质量以进行感知或进一步处理。例如,嘈杂的环境可以是交易室,麦克风阵列可以安装在交易计算机的显示器上。如果交易计算机必须接受交易者的语音命令,波束成形器操作对于提高接收的语音质量和实现设计的语音识别精度至关重要。

本示例显示了两种类型的时域波束成形器:时间延迟波束成形器和弗罗斯特波束成形器。它说明了如何使用对角线载荷来提高弗罗斯特波束成形器的鲁棒性。如果您的系统有声音支持,您可以在每个处理步骤中收听语音信号。

二、定义均匀线性数组

首先,我们定义一个均匀线性阵列(ULA)来接收信号。该阵列包含 10 个全向麦克风,元件间距为 5 厘米。

三、模拟接收到的信号

接下来,我们模拟麦克风阵列接收到的多通道信号。我们首先加载两个录制的演讲和一个笑声记录。我们还加载笑声音频片段作为干扰。音频信号的采样频率为 8 kHz。

由于音频信号通常很大,因此将整个信号读入存储器通常不切实际。因此,在这个例子中,我们将以流的方式模拟和处理信号,即在输入端将信号分解成小块,处理每个块,然后在输出端组装它们。

第一个语音信号的入射方向方位角为 -30 度,仰角为 0 度。第二个语音信号的方向在方位角为 -10 度,在仰角为 10 度。干扰来自方位角 20 度和仰角 0 度。

现在我们可以使用宽带集电极来模拟阵列接收的 3 秒多通道信号。请注意,此方法假定每个输入单通道信号在阵列原点由单个麦克风接收。

我们生成一个功率为1e-4瓦的白噪声信号,以表示每个传感器的热噪声。本地随机数流可确保结果可重复。

我们现在开始模拟。在输出端,接收到的信号存储在 10 列矩阵中。矩阵的每一列代表一个麦克风收集的信号。请注意,我们还在模拟期间使用流方法播放音频。

请注意,笑声掩盖了语音信号,使它们无法理解。我们可以在通道 3 中绘制信号,如下所示:

四、使用延时波束成形器的工艺

时间延迟波束成形器补偿来自特定方向的信号在整个阵列中的到达时间差。对时间对齐的多通道信号进行相干平均,以提高信噪比(SNR)。现在,定义一个对应于第一个语音信号的入射方向的转向角,并构建一个时间延迟波束成形器。

接下来,我们处理合成的信号,绘制并收听传统波束成型器的输出。同样,我们在处理过程中回放波束成形的音频信号。

可以通过阵列增益来测量语音增强,阵列增益是输出信干加噪声比(SINR)与输入SINR的比值。

第一个语音信号开始出现在时间延迟波束成形器输出中。我们获得了 9.4 dB 的 SINR 改进。不过,背景笑声还是可以和演讲相媲美的。要获得更好的波束成形器性能,请使用霜波束成形器。

五、使用霜梁成型器进行加工

通过将FIR滤波器连接到每个传感器,Frost波束形成器具有更多的波束成形权重来抑制干扰。它是一种自适应算法,可将零点放置在学习的干扰方向上,以更好地抑制干扰。在转向方向上,Frost波束形成器使用无失真约束来确保所需信号不被抑制。让我们创建一个 Frost 波束成形器,每个传感器后都有一个 20 抽头 FIR。接下来,使用弗罗斯特波束成形器处理合成信号。

处理完整个音频信号后,我们可以播放和绘制整个音频信号。

请注意,干扰现已取消。弗罗斯特波束成形器的阵列增益为14 dB,比时间延迟波束成形器的阵列增益高4.5 dB。性能改进令人印象深刻,但计算成本很高。在前面的示例中,每个话筒使用顺序为 20 的 FIR 滤波器。对于所有 10 个传感器,需要反转 200 x 200 的矩阵,这在实时处理中可能很昂贵。

六、使用对角线载荷来提高霜质光束成型器的鲁棒性

接下来,我们要将数组引导到第二个语音信号的方向。假设我们不知道第二个语音信号的确切方向,除了粗略估计方位角-5度和仰角5度。

讲话几乎听不见。尽管波束成型器的增益为6.1 dB,但转向方向不准确,性能受到影响。提高弗罗斯特波束成形器鲁棒性的一种方法是使用对角线载荷。此方法向估计协方差矩阵的对角线元素添加少量。这里我们使用对角线值 1e-3。

现在,输出语音信号得到了改善,我们对角线加载技术获得了0.3 dB的增益改进。

七、总结

此示例说明如何使用时域波束成形器从噪声麦克风阵列测量中检索语音信号。该示例还展示了如何模拟麦克风阵列接收的干扰主导信号。该示例同时使用了延时器和弗罗斯特波束成形器,并比较了它们的性能。霜波束形成器具有更好的干扰抑制能力。该示例还说明了如何使用对角线载荷来提高 Frost 波束成型器的鲁棒性。

八、参考文献

[1] O. L. Frost III, An algorithm for linear constrained adaptive array processing, Proceedings of the IEEE, Vol. 60, Number 8, Aug. 1972, pp. 925-935.

九、程序

使用Matlab R2022b版本,点击打开。(版本过低,运行该程序可能会报错)

打开下面的“XXX.mlx”文件,点击运行,就可以看到上述效果。

程序下载:基于matlab使用麦克风阵列进行声波束成形资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/525444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js绘制的红心

看腻歪了粒子特效的红心&#xff0c;今天给各位整个线条的&#xff0c;效果图如下&#xff1a; 表白显圣神器&#xff0c;你值得拥有&#xff0c;代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"…

必定收藏:国内免费可用 ChatGPT 网页版

ChatGPT是一个基于人工智能的聊天机器人&#xff0c;它可以与用户进行自然语言交互。ChatGPT使用了最新的自然语言处理技术&#xff0c;包括深度学习和神经网络&#xff0c;以便更好地理解用户的意图和回答用户的问题。 ChatGPT可以回答各种问题&#xff0c;包括但不限于常见问…

Cesium入门之七:Cesium加载地形数据

Cesium加载地形数据 一、什么是地形数据二、TerrainProvider类常用属性常用方法 三、TerrainProvider子类CesiumTerrainProvider类常用属性常用方法 CustomHeightmapTerrainProvider类ArcGISTiledElevationTerrainProvider类常用属性常用方法 EllipsoidTerrainProvider类常用属…

bash shell脚本常用代码记录

任何编程语言&#xff0c;常用的语法和代码结构其实不多的&#xff0c;如果为了快速的掌握入手一门编程语言&#xff0c;我认为只需要把该语言的常见语法和代码记下来&#xff0c;再结合实际需求去拼接成新的代码。这篇博客主要是记录bash shell的一些用法&#xff0c;便于日后…

机器学习指标: F1分数

动动发财的小手&#xff0c;点个赞吧&#xff01; F1 score 简介 在本文[1]中&#xff0c;您将了解 F1 分数。 F1 分数是一种机器学习指标&#xff0c;可用于分类模型。尽管分类模型存在许多指标&#xff0c;但通过本文&#xff0c;您将了解 F1 分数的计算方式以及何时使用它有…

腾讯云语音合成

用腾讯云 AI 语音合成打造有声书制作工具 代码开发 第一步&#xff1a;电子书文件解析 第二步&#xff1a;有声语音合成 第三步&#xff1a;完成有声书制作脚本 第四步&#xff1a;脚本可视化 产品体验 腾讯云 AI 语音合成服务已经非常成熟&#xff0c;基于开源工具整合 TTS P…

JAVA135-185

JAVA135-185 多线程多线程成员方法线程优先级eg&#xff0c;卖票&#xff08;线程的安全问题&#xff09;需要解决线程同时抢的问题 同步方法LOCK锁等待唤醒机制阻塞队列实现等待唤醒机制多线程的六种状态红包抽奖箱抽奖比较 线程池最大并行数网络编程InetAdress端口号协议练习…

Mutipart

含义&#xff1a; 多部分的、复合 场景&#xff1a; 位置&#xff1a;package org.springframework.boot.autoconfigure.web.servlet; Springboot中autoconfigration包下web包下servlet下DispatcherServletAutoConfiguration中&#xff1a; 有一个默认加载的Bean Bean …

stm32通用外部spi下载算法实现

参考硬汉嵌入式&#xff1a;【实战技能】任何支持SWD接口的单片机都可以方便移植的SPI Flash烧写算法制作_哔哩哔哩_bilibili 该up主提供的stm32H7的模板工程&#xff0c;目前需求是实现基于正点原子探索者stm32f407zet6W25Q128 下载算法实现步骤 使用cubemx建立一个LED工程…

postgresql walsender源码分析

专栏内容&#xff1a;postgresql内核源码分析个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e; 目录 前言 介绍 数据结构 WAL对端的状态 walsender进程 WALsender交互流程 在…

【连续介质力学】张量分量的变换定律

张量分量的变换定律 张量的分量是依赖于坐标系的&#xff0c;所以当坐标系发生旋转&#xff0c;张量分量也会发生改变&#xff0c;张量分量与坐标系通过分量变换规律互相关联起来的。 考虑在正交基 ( e ^ 1 , e ^ 2 , e ^ 3 ) (\hat e_1, \hat e_2, \hat e_3) (e^1​,e^2​,…

【51单片机】串口通信使用串口通信控制LED灯

&#x1f38a;专栏【51单片机】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【51单片机】 &#x1f970;大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 目录 &#x1f354;串口通信 &#x1f60e;代码…

HTTP1.1(四)URI

一 URI的基本格式以及与URL的区别 ① URI直观感受 1&#xff09;URI是HTTP协议的重要组成部分2&#xff09;ABNF如何严格定义URI ② URL、URN、URI ③ URI细讲 ④ URI的组成 ⑤ ABNF关于URI定义 blob:http 地址的原理及生成方法 video 标签 src 带有blob:http data…

NetCore发布到Docker-单机

一.git安装 1.下载 https://github.com/git/git/releases/tag/v2.40.1 2.将本地的安装包上传到 linux 服务器上&#xff0c;我这里放在 /opt/git/ 目录下 3.解压压缩包&#xff0c;得到目录 git-2.40.1&#xff0c;位置在 /opt/git/git-2.40.1 tar -zxvf git-2.40.1.tar.gz 4.…

【刷题之路】LeetCode 225. 用队列实现栈

【刷题之路】LeetCode 225. 用队列实现栈 一、题目描述二、解题1、主要思路解析2、先实现栈3、实现各个接口3.1、初始化接口3.2、push接口3.3、pop接口3.4、myStackTop接口3.5、myStackEmpty接口3.6、myStackFree接口 一、题目描述 原题连接&#xff1a; 225. 用队列实现栈 题…

如何选择合适的自动化测试工具? 我教你

目录 前言 选择最佳自动化测试工具的重要性 自动化测试工具的种类 选择自动化测试工具时要考虑的因素 自动化测试工具的选择标准 前言 自动化测试是高质量软件交付领域中最重要的实践之一。在今天的敏捷开发方法中&#xff0c;几乎任一软件开发过程都需要在开发阶段的某个…

测试工具-JIRA

软件测试工具—JIRA使用 1.创建 项目&#xff1a;一般为业务线名称 问题类型&#xff1a;任务、故事、缺陷等 概要&#xff1a;bug的简要描述&#xff0c;一般写出定位地方和目前现状 Sprint&#xff1a;一般为业务线迭代简称 测试阶段&#xff1a;按照各公司的测试流程对应标…

vlc搭建rtsp直播Demo

文章目录 学习链接本地视频文件作为数据源推流步骤拉流步骤 本地摄像头作为数据源拉流步骤 学习链接 ffmpeg 使用VLC亲手搭建RTSP直播点播 本地视频文件作为数据源 推流步骤 点击媒体->流 点击添加&#xff0c;选择视频文件&#xff0c;后点击串流 点击串流后&#xf…

linux异步通知实验

一、异步通知简介 中断是处理器提供的一种异步机制&#xff0c;配置好中断后就可以让处理器去处理其他的事情&#xff0c;当中断发生以后会执行中断服务函数&#xff0c;在中断服务函数中做具体的处理。 Linux 应用程序可以通过阻塞或者非阻塞两种方式来访问驱动设备&#xff0…

04:mysql--DCL

目录 1:介绍 2:语法 3:DCL的使用 4:权限 1:介绍 DCL英文全称是Data ControlLanguage(数据控制语言)&#xff0c;用来管理数据库 用户、控制数据库的访问 权限。 2:语法 DCL-管理用户 查询用户 use mysql; select * from user; 创建用户 create user "用户名&quo…