Wie kann ich Mikrofon und Lautsprecher in mein Mikrocontroller-Projekt integrieren?

Da ich in der Vergangenheit noch nie mit Mikrofonen und Lautsprechern gearbeitet habe, experimentiere ich mit diesen. Ich habe bereits eine einfache Schaltung mit einem Mikrofon ( Elektret-Kondensatormikrofon ) und Lautsprecher gemacht. Ich habe das obige Mikrofon mit einer einfachen Verstärkerstufe und dann einem Computerlautsprecher verwendet. Es funktioniert gut.

Jetzt denke ich darüber nach, eine einfache Mikrofon-, Lautsprecher- und Mikrocontrollerschaltung zu bauen. Die Idee ist im Grunde, den Eingang vom Mikrofon in den Mikrocontroller einzuspeisen und dann das Audiosignal an den Lautsprecher auszugeben.

Dazu muss ich meiner Meinung nach zuerst das analoge Signal vom Mikrofon mit dem ADC des AVR in digitale Werte umwandeln. Danach muss ich die analogen Werte an den Lautsprecher ausgeben. Da dies mein erstes Mal ist, brauche ich Ratschläge zum Aufbau einer funktionierenden Schaltung. Wie hoch sollte die Sampling- und Wiedergaberate sein? Muss ich mir Gedanken über Codecs etc. machen? (Ich weiß nicht, wie groß rohe Audiodaten sein können.)

Ich plane, zuerst Arduino zu verwenden, da es einfach und schnell für das Prototyping ist.

Jede Hilfe ist wie immer willkommen! :)

Antworten (2)

Ihre Abtastrate muss doppelt so hoch sein wie die maximale interessierende Frequenz. Dies ist das Nyquist-Shannon-Sampling-Theorem . Wenn Sie Hi-Fi-Audio wünschen, ist Ihre maximale Frequenz die Grenze des menschlichen Gehörs, etwa 20 kHz. Die menschliche Stimme ist weniger anspruchsvoll: Telefonnetze funktionieren bis etwa 3400 Hz.

Sie werden feststellen, dass der ADC des AVR nicht sehr schnell ist und Sie nicht viele Ressourcen haben, um die Daten zu verarbeiten. Wahrscheinlich werden Ihre Hardwarebeschränkungen die Abtastrate für Sie diktieren.

Um Codecs brauchen Sie sich wahrscheinlich keine Gedanken zu machen. Ein Codec kodiert und dekodiert einen Audiostream. Eine übliche Vorgehensweise ist das Komprimieren des Audios für eine effizientere Speicherung oder Übertragung, aber es klingt nicht so, als würden Sie es tun. Es gibt Codecs, die aus anderen Gründen als der Komprimierung codieren und decodieren, aber mir fällt kein Codec ein, der hier relevant wäre. Ihre Rechenressourcen sind auf dem Mikrocontroller sowieso sehr begrenzt, und Sie werden sowieso nicht viel Zeit zum Codieren oder Decodieren haben.

Lesen Sie gerade heute - Arduino Uno hat eine ADC-Abtastfrequenz von maximal etwa 10 kHz.

Wenn Sie einen 10-Bit-ADC verwenden (die meisten (oder viele) MCUs haben sie), können Sie mit 8 kHz für grundlegendes Audio/Sprache abtasten und mit der gleichen Rate ausgeben. Sie könnten sogar mit der halben (oder viertel usw.) Rate ausgeben, um irre klingende Aliasing-Effekte zu erhalten.

Wenn Sie an digitale Effekte denken, müssen Sie Samples von bis zu 100 ms speichern, sodass Sie fast ein KB Daten speichern und abrufen müssen.

Behalten Sie beim Sampling von Eingang und Ausgang die gleiche Rate bei, wenn Sie digitale Filter- oder Effekttechniken für den Anfang lernen.