2016-04-29 6 views
0

Ich arbeite an der akustischen Signalverarbeitung, derzeit habe ich Probleme mit der Hilbert-Transformation einer Audiodatei. Ich begann mit der Fensterung der Daten und dann Hilbert-Transformation von jedem Fenster. Unten ist mein Code:Hilbert Transformation der Audiodatei

import pylab 
import scipy.io.wavfile 
import numpy as np 
import math 
import scipy.signal as signal 
import sys 
sys.setrecursionlimit(10) 
def goetrzel(data, target_frequency): 
     s_prev = 0 
     s_prev2 = 0 
     normalized_frequency = 2.0 * np.pi * target_frequency/len(data) 
     coeff = 2.0 * np.cos(normalized_frequency) 
     for sample in data: 
       s = sample + coeff * s_prev - s_prev2 
       s_prev2 = s_prev 
       s_prev = s 
       power = s_prev2 * s_prev2 + s_prev * s_prev - coeff * s_prev * s_prev2 
     return power 

def sliding_window(data, length, skip=None): 
     if skip is None: 
       skip = length 
     n = len(data) 
     for i in range(0, n - int(length), int(skip)): 
       yield data[i:i+length] 
def hilbert(data): 
    for sample in data: 
     analytic_sig= hilbert(data) 
     amplitude_env = np.abs(analytic_signal) 
    return analytic_sig , amplitude_env 

detect_frequency = 485.0 

num=44100 
rate, data = scipy.io.wavfile.read('Downloads/ShortWAV.wav') 

window_length = 400#2 * detect_frequency # How should I pick this? 
window_skip = window_length # How should I pick this? 

power = [goetrzel(window, detect_frequency) for window in sliding_window(data, window_length, window_skip)] 
analytic_sig, amplitude_env = [hilbert(window) for window in sliding_window(data, window_length, window_skip)] 
pylab.figure() 
pylab.plot(power) 
pylab.show() 

Ich bin ein neuer Python-Entwickler. Das Programm gibt den Fehler: Maximale Rekursionstiefe überschritten.

Antwort

0

Dieser Ausschnitt ist Ihr Problem: Sie rufen die Hilbert-Funktion in sich selbst auf und da Sie viele Datenpunkte haben, wird die Rekursionsgrenze erreicht.

def hilbert(data): 
    for sample in data: 
     analytic_sig= hilbert(data) 

Sie versuchten wahrscheinlich die scipy hilbert Funktion aufzurufen; Ich schlage vor, den Code zu ändern:

 analytic_sig = scipy.signal.hilbert(data) 

Sie müssen das richtige Modul auch importieren; nach oben hinzufügen:

import scipy.signal