Wie implementiere ich ein bandpass-filter in C (Zweck: Erkennung der Tonhöhe)?

Ich fragte vor kurzem diese Frage:

Ich bin auf der Suche nach einen Algorithmus zum erkennen der Tonhöhe. eine der Antworten, die vorgeschlagen, dass ich einen ersten FFT, um die grundlegenden Frequenzgang, herauszufinden, welche Frequenzen sind immer stimmhaft, und Folgen Sie es mit einem band-pass-filter in jedem Bereich von Interesse:

Einen etwas erweiterten Algorithmus könnte so etwas tun:

  1. Grob erkennen der Tonhöhe-Frequenz (könnte getan werden, mit DFT).
  2. Bandpass-signal zu filtern, isolieren, pitch-Frequenz.
  3. Zählen der Anzahl von samples zwischen zwei Gipfeln in der gefilterten Signale.

Nun kann ich den ersten Schritt machen okay ( ich bin coding für iOS, und Apple hat einen Rahmen (der accelerate-framework) für tun FFTs etc.

Habe ich ein Anfang gemacht hier: aber ich sehe das problem: eine FFT, die abheben, alle möglichen Noten singen könnte, würde eine Menge von Proben, und ich möchte Sie nicht ausführen zu viel unnötige Berechnung, wie ich bin-targeting ein mobiles Gerät.

So, ich bin versucht, meinen Kopf Runde diese Antwort oben, aber ich verstehe nicht, wie konnte ich das Konzept eines band-pass-filter code.

Kann jemand helfen?

Sie haben gefragt, eine Menge Fragen auf, SO etwa die Erkennung schon, aber es scheint, dass Sie noch nicht ganz verstehen, (a) der Unterschied zwischen pitch und Frequenz oder (b) die Notwendigkeit, wählen Sie einen pitch detection Algorithmus, welcher geeignet ist für die Art von sound, den Sie versuchen zu analysieren (z.B. Sprache, Musik, etc). Ich schlage vor, Sie tun ein bisschen mehr zu Lesen, auf die Grundlagen, bevor Sie versuchen, etwas umzusetzen, ansonsten können Sie auch verbrauchen viel unnötigen Aufwand der Abstieg die falsche route.
Dies ist der Grund, warum ich bitte so viele Fragen-ich versuche herauszufinden, was praktisch ist und was nicht, bevor Sie sich auf etwas. Ich bin langsam immer einige Perspektive auf das problem.
wenn Sie möchten, gehen Sie zurück und Lesen Sie einige der vorherigen Antworten und auch die links, die zur Verfügung gestellt wurden. Ich habe das Gefühl, dass Sie versuchen zu springen, in eine Durchführung, ohne erst die Grundlagen zuerst. Viel Glück.
R: Als ich verstehen es, die voice besteht aus einer Grundfrequenz und Oberwellen davon. Ich habe die Mathematik der Fourier-Transformationen, DFT, FFT, und führen in der praktischen Einschränkungen, die erkennen, wenn ein gesungener Ton ist etwas abseits aus, aber der eigentliche Hinweis: erfordert eine niedrige Grundfrequenz, die erfordert eine große sampling-Fenster, das erfordert entweder eine starke CPU, oder drastisch absenken der Mikrofon-sample-rate. Daher bin ich auf der Suche bei der Durchführung einer grundlegenden FFT zu bekommen, Allgemeine Bereiche von Interesse in der Frequenz-Domäne, und verfeinern das Ergebnis irgendwie.
R: Daher mein Interesse an der Antwort mir gegeben, was darauf hindeutet, ich verwende einen band-pass-filter in diesem Stadium. Ich kann aber nicht bestimmen, ob dies ist ein praktischer Vorschlag. Ich schaute auch in die anderen Vorschläge; Autokorrelation ist effektiv das gleiche wie die Multiplikation der source-signal durch eine Sinusschwingung der gewünschten Frequenz und die Integration von über einer ganzzahligen Anzahl von Wellenlängen, dies kann funktionieren, würde aber einige Arbeit zu entziffern, leicht off-Frequenzen aus der Ausgabe. Ich bin wirklich immer noch versuchen, prod es aus allen Winkeln.

InformationsquelleAutor P i | 2010-11-05

Schreibe einen Kommentar