2016-04-29 15 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

このスニペットはあなたの問題です。あなた自身がhilbert関数を呼び出しています。データポイントが多いため、再帰の制限が発生します。

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

おそらくscipy hilbert関数を呼び出そうとしていました。

 analytic_sig = scipy.signal.hilbert(data) 

正しいモジュールもインポートする必要があります。トップに追加:

import scipy.signal 
関連する問題