L’extensibilité est l’une des caractéristiques de JMP. Dans JMP 11 , vous pouvez intégrer JMP à MATLAB. À partir du langage de script JMP (JSL), vous pouvez envoyer des données de JMP à MATLAB, exécuter des fonctions MATLAB et renvoyer les résultats de MATLAB à JMP pour une analyse et une visualisation plus poussées.
MATLAB, une solution logicielle de MathWorks, est un langage de programmation matricielle et un environnement de programmation interactif pour le calcul numérique, l'analyse de données, la visualisation et la création de modèles et d'applications d'ingénierie personnalisés. Il comprend un ensemble complet de modules complémentaires, appelés boîtes à outils, qui permettent aux utilisateurs de MATLAB d'accéder à des fonctions permettant d'effectuer des travaux de modélisation et de conception spécialisés en fonction des besoins.
L’interface MATLAB dans JMP permet d’accéder à MATLAB via JSL avec un ensemble de fonctions. Le modèle d'exécution de base consiste à initialiser une connexion MATLAB, à effectuer les opérations MATLAB requises, puis à mettre fin à la connexion MATLAB. Le paradigme d'utilisation est très similaire à l'interface R dans JMP.
Dans cet article, je souhaitais expliquer brièvement comment rendre l'interface opérationnelle sur votre installation de JMP 11 et présenter quelques exemples de base d'utilisation de l'interface. Pour une plongée plus en profondeur dans les détails de l'interface, je suggère de télécharger le papier blanc que j'ai co-écrit avec John Salmon, PhD, ingénieur de recherche au laboratoire de conception de systèmes aérospatiaux du Georgia Institute of Technology.
Tout d’abord, d’abord: éliminons les instructions d’installation. Des instructions détaillées sont disponibles sur notre site en ligne. Aidez-moi , mais voici un guide de démarrage rapide.
MATLAB doit être installé sur le même ordinateur que JMP, et JMP n'est pas distribué avec une copie de MATLAB.JMP étant pris en charge en tant qu'application Windows 32 bits et 64 bits, vous devez installer la version 32 bits ou 64 bits correspondante de MATLAB.JMP retarde le chargement de MATLAB jusqu'à ce qu'un script JSL ait besoin d'y accéder. Lorsque JMP doit charger MATLAB, il est localisé en fonction du chemin de recherche actuel à l'aide d'un Variable PathVar. Ceci doit être défini en utilisant les préférences de plate-forme de l'interface MATLAB.Si vous définissez MATLABROOT sur le chemin d'installation de MATLAB sur votre ordinateur, JMP saura où trouver MATLAB (comme illustré dans la figure ci-dessous).
Une fois le chemin défini dans les préférences de la plate-forme, vous pouvez effectuer une vérification rapide pour vous assurer que votre connexion MATLAB fonctionne en exécutant un MATLAB Init (); une fonction. Si la connexion a réussi, la fonction renvoie 0 dans le journal. Si l'opération a échoué, vous recevrez un message d'erreur.
Commençons donc directement par un exemple du fonctionnement de l'interface. Cet exemple montre chaque étape du flux de travail de l'interface, ce qui en fait un bon prototype de scripts plus complexes. La première étape consiste à initialiser la connexion MATLAB avec un MATLAB Init (); appel. Ensuite, nous utilisons un MATLAB Submit (); fonction pour exécuter du code MATLAB dans MATLAB. Dans ce cas, nous exécutons la fonction «magique» avec un paramètre d’entrée de 3 et enregistrons les résultats dans une variable nommée m. Afin d'apporter le m Matrice dans l'espace variable JMP pour une utilisation ultérieure des résultats dans JMP, nous exécutons MATLAB Get (); fonction, qui prend les données stockées dans m et l'assigne à une variable JMP, que nous avons nommée: magicMat . Pour voir les résultats de notre petit programme, nous écrivons le contenu de magicMat dans le journal et importez les données dans un tableau de données JMP, comme indiqué dans la figure ci-dessous. Et enfin, nous terminons notre session MATLAB avec un terme MATLAB (); commander.

L'avantage ici est que les données de notre programme MATLAB sont maintenant dans une table de données JMP et prêtes à être visualisées, modélisées ou explorées sans autre codage MATLAB. Vous bénéficiez également de l’interactivité de JMP pour explorer les sorties de modèles MATLAB et pouvez utiliser les outils JMP pour la visualisation des données (par exemple, via Graph Builder, Control Chart Builder, Distribution), l’analyse de données (Modèle de montage, Partition, Screening, etc.) nettoyage et synthèse des données supplémentaires (outils de la les tables menu, tabulation, etc.). 
Maintenant que nous avons fait quelque chose de fondamental, amusons-nous un peu. L’un de mes passe-temps en dehors du travail est la conception et la construction d’enceintes. Ci-dessous, une image de ma conception actuelle en cours. Nous verrons comment utiliser MATLAB et JMP pour m'aider à concevoir et à régler ces haut-parleurs. Un des éléments les plus intéressants que j'ai ajoutés à ma configuration au cours de la dernière année est un MiniDSP. Le MiniDSP est un petit appareil étonnant qui a beaucoup facilité le prototypage rapide des haut-parleurs et des croisements. Il m'a également évité les tracas et les dépenses liés à l'achat de composants de croisement passifs.

