可扩展性是JMP的标志之一。在JMP 11 ,您可以将JMP与MATLAB集成。通过JMP脚本语言(JSL),您可以将数据从JMP发送到MATLAB,执行MATLAB函数,并将结果从MATLAB返回到JMP,以进行进一步的分析和可视化。
MATLAB是MathWorks的软件解决方案,是一种矩阵编程语言和交互式编程环境,用于数值计算,数据分析,可视化以及构建自定义工程模型和应用程序。它包括一组丰富的附加模块,称为工具箱,这些附加模块使MATLAB用户可以访问功能,以根据需要执行专门的建模和设计工作。
JMP中的MATLAB接口提供了通过JSL使用一组函数访问MATLAB的功能。基本执行模型是首先初始化MATLAB连接,执行所需的MATLAB操作,然后终止MATLAB连接。使用范例与JMP中的R接口非常相似。
在本文中,我想简要强调一下如何在您的JMP 11安装上启动并运行该接口,并提供一些有关如何使用该接口的基本示例。为了更深入地了解界面的细节,建议您下载白皮书我是与佐治亚理工学院航空系统设计实验室的研究工程师John Salmon博士合着的。
首先,首先:让我们摆脱安装说明的困扰。详细说明可在我们的在线手册中找到帮助,但这是快速入门指南。
必须将MATLAB与JMP安装在同一台计算机上,并且JMP不会随MATLAB的副本一起分发。由于JMP同时支持32位和64位Windows应用程序,因此必须安装相应的32位或64位版本的MATLAB。JMP会延迟加载MATLAB,直到需要JSL脚本访问它为止。当JMP需要加载MATLAB时,它会根据当前搜索路径使用PathVar变量。应该使用MATLAB接口的平台首选项进行设置。将MATLABROOT设置为计算机上MATLAB安装的路径将确保JMP知道在哪里可以找到MATLAB(如下图所示)。
在平台首选项中设置路径后,您可以通过运行MATLAB Init()进行快速检查,以确保您的MATLAB连接正常。功能。如果连接成功,该函数将向日志返回0。如果操作不成功,您将收到一条错误消息。
因此,让我们直接看一个界面如何工作的示例。此示例显示了界面工作流的每个阶段,因此它可以作为更复杂脚本的良好原型。第一步是使用MATLAB Init()初始化MATLAB连接。称呼。然后,我们使用MATLAB Submit();函数以在MATLAB中执行一些MATLAB代码。在这种情况下,我们将使用输入参数3运行“ magic”函数,并将结果存储到名为米 为了带来米将矩阵放入JMP变量空间以进一步使用JMP中的结果,我们运行MATLAB Get();函数,该函数获取存储在其中的数据米并将其分配给一个JMP变量,我们将其命名为:魔术垫。为了查看我们的小程序的结果,我们编写了以下内容:魔术垫记录到日志中,并将数据放入JMP数据表中,如下图所示。最后,我们以MATLAB Term()结束MATLAB会话;命令。

这样做的好处是,来自我们的MATLAB程序的数据现在位于JMP数据表中,无需任何进一步的MATLAB编码即可直接进行可视化,建模或探索。您还可以获得用于探索MATLAB模型输出的JMP交互性,并且可以使用JMP工具进行数据可视化(例如,通过Graph Builder,Control Chart Builder,Distribution),数据分析(Fit Model,Partition,Screening等)以及额外的数据清理和汇总(桌子菜单,制表等)。 
现在,我们已经完成了一些基本的工作,让我们有更多的乐趣。我工作以外的爱好之一是扬声器的设计和制造。下面是我目前正在进行的设计的图片。我们将看到如何使用MATLAB和JMP来帮助我设计和调整这些扬声器。在过去的一年中,我添加到设置中的一件很棒的事情就是MiniDSP。MiniDSP是一款了不起的小型设备,它使扬声器和分频器的快速原型制作变得更加容易,并且还为我省去了购买无源分频器组件的麻烦和费用。

