使用指数扫频正弦信号,信号生成方法如下:
其中:
,是扫频信号的起始频率和结束频率
是扫频信号的时长
是扫频率
逆信号是通过缩放时间翻转的信号计算,计算方法如下:
其中
信号的脉冲响应
扫频信号、逆信号、IR,以及频谱如下图:
参考程序如下
if __name__ == "__main__":
# Sweep Parameters
f1 = 10
f2 = 100
T = 3
fs = 1000
t = np.arange(0, T*fs)/fs
R = np.log(f2/f1)
# ESS generation
x = np.sin((2*np.pi*f1*T/R)*(np.exp(t*R/T)-1))
# Inverse filter
k = np.exp(t*R/T)
f = x[::-1]/k
# Impulse response
ir = sig.fftconvolve(x, f, mode='same')
# Get spectra of all signals
freq, Xdb = dbfft(x, fs)
freq, Fdb = dbfft(f, fs)
freq, IRdb = dbfft(ir, fs)
plt.figure()
plt.subplot(3,1,1)
plt.grid()
plt.plot(t, x)
plt.title('ESS')
plt.subplot(3,1,2)
plt.grid()
plt.plot(t, f)
plt.title('Inverse filter')
plt.subplot(3,1,3)
plt.grid()
plt.plot(t, ir)
plt.title('Impulse response')
plt.show()
参考文献:
Q. Meng - Impulse Response Measurement with Sine Sweeps and Amplitude Modulation Schemes
A. Novak - Nonlinear System Identification Using Exponential Swept-Sine Signal
K. Vetter - ExpoChirpToolbox - a Pure Data implementation of ESS impulse response measurement