音频文件的希尔伯特变换

时间:2016-04-29 16:38:20

标签: python audio signal-processing

我正致力于声学信号处理,目前我正面临着获得音频文件的Hilbert变换的问题。 我开始窗口化数据,然后使用每个窗口的希尔伯特变换。下面是我的代码:

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开发人员。程序给出错误:超出最大递归深度。

1 个答案:

答案 0 :(得分:0)

下面的代码片段是你的问题:你在自己内部调用hilbert函数,因为你有很多数据点会导致命中递归限制。

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

你可能试图调用scipy hilbert函数;我建议将代码更改为:

        analytic_sig = scipy.signal.hilbert(data)

您也需要导入正确的模块;添加到顶部:

import scipy.signal