MiniDSP让我可以做很多事情:时间对准,低通和高通分频滤波器以及房间校正。我怎么知道我该怎么做才能使我的扬声器在房间内达到最佳音质?我创建了一个所谓的冲动反应(IR),方法是通过扬声器播放扫描的正弦波测量信号,然后用麦克风记录输出。从潮湿的,已测量的信号中减去干燥的信号会产生IR。剩下的是描述声音如何在我的房间中衰减的数据集。但是我真正需要知道的不是时域中的数据,而是扬声器的频率响应。幸运的是,通过使用快速傅立叶变换(FFT)算法,在给定时域数据的情况下,这很容易分析。
我要向您展示的示例是我在尝试验证低音反射端口的旋转角度与我所建立的音箱模型之间的距离时所进行的测量。为此,我在左扬声器的两个端口之间将麦克风放置在靠近扬声器的位置。我不必为此担心房间反射,因为来自端口的直接声音在幅度上要比反射声音大得多。要查看扬声器的宽带响应,我将不得不采用另一种方法(将扬声器放到室外并将其放在基座上,然后遮挡反射声,但是这要等到它成为有点暖和)。
因此,这是我的测量的时域数据:

我真正想做的是将其转换为频域,以便我们可以绘制响应并回答我们的问题:端口是否在应该的位置谐振(大约55 Hz)?
对于此分析,我想从JMP中获取数据,将其发送到MATLAB,执行我编写的用于执行FFT的函数,然后将结果向量返回到带有正确标注频率的频点的新数据表中(通过告诉我的MATLAB函数是我的采样率是多少)。
为了将来可以自动执行此分析以进行新的测量,我已将此分析转换为新的JMP应用程序,然后可以将其打包为加载项并添加到我的JMP菜单中。这是一个简单的对话框,要求输入包含振幅数据的列。

当我按OK时,它将执行JSL,该JSL将我的数据往返到MATLAB,执行FFT并将分析结果返回到数据表。运行MATLAB脚本的实际所需代码非常简单。在第26行中,我发送了变量伊夫,它对应于用户在应用程序中对MATLAB变量空间选择的响应角色。然后,我提交运行FFT函数所需的MATLAB代码。就我而言,我知道我所有的IR都是以44.1 kHz采样的,因此我已将其硬编码到calcFFT函数的输入列表中。如果采样率变化,则可以在应用程序中添加文本输入字段,然后将选择内容传递给函数调用。

我的函数返回了我感兴趣的两个向量,即fftsignal和freqArray。然后,我可以使用MATLAB Get()将这两个变量拉入JMP变量空间;函数并根据结果创建表。
得到结果后,可以使用Graph Builder生成频率响应图:

我只关注20 Hz至400 Hz的频率响应,因此我可以看到端口的调整行为(在图中显示为峰值)。它比我根据模型预期的要高一些,因此我可能需要在MiniDSP的低频通道中添加一点低音增强功能,以便在我的房间中获得所需的频率响应。
我刚刚展示了一个示例,说明可以在哪里一起使用JMP和MATLAB来扩展JMP的功能。在白皮书中,我们将介绍其他几个示例,包括使用JMP使用Custom Designer建立实验设计,在MATLAB中运行模拟实验,然后将结果返回给JMP进行分析,因子分析和评估变量重要性。
您是否已在JMP 11中将JMP接口用于MATLAB?如果您愿意,我很想听听您的故事!
杰夫·珀金森写道:
在这里可能很难在注释中解决。您可以发送电子邮件至我们的技术支持部门support@jmp.com,他们可以帮助您找出问题所在。或者,您可以将问题发布到讨论区的部分JMP用户社区。
山姆·金写道:
不幸的是,当我运行MATLAB init();时,我的日志返回的是“ 1”而不是“ 0”。你能告诉我出什么问题了吗?
丹尼尔·瓦伦特(Daniel Valente)写道:
伟大的!谢谢你的关注。
伊曼纽尔写道:
脚本中有一些错误,我也看过其中一个视频,并且有一些错别字。
第一个示例在日志中有Colum名称错误。所以我必须删除该部分以:
MATLAB Init();
MATLAB Submit(“ m = magic(3)”);
magicMat = MATLAB get(m);
表演(magicMat);
dt = as table(magicMAt);
MATLAB Term();
这样就可以了
FFT是我感兴趣的部分,它应该从MATLAB Init()开始。
我目前在日志中有一个错误。
“类型为'double'的输入参数的未定义函数'calcFFT_FR12'。”
您能否也将25,000的数据样本发送给我?
所以我可以复习一下
提前致谢
丹尼尔·瓦伦特(Daniel Valente)写道:
你好伊曼纽尔-
你可以下载我们的文件交换中的白皮书示例脚本:“使用MATLAB的JMP可扩展性协同作用”。