Stap 12: MATLAB server
Onze MATLAB-server communiceert via het protocol dat wij die worden beschreven in de vorige stap. 5 bestanden bestaan:
runserver.m Is de belangrijkste serverlus. Het voortdurend luistert naar een seriële input, verwerkt de opdrachten verzonden naar/van de Arduino. Het behandelt ook verzenden en ontvangen van verschillende vooraf gekalibreerde hoofdtelefoon opstellingen. Onze code maakt standaard verbinding op poort "COM8". Dit kan zijn verschillend voor elke computer die u gebruikt.
build_basis.m wordt eenmaal aangeroepen voor een run van de server. Het bouwt voort op de "basisvectoren" van welke hoofdtelefoon momenteel op de microfoon is. Het doet dit door het instellen van de waarde van alle digitale potten tot 255 (alle 0 winst), met uitzondering van één, en het verkrijgen van de overdrachtsfunctie van de hoofdtelefoons met die band verwijderd. Het doet dit voor alle 6 kanalen, en vervolgens bouwt een "basis"-matrix A die wordt gebruikt voor de kleinste-kwadratenmethode montage stap.
networkAnalyze_chirp loopt een frequentie sweep, in de vorm van een functie van de Tjilpen lograithmic, en speelt het resulterende geluid uit de computerluidsprekers. Vervolgens pakt de waarde van de detector van de piek (wordt uitgezonden door de Arduino), en geeft als resultaat de amplitudes en de offset van het antwoord.
target_fit neemt een basis matrix A, en het past bij een doel hoofdtelefoon A via de kleinste kwadraten. Vervolgens stelt de digial potten op de ingerichte waarden en voert een definitieve frequentie sweep op de koptelefoon voor verificatie.
write_pots publiceert de waarden van gekozen (een matrix van waarden, lengte 6, waarden 0 - 255) aan de Arduino. pauzeert tussen elke verzenden door een bedrag dat is opgegeven door vertraging om ervoor te zorgen de Arduino is voltooid schrijven aan SPI.
Gelieve te downloaden en spelen rond met de code!
Opmerking: Dit kan ook worden geïmplementeerd op de Arduino--wij dagen de gevorderde gebruiker van de Arduino te doen!