Grundfrequenz eines Signals mit AVR messen

Gast #6808716
Lesenswert?

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?
#6808733
Lesenswert?

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).
#6808738
Lesenswert?

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.
Gast #6808750
Lesenswert?

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.
Angehängte Dateien:
#6808773
Lesenswert?

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.
(Firma: S-C-I DATA GbR) #6808778
Lesenswert?

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.
#6808799
Lesenswert?

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.
Gast #6808820
Lesenswert?

@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.
Gast #6809136
Lesenswert?

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
Gast #6809272
Lesenswert?

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.
Gast #6809563
Lesenswert?

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.
Gast #6809568
Lesenswert?

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.
Gast #6809571
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren