Erkennen von "Pfeifen"

Hallo NG,

ich habe einen Dimmer mit einem Atmel-µC gebaut - funktioniert schon ganz gut...

Jetzt möchte ich über (menschliches) Pfeifen die Helligkeit einstellen - man pfeift auf einer bestimmten Frequenz, und das Licht wird heller und umgekehrt...

Realisieren würde ich das Ganze mit einer FFT (z.B. den ASM-Code von

formatting link
und einem Mikrofon am Atmel.

Jetzt gehts schon los - welches Mikrofon nehme ich dafür und wie verbinde ich es mit dem Atmel? Brauche ich dazu irgendwelche Verstärker bzw. muss ich das Signal erst aufbereiten für den ADC?

Die Erkennung des Pfeifens sollte innerhalb eines 30qm-Raums problemlos erfolgen können...

Danke schon mal für Eure Hilfe, Martin

Reply to
Martin Hinterdobler
Loading thread data ...

Ich nicht.

Ja, du brauchst sowieso einen Verstärker. Und den kann man dann auch gleich als Bandpaß auslegen, so daß er nur den Frequenzbereich des Pfeifens nennenswert verstärkt. Das erhöht nicht nur die Zuverlässigkeit und mögliche Empfindlichkeit des Gesamtsystems ungemein, sondern erspart auch die FFT. Es reicht dann einfache Messung der Periodendauer, z.B. über eingebauten Analogkomparator und Capturefunktion des Timers.

Reply to
Heiko Nocon

Das hab ich mir auch schon überlegt...aber ich würde gerne auf verschiedene Frequenzen reagieren können, auf ansteigende, abfallende usw. und da wird es mit (einem) Bandpass schwierig...

Was mich interessieren würde - wie kann ich eine Art Automatic Gain Control machen, so dass (z.B. nachts) leises Pfeifen genauso erkannt wird wie lauteres Pfeifen wenn z.B. gleichzeitig eine DVD mitläuft...

Danke, Martin

Reply to
Martin Hinterdobler

Er muss nur hinreichend Breitbandig sein. Wesentlich mehr als eine Oktave umfasst der "Pfeifumfang" ohnehin nicht.

In Software. Stichwort Kompression.

Marcel

Reply to
Marcel Müller

Das ist doch nur eine Frage der Band_breite_...

Natürlich. Du brauchst dazu nur einen zweiten, gleichartig aufgebauten Verstärker. Diesmal ohne Bandpaß, dafür mit nachfolgender Gleichrichtung und Integrierglied. Das entstehende Signal benutzt du als Referenzspannung für den Analogkomparator des Atmel.

Also Dual-OpAmp, ein bissel Hühnerfutter dazu und fertig ist der Kram.

Reply to
Heiko Nocon

Hallo!

| Realisieren würde ich das Ganze mit einer FFT (z.B. den ASM-Code von |

formatting link
und einem Mikrofon am Atmel.

Ich möchte mal eben in die Runde fragen, ob man sich sowas überhaupt mit einem AVR vorstellen kann. Immerhin sind die Dinger maximal mit 16MHz getaktet und ich kann mir nicht vorstellen, dass FFT mit 8bit auskommt. Breitere Berechnungen erfordern dann auch deutlich mehr Taktzyklen.

Also ich kann es schwer einschätzen, deshalb frage ich, aber würdet ihr nicht sagen, dass für so einen Zweck ein DSP geeigneter ist? Oder geht das mit dem Atmel, dann würde mich aber interessieren, wieviel der dann noch nebenher leisten kann.

Grüße!

P.S.: Wenn ich das jetzt mal ganz dämlich überschlage: f_max=8kHz (schon sehr tief), f_abtast>=16kHz. Taktfrequenz ist 16MHz. D.h. zwischen den Samples liegen max. 1.000 Taktzyklen für die FFT und alles andere.

Reply to
Günther Frings

G=FCnther Frings schrieb:

mit

Die FFT-Routine von elm-chan.org arbeitet mit 16 bit Datenbreite.

hr

Die erw=E4hnte FFT l=E4uft auf dem ATmega und man kann damit im NF-Bereich (zumindest bei Sprachfrequenzen) gut arbeiten.

Die eigentliche FFT-Routine ist in Assembler geschrieben. Man kann die FFT mit 64, 128, 256 und 512 Punkten laufen lassen. Der Verfasser dieser FFT-Routine hat einige Messungen gemacht bez=FCglich der Rechengeschwindigkeit (nachfolgend zitiert aus "ffft.s"):

;------------------------------------------------------------------- ; 16bit fixed-point FFT performance with a MegaAVR @16MHz (measured) ; ; Points: Input, Execute, Output, Total: Throughput ; 64pts: .17ms, 2.0ms, 1.2ms, 3.4ms: 19.0kpps ; 128pts: .33ms, 4.6ms, 2.4ms, 7.3ms: 17.5kpps ; 256pts: .66ms, 10.4ms, 4.9ms, 15.9ms: 16.1kpps ; 512pts: 1.3ms, 23.2ms, 9.7ms, 34.2ms: 14.9kpps ;-------------------------------------------------------------------

Die FFT-Beispielprogramme von elm-chan.org sind zun=E4chst mal nicht echtzeitgeeignet, wenn ich das richtig sehe. Aber man kann problemlos das Einsamplen im Timerinterrupt kontinuierlich wechselweise auf zwei Sampling-Puffer machen. Immer wenn ein Puffer voll ist, wird dann in der Hauptroutine die FFT angeworfen und auf den vollen Puffer angesetzt, w=E4hrend der Timerintterrupt regelm=E4=DFig die FFT unterbricht, um den anderen Puffer zu f=FCllen. Bei einer Abtastfrequenz von 16 kHz und einer 64-Punkte-FFT auf einem ATmega mit 16 MHz bleibt dann allerdings gerade noch knapp 5% Rechen- zeit (ca. 0,7 MIPS) =FCbrig f=FCr "andere" Dinge, sprich die Haupt- applikation. Doch das reicht in vielen F=E4llen. Wenn mehr Rechen- leistung ben=F6tigt wird, hat man verschiedene M=F6glichkeiten:

- Samplingfrequenz verringern (am effektivsten),

- nur einen Teil der Ausgangs-Daten bzw. des errechneten Spektrums verarbeiten - die Umrechnung von real/imagin=E4r auf Leistung- spektrumswerte kostet immerhin ca. 1/4 der gesamten Rechenzeit der FFT-Implementation),

- oder den ATmega =FCbertakten, wobei bei 18MHz (ein wohl noch problemloser Wert) dann schon ca. 2,4 MIPS "=FCbrig" bleiben (alles bezogen auf die o.g. Parameter). Will man eine echtzeitf=E4hige 256- oder 512-Punkte-FFT machen, wird man wohl mit der Samplingfrequenz noch etwas runtergehen m=FCssen, wenn man nicht gnadenlos =FCbertakten m=F6chte. Mit 12 kHz Samplingfrequenz d=FCrften bei einer 512-Punkte-FFT =FCberschlagsm=E4=DFig so um die 10% Rechenleistung =FCbrig bleiben.

Gru=DF Thorsten

Reply to
Thorsten Wahn

Ich habs jetzt mal mit der FFT und einem Kondensatormikrofon+Verstärker probiert - und funktioniert nahezu perfekt :-)

