可擴展性是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時,它基於當前搜索路徑使用a PathVar變量。這應該使用MATLAB接口的平台首選項進行設置。將MATLABROOT設置為計算機上MATLAB安裝的路徑將確保JMP知道在哪裡可以找到MATLAB(如下圖所示)。
在平台首選項中設置路徑後,您可以通過運行MATLAB Init()來快速檢查以確保MATLAB連接正常。功能。如果連接成功,該函數將返回0到日誌。如果操作不成功,您將收到一條錯誤消息。
讓我們直接進入界面如何工作的例子。此示例顯示了界面工作流的每個階段,因此它可以作為更複雜腳本的良好原型。第一步是用MATLAB Init()初始化MATLAB連接;呼叫。然後,我們使用MATLAB Submit();函數在MATLAB中執行一些MATLAB代碼。在這種情況下,我們運行“magic”函數,輸入參數為3,並將結果存儲到名為的變量中米 為了帶來米矩陣進入JMP變量空間以便在JMP中進一步使用結果,我們運行MATLAB Get(); function,用於存儲數據米並將其分配給JMP變量,我們將其命名為: magicMat 。為了查看我們的小程序的結果,我們寫了內容 magicMat 到日誌並將數據放入JMP數據表,如下圖所示。最後,我們用MATLAB Term()結束我們的MATLAB會話;命令。

這裡的好處是我們的MATLAB程序中的數據現在位於JMP數據表中,可以在不進行任何進一步MATLAB編碼的情況下進行可視化,建模或探索。您還可以獲得JMP的交互性以探索MATLAB模型輸出,並可以使用JMP工具進行數據可視化(例如,通過Graph Builder,控製圖生成器,分發),數據分析(擬合模型,分區,篩選等)以及額外的數據清理和摘要(工具中的表菜單,表格等)。 
現在我們已經做了一些基本的事情,讓我們有一點樂趣。我工作之外的一個愛好是揚聲器設計和建造。下面是我目前正在進行的設計的圖片。我們將看到如何使用MATLAB和JMP來幫助我設計和調整這些揚聲器。我在過去一年中添加到我的設置中的一件好事是MiniDSP。MiniDSP是一款令人驚嘆的小型設備,它使揚聲器和分頻器的快速原型設計變得更加容易,並且還為我節省了購買無源分頻器組件的麻煩和費用。

MiniDSP讓我可以做很多事情:時間校準,低通和高通交叉濾波器以及房間校正。我怎麼知道我需要做什麼才能使我的揚聲器在我的房間聽起來最好?我創造了所謂的脈衝響應 (IR)通過揚聲器播放掃頻正弦波測量信號,然後用麥克風錄製輸出。從潮濕的測量信號中減去幹信號會產生IR。剩下的是描述我房間聲音如何衰減的數據集。但我真正需要知道的不是時域中的數據,而是我的揚聲器的頻率響應。幸運的是,通過使用快速傅里葉變換(FFT)算法,可以很容易地分析時域數據。
我要向您展示的一個例子是我在試圖驗證我的低音反射端口與我建造的機櫃模型的接近程度時所做的測量。為此,我將麥克風靠近揚聲器放在左揚聲器的兩個端口之間。我不必為此擔心房間反射,因為來自端口的直接聲音在幅度上比反射聲音大得多。為了查看揚聲器的寬帶響應,我將不得不採用一種不同的方法(將揚聲器放在外面並將它們放在底座上,然後忽略反射 - 但這必須等到它是有點溫暖)。
所以這是我測量的時域數據:

我真正想做的是將頻率轉換為頻域,以便我們可以繪製響應並回答我們的問題:端口是否應該響應(大約55 Hz)?
對於這個分析,我想從JMP獲取數據,將其發送到MATLAB,執行我編寫的函數以執行FFT並將結果向量返回到具有正確標記的頻率區的新數據表(通過告知我的MATLAB函數我的採樣率是多少)。
為了在將來對新測量進行自動分析,我將此分析轉換為新的JMP應用程序,然後將其打包為插件並添加到我的JMP菜單中。這是一個簡單的對話框,要求列具有幅度數據。

