Erweiterbarkeit ist eines der Markenzeichen von JMP. Im JMP 11 Sie können JMP mit MATLAB integrieren. Von JMP Scripting Language (JSL) aus können Sie Daten von JMP an MATLAB senden, MATLAB-Funktionen ausführen und Ergebnisse von MATLAB zur weiteren Analyse und Visualisierung an JMP zurückgeben.
MATLAB, eine Softwarelösung von MathWorks, ist eine Matrix-Programmiersprache und eine interaktive Programmierumgebung für numerische Berechnungen, Datenanalysen, Visualisierung und das Erstellen benutzerdefinierter Konstruktionsmodelle und -anwendungen. Es enthält eine Vielzahl von Zusatzmodulen, so genannte Toolboxes, mit denen MATLAB-Benutzer auf Funktionen zugreifen können, um bei Bedarf spezielle Modellierungs- und Konstruktionsarbeiten durchzuführen.
Die MATLAB-Schnittstelle in JMP ermöglicht den Zugriff auf MATLAB über JSL mit einer Reihe von Funktionen. Das grundlegende Ausführungsmodell besteht darin, zuerst eine MATLAB-Verbindung zu initialisieren, die erforderlichen MATLAB-Operationen auszuführen und dann die MATLAB-Verbindung zu beenden. Das Nutzungsparadigma ist der R-Schnittstelle in JMP sehr ähnlich.
In diesem Beitrag wollte ich kurz hervorheben, wie Sie die Schnittstelle für Ihre JMP 11-Installation einrichten und ausführen können, und einige grundlegende Beispiele für die Verwendung der Schnittstelle vorstellen. Für ein tieferes Eintauchen in die Besonderheiten der Benutzeroberfläche empfehle ich das Herunterladen der weißes Papier dass ich zusammen mit John Salmon, PhD, einem Forschungsingenieur im Aerospace Systems Design Laboratory am Georgia Institute of Technology, verfasst habe.
Das Wichtigste zuerst: Lassen Sie uns die Installationsanweisungen aus dem Weg schaffen. Detaillierte Anweisungen finden Sie in unserem Online-Bereich Hilfe , aber hier ist eine Kurzanleitung.
MATLAB muss auf demselben Computer wie JMP installiert sein, und JMP wird nicht mit einer Kopie von MATLAB verteilt.Da JMP sowohl als 32-Bit- als auch als 64-Bit-Windows-Anwendung unterstützt wird, müssen Sie die entsprechende 32-Bit- oder 64-Bit-Version von MATLAB installieren.JMP verzögert das Laden von MATLAB, bis ein JSL-Skript Zugriff darauf benötigt. Wenn JMP MATLAB laden muss, wird es anhand des aktuellen Suchpfads mit a gesucht PathVar-Variable Dies sollte über die Plattformeinstellungen der MATLAB-Benutzeroberfläche festgelegt werden.Wenn Sie MATLABROOT auf dem Pfad der MATLAB-Installation auf Ihrem Computer einstellen, wird JMP wissen, wo MATLAB zu finden ist (siehe Abbildung unten).
Nachdem der Pfad in den Plattformeinstellungen festgelegt wurde, können Sie eine schnelle Überprüfung durchführen, um sicherzustellen, dass Ihre MATLAB-Verbindung funktioniert, indem Sie ein MATLAB-Init () ausführen. Funktion. Wenn die Verbindung erfolgreich war, gibt die Funktion 0 an das Protokoll zurück. Wenn der Vorgang nicht erfolgreich war, wird eine Fehlermeldung angezeigt.
Kommen wir zu einem Beispiel, wie die Schnittstelle funktioniert. Dieses Beispiel zeigt jede Phase des Schnittstellen-Workflows und dient somit als guter Prototyp komplexer Skripts. Der erste Schritt besteht darin, die MATLAB-Verbindung mit einem MATLAB-Init () zu initialisieren. Anruf. Dann verwenden wir ein MATLAB Submit (); Funktion, um etwas MATLAB-Code in MATLAB auszuführen. In diesem Fall führen wir die magische Funktion mit einem Eingabeparameter von 3 aus und speichern die Ergebnisse in einer Variablen mit dem Namen m. Um das zu bringen m Matrix in den JMP-Variablenbereich für die weitere Verwendung der Ergebnisse in JMP, führen wir das MATLAB Get () aus; Funktion, die die gespeicherten Daten übernimmt m und weist es einer JMP-Variablen zu, die wir genannt haben: magicMat . Um die Ergebnisse unseres kleinen Programms zu sehen, schreiben wir den Inhalt von magicMat in das Protokoll aufnehmen und die Daten in eine JMP-Datentabelle bringen (siehe Abbildung unten). Zum Schluss beenden wir unsere MATLAB-Sitzung mit einem MATLAB-Term (). Befehl.

Der Vorteil hierbei ist, dass die Daten aus unserem MATLAB-Programm jetzt in einer JMP-Datentabelle gespeichert sind und ohne weitere MATLAB-Codierung visualisiert, modelliert oder untersucht werden können. Sie erhalten auch die Interaktivität von JMP für die Untersuchung der MATLAB-Modellausgabe. Sie können JMP-Tools für die Datenvisualisierung (z. B. über Graph Builder, Control Chart Builder, Distribution), Datenanalyse (Fit-Modell, Partition, Screening usw.) sowie verwenden zusätzliche Datenbereinigung und -zusammenfassung (Werkzeuge im Tabellen Menü, tabellarisch usw.). 
Nun, da wir etwas grundlegendes getan haben, wollen wir ein bisschen mehr Spaß haben. Eines meiner Hobbys außerhalb der Arbeit ist das Entwerfen und Bauen von Lautsprechern. Unten sehen Sie ein Bild meines aktuellen Designs. Wir werden sehen, wie ich MATLAB und JMP verwenden kann, um mir bei der Gestaltung und Abstimmung dieser Lautsprecher zu helfen. Eines der großen Dinge, die ich im letzten Jahr zu meinem Setup hinzugefügt habe, ist ein MiniDSP. Das MiniDSP ist ein erstaunliches kleines Gerät, das das schnelle Prototyping von Lautsprechern und Frequenzweichen wesentlich vereinfacht hat, und es hat mir außerdem den Aufwand und die Kosten gespart, die ich beim Kauf von passiven Frequenzweichenkomponenten eingehen musste.

Mit dem MiniDSP kann ich verschiedene Dinge tun: Zeitanpassung, Tiefpass- und Hochpass-Crossover-Filter und Raumkorrektur. Woher weiß ich, was ich tun muss, damit meine Lautsprecher in meinem Raum am besten klingen? Ich erschaffe, was als bekannt ist impulsive Reaktion (IR), indem Sie ein Signal mit einer gewobbelten Sinuswelle über die Lautsprecher wiedergeben und die Ausgabe dann mit einem Mikrofon aufnehmen. Durch Abziehen des Trockensignals vom nassen, gemessenen Signal wird die IR erzeugt. Was übrig bleibt, ist ein Datensatz, der beschreibt, wie der Ton in meinem Raum abklingt. Was ich jedoch wirklich wissen muss, sind nicht wirklich die Daten, die im Zeitbereich liegen, sondern der Frequenzgang meiner Lautsprecher. Glücklicherweise ist dies angesichts der Zeitbereichsdaten leicht zu analysieren, indem ein FFT-Algorithmus (Fast Fourier Transform) verwendet wird.
Das Beispiel, das ich Ihnen zeigen werde, ist eine Messung, die ich vorgenommen habe, als ich zu überprüfen versuchte, wie nahe meine Bassreflexanschlüsse dem von mir gebauten Modell des Gehäuses waren. Dafür habe ich das Mikrofon in der Nähe des Lautsprechers zwischen den beiden Anschlüssen meines linken Lautsprechers platziert. Ich muss mir keine Gedanken über Raumreflexionen machen, da der direkte Schall von den Anschlüssen eine viel größere Amplitude hat als der reflektierte Schall. Um die Breitbandantworten der Lautsprecher zu sehen, muss ich eine andere Methode anwenden (bei der die Lautsprecher nach draußen gebracht und auf ein Podest gestellt werden und dann die Reflexionen ausgeblendet werden - aber das muss warten, bis es ein Signal ist etwas wärmer).
Hier also die Zeitbereichsdaten meiner Messung:

Was ich wirklich tun möchte, ist, den Frequenzbereich so zu konvertieren, dass wir die Antwort aufzeichnen und unsere Frage beantworten können: Resoniert der Port dort, wo er sein sollte (ungefähr 55 Hz)?
Für diese Analyse möchte ich die Daten von JMP übernehmen, an MATLAB senden, eine Funktion ausführen, die ich zur Ausführung der FFT geschrieben habe, und den resultierenden Vektor in eine neue Datentabelle mit den ordnungsgemäß gekennzeichneten Frequenzabschnitten zurückgeben (durch Erzählen meine MATLAB-Funktion ist meine Abtastrate).
Um diese Analyse zukünftig für neue Messungen zu automatisieren, habe ich diese Analyse in eine neue JMP-Anwendung umgewandelt, die dann als Add-In verpackt und meinem JMP-Menü hinzugefügt werden kann. Es ist ein einfacher Dialog, der nach der Spalte fragt, die die Amplitudendaten enthält.

