0

我正在处理音频数字信号处理和双耳音频处理。我还在学习基础知识。现在,想法是进行反卷积并获得脉冲响应。

请参阅随附的屏幕截图在此处输入图像描述

正在发生的事情的详细描述:

在这里,指数扫描信号被获取并通过扬声器回放。使用麦克风录制回放。使用零填充(可能是原始长度的两倍)扩展记录的信号,并且原始指数扫描信号也被扩展。两者都采用 FFT(扩展记录和扩展原始),它们的 FFT 被划分,我们得到房间传递函数。最后,采用逆 FFT 并执行一些加窗以获得脉冲响应。

我的问题:

我很难在 python 中实现这个图。你将如何划分两个 FFT?可能吗?我可能可以执行所有步骤,例如零填充和 fft,但我想我没有走正确的路。我不明白窗口和丢弃后半部分选项。

请任何有他/她知识的人告诉我如何在带有扫描信号的python中实现这个?只是一个小例子也有助于用很少的情节获得一个想法。请帮忙。

图片来源:http ://www.four-audio.com/data/MF/aes-swp-english.pdf

提前致谢, Sanket Jain

4

2 回答 2

1

是的,划分两个 FFT 光谱是可能的,实际上在 python 中很容易实现(但有一些警告)。简单地说:由于两个时间信号的卷积对应于将它们的光谱相乘,反之亦然,可以通过划分光谱来实现反卷积。

这是使用 numpy 进行简单反卷积的示例:

x是您的激励扫描信号,y是记录的扫描信号,您希望从中获得脉冲响应。)

import numpy as np
from numpy.fft import rfft, irfft

# define length of FFT (zero padding): at least double length of input
input_length = np.size(x)
n = np.ceil(np.log2(input_length)) + 1
N_fft = int(pow(2, n))

# transform 
# real fft: N real input -> N/2+1 complex output (single sided spectrum)
# real ifft: N/2+1 complex input -> N real output
X_f = rfft(x, N_fft)
Y_f = rfft(x, N_fft)

# deconvolve
H = Y_f / X_f

# backward transform
h = irfft(H, N_fft)

# truncate to original length
h = h[:input_length]

这个简单的解决方案是一个实用的解决方案,但可以(并且应该)改进。一个问题是,在 X_f 具有低幅度的那些频率下,您将获得本底噪声的提升。例如,如果您的指数正弦扫描从 100Hz 开始,对于低于该频率的频率区间,您会得到(几乎)零的除法。一个简单的可能解决方案是首先反转 X_f,应用带限滤波器(高通+低通)以移除“增强区域”,然后将其与 Y_f 相乘:

# deconvolve
Xinv_f = 1 / X_f
Xinv_f = Xinv_f * bandlimit_filter
H = Y_f * Xinv_f

关于失真:指数正弦扫描的一个很好的特性是测量期间产生的谐波失真(例如,扬声器中的非线性)将在反卷积后的“主”响应之前产生较小的“侧”响应(有关更多详细信息,请参阅) . 这些侧面响应是失真产物,可以通过时间窗口简单地去除。如果“主要”响应没有延迟(从 t=0 开始),这些侧面响应将出现在整个 iFFT 的末尾,因此您可以通过将后半部分窗口化来删除它们。

从信号理论的角度来看,我不能保证这是 100% 正确的,但我认为它说明了这一点并且有效;)

于 2021-12-08T22:45:18.090 回答
0

这有点过头了,但也许以下一些建议会有所帮助。

首先,我在 Steve Smith 的书The Scientist and Engineer's Guide to Digital Signal Processing中看到了非常有用的示例代码。这包括范围操作,从卷积基础到 FFT 算法本身。示例代码是 BASIC,而不是 Python。但是 BASIC 是完全可读的,应该很容易翻译。

我不完全确定您描述的具体计算,但是这个领域中的许多操作(在处理多个信号时)结果只是简单地使用了组成元素的加法或减法。要获得权威答案,我认为您将在 Stack Overflow 的信号处理论坛或DSP 相关的论坛之一上获得更好的运气。

如果您确实在其他地方得到了答案,最好在这里回顾一下或完全删除这个问题以减少混乱。

于 2021-12-07T01:06:04.140 回答