Frequenz-Analyse in Python

Ich versuche die Verwendung von Python zum abrufen der dominanten Frequenzen einer live-audio-input. Für den moment bin ich zu Experimentieren mit der audio-stream mit meinem Laptop das eingebaute Mikrofon, aber bei der Prüfung des folgenden code, ich bin immer sehr schlechte Ergebnisse.

    # Read from Mic Input and find the freq's
    import pyaudio
    import numpy as np
    import bge
    import wave

    chunk = 2048

    # use a Blackman window
    window = np.blackman(chunk)
    # open stream
    FORMAT = pyaudio.paInt16
    CHANNELS = 1
    RATE = 1920

    p = pyaudio.PyAudio()
    myStream = p.open(format = FORMAT, channels = CHANNELS, rate = RATE, input = True, frames_per_buffer = chunk)

    def AnalyseStream(cont):
        data = myStream.read(chunk)
        # unpack the data and times by the hamming window
        indata = np.array(wave.struct.unpack("%dh"%(chunk), data))*window
        # Take the fft and square each value
        fftData=abs(np.fft.rfft(indata))**2
        # find the maximum
        which = fftData[1:].argmax() + 1
        # use quadratic interpolation around the max
        if which != len(fftData)-1:
            y0,y1,y2 = np.log(fftData[which-1:which+2:])
            x1 = (y2 - y0) * .5 / (2 * y1 - y2 - y0)
            # find the frequency and output it
            thefreq = (which+x1)*RATE/chunk
            print("The freq is %f Hz." % (thefreq))
        else:
            thefreq = which*RATE/chunk
            print("The freq is %f Hz." % (thefreq))

    # stream.close()
    # p.terminate()

Den code kannibalisiert von diese Frage, die sich mit der Fourier-Analyse einer wave-Datei. Es ist in der aktuellen modulare Struktur, wie ich bin, es umzusetzen mit der Blender Game-Umgebung (daher der import bge an der Spitze), aber ich bin mir ziemlich sicher, mein problem liegt in der AnalyseStream Modul.

Einen Rat, den Sie anbieten können, wäre sehr geschätzt werden.

UPDATE: ich bekomme die richtigen Werte hin und wieder, aber man findet Sie selten unter falsche Werte (<10 Hz). Und das Programm läuft WIRKLICH langsam.

Die sample-rate von 1920 sieht fischig. Weitere typische audio-sample-raten sind 8000 oder 44100. Welche Art von sound verwenden Sie für Ihre Korrektheit testen? Wenn Ihr nicht aus einem Sinus-generator, die pitch, die Sie hören, und die Frequenz-peak kann sehr unterschiedlich sein.

InformationsquelleAutor Dave Moore | 2012-01-31

Schreibe einen Kommentar