通过 IFFT 从测量数据确定通道频率响应

信息处理 估计 IFFT 反卷积
2022-02-21 19:58:18

我一直在研究一个小型系统,该系统在房间内传输 35Hz-20kHz 频率范围内的线性啁啾,同时使用两个微控制器记录带有回声(来自地板、墙壁等)的传输信号。使用接收到的数据并在接收器中重构发送的啁啾获得信道频率响应分别。然后我尝试通过计算来计算通道脉冲响应。然后我尝试使用时间门控来消除回声。y[n]x[n]H[k]=Y[k]/X[k]XYxyh[n]=IFFT(H[k])

我没有使用外部存储器这一事实限制了我最多使用长度为 N=2048 的浮点数组的计算能力,所以我正在处理的信号在单毫秒区域内(这当然限制了我的分辨率,但那是我必须接受的问题)。

困扰我的问题是,当我查看计算出的脉冲响应时,我得到如下信息:

计算的脉冲响应

似乎主要响应似乎周期性地向左移动了一点,因此它的开始位于数组的末尾并且那里有一个大的“尖峰”(要么那个要么响应有很大的延迟,这不会' t 适合物理系统,因为扬声器和麦克风在我正在执行的测试中仅相距几厘米)。这可能是什么原因?我在这里读过一些看起来很相似的帖子,还有关于预振铃的讨论;这可能是这种情况吗?

我想计算时间门控(理想情况下是“固定”)脉冲响应的 FFT 以从中获取一些数据,其中一部分是获得主响应的延迟 - 在这种情况下可以这样做吗?

洞察力将不胜感激!

阿夫纳

编辑:试图将这个问题与我不得不回答彼得的后续问题一起提出。如果我应该尝试在一个单独的问题中提出这个问题 - 请告诉我。

“非常感谢!到目前为止,我一直在发送持续 25 毫秒的啁啾声,接收持续 32 毫秒(因此有一个基本假设,即由于扬声器和麦克风之间的距离短,通道长度为 7 毫秒)。我”我用零填充啁啾样本以匹配接收长度(以样本为单位),并使用此方案为我提供了问题中所附的图表。

我读过使用正弦扫描并执行反卷积会导致分离非线性谐波以及时“落后”通道响应,因此这可能是循环移动并在通道上运行的东西。考虑到这些限制,您认为这个问题有解决方案吗?我几乎用两个 2048 浮点数组填充了我正在使用的微控制器上的 32kB 内存,这些数组构成了我正在处理的通用数组,占用了 16kB(就地处理)和另外两个整数数组它占用了 12kB 以上的空间,所以没有多少内存可以使用了。”

2个回答

如果不直接查看您的代码,我的猜测是您正在执行以下操作:

N = length(x);
X = fft(x,N);
Y = fft(y,N);
H = Y./X;
h = ifft(H);

这样做的问题是这个操作在长度上执行循环卷积N问题是,ywith1/X的脉冲响应卷积的“真实”长度将是长度2N - 1(假设xy都是长度N)。

所以你得到了时域别名

解决方案可能是设置

N = length(x) + length(y) - 1

或更大。

您应该在接收到的信号和啁啾之间使用互相关。您的方法不会实时工作。