Python-Frequenz-Erkennung
Ok, was ich versuche zu tun, ist eine Art von audio-Bearbeitung-software kann erkennen, dass eine Häufigkeitsverteilung ein, wenn die Frequenz gespielt wird lange genug (ein paar ms) ich weiß, ich habe eine positive übereinstimmung. ich weiß, ich würde verwenden müssen, FFT oder etwas simiral aber auch in diesem Feld der Mathematik, ich bin Scheiße, ich habe das internet durchsucht, konnte aber nicht finden, ein code, der tun konnte, nur diese.
dem Ziel, im Versuch, accieve ist, um mir ein eigenes Protokoll zum senden von Daten Trog sound, sehr niedriger bitrate pro Sekunde (5-10bps), aber ich bin auch sehr begrenzt auf die übertragungsreichweite Ende, so dass der Empfang der software müssen in der Lage sein, benutzerdefinierte (nicht verwenden eine tatsächliche hardware - /software-modem) auch möchte ich, dass dies nur software (keine zusätzliche hardware, außer der Soundkarte)
vielen Dank für die Hilfe.
- Dies kann hilfreich sein (achten Sie darauf, Lesen Sie die Antworten): keyongtech.com/5003865-frequency-analysis-without-numpy
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den aubio Bibliotheken wurden eingewickelt mit SWIG und kann somit verwendet werden, die von Python. Unter Ihren vielen Funktionen gehören mehrere Methoden für die Erkennung/Schätzung einschließlich der YIN Algorithmus und einige harmonische Kamm algorithmen.
Jedoch, wenn Sie wollen etwas einfacher, ich schrieb einige code für die pitch-Schätzung vor einiger Zeit, und Sie können nimm es oder lass es. Es wird nicht so genau sein, wie mithilfe von algorithmen, die in aubio, aber es könnte gut sein, genug für Ihre Bedürfnisse. Ich im Grunde nahm einfach die FFT-Analyse der Daten mal ein Fenster (ein Blackman-Fenster in diesem Fall) zum Quadrat der FFT-Werte, gefunden die bin, die hatte den höchsten Wert, und verwendet eine quadratische interpolation rund um den Gipfel über den log des max-Wertes und die beiden benachbarten Werte zu finden, die Grundfrequenz. Die quadratische interpolation ich nahm etwas Papier, das ich gefunden habe.
Es funktioniert ziemlich gut auf die test-Töne, aber es wird nicht so robust oder so genau wie die anderen oben genannten Methoden. Die Genauigkeit kann erhöht werden durch die Erhöhung der chunk-Größe (oder reduziert durch die Senkung der it). Die chunk-size sollte ein Vielfaches von 2, um die volle Nutzung der FFT. Auch, ich bin nur der Bestimmung der fundamentalen Tonhöhe für jedes chunk mit keine überschneidung. Ich verwendet PyAudio zu spielen, den Ton über beim schreiben der geschätzten Steigung.
Source Code:
Wenn du gehst zu verwenden FSK (frequency-shift-keying) für die Codierung von Daten, sind Sie wahrscheinlich besser dran mit dem Goertzel-Algorithmus so können Sie überprüfen nur die Frequenzen, die Sie wollen, statt einer vollständigen DFT/FFT.
Finden Sie das Frequenzspektrum des sliding windows über den Klang aus hier und dann überprüfen Sie das Vorhandensein der vorherrschenden Frequenz-band über das finden der Fläche unter dem Frequenzspektrum Kurve für diesen band aus hier.
Während ich habe nicht versucht, audio-Verarbeitung mit Python vor, vielleicht könntest du etwas bauen, basierend auf SciPy (oder dessen Teilprojekt NumPy), ein framework für die effiziente wissenschaftliche/engineering numerische Berechnung? Sie beginnen mit der Suche an scipy.fftpack für Ihre FFT.