2016-04-29 1 views
0

Я работаю над обработкой звуковых сигналов, в настоящее время я сталкиваюсь с проблемами при получении преобразования Гильберта аудиофайла. Я начал с оконных данных, а затем использовал преобразование Гильберта для каждого окна. ниже мой код:Преобразование Гильберта аудиофайла

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() 

Я новый разработчик python. программа выдаст ошибку: превышена максимальная глубина рекурсии.

ответ

0

Этот сниппет ниже - ваша проблема: вы вызываете функцию гильберта внутри себя, и поскольку у вас много точек данных, что приводит к удалению предела рекурсии.

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

Вы, вероятно, пытаясь вызвать SciPy hilbert функцию; Я предлагаю изменить код на:

 analytic_sig = scipy.signal.hilbert(data) 

Вам также необходимо импортировать правильный модуль; добавить в начало страницы:

import scipy.signal