Étape 12 : Serveur MATLAB
Notre serveur MATLAB communique via le protocole que nous avons décrit à l’étape précédente. 5 fichiers existent :
RunServer.m est la boucle de serveur principal. Continuellement, il écoute une entrée série, traite les commandes envoyées vers/depuis l’Arduino. Il gère également l’envoi et la réception des configurations différentes casque précalibré. Par défaut, notre code se connecte sur le port « COM8 ». Cela peut être différent pour n’importe quel ordinateur que vous utilisez.
build_basis.m est appelée une fois pour une exécution du serveur. Il construit les « vecteurs de base » de tout casque est actuellement sur le microphone. Il fait ceci en définissant la valeur de tous les pots numériques à 255 (tous les 0 de gain), sauf un, et obtenir la fonction de transfert du casque d’écoute avec ce groupe supprimé. Il accomplit cette tâche pour les 6 canaux et construit alors une matrice de « base » A qui sera utilisée pour les méthode des moindres carrés, montage étape.
networkAnalyze_chirp s’exécute un balayage de fréquence, sous la forme d’une fonction de chirp lograithmic et lit le son qui en résulte dans les haut-parleurs de l’ordinateur. Ensuite, il extrait la valeur du détecteur crête (diffusé par l’Arduino) et retourne les amplitudes et le décalage de la réponse.
target_fit prend une matrice de base A et il s’adapte à un casque de la cible A via la méthode des moindres carrés. Il affecte les pots digial les valeurs ajustées, puis effectue un balayage de fréquence finale du casque d’écoute pour vérification.
write_pots publie les valeurs de choisi (un tableau de valeurs, longueur 6, 0 - 255) à l’Arduino. Il fait une pause entre chaque envoi d’une quantité spécifiée de retard afin de s’assurer de l’Arduino est terminé écrit à SPI.
S’il vous plaît télécharger et jouer avec le code !
Remarque : Ceci peut également être implémentée sur l’Arduino--nous défions l’utilisateur Arduino avancé de le faire !