FFT + Filterton = Triggersignal

Ich versuche, den Live-Eingangston zu FFTen und ihn so zu filtern, dass er nur 350 bis 500 Hz hat. Mein Ziel ist es also, das LED-Licht nur einzuschalten, wenn ein Ton eine Frequenz zwischen 350-500 hat. Ich habe mir FFT-Codes angesehen, weiß aber nicht, wie ich sie filtern und das Ausgangssignal senden soll.

Ich bin sehr neu im Arduino-Board. Sie können davon ausgehen, dass ich nichts über das Arduino-Board oder die C-Programmierung weiß. Bitte seien Sie so genau wie möglich. Danke.

Warum kein Bandpassfilter?
Oh! das habe ich auf MATLAB verwendet! Nun, wenn ich erkläre, was ich bisher gemacht habe ... weil ich und mein Professor nicht wussten, wie man ein Arduino-Board programmiert, haben wir mit MATLAB angefangen und ich habe FFT und Bandpassfilter verwendet, um das Frequenzspektrum zu erhalten. Allerdings .... Ich weiß nicht, wie man MATLAB-Code in Arduino-Code implementiert. Außerdem weiß ich nicht, wie man das Ausgangssignal auslöst :( also gibt es sowieso einen Code namens Bandpassfilter für Arduino als Nun?? ah .. Ich wünschte, jemand könnte meinen MATLAB-Code in Arduino-Code übersetzen ..
Nein, ich meine einen Bandpassfilter aus Passiven. Dann setzt du einen Frequenz-Spannungs-Wandler ans Ende und triggerst darauf.
Ähm.. Danke für deine Info. Ich verstehe immer noch nicht, aber ich werde über „Bandpassfilter von Passiven“ und „Frequenz-Spannungs-Wandler“ recherchieren und sehen, was ich tun kann: D, aber das kann ich mit dem Arduino-Board machen, oder? Ich meinte den Code für Arduino Board
Vielleicht. Aber FFT braucht vielleicht etwas mehr Schwung, als Sie von einem anderen Arduino als dem Due bekommen können.
Ihr MATLAB-Code muss auf irgendeiner Art von Filterprototyp basieren, also was war das?

Antworten (2)

Ich würde vorschlagen, eine Art Bandpassfilter zu bauen, gefolgt von einem Spitzendetektor und einem Komparator. Sie können einen RLC-Bandpassfilter oder vielleicht einen aktiven Bandpassfilter mit ein paar Operationsverstärkern und einigen passiven Komponenten bauen. Wie steil muss der Cutoff des Filters sein? Wenn Sie eine sehr steile Grenzfrequenz benötigen, benötigen Sie wahrscheinlich einen aktiven Filter.

Alternativ können Sie das Signal durch einen RC-Tiefpassfilter laufen lassen, es mit dem Arduino ADC abtasten und mit einem DSP-Bandpassfilter filtern. Ich weiß, dass Matlab eine Toolbox zum Erstellen von FIR- und IIR-Filtern hat; Ich würde vorschlagen, dies zu verwenden, um die korrekten Filterkoeffizienten zu berechnen. Ich glaube nicht, dass der Arduino Ihnen genügend Zyklen geben wird, um eine FFT in Echtzeit durchzuführen, und Sie müssten immer noch die Tiefpassfilterung und das Abtasten mit einer FFT durchführen.

Hey, erstmal danke für den Kommentar :D Was ist der Unterschied zwischen RLC und DSP? Ich habe versucht, ADC- und FFT-Bibliotheken herunterzuladen, und ich habe die FFT-Bibliothek heruntergeladen. Ich weiß nicht, wohin es mich führen wird, aber zumindest habe ich etwas gefunden, aber kein Glück mit ADC. Gibt es eine ADC-Bibliothek, die ich herunterladen kann? Da ich das Programm nicht wirklich verstehe, hatte ich gehofft, dass ich diese beiden Bibliotheken herunterladen und von dort aus mit dem Codieren beginnen kann. Und ja, als ich MATLAB verwendet habe, habe ich die Bandpass-Toolbox verwendet, um meinen Sound zu filtern.
RLC = Widerstand, Induktivität, Kondensator. Ein Filter mit passiven Komponenten. Sie können online Rechner finden, um die richtigen Komponentenwerte zu ermitteln. Ich denke, TI hat möglicherweise auch eine Filterberechnungssoftware, die Sie ausprobieren können. Und wenn Sie Signalverarbeitung auf einem Arduino durchführen möchten, müssen Sie wahrscheinlich die ADC-Bibliothek wegwerfen und mit Bare Metal arbeiten. Die meisten Arduino-Bibliotheken, die ich mir angesehen habe, sind schrecklich ineffizient.

"Nur 350 Hz bis 500 Hz" ist eine praktische Unmöglichkeit. Jeder Filter, der Frequenzen unterhalb und oberhalb einer bestimmten Grenze vollständig auslöscht, benötigt unendlich viel Zeit, um das Signal zu verarbeiten. Da Sie die Out-of-Band-Parameter nicht angegeben haben, ist es etwas schwierig, Ratschläge zu geben. Welches Wissen über digitale Filterung ich habe, könnte ein wenig helfen: -

Geben Sie hier die Bildbeschreibung ein

Da ich ein Elektroniker bin, emuliert der digitale LP-Filter einen einfachen RC-Filter. Dieser Filter kann auf eine Tiefpassgrenze von 500 Hz eingestellt werden und wenn die Abtastfrequenz (die Rate, mit der Sie ADC-Abtastwerte sammeln) (z. B.) 10 kHz beträgt, ist T = 100 x 10 6 , und CR wird sein 1 2 π F = 318 x 10 6 .

Dadurch erhalten Sie einen Tiefpassfilter erster Ordnung, den Sie verbessern können, indem Sie einige weitere kaskadieren, um einen steileren Roll-Off zu erzielen. Um einen Hochpassfilter zu erhalten, verwenden Sie dieselbe Topologie und beachten Sie, dass der Hochpassausgang wie unten gezeigt verfügbar ist: -

Geben Sie hier die Bildbeschreibung ein

Es gibt ein paar andere Schnickschnack, die angewendet werden können, um die Steilheit des Filters enger zu machen, aber ich werde hier nicht darauf eingehen, weil es wahrscheinlich nicht benötigt wird oder zu tief ist. Beachten Sie, dass "Abtastzeit" und "Verzögerungszeit" in den beiden Diagrammen genau gleich sind - ich war bei der Benennung nicht sehr konsequent!

Nachdem Sie das Signal ausreichend gefiltert haben, müssen Sie den Effektivwert des resultierenden Signals berechnen und einen Schwellenwert für die Triggerung festlegen. Dies kann einen Arduino-Ausgang (oder einen beliebigen MCU-Ausgang) speisen, um ein Signal an die Außenwelt zu senden.

Der Vollständigkeit halber zeigen viele digitale Filterbücher den Filter wie folgt: -

Geben Sie hier die Bildbeschreibung ein

Es ist mathematisch dasselbe, wird aber neu angeordnet, wie es in vielen Artikeln über digitale IIC-Filter (Infinite Impulse Response) gezeigt wird. Ich bevorzuge die Bilder früher, weil sie direkter mit dem einfachen analogen CR-Filter in Verbindung gebracht werden können. Viel Glück.

Danke für die nette und gut erklärte Antwort. Da ich kein Elektroingenieur bin.. Ich habe es nicht ganz verstanden, aber ich lasse es meinen Freund anschauen und hoffe, dass er das umsetzen kann :D
@Bri - froh, behilflich zu sein.