音频文件的希尔伯特变换
Hilbert transform of audio file
我正在研究声学信号处理,目前我在获取音频文件的希尔伯特变换时遇到问题。
我从 window 数据开始,然后对每个 window 使用希尔伯特变换。下面是我的代码:
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 开发者。程序给出错误:超出最大递归深度。
下面的这段代码是您的问题:您在自身内部调用 hilbert 函数,因为您有很多数据点导致达到递归限制。
def hilbert(data):
for sample in data:
analytic_sig= hilbert(data)
您可能试图调用 scipy hilbert
函数;我建议将代码更改为:
analytic_sig = scipy.signal.hilbert(data)
您还需要导入正确的模块;添加到顶部:
import scipy.signal
我正在研究声学信号处理,目前我在获取音频文件的希尔伯特变换时遇到问题。 我从 window 数据开始,然后对每个 window 使用希尔伯特变换。下面是我的代码:
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 开发者。程序给出错误:超出最大递归深度。
下面的这段代码是您的问题:您在自身内部调用 hilbert 函数,因为您有很多数据点导致达到递归限制。
def hilbert(data):
for sample in data:
analytic_sig= hilbert(data)
您可能试图调用 scipy hilbert
函数;我建议将代码更改为:
analytic_sig = scipy.signal.hilbert(data)
您还需要导入正确的模块;添加到顶部:
import scipy.signal