Wenn Sie auf OK drücken, wird die JSL ausgeführt, die meine Daten an MATLAB weiterleitet, die FFT ausführt und die Ergebnisse der Analyse in eine Datentabelle zurückgibt. Der tatsächlich zur Ausführung des MATLAB-Skripts erforderliche Code ist recht einfach. In Zeile 26 sende ich die Variable yvec , die der Antwortrolle entspricht, die der Benutzer in der Anwendung für den MATLAB-Variablenbereich ausgewählt hat. Dann übermittle ich den MATLAB-Code, der zum Ausführen meiner FFT-Funktion erforderlich ist. In meinem Fall weiß ich, dass alle meine IRs mit 44,1 kHz abgetastet werden. Daher habe ich diese in die Eingabeliste für meine calcFFT-Funktion hartcodiert. Wenn die Abtastrate variierte, konnte ich meiner Anwendung ein Texteingabefeld hinzufügen und die Auswahl dann an meinen Funktionsaufruf übergeben.

Meine Funktion gibt zwei Vektoren zurück, die mich interessieren, das fftsignal und das freqArray. Ich kann diese beiden Variablen dann mit dem MATLAB Get () in den JMP-Variablenbereich ziehen. Funktion und erstellen Sie eine Tabelle aus den Ergebnissen.
Nachdem ich meine Ergebnisse erhalten habe, kann ich den Graph Builder verwenden, um meinen Frequenzgang zu erzeugen:

Ich habe mich nur auf den Frequenzgang von 20 Hz - 400 Hz konzentriert, so dass ich das Verhalten der Port-Abstimmung sehen kann (das als Peak in der Grafik erscheint). Es ist etwas höher als ich erwartet hatte, basierend auf meinem Modell. Daher muss ich möglicherweise den Bassbereich des MiniDSP um einen Bass-Boost erhöhen, um den erforderlichen Frequenzgang in meinem Zimmer zu haben.
Ich habe gerade ein Beispiel gezeigt, wo wir JMP und MATLAB zusammen verwenden können, um die Fähigkeiten von JMP zu erweitern. In diesem Whitepaper gehen wir einige andere Beispiele durch, einschließlich der Verwendung von JMP zum Erstellen eines Versuchsentwurfs mit dem benutzerdefinierten Designer, Ausführen von Simulationsexperimenten in MATLAB. Anschließend werden die Ergebnisse zur Analyse, zur Profilerstellung und zur Bewertung der Variablen an JMP zurückgegeben.
Haben Sie die JMP-Schnittstelle für MATLAB bereits in JMP 11 verwendet? Wenn ja, würde ich gerne deine Geschichte hören!
Emmanuel schrieb:
Es gibt einige Fehler in Skripten, ich habe auch eines der Videos gesehen und einige Tippfehler.
Das erste Beispiel enthält einen Colum-Namensfehler im Protokoll. also muss ich diesen Teil beseitigen:
MATLAB Init ();
MATLAB Submit ("m = magic (3)");
magicMat = MATLAB erhalten (m);
show (magicMat);
dt = als Tabelle (magicMAt);
MATLAB-Begriff ();
So könnte es funktionieren
Die FFT ist der Teil, den ich interessiere. Sie sollte mit MATLAB Init () beginnen.
Ich habe zurzeit einen Fehler im Protokoll.
"Undefinierte Funktion 'calcFFT_FR12' für Eingabeargumente vom Typ 'double'."
Können Sie mir bitte auch die Datenprobe von 25.000 schicken?
So kann ich es überprüfen
Danke im Voraus
Wie fügen wir dem JMP-Skript einen Pfad hinzu, damit alle MATLAB-Funktionen aufgerufen werden können, anstatt jedes Mal das Verzeichnis zu wechseln?
Es ist seltsam, dass ich eingetippt habe
MATLAB Submit ("cd '\\ las-cifs01 \ myfilename"); // anstelle der Zeile cd REPLACE
// MATLAB Submit ("cd 'REPLACE'");
Es sucht nach einem Ordner in cd '\\ las-cifs01 \ myfilename \ REPLACE
Ich habe nicht genau angegeben, dass wir in den REPLACE-Ordner gehen