Nachdem die Frequenz ermittelt wurde, muss nun dem Anwender dargestellt werden, welche Soll-Note erkannt wurde und wieviel die berechnete Ist-Note von der Soll-Note abweicht, damit dieser sein Instrument stimmen kann.

Abschätzung der Soll-Note

Dabei wird gesucht, welcher Notenfrequenz, die gemessene Frequenz am nächsten ist. Da die Frequenzskala logarithmisch ist, müssen die Schranken von einzelnen Noten bestimmt werden, die von der Hauptfrequenz +-50 cent entfernt sind.

Berechnung der Schranken

Die Schranken, die 50 cent von der Hauptfrequenz entfernt sind, werden zunächst einmalig berechnet. Wenn sich die Kammertonfrequenz f_{KT} (z.B. A4=440Hz) ändert, müssen die Schranken wieder berechnet werden, aber nicht in jedem Messzyklus.

Die Frequenzen der Hauptnoten berechnen sich als

(1)   \begin{equation*} \begin{aligned} f_{i,50c}&=\frac{f_{KT}}{ 2^{\frac{i}{12}}}\\ i&\in \mathbb{N} \end{aligned} \end{equation*}

Dann können wir die 50 cent verschobene Frequenzen als

(2)   \begin{equation*} \begin{aligned} f_{i,50c}&=\frac{f_{KT}}{ 2^{\frac{i-0.5}{12}}} \\ i\in \mathbb{N} \end{aligned} \end{equation*}

berechnen.

Die Implementierung kann folgendermaßen realisiert werden:

Suche nach den Schranken

Dafür eignet sich der binäre Suchalgorithmus, wenn wir keine Vorschätzung haben. Falls wir eine Vorschätzung haben (ein guter Ansatz ist die letzte gemessene Schranke zu nehmen) eignet sich auch die lineare Suche.

Im folgenden ist die Implementierung mit einem modifizierten binären Suchalgorithmus gezeigt.

Berechnung der Abweichung

Die Abweichung von der Soll-Note kann folgendermaßen berechnet werden.

Für die Zuordnung des Notenindex zur Notenbezeichnung ist ein String-Array hinterlegt.

Der gesamte Ablauf der Notenfindung sieht also folgendermaßen aus.

Ressourcen

Vollständigen Target-Code der Tuner-Anzeige vom Github herunterladen.