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?
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!
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.
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.
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.
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
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
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/