Le MiniDSP me permet de faire un certain nombre de choses: alignement temporel, filtres de croisement passe-bas et passe-haut et correction de pièce. Comment savoir ce que je dois faire pour que mes haut-parleurs sonnent mieux dans ma pièce? Je crée ce qu'on appelle un réponse impulsive (IR) en reproduisant un signal de mesure à onde sinusoïdale balayée par les haut-parleurs, puis en enregistrant la sortie avec un microphone. En soustrayant le signal non traité du signal non traité, le signal mesuré crée l'IR. Ce qui reste est un ensemble de données décrivant comment le son se désintègre dans ma pièce. Mais ce que j’ai besoin de savoir n’est pas vraiment ces données qui relèvent du domaine temporel, mais bien la réponse en fréquence de mes haut-parleurs. Heureusement, il est facile d’analyser ce type de données en utilisant un algorithme de transformée de Fourier rapide (FFT).
L’exemple que je vais vous montrer est une mesure que j’ai faite lorsque j’essayais de vérifier à quel point le tournage de mes ports bass-reflex était proche du modèle que j’ai construit du cabinet. Pour cela, j'ai placé le microphone près du haut-parleur entre les deux ports de mon haut-parleur gauche. Je n'ai pas à m'inquiéter des réflexions de la pièce car le son direct émis par les ports est beaucoup plus puissant que le son réfléchi. Pour examiner la réponse des haut-parleurs à large bande, je vais devoir employer une méthode différente (qui consiste à amener les haut-parleurs à l'extérieur et à les placer sur un socle, puis à produire des réflexions - mais cela devra attendre jusqu'à ce que ce soit un problème. un peu plus chaud).
Voici donc les données temporelles de ma mesure:

Ce que je veux vraiment faire est de convertir ce domaine de fréquence afin que nous puissions tracer la réponse et répondre à notre question: le port résonne-t-il où il devrait être (environ 55 Hz)?
Pour cette analyse, je veux prendre les données de JMP, les envoyer à MATLAB, exécuter une fonction que j'ai écrite pour effectuer la FFT et renvoyer le vecteur résultant dans une nouvelle table de données avec les cases de fréquence correctement étiquetées (en indiquant ma fonction MATLAB quel est mon taux d’échantillonnage).
Pour automatiser cette analyse à l'avenir pour de nouvelles mesures, j'ai transformé cette analyse en une nouvelle application JMP, qui peut ensuite être packagée en tant que complément et ajoutée à mon menu JMP. C'est un simple dialogue qui demande la colonne, qui contient les données d'amplitude.

Lorsque j'appuie sur OK, il exécute le fichier JSL qui va retourner mes données à MATLAB, exécute la FFT et renvoie les résultats de l'analyse dans une table de données. Le code réellement requis pour exécuter le script MATLAB est assez simple. En ligne 26, j'envoie la variable yvec , qui correspond au rôle de réponse que l'utilisateur a sélectionné dans l'application sur l'espace variable MATLAB. Ensuite, je soumets le code MATLAB requis pour exécuter ma fonction FFT. Dans mon cas, je sais que tous mes IR sont échantillonnés à 44,1 kHz, je l'ai donc codé en dur dans la liste d'entrée de ma fonction calcFFT. Si la fréquence d'échantillonnage variait, je pouvais ajouter un champ de saisie de texte à mon application, puis transmettre la sélection à mon appel de fonction.

Ma fonction renvoie deux vecteurs qui m'intéressent, le ffsignal et le freqArray. Je peux ensuite extraire ces deux variables dans l'espace de variable JMP avec MATLAB Get (); fonction et créer une table à partir des résultats.
Après avoir mes résultats, je peux utiliser Graph Builder pour générer mon graphe de réponse en fréquence:

Je me suis concentré uniquement sur la réponse en fréquence de 20 Hz à 400 Hz pour que je puisse voir le comportement de réglage des ports (qui apparaît sous forme de pic sur le graphique). Il est un peu plus élevé que ce à quoi je m'attendais en fonction de mon modèle. Il se peut donc que j’ai besoin d’ajouter un peu d’amplification des basses au canal basse fréquence du MiniDSP afin d’obtenir la réponse en fréquence dont j’ai besoin dans ma pièce.
Je viens de montrer un exemple d'utilisation de JMP et de MATLAB pour étendre les capacités de JMP. Dans le livre blanc, nous examinons plusieurs autres exemples, notamment l'utilisation de JMP pour configurer une conception d'expériences à l'aide de Custom Designer, des expériences de simulation dans MATLAB, puis nous renvoyons les résultats à JMP pour analyse, profilage de facteur et évaluation d'importance variable.
Avez-vous déjà utilisé l'interface JMP avec MATLAB dans JMP 11? Si vous avez, j'aimerais entendre votre histoire!
Emmanuel a écrit:
Il y a quelques erreurs dans les scripts, je visais aussi une des vidéos et il y avait quelques fautes de frappe.
Le premier exemple contient une erreur de nom de colonne, dans le journal. je dois donc éliminer cette partie pour:
MATLAB Init ();
MATLAB Submit ("m = magic (3)");
magicMat = MATLAB get (m);
show (magicMat);
dt = as table (magicMAt);
MATLAB Term ();
Donc ça pourrait marcher
La FFT est la partie qui m'intéresse, elle devrait commencer par MATLAB Init ();
J'ai actuellement une erreur dans le journal.
"Fonction non définie 'calcFFT_FR12' pour les arguments d'entrée de type 'double'."
Pouvez-vous également m'envoyer l'échantillon de données de 25 000?
Pour que je puisse l'examiner
Merci d'avance
Aussi comment ajouter un chemin au script JMP pour que toutes les fonctions MATLAB puissent être appelées au lieu de changer de répertoire à chaque fois?
C'est étrange que j'aie tapé
Soumettre MATLAB ("cd '\\ las-cifs01 \ mon nom de fichier"); // au lieu de la ligne cd REPLACE
// Soumettre MATLAB ("cd 'REMPLACER'");
Il recherche un dossier dans le cd '\\ las-cifs01 \ myfilename \ REPLACE
Je n'ai pas précisé que nous allions dans le dossier REPLACE