Danke an alle die mir geantwortet haben!

Martin

Reply to
Martin Hinterdobler

Moin!

Hab mich noch nie mit den Innereien der FFT beschäftigt... Kann man evtl. zusätzlich Rechenzeit sparen, indem man Werte in den Frequenz- bereichen, die einen ohnehin nicht interessieren, erst gar nicht berechnet?

Gruß, Michael.

Reply to
Michael Eggert

Das wäre der Vorteil der simplen DFT, aber die ist langsamer. Wenn einen nur wenige Frequenzen interessieren: schmalbandige IIR-Filter.

MfG JRD

Reply to
Rafael Deliano

Rafael Deliano schrieb:

Ja:

formatting link

Gruß, Jürgen

--
GPG key: 
http://pgp.mit.edu:11371/pks/lookup?search=J%FCrgen+Appel&op=get
Reply to
Jürgen Appel

"Spektakulärer", aber nicht völlig unpraktikabel sind sprecherunabhängige Einzelworterkennungssysteme für sehr kleine Wortschätze auf Singlechip-Controllern. Der erste war der VRC008:

formatting link
Erhältlicher der VCP200:
formatting link
Beide Texte haben noch kleinere Fehler.

Mit Spracherkennungs-ICs selbst bei zero-crossing-Signal nichtnur wegen wegen Dynamik sondern auch wegen Verhallung schwierig.

MfG JRD

Reply to
Rafael Deliano

"Heiko Nocon

Das geht noch viel einfacher:

Einfach den Verstärker so weit übersteuern, dass man richtig senkrechte Flanken bekommt. (Eine E-Gitarre macht es beim Verzerrer kaum anders) Das Signal kommt dann an einen Digitalport und löst Interrupts bei einer Flanke aus (egal welche). Dann nimmst du vom

16Bit Timer nur den Unterschied zur letzten Flanke und hast damit eine Periodendauer und mit 1/Periodendauer eine Frequenz.

Damit Rauschen nicht als Frequenz interpretiert wird, sammel einfach 16 Werte oder so und reagier in der Software nur darauf, wenn sie sich ähneln. Wenn sie sich _nicht_ stark ähneln ist es wohl kein Pfeifen.

Damit Netzbrumm nicht als Pfeifen erkannt wird nimm eine Mindestfrequenz.

Mit dem totalen übersteuern ist auch dein "automatic Gain" gelöst.

Gruß,

Markus -

formatting link

Reply to
maqqusz

Das geht leider nur, wenn es im Raum absolut ruhig ist...mit FFT ist es egal wie laut es ist, das Pfeifen muss nur lauter als die anderen Frequenzen sein.

Es funktioniert auch schon mehr als zufriedenstellend!

Viele Grüsse, Martin

Reply to
Martin Hinterdobler

"Martin Hinterdobler"

wie laut es ist, das Pfeifen muss nur lauter als die

Dann verstehe ich nicht warum/was du gefragt hast. Ist dein einziges Problem wirklich nur der Mikrofonverstärker? Wenn du ernsthaft mit einer FFT/DFT sowas detektierst, dann ist die Verstärkung doch ganz egal. Und Bandpässe auch. Weil du in der FFT alle Frequenzen die du nicht haben willst wegnullen kannst.

Reply to
maqqusz

Du hast natürlich recht.

Ich hab gefragt wo ich mir das Ganze ausgedacht habe, nach einigem Überlegen bin ich dann selber auf alles gekommen...

Manchmal wäre es besser erst zu denken und dann zu posten :-)

Danke nochmal an alle für die Ideen, Martin

Reply to
Martin Hinterdobler

"Martin Hinterdobler"

bin ich dann selber auf alles gekommen...

Achso. Na dann haben wir zumindest etwas gemeinsam *g*

Reply to
maqqusz

maqqusz schrieb:

Hallo,

Selbsterkenntnis ist der erste Weg zur Besserung. Vielleicht geschehen ja noch Zeichen und Wunder, man soll die Hoffnung nie aufgeben...

Bye

Reply to
Uwe Hercksen

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.