當我按下OK時,它將執行JSL,它將我的數據往返到MATLAB,執行FFT並將分析結果返回到數據表。實際運行MATLAB腳本所需的代碼非常簡單。在第26行,我發送變量 YVEC ,它對應於用戶在應用程序中選擇的響應角色到MATLAB變量空間。然後,我提交運行FFT函數所需的MATLAB代碼。在我的情況下,我知道我的所有IR都以44.1 kHz採樣,因此我將其硬編碼到我的calcFFT函數的輸入列表中。如果採樣率變化,我可以在我的應用程序中添加一個文本輸入字段,然後將選擇傳遞給我的函數調用。

我的函數返回我感興趣的兩個向量,fftsignal和freqArray。然後我可以使用MATLAB Get()將這兩個變量拉入JMP變量空間;函數並從結果中創建一個表。
獲得結果後,我可以使用Graph Builder生成頻率響應圖:

我只專注於20 Hz - 400 Hz的頻率響應,因此我可以看到端口調諧行為(在圖表上顯示為峰值)。根據我的型號,它比我預期的要高一點,所以我可能需要在MiniDSP中為低頻通道添加一點低音增強,以便在我的房間內獲得我需要的頻率響應。
我剛剛展示了一個可以將JMP和MATLAB結合使用以擴展JMP功能的示例。在白皮書中,我們將介紹其他幾個示例,包括使用JMP使用自定義設計器設置實驗設計,在MATLAB中運行模擬實驗,然後將結果返回到JMP進行分析,因子分析和評估變量重要性。
您是否在JMP 11中使用了JMP接口到MATLAB?如果你有,我很樂意聽你的故事!
傑夫珀金森中寫道:
在評論中可能很難解決這個問題。您可以通過support@jmp.com向我們的技術支持部門發送郵件,他們可以幫助您找出問題所在。或者你可以在中發布你的問題討論部分 JMP用戶社區 。
Sam Kim 中寫道:
不幸的是,當我運行MATLAB init();時,我的日誌返回“1”而不是“0”。你能告訴我出了什麼問題嗎?
伊曼紐爾中寫道:
腳本中有一些錯誤,我也看到了其中一個視頻,並且有一些拼寫錯誤。
第一個示例在日誌中有Colum name錯誤。所以我必須消除那部分:
MATLAB Init();
MATLAB提交(“m = magic(3)”);
magicMat = MATLAB get(m);
show(magicMat);
dt = as table(magicMAt);
MATLAB Term();
所以它可以工作
FFT是我感興趣的部分,它應該從MATLAB Init()開始;
我目前在日誌中有錯誤。
“未定義函數'calcFFT_FR12'用於'double'類型的輸入參數。”
能否請您發送25,000的數據樣本?
所以我可以復習一下
提前致謝
丹尼爾瓦倫特中寫道:
你好伊曼紐爾 -
您可以下載白皮書中的示例腳本:文件交換中的“JMP Extensibility Synergy with MATLAB”。
如何設置MATLAB函數的目錄? 我將要調用的MATLAB函數與JMP腳本放置在同一文件夾中,但是JMP表示無法識別該函數。 在Daniel提供的MATLAB示例文件夾中,有此MATLAB Submit(“ cd'REPLACE'”);。 如何格式化它,以便我可以將MATLAB的路徑/特定目錄提交給MATLAB,以便JMP可以調用MATLAB函數?
謝謝,
內森
另外,我們如何為JMP腳本添加路徑,以便可以調用所有MATLAB函數,而不是每次都更改目錄?
我打的很奇怪
MATLAB Submit(“ cd'\\ las-cifs01 \ myfilename”); //代替cd REPLACE行
// MATLAB Submit(“ cd'REPLACE'”);
它在cd'\\ las-cifs01 \ myfilename \ REPLACE中尋找一個文件夾
我沒有具體說明我們要進入REPLACE文件夾