继我之前的问题:HRIR 最小相位之后,我设法计算了 FIR 滤波器(在我的特定情况下是 HRTF 滤波器)的最小相位相位。
但是我不确定我的函数返回的相位值。
Python函数如下。它期望一个任意的 HRIR 作为输入。我正在使用 44100 长 FFT 使频率箱在 44100Hz 采样率的整数频率下完美对齐(例如,1000Hz 的正弦曲线的幅度正好为 1,没有频谱泄漏)
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import hilbert
from scipy.fft import fft, ifft, fftfreq
def min_phase_coversion(HRIR):
HRIR_fft = fft(HRIR,44100)
xf = fftfreq(len(HRIR_fft), 1/44100)
phase=np.angle(HRIR_fft)
minimum_phase = np.imag(-hilbert(np.log(np.abs(HRIR_fft))))
plt.figure()
plt.plot(xf, phase)
plt.plot(xf,minimum_phase)
plt.plot()
plt.grid()
plt.show()
对于下面的图,我使用的是KEMAR MIT数据集,特别是已经为 HRIR 计算了图[azimuth=144°, elevation=30°, distance=1.4m]
。选择的 HRIR 如下(每只耳朵一个):
一旦我使用上面的 Python 函数执行我的最小相位计算,这就是我得到的(单耳的相位):
但是,看情节,我无法理解返回的值
np.imag(-hilbert(np.log(np.abs(HRIR_fft))))
返回的阶段是否展开?还是我做错了什么?一旦超过 +3.14 或低于 -3.14 (+/- pi),原始相位就会按预期“环绕”,而最小相位则不会。