Forum: Analoge Elektronik und Schaltungstechnik Vorhandensein von 1kHz-Signal in Ein-/Aus-Signal umwandeln


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Thorsten W. (burgin)


Lesenswert?

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!

von Wolfgang (Gast)


Lesenswert?

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?

von Lutz V. (lutz_vieweg)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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.

von Erich (Gast)


Lesenswert?

Thorsten W. schrieb:
> Ich würde gern ein selbsterzeugtes Audio-Signal

JA,
das wäre viel einfacher, würdest du anstatt deiner "selbstausgedachten" 
Frequenzen einen Standard verwenden: DTMF
Bekannt als "Tonwahl-Signale" aus der Telefontechnik.

https://de.wikipedia.org/wiki/Mehrfrequenzwahlverfahren

Sender:
Die zwei Frequenzpaare jeder Ziffer kann man relativ einfach mit jeden 
uC erzeugen.
Oder alte ICs verwenden CD22859E
https://www.robkalmeijer.nl/techniek/electronica/radiotechniek/hambladen/qst/1988/07/page32/index.html

Empfänger:
Hier bietet sich der Decoder MT8870 an,
rein als uC-Software isses sicher auch möglich, aber komplizierter.
https://www.roboter-bausatz.de/p/mt8870-dtmf-sprach-audio-decoder-telefon-modul-fuer-arduino-phone

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.

Gruss

von Erich (Gast)


Lesenswert?

Nachtrag:

Zu DTMF gibt es natürlich bereits eine Unmenge von Forumsbeiträgen hier.

Suche verwenden:
https://www.mikrocontroller.net/search?query=DTMF

von MaWin (Gast)


Lesenswert?

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 ist

NE567

von c-hater (Gast)


Lesenswert?

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.

von Jeml (Gast)


Lesenswert?

Goertzel-Algorithmus

von c-hater (Gast)


Lesenswert?

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...

von Thorsten W. (burgin)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

Beitrag #7094439 wurde vom Autor gelöscht.
von Walter T. (nicolas)


Lesenswert?

Gödel-Algorithmus.

von c-hater (Gast)


Lesenswert?

Walter T. schrieb:

> Gödel-Algorithmus.

Da spricht definitiv der Flachmann...

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von Manfred (Gast)


Lesenswert?

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.

von Walter T. (nicolas)


Lesenswert?

Walter T. schrieb:
> Gödel-Algorithmus.

Schande über mein Haupt.

von Wolfgang (Gast)


Lesenswert?

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 ;-)

von Thorsten W. (burgin)


Lesenswert?

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!

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
Noch kein Account? Hier anmelden.