Hallo!
Ich würde gern ein selbsterzeugtes Audio-Signal erkennen. Deshalb habe
ich überlegt, z.B. ein solches Audiosignal zu verwenden:
1
1kHz:XXXXX
2
2kHz:X_X_X
3
3kHz:_X_X_
4
Zeit:12345(Sekunden)
Also das Signal geht 5 Sekunden lang, das 1kHz-Signal ist über die
ganzen 5 Sekunden an, und das 2kHz- und 3kHz-Signal wechseln sich ab.
(Das Ganze ist nur ein Bespiel.)
Toll wäre es jetzt, eine Schaltung zu haben, die mir genau dann ein
High-Signal liefert, wenn ein 1kHz-Signal vorhanden ist (und später
entsprechend noch je eine für 2 und 3KHz). Dann könnte ich einfach diese
Ein-/Aus-Signale an einen Mikroprozessor weitergeben, der auf dieses
einfache Muster prüft und mir danach bestätigt, dass das Audiosignal
vorhanden war.
Leider habe ich so meine Probleme mit der Schaltung. Das Audiosignal
bekomme ich von einem Elektretmikrofon. Bis jetzt habe ich eigentlich
nur diesen Filter versucht, aber habe es damit nicht geschafft, eine
bestimmte Frequenz gezielt herauszufiltern:
https://www.electronics-tutorials.ws/wp-content/uploads/2018/05/filter-fil98.gif
Am liebsten wäre mir ein Filter, der zum Beispiel nur auf 995 bis 1005
Hertz reagiert und sonst gar nicht. Ich habe aber so gut wie keine
Erfahrung. Habe ich hier den richtigen Ansatz? Reicht ein ein- oder
mehrstufiger Bandpassfilter oder sollte ich vielleicht einen ganz
anderen Weg gehen?
Vielen Dank im Voraus!
Simon W. schrieb:> Toll wäre es jetzt, eine Schaltung zu haben, die mir genau dann ein> High-Signal liefert, wenn ein 1kHz-Signal vorhanden ist (und später> entsprechend noch je eine für 2 und 3KHz).
Was meinst du mit "vorhanden ist"?
Willst du die Signale aus Frequenzgemischen heraus erkennen oder tritt
immer nur eins gleichzeitig auf?
Guck dir mal den NE567 an.
> Dann könnte ich einfach diese Ein-/Aus-Signale an einen Mikroprozessor> weitergeben, der auf dieses einfache Muster prüft und mir danach bestätigt,> dass das Audiosignal vorhanden war.
Warum soll der µC nicht direkt die Frequenzen detektieren?
Wenn die Ein-/Aus-Signale ohnehin an einen Mikroprozessor gehen sollen -
hätte der nicht einen Analog-Digitalwandler Eingang, über dessen
Zeitreihe von sampling-Werten Du dann einfach eine FFT berechnen kannst?
Dann könntest Du das analoge Audio Signal einfach direkt mit der
Ziel-CPU verarbeiten.
Für den Bereich bis "ein paar kilo-Hertz" sollten sowas ja auch eher
langsame CPUs hinbekommen... und das wäre dann fast beliebig
trennscharf.
Thorsten W. schrieb:> Am liebsten wäre mir ein Filter, der zum Beispiel nur auf 995 bis 1005> Hertz reagiert und sonst gar nicht.
Nun, (fast) ideale Filter sind ziemlich tricky. Willst du nicht wirklich
versuchen und brauchst du auch nicht für deine Anwendung.
Dafür genügt etwas, was z.B. zwischen 800, 1600 und 3200Hz unterscheiden
kann. Z.B. das hier:
Beitrag "Audio Spektrum Analyzer mit ATtiny85"
Du musst dir aus dem Projekt nur die ganzen LEDs und das Brimborium zu
deren Farbkonfiguration wegdenken, der Tiny gibt seine Filterergebnisse
auch via UART aus. Die musst du einfach nur auslesen, auswerten und
alles ist chic.
Aber sei gewarnt: wenn du Rechtecke als "Audiosignal" erzeugst, gibt es
naturgemäß Oberwellen. Die wird der Tiny auch sehen. D.h.: wenn du z.B.
eine 800Hz-Rechteckfrequenz sendest, wird auch auf dem 1.6kHz-Kanal und
dem 3.2kHz-Kanal etwas zu bemerken sein. Nur halt deutlich leiser.
Wieviel leiser genau, hängt von dem Analog-Geraffel ab. Also dem
Audio-Verstärker der Quelle, der Luftstrecke und dem Mikrofon.
Sprich: du mußt bei der Auswertung einfach über alle Kanäle gehen und
den "lautesten" auswählen.
Thorsten W. schrieb:> Toll wäre es jetzt, eine Schaltung zu haben, die mir genau dann ein> High-Signal liefert, wenn ein 1kHz-Signal vorhanden istNE567
c-hater schrieb:> Wieviel leiser genau, hängt von dem Analog-Geraffel ab. Also dem> Audio-Verstärker der Quelle, der Luftstrecke und dem Mikrofon.
Verdammt, da habe ich doch das schwächste Glied glatt vergessen: Der
Lautsprecher der Quelle hat natürlich auch einen signifikanten Einfluss.
Jeml schrieb:> Goertzel-Algorithmus
Genau das ist der Weg zum Ziel. Bloß alleine ziemlich hilflos, wenn es
über mehrere Oktaven gehen soll und obendrein Oberwellen zu erwarten
sind...
Vielen, vielen Dank für all die Antworten!
Ich versuche mich gerade zu den ganzen Themen zu informieren und komme
kaum hinterher. :)
Im Moment informiere ich mich über die reine Software-Lösung. Ich dachte
eigentlich, ein Arduino sei mit einer FFT-Analyse total überfordert,
weil der ja schon Probleme hat, die hörbaren Frequenzen einzulesen...
Aber anscheinend muss ich mir das noch einmal genauer anschauen.
Erich schrieb:> Wenn man wüsste, was genau du vorhast oder welche Informationen oder> Daten übertragen du möchtest, könnte man ggf. auch zu anderen Lösungen> kommen, beispielsweise Bauteile aus IR (Infrarot) Sender und -Empfänger> lassen sich auch kabelgebunden verwenden. Oder von Funksteckdosen> Sendern und Empfängern.
Ich hab ein Handy, bei dem ich den Klingelton beliebig einstellen kann
und möchte erkennen, ob es gerade mit genau diesem Klingelton klingelt
oder nicht. Eine zusätzliche Datenübertragung soll nicht stattfinden.
c-hater schrieb:> Jeml schrieb:>> Goertzel-Algorithmus>> Genau das ist der Weg zum Ziel. Bloß alleine ziemlich hilflos, wenn es> über mehrere Oktaven gehen soll und obendrein Oberwellen zu erwarten> sind...
Genau deswegen setzen übrigens gute DTMF-Decoder zwar auch auf Görtzel
auf, betreiben aber eine zweite Filterbank eine Oktave höher.
Die Kombination von 1, 2 und 3 kHz ist maximal ungünstig, weil die
beiden höheren Frequenzen Oberwellen der 1 kHz sind.
Ich würde dazu auch 3x NE567 empfehlen, aber mit anderen Frequenzen, die
sich deutlicher voneinander unterscheiden. Zum Beispiel 1 kHz, 1,6 kHz
und 2,56 kHz.
c-hater schrieb:> Jeml schrieb:>> Goertzel-Algorithmus> Genau das ist der Weg zum Ziel. Bloß alleine ziemlich hilflos, wenn es> über mehrere Oktaven gehen soll und obendrein Oberwellen zu erwarten> sind...
Wenn die Frequenz bekannt ist, ist das doch kein Problem. Man faltet
permanent mit 1kHz (Rechteck!) und triggert nach einigen 100ms das
"An-Signal". Selbiges hat Hysterese und kann Aussetzer überbrücken. Dann
muss man nur noch die 5 sec abwarten, die das Signal aktiv sein soll.
Wolfgang schrieb:> Guck dir mal den NE567 an.MaWin schrieb:> NE567
Tondecodierung ist sein Job. Aber Vorsicht, die haben erkennbar Drift
und man hat keine Freude, wenn man ihn zu schmalbandig auslegt.
Es gab von dem eine L-Variante, die scheint stabiler zu sein.
Gibt es den LM567 eigentlich noch? Den hatten wir vor etwa 25 Jahren in
einem Serienprodukt, da hat dessen zu enge Auslegung erhebliche
Servicekosten nach sich gezogen.
Stefan ⛄ F. schrieb:> Die Kombination von 1, 2 und 3 kHz ist maximal ungünstig, weil die> beiden höheren Frequenzen Oberwellen der 1 kHz sind.
Das ist Bedenkenträgerei und wird in der Realität keinen Ärger machen -
sein Pilotton ist lang genug.
> Ich würde dazu auch 3x NE567 empfehlen, aber mit anderen Frequenzen, die> sich deutlicher voneinander unterscheiden. Zum Beispiel 1 kHz, 1,6 kHz> und 2,56 kHz.
1 kHz, 1,6 kHz und 2,56 kHz unterscheiden sich deutlicher als 1, 2, 3
kHz?
Wenn die Signalkette das hergibt, kann man auch Frequenzen oberhalb des
Hörbereiches verwenden. Gab es mal in der Tonstudiotechnik "Telefunken
Telident", dem Audiokanal eine höherfrquente FSK mitzugeben und damit
anzuzeigen, wie die Analogleitung heißt.
Erich schrieb:> einen Standard verwenden: DTMF>> Empfänger:> Hier bietet sich der Decoder MT8870 an,
Lange her, war da nicht noch der MT8880, der sowohl Sender als auch
Empfänger konnte?
Hat auf jeden Fall den Vorteil, dass die DTMF-Frequenzpaare nicht
zufällig im Nutzsignal auftreten.
Stefan ⛄ F. schrieb:> Die Kombination von 1, 2 und 3 kHz ist maximal ungünstig, weil die> beiden höheren Frequenzen Oberwellen der 1 kHz sind.
Solange man nicht ausgerechnet zeitlich unsymmetrische Signale (z.B.
einen Sägezahn) verwendest, gibt es mit der 2ten Oberwelle doch wohl
kein Problem ;-)
Vielen Dank noch einmal für alle Antworten!
Ich habe jetzt die Softwarelösung genommen, weil diese flexibler ist.
Tatsächlich bin ich aber ziemlich an die Grenzen des Arduino Unos
gekommen. Ich beobachte nur den halben hörbaren Frequenzbereich. Ein
Zyklus hat 13,3ms und davon benötige ich 12,6ms für die Berechnung. Das
ist also ganz schön knapp und mit dem kompletten hörbaren Bereich hätte
ich gar keine Chance.
Ich sollte es noch ein bisschen besser testen, aber es scheint zu
funktionieren und ich bin glücklich! Danke an alle!