当前位置: 首页 > article >正文

基于simulink进行音频波束成形系统的多核仿真

一、前言

此示例展示了 Simulink中的音频波束成形系统仿真模型如何使用数据流域提高性能。它使用 Simulink 中的数据流域自动将通信系统的数据驱动部分划分为多个线程,从而通过在桌面的多个内核上执行模拟来提高仿真的性能。

二、介绍

数据流执行域允许您在计算密集型系统的模拟中使用多个内核。此示例演示数据流作为子系统的执行域如何提高模型的模拟性能。

三、声波束成形

此示例显示了使用麦克风均匀线性阵列 (ULA) 的声波束成形。该模型模拟在 10 个元素均匀间隔的线性麦克风阵列上接收来自不同方向的三个音频信号。在接收器处添加热噪声后,将波束成形应用于不同的源角度,并在声音设备上播放结果。可以使用“选择源”块中的对话框选择需要在音频播放器中播放的音频源。

四、设置数据流子系统

此示例使用 Simulink 中的数据流域来利用桌面上的多个内核来提高仿真性能。此模型中数据流子系统的 Domain 参数设置为 。可以通过选择子系统,然后访问属性检查器来查看此内容。若要访问属性检查器,请在 Simulink Toolstrip 的“建模”选项卡上,在“设计”库中选择“属性检查器”,或在“模拟”选项卡的“准备库”中选择“属性检查器”。Dataflow

数据流域会自动将模型分区为多个线程,以提高性能。将 Domain 参数设置为 后,可以使用多核选项卡分析来分析模型以获得更好的性能。当模型中存在数据流域时,“多核”选项卡在工具行程中可用。

六、分析数据流子系统中的并发性

对于此示例,多核选项卡模式设置为用于仿真性能分析。Simulation Profiling

建议优化模型设置以获得最佳仿真性能。若要接受建议的模型设置,请在“多核”选项卡上,单击“优化”。或者,您可以使用“优化”按钮下方的下拉菜单单独更改设置。在此示例中,模型设置已是最佳的。

在“多核”选项卡上,单击“运行分析”按钮以开始分析数据流域的模拟性能。分析完成后,“分析报告和建议”窗口将显示数据流子系统在模拟期间使用的线程数。

分析模型后,“分析报告和建议”窗口将显示 3 个线程。这是因为三个波束形成器块是计算密集型的,可以并行运行。然而,三个波束形成器模块取决于麦克风阵列和接收器模块。管道延迟可用于打破此依赖项并提高并发性。“分析报告和建议”窗口显示建议的管道延迟数,如“建议”,以增加并发性。计算建议的延迟值以提供最佳性能。

下图显示了“分析报告和建议”窗口,其中数据流子系统的建议延迟为 1。

单击“接受”按钮以使用数据流子系统的建议延迟。也可以直接在“延迟属性检查器”参数中输入此值。Simulink 使用

标记,标记。

“分析报告和建议”窗口现在将线程数显示为 4,这意味着数据流子系统内的块使用 4 个线程并行模拟。突出显示线程 根据其线程分配使用颜色突出显示块,如线程突出显示图例所示。显示管道延迟 显示数据流子系统中插入流水线延迟的位置

标签。

七、多核仿真性能

我们通过比较使用和不使用数据流运行模型所花费的执行时间来衡量使用数据流域的性能改进。执行时间是使用 sim 命令测量的,该命令返回模型的模拟执行时间。这些数字和分析发布在配备英特尔®至强® CPU W-2133 @ 3.6 GHz 6 核 12 线程处理器的 Windows® 台式计算机上。

Simulation execution time for multithreaded model = 4.03s

Simulation execution time for single-threaded model = 6.26s

Actual speedup with dataflow: 1.6x

八、总结

此示例展示了使用数据流域的多线程处理如何提高使用桌面上多个内核的音频波束成形模拟模型中的性能。

九、程序

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

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

程序下载:https://download.csdn.net/download/weixin_45770896/87666396


http://www.kler.cn/news/18377.html

相关文章:

  • 项目实战-redis
  • SpringBoot——pom文件:parent
  • 通过计算系统稳定性比较迭代次数
  • Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的直方图算法增强(C#)
  • uboot下内存操作mw和md命令详解
  • 如何防御流量攻击
  • 写PPT的步骤
  • Shell 脚本传递参数的两种方式:位置传参与指令式传参
  • MySQL---基本操作DDL(SQL特点,数据类型,对数据库的操作,对表的操作)
  • java面试题总结
  • 《ChatGPT Prompt Engineering for Developers》课程中文版系列
  • 学习【gRPC C++简单示例及代码】
  • <微服务架构项目>权限控制案例分享
  • 技术转管理,先来试试管理好项目
  • 基于氢储能的热电联供型微电网优化调度方法(Matlab代码实现)
  • 如何利用ChatGPT进行论文润色-ChatGPT润色文章怎么样
  • 设计模式——适配器模式(类适配器、对象适配器)
  • redis数据过期策略
  • JSP在线教学质量评价系统的设计与实现(源代码+论文)
  • 详解MySQL索引失效
  • MySQL高级(进阶)SQL语句
  • Hashtable 与 HashMap 有什么不同?
  • C++ 类与对象(二)—类成员初始化、静态分配和动态分配、this指针
  • [Python]连接列表,将多个列表连接起来
  • d答复引用等问题
  • 【蓝桥杯选拔赛真题56】Scratch画笔涂色 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解
  • OJ练习第101题——柱状图中最大的矩形
  • 数据结构之栈的详解
  • ASP.NET Core Web API用户身份验证
  • 鸿蒙Hi3861学习七-Huawei LiteOS-M(信号量)