Hi, ich möchte verschiedene Signale (im hörbaren Bereich) auf ihre Grundfrequenz hin messen, um einen Oszillator auf einen musikalischen Grundton zu tunen. Es gibt eine application note von Atmel, die aber von einer externen Clock spricht, die man misst: http://ww1.microchip.com/downloads/en/AppNotes/doc8365.pdf Also wohl den pin change interrupt zählen. Klingt recht einfach. Unter "Clock" verstehe ich allerdings ein Rechtecksignal. Ich vermute, dass das bei anderen Signalarten, wie Sinus oder Säge, nicht so einfach geht. Oder spielt die Flankenform für den Interrupt keine Rolle? Hat jemand Tipps für mich?
Anton G. schrieb: > Oder spielt die Flankenform für den Interrupt keine Rolle? Die Eingänge sind Schmitt-Getriggert
Anton G. schrieb: > Oder spielt die Flankenform für den Interrupt keine Rolle? Das stimmt, die Flankenform macht den Interrupts nichts aus. Mir scheint, du suchst eine FFT
EAF schrieb: > Anton G. schrieb: > >> Oder spielt die Flankenform für den Interrupt keine Rolle? > > Das stimmt, die Flankenform macht den Interrupts nichts aus. > Mir scheint, du suchst eine FFT Warum eine FFT? Für die Grundfrequenz reicht doch der reziproke Frequenzzähler hier aus dem Forum. Frag mal die Suchfunktion (es gab sogar einen Artikel hier, der einen Frequenzzähler mit einem AVR vorgestellt hat, glaube ich).
Warum so kompliziert? Entscheidend ist die Erkennung der Nulldurchgänge. Wenn man allerdings ein Signal mit kräftigen Harmonischen hat, kann es sein dass der Schmitt-Trigger die doppelte oder dreifache Anzahl Nulldurchgänge liefert, das hängt von seiner Lage der beiden Triggerpunkte und der Hysterese ab. Die Appnote hat jemand geschrieben, der vorher noch nie von Frequenzzählern gehört hatte. Derart umständlich formuliert, man kapiert kaum was er eigentlich sagen will. Das Prinzip des Reziproken Zählers scheint ihm unbekannt zu sein, gerade für Niederfrequenz ist das viel höher auflösend. Dazu muss man allerdings eine große Division ausführen, damit ist der Tiny eine Weile beschäftigt.
Anton G. schrieb: > ich möchte verschiedene Signale (im hörbaren Bereich) auf ihre > Grundfrequenz hin messen, um einen Oszillator auf einen musikalischen > Grundton zu tunen. Aufgenommene Signale von einem realen Musikinstrument? Anton G. schrieb: > Also wohl den pin change interrupt zählen. So einfach dürfte die Grundfrequenz nicht bestimmbar sein. Siehe Anhang, ein klingendes 'b' von einem Horn, aufgenommen mit einfachem Equipment. Da kommt dann eher die Frequenz der zweiten Harmonischen heraus. Das Bild kann bei anderen Schallquellen noch viel mehr Nulldurchgänge bei gleicher Grundfrequenz enthalten.
Stefan S. schrieb: > Warum eine FFT? Wenn von Anton G. schrieb: > Grundfrequenz die Rede ist, wird wohl eine Gemengelage verschiedenster Frequenzen vorliegen. Dann ist schnell Ende mit Nulldurchgänge zählen.
Edit: War schief gewickelt, ich dachte, er wollte denn Oszillator messen und nicht das "musikalische" Eingangssignal. Da bin ich klar bei euch, dass das wohl nach einer FFT schreit!
:
Bearbeitet durch User
Anton G. schrieb: > ich möchte verschiedene Signale (im hörbaren Bereich) auf ihre > Grundfrequenz hin messen, um einen Oszillator auf einen musikalischen > Grundton zu tunen. Nachtrag: TO, könntest du bitte genauer erklären, was du damit meinst? Wie sieht dein Eingangssignal aus? Ist es ein Oszillator, den du verstimmen willst? Oder ein Instrument bzw Musik? Immerhin wird weiter unten von Anton G. schrieb: > anderen Signalarten, wie Sinus oder Säge, Gesprochen, was für mich so klingt, als ob eine PLL für einen LFO programmiert werden soll - und bei Sinus oder Sägezahn würde tatsächlich ein normaler Frequenzzähler ausreichen.
Statt FFT bietet sich bei einem kleinen MC auch der Goertzel Algorithmus an: https://www.embedded.com/the-goertzel-algorithm/ Beitrag "Goertzel-Algorithmus" https://hackaday.io/project/16615-spectrum-analyser-code/log/48061-an-integer-version-of-goertzel-algorithm
Einfach mal so Eingeworfen. Analoge Synthesizer, stimmen sich mit dem Prinzip des PLL Sprich ein Kontrollierter (Quarz) Oszilator schwingt mit der exakten Frequenz, und die zu Stimmenden VCO's werden mit einer PLL so lange Gestimmt biss sie sauber einrasten. Als groben Rahmen aus dem High-End Musik-Sektor.
:
Bearbeitet durch User
HildeK schrieb: > So einfach dürfte die Grundfrequenz nicht bestimmbar sein. > Siehe Anhang, ein klingendes 'b' von einem Horn, aufgenommen mit > einfachem Equipment. Da kommt dann eher die Frequenz der zweiten > Harmonischen heraus. Typisch hat die Grundwelle die höchste Amplitude. Mit einem Schmitt-Trigger, dessen Hysterese man auf 10% bzw. 90% der Spitzenwerte einregelt, sollte das gehen. Z.B. mit 2 Kondensatoren, die sich über Dioden auf die Spitzenwerte - 0,7V aufladen und dann auf 2 Komparatoren gehen.
leider sind viele Schallquellen unx Instrumente nicht typisch. Die Grundwelle ist oft schwach. Gitarre, Geige, usw...
Gunnar F. schrieb: > leider sind viele Schallquellen unx Instrumente nicht typisch. Die > Grundwelle ist oft schwach. Gitarre, Geige, usw... Ist richtig und trotzdem schaffen Gute Harmonizer es die Grund-Frequenz zu finden, und können diese exakt bestimmen. Angefangen schon bei Stimmgeräten.
@Peter D. Ja, das ist ein möglicher Vorschlag. Ich wollte nur darauf hinweisen, dass ein einfacher Schmitt-Trigger-Input am AVR und der Pin Change Interrupt nicht zufriedenstellende Ergebnisse liefer wird. Man muss vorher aufbereiten. Außerdem: Signale von realen Instrumenten sehen sicher nicht immer so aus, wie hier an dem Hornbeispiel. Wobei: ich habe mir gerade eine Aufnahme eines Bariton und einer Trompete angeschaut. Das sieht eher besser aus.
Matthias S. schrieb: > Statt FFT bietet sich bei einem kleinen MC auch der Goertzel Algorithmus > an: Dafür muss man aber die Frequenz wissen. Der Goertzel Algorithmus liefert einen Datenpunkt aus dem Ergebnis einer FFT.
Ich würde es mit Autokorrelation versuchen und das Signal vorher evtl. noch auf den Bereich der zu erwartenden Grundfrequenzen bandpassfiltern (für Musikinstrumente bspw. 15 Hz bis 5 kHz).
schon mal Danke für die vielen Hinweise! Zur Klärung: ich will keine Musikinstrumente tunen (außer man bezeichnet eine Oszillatorschaltung schon als eines), sondern ein Rechteck, Dreieck- oder Sägezahnsignal, ggf. auch einen Sinus frequenz-messen. Und eben im Audiobereich ca. 20Hz - 20kHz
Yalu X. schrieb: > Ich würde es mit Autokorrelation versuchen [...] Die Herren Wiener und Chintschin lassen grüßen...
Egon D. schrieb: > Die Herren Wiener und Chintschin lassen grüßen... Aaach - es geht nur darum, die Grundfrequenz zu bestimmen. Das Spektrum benötigt niemand.
Wolfgang schrieb: > Egon D. schrieb: >> Die Herren Wiener und Chintschin lassen grüßen... > > Aaach - es geht nur darum, die Grundfrequenz zu bestimmen. Das hatte ich verstanden. > Das Spektrum benötigt niemand. Jein. Yalu hat Auswertung der Autokorrelationsfunktion vorgeschlagen, und die bestimmt man schätzungsweise am schnellsten über die inverse FFT der spektralen Leistungsdichte. Ich vermute, dass zwei mal N*log(N) immer noch schneller ist als N^2.
Ich glaube, dass es nur was "Richtiges" wird, wenn die Abtastrate hoch genug ist und eine FFT laufen kann. Alles andere ist Sonderfall, bei dem man sich die Randbedingungen sehr genau anschauen muß!! Also warten wir auf Infos... Gruß Rainer
> Hat jemand Tipps für mich?
Schalte einen VCF vor deine "Zaehl"-Mimik.
Den VCF drehst du dann langsam auf, bis der Zaehler stabile Werte
liefert.
Anton G. schrieb: > Dreieck- oder Sägezahnsignal, ggf. auch einen Sinus frequenz-messen. > > Und eben im Audiobereich ca. 20Hz - 20kHz Dann nimm einen reziproken Frequenzzähler. Unter dem Stichwort findest Du hier im Forum jede Menge Schaltungen und Programme. Bleibt einzig die Frage, wieviele Stellen angezeigt werden sollen: 4 - 8, 4xLCD, 5x7-Segment, 6x7-Segment, 2x16 LCD-Modul, ATtiny45, ATtiny2313, ATmegaXXX, Arduino - alles kein Problem. Anton G. schrieb: > Ich vermute, dass > das bei anderen Signalarten, wie Sinus oder Säge, nicht so einfach geht. > Oder spielt die Flankenform für den Interrupt keine Rolle? Ein Komparator am Eingang liefert saubere Rechtecksignale und bietet eine Empfindlichkeit bis in den mV-Bereich.
m.n. schrieb: > Bleibt einzig die Frage, wieviele Stellen angezeigt werden sollen: 4 - > 8, 4xLCD, 5x7-Segment, 6x7-Segment, 2x16 LCD-Modul, ATtiny45, > ATtiny2313, ATmegaXXX, Arduino - alles kein Problem. Wenn du jetzt auch noch verrätst, wie das Signal aufbereitet werden muss, um eine Qualität der Zeitmessung zu erreichen, die eine Anzeige der Signalfrequenz auf gar 8 Stellen rechtfertigt, bist du der King. Vielleicht sollte man gleich noch eine mindestens 5-stellige Anzeige für das Vertrauensintervall der Messung vorsehen ;-) 2x16 wird man also schon gut brauchen.
Wolfgang schrieb: > Wenn du jetzt auch noch verrätst, wie das Signal aufbereitet werden > muss, um eine Qualität der Zeitmessung zu erreichen, die eine Anzeige > der Signalfrequenz auf gar 8 Stellen rechtfertigt, bist du der King. Lass stecken! So, wie Du fragst, willst Du es doch garnicht wissen.
Hallo Anton, ich habe für eine Art "Bassgitarre" eine Frequenzmessung der Grundfrequenz nach diesem Algorithmus gemacht, der sehr gut auf einem AVR zu implementieren und auch nicht viel Rechenleistung benötigt: https://www.cycfi.com/2017/10/fast-and-efficient-pitch-detection/
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.