Inhaltsverzeichnis:

So erstellen Sie mit MATLAB einen Hörtest für Erwachsene – wikiHow
So erstellen Sie mit MATLAB einen Hörtest für Erwachsene – wikiHow

Video: So erstellen Sie mit MATLAB einen Hörtest für Erwachsene – wikiHow

Video: So erstellen Sie mit MATLAB einen Hörtest für Erwachsene – wikiHow
Video: Keine Zeit für Experimente? E-Technik Grundlagen Teil 1 2024, November
Anonim
So erstellen Sie einen Hörtest für Erwachsene mit MATLAB
So erstellen Sie einen Hörtest für Erwachsene mit MATLAB

HAFTUNGSAUSSCHLUSS: Unser Test ist KEINE medizinische Diagnose und sollte nicht als solche verwendet werden. Um das Gehör genau zu messen, wenden Sie sich bitte an einen Arzt.

Mit Materialien, die wir bereits hatten, machte unsere Gruppe einen Hörtest. Unser Test ist nur für Erwachsene und Jugendliche geeignet, da das Gehör von Kleinkindern in verschiedenen Bereichen liegt und nur von einem Fachmann gemessen werden sollte.

Dieses Projekt wurde inspiriert, als wir in unserer BME MATLAB-Klasse gearbeitet und mit Klängen gespielt haben, die von Sinuswellen erzeugt werden. Wir waren daran interessiert, wie eine Sinuswelle geändert werden kann, um einen Klang in verschiedenen Tonhöhen zu spielen.

Alles, was wir für dieses Projekt brauchten, war ein Computer mit MATLAB R2018b und ein Paar Ohrhörer. Wir haben eine originelle Figur, Frances, als Maskottchen aufgenommen, um das Programm humorvoller zu machen.

Schritt 1: Erstellen Sie eine Benutzereingabe, um das Alter des Benutzers zu analysieren

Erstellen Sie eine Benutzereingabe, um das Alter des Benutzers zu analysieren
Erstellen Sie eine Benutzereingabe, um das Alter des Benutzers zu analysieren
Erstellen Sie eine Benutzereingabe, um das Alter des Benutzers zu analysieren
Erstellen Sie eine Benutzereingabe, um das Alter des Benutzers zu analysieren

Der erste Teil dieses Codes besteht darin, eine Benutzereingabe vorzunehmen, in der entschieden wird, ob sie alt genug sind, um den Hörtest durchzuführen. Warum nicht auch alberne Bilder unseres Maskottchens Frances hinzufügen? Laden Sie dazu die mitgelieferte ZIP-Datei herunter und extrahieren Sie sie dann in eine Datei, die in den Code gezogen werden kann. Fahren Sie mit dem Batch-Upload der Datei voller Zeichnungen fort, indem Sie Folgendes verwenden:

Dir = 'C:\Users\phoeb\OneDrive\Documents\MATLAB\Frances Drawings';GetDir = 'C:\Users\phoeb\OneDrive\Documents\MATLAB\Frances Drawings\*.jpg';

Um die Nachrichtenboxen und großen Bilder der Zeichnungen zu präsentieren, haben wir diese unterhaltsame Methode verwendet, um Ihnen Frances zu zeigen. Einfach ein Bild Ihrer Wahl im Format einlesen: variable = imread('nameofpicture.jpg');

Fahren Sie dann fort, es anzuzeigen, indem Sie imshow(variable); es wird dann als Figur in Ihrem MatLab angezeigt, wenn Sie es ausführen!

Als nächstes sind die Meldungsfelder, die im gesamten Code verwendet werden. uiwait() ist eine Funktion, bei der der Code angehalten wird, bis die für uiwait gewählte Funktion beendet ist. Diese gewählte Funktion ist msgbox('message', 'title', 'icon')!

Sie können die Nachrichten, die Frances sagt, gerne ändern, solange Sie das obige msgbox()-Format befolgen. Wenn Sie Frances Bilder verwenden möchten, kennzeichnen Sie 'icon' als 'custom' und setzen Sie dies mit einem Komma und der Variablen des Imreads des von Ihnen ausgewählten Bildes fort! Sie können auch die voreingestellten 'Icon'-Typen verwenden. es sollte so aussehen:

hi = imread('Regular.jpg'); % liest das Bild aus der Datei uploadedimshow(hi); uiwait(msgbox('Hallo und vielen Dank, dass Sie sich für unseren Hörtest entschieden haben! Hier ist Frances und er wird Ihnen heute bei Ihrem Test helfen!', 'Willkommen!', 'custom', hi));

Erstellen Sie als Nächstes eine Eingabe, die das Alter des Benutzers so abfragt!

UserAge = input('Bevor wir diesen Test starten, wie alt (Jahre) bist du? (z. B. 32, 56, …)\n', 's');

HINWEIS: Wenn die Zahlen seltsam sind und zu viele sind, verwenden Sie close all, um die früheren Zahlen zu entfernen, während Ihr Code ausgeführt wird

Dann erstellen Sie eine Schaltkastenstruktur! Denken Sie daran, dass die Benutzereingabe eine Zeichenfolge ist und Sie diese in einen numerischen Wert umwandeln müssen. Verwenden Sie also str2double(UserAge). Jeder Fall sollte eine Altersspanne haben, z. B. 4 bis 6 oder 18 bis 40. Um die Variable für einen der Fälle als wahr zu überprüfen, verwenden Sie num2cell(array) wie folgt:

switch str2double(UserAge) % ändert die Variable von einem String in einen numerischen Wert case num2cell(0:3)

frankreich = imread('Ei.jpg');

imshow (Frankreich);

uiwait(msgbox('Sie sind ein Fötus! Frances meint, Sie sollten Ihren Hörtest stattdessen bei einem Arzt machen!', 'Test verweigert!', 'custom', France));

Rückkehr

Die früheren Gruppen sollten zurückgegeben werden, um zu verhindern, dass der Benutzer mit dem Code fortfährt.

Denken Sie daran, die Fallstruktur zu beenden und alle Figuren zu schließen.

Schritt 2: Testen Sie das Audio für den Benutzer

Testen Sie das Audio für den Benutzer
Testen Sie das Audio für den Benutzer

Dieses Segment existiert, um sicherzustellen, dass der Ton des Teilnehmers auf seinem Gerät weder zu leise noch zu laut ist.

Um den Benutzer zu warnen, erscheint ein Meldungsfenster und wartet auf die Bestätigung des Benutzers, bevor es mit dem Ton fortfährt: uiwait(msgbox('Bevor der Test beginnt, möchten wir einen Audiotest durchführen, um Ihre Lautstärke zu überprüfen ist richtig! Bereit?', 'Warte!', 'Hilfe'));

Eine Sinuswelle wird mit einer Amplitude von 1 und einer Abtastrate von 1000 Hz abgespielt: T = [0:1/SampleRate:2]; y = 1*sin(2*pi*200*T); Ton (y, SampleRate);

Dem Benutzer wird dann eine Frage mit einer vom Benutzer eingegebenen Antwort gestellt: Q = input('Können Sie den Ton hören? [j/n] n', 's');

Dann wird eine Weile gesucht, wenn Q == 'n', wenn wahr, dann wiederholt sich der Ton und fragt den Benutzer erneut, bis sich die Antwort von 'n' auf 'y' geändert hat: während Q == 'n' wenn strcmp(Q, 'n') disp('Drehen Sie die Lautstärke Ihres Computers lauter.'); warte_sound; Pause(2); Q = input('Kannst du den Ton jetzt hören? [j/n] n', 's'); Ende Ende

Es gibt dann einen Moment des Wartens, bevor mit dem eigentlichen Prüfungsteil des Codes fortgefahren wird.

Schritt 3: Führen Sie den Audiometrietest für das rechte Ohr durch

Machen Sie den Audiometrietest für das rechte Ohr
Machen Sie den Audiometrietest für das rechte Ohr

In diesem Code wird eine Schleife für 6 Iterationen mit unterschiedlichen Frequenzen und Lautstärken für jedes einzelne Ohr ausgeführt. Je nachdem, welches Ohr Sie testen möchten, hat die Out-Variable in einer Zeile den Ton und in einer anderen Nullen.

Zuerst erstellen Sie zwei leere Linienvektoren, um die Frequenzen und die Amplitude des Schalls aufzuzeichnen, den der Benutzer hört.

Dieser Teil befindet sich in einer indizierten for-Schleife für beliebig viele Sounds, die Sie spielen möchten, wenn Sie die gespielten Frequenzen und die Amplitude zufällig anordnen möchten.

F ist die Frequenz: r = (rand*10000); Fs = 250 + r; (die rand-Funktion soll eine zufällig generierte Frequenz erzeugen) t ist eine bestimmte Zeitspanne, die fortschreitet, bestimmt durch: t = linspace(0, Fs*2, Fs*2); s ist die Sinuswelle: s = sin(2*pi*t*1000); (dies kann mit der Zufallsvariablen w multipliziert werden, um einen zufälligen Amplituden-/dB-Wert für die Klangfunktion zu erhalten: w = rand;)

Die Ausgabe für das rechte Ohr ist: Out = [zeros(size(t)); S]';

Die Ausgaben werden durch den Code abgespielt: sound(Out, Fs)

Der nächste Schritt besteht darin, eine Benutzeroberfläche mit den Codeaufzeichnungen zu erstellen, ob der Benutzer den Ton gehört hat oder nicht.

Zuerst machst du eine Figur und bestimmst die Position, an der die Figur erscheinen soll: gcbf = figure('pos', [30 800 350 150]);

***Wenn die Schaltfläche bei Ihnen nicht angezeigt wird, ist die Position der Abbildung, wie im obigen Array gezeigt, möglicherweise für Ihren Computer falsch positioniert. Um dieses Problem zu lösen, ändern Sie die Werte 30 und 800 in die gewünschte Position. Wenn Sie beispielsweise [0 0 350 150] haben, wird die GUI-Schaltfläche unten links auf dem Monitor angezeigt.***

Ein Togglebutton wird erstellt, um aufzunehmen, wenn der Benutzer den Ton hört, und die Position und Anzeige kann angepasst werden: tb = uicontrol('Style', 'togglebutton', 'String', 'Drücken Sie die Taste, wenn Sie einen Ton hören', ' tag', 'togglebutton1', 'Position', [30 60 300 40], 'Callback', 'uiresume(gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close(gcbf);'); Bei diesem speziellen Code wird der Code fortgesetzt und die leeren Vektoren fügen einen Wert hinzu, wenn die Schaltfläche gedrückt wird.

Erstellen Sie dann eine Wartefunktion, um die Antwort der Schaltfläche aufzunehmen und den Code in der Schaltfläche zu aktivieren, wenn sie gedrückt wird: h = randi([4, 7]); uiwait(gcbf, h); (Wir haben die Zufallsvariable h verwendet, damit die Teilnehmer nicht schummeln und die Anzahl der Sekunden bestimmen konnten, die zum Antworten erforderlich sind.)

Nachdem die Schleife beendet ist, behalten Sie die Frequenzausgangsvariable (freq_right) in Hz bei, also lassen Sie sie in Ruhe. Dann konvertieren Sie die Variable dB_right von Ampere in Dezibel, indem Sie die Gleichung verwenden: dB_right = mag2db(amp_right)*(-1);

Fügen Sie dann die Funktion hinzu: Alle schließen. Dadurch werden unnötige Zahlen vermieden, die möglicherweise aufgetaucht sind.

Fügen Sie eine Pausenfunktion hinzu, etwa 10 Sekunden, um dem Benutzer Zeit zu geben, sich auf das linke Ohr einzustellen und vorzubereiten.

Schritt 4: Erstellen Sie den gleichen Code für das linke Ohr

Erstellen Sie den gleichen Code für das linke Ohr
Erstellen Sie den gleichen Code für das linke Ohr

Wiederholen Sie den Code für das rechte Ohr, um das nächste Segment zu erstellen, das das linke Ohr testet. Der einzige Unterschied besteht darin, zu ändern, von welchem Ausgangskanal der Ton kommt. Drehen Sie dazu die Reihenfolge der Array-Werte für die Variable Out um. Es sollte so aussehen:

Aus = [s; Nullen(Größe(t))]';

Dadurch kommt kein Ton aus dem rechten Kanal, sondern stattdessen aus dem linken Kanal!

Schritt 5: Erstellen Sie eine Side-by-Side-Abbildung, um die Daten zu vergleichen

Erstellen Sie eine Side-by-Side-Abbildung, um die Daten zu vergleichen
Erstellen Sie eine Side-by-Side-Abbildung, um die Daten zu vergleichen
Erstellen Sie eine Side-by-Side-Abbildung, um die Daten zu vergleichen
Erstellen Sie eine Side-by-Side-Abbildung, um die Daten zu vergleichen

Erstellen Sie nun ein Diagramm, um die Daten anzuzeigen! Sie fügen zwei Diagramme in eine einzige Abbildung ein, also tun Sie dies!

Figur(1);Teilplot(1, 2, 1); ***Nebenplot(1, 2, 2) für den anderen

Fügen Sie für jede Unterzeichnung diese Patches mit bestimmten Farben und Koordinaten hinzu. Diese Abschnitte aus dem Diagramm, je nachdem, wie groß der Grad des Hörverlusts ist. Wie so:

Pflaster ([250 8000 8000 250], [25 25 -10 -10], [1.00, 0.89, 0.29]); %yellowhold on % Der Subplot enthält jetzt die folgenden Patches und Scatterplots

text(3173, 8, 'Normal');

Pflaster ([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % Grün

text(3577, 33, 'mild');

Pflaster ([250 8000 8000 250], [55 55 40 40], [0,16, 0,87, 0,87]); % Cyan

text(2870, 48, 'Mäßig');

Pflaster ([250 8000 8000 250], [70 70 55 55], [0,22, 0,36, 0,94]); % Blau

text(1739, 62, 'Mittelschwer');

Pflaster ([250 8000 8000 250], [90 90 70 70], [0,78, 0,24, 0,78]); % Violett

text(3142, 80, 'Schwer');

Pflaster ([250 8000 8000 250], [120 120 90 90], [0,96, 0,24, 0,24]); % rot

text(3200, 103, 'tiefsinnig')

Fügen Sie dann die linken und rechten Streudiagramme hinzu! Wir können Ihnen einen allgemeinen Landesdurchschnitt zur Verfügung stellen! Hier:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-Wert, linkes OhrNat_dBL = [10 3 10 15 10 15]; % y-Wert

Nat_FreqR = [250 500 1000 2000 4000 8000]; % rechtes Ohr

Nat_dBR = [10 5 10 15 10 15];

Die Streudiagramme sollten die linken und rechten Punkte erkennen. Du könntest Kreuze und Kreise machen!

NL = Scatter(Nat_FreqL, Nat_dBL, 'bx'); % zeichnet blaue Kreuzpunkte aufNR = Scatter(Nat_FreqR, Nat_dBR, 'ro'); % zeichnet rote Kreise

Erstellen Sie eine Legende für die nationale Grafik, indem Sie sie bestimmten Variablen zuweisen: legend([NL NR], {'title1', 'title2'});

Stellen Sie Ihr x-Limit von 250 bis 8000 Hz und Ihr y-Limit von -10 bis 120 dB ein. Denken Sie daran, Ihre vertikalen Ticks mit yticks() zu ändern.

Beschriften Sie Ihre x-Achse mit "Frequenz Hz" und Ihre y-Achse mit "Pitch dB".

Kehren Sie die y-Achse um, indem Sie die Achse mit ax = gca. sammeln

Binden Sie dann die Eigenschaft der y-Richtung daran mit: ax. YDir = 'reverse

Jetzt ist der Code für den zweiten ungefähr gleich, aber ohne die Legende und die Streudiagramme mit den Variablen aus dem linken und rechten Test.

Fügen Sie nach all dem eine Pause-Funktion für etwa 10 Sekunden hinzu, damit sich der Benutzer seine Ergebnisse ansehen kann.

Schritt 6: Fügen Sie eine kleine Dankesnachricht hinzu, wenn Sie möchten

Fügen Sie eine kleine Dankesnachricht hinzu, wenn Sie möchten!
Fügen Sie eine kleine Dankesnachricht hinzu, wenn Sie möchten!

Dies ist nur zum Spaß, wenn Sie möchten, aber fügen Sie noch ein imread(), imshow() und uiwait(msgbox()) als Dankeschön und zum Abschied hinzu! Ansonsten denken Sie daran, clf einzugeben; alle schließen; clc; um alles zu schließen. Gut gemacht, du hast es geschafft!

Empfohlen: