估计由子样本分辨率延迟的已知信号的延迟

信息处理 采样 估计 插值 匹配过滤器
2022-01-31 20:28:05

给定一个已知信号及其延迟版本 两者都通过采样频率进行采样,以生成信号x(t)y(t,τ)=x(tτ)
Fsx[n]y[n]

假设它们在比它们的非零时间大得多的时间支持上进行采样(即,对未消失的信号的整个部分进行采样)。

给定这 2 个采样信号,使用互相关(匹配滤波器)可以估计τ

然而,它的估计仅限于由采样频率定义的网格,这意味着如果估计不准确(实际上,不能估计时间间隔的模部分)。τ<Ts=1Fs

有没有一种有效的方法来估计子采样分辨率的延迟?

谢谢你。

4个回答

由于使用了匹配滤波器,因此互相关变为“自相关”,确保相对于其最大值是“对称的”。

因此,一个好的近似是通过一个对称函数来近似采样峰周围的区域作为函数的参数模型。

这种函数最简单和最简单的模型是抛物线函数,如下所示。

这是一些scilab执行互相关的代码,然后通过执行简单的(ish)抛物线插值找到样本间峰值。

该图显示了真实值与估计值之间的绝对相对误差。

绝对相对误差

// 25684
vals= [];
taus = [-0.5:.005:0.5] + 10^-9; // Add a small amount to not have a zero.

for tau = taus

    N = 1000;
    t = 0:N-1;
    omega=0.1902834909;
    phi = 2*%pi*0.3823483924;

    x = sin(omega*t + phi);
    x_tau = sin(omega*(t-tau) + phi);

    xc = xcorr(x_tau,x);

    [mx,ix] = max(xc);

    x_vals = [-1 0 +1];
    y_vals = xc(ix + x_vals);

    //https://stackoverflow.com/a/717791/12570
    den = (x_vals(1) - x_vals(2))*(x_vals(1) - x_vals(3))*(x_vals(2) - x_vals(3));
    A = x_vals(3)*(y_vals(2) - y_vals(1)) + x_vals(2)*(y_vals(1) - y_vals(3)) + x_vals(1)*(y_vals(3) - y_vals(2))
    A = A/den;

    B = x_vals(3)^2*(y_vals(1) - y_vals(2)) + x_vals(2)^2*(y_vals(3) - y_vals(1)) + x_vals(1)^2*(y_vals(2) - y_vals(3));
    B = B/den;

    C = x_vals(2) * x_vals(3) * (x_vals(2) - x_vals(3))* y_vals(1) + x_vals(3) * x_vals(1) * (x_vals(3) - x_vals(1))* y_vals(2) + x_vals(1) * x_vals(2) * (x_vals(1) - x_vals(2))* y_vals(3);
    C = C/den;

    x_v = -B / (2*A);
    y_v = C - B*B / (4*A);

    vals= [vals; tau x_v y_v];

end 

clf
plot(taus,abs((vals(:,2)' - taus)./taus));
xlabel('True value of delay');
title('Error in using parabola peak as subsample delay estimate');

因为时间偏移本身表现为频域中的相位角偏移,所以比较 x(n) 的 DFT 的频谱相位和 y(n) 的 DFT 的频谱相位可能会很有用。只是一个想法。

您可以使用高质量的插值函数或内核(例如足够宽的窗口 Sinc 内核)在小数位置插值样本。

由于问题的重点,我以三种方式编辑答案:

第一种方法包括(以某种方式)补偿未知延迟,通过对几个延迟应用初始算法,并比较结果。这可以通过蛮力或优化循环来完成。用于此类任务的一种常见滤波器设计称为Thiran 全通插值器。Matlab 实现在:Thiran Allpass Interpolation in Matlab中给出。参考论文是 J.-P。Thiran,具有最大平坦群延迟的递归数字滤波器,1971 年,IEEE Transactions on Circuits Theory。

第二种方法可能在于找到更不变的变换。@Richard Lyons 建议的相位是一个非常好的选择,因为几个傅立叶变换具有很好的移位/时间不变特性。上述两种方法可以通过 GCC 或 广义互相关来扩展,这是一个具有良好背景参考的链接(如广义相关器对时间延迟的最佳估计,IEEE Trans. Acoustics,Speech and Signal Processing,1979)。它们也可以合并,例如与GCC-PHAT Cross-Correlation合并,包括相位信息。

不变性确实是一个简洁的概念,也可以使用其他信号属性(或非属性)。如果所考虑的过程非常平稳,则可以使用上述方法获得良好的结果,如果信号是周期性的,则最多可以达到整数个周期。

在数据不稳定、幅度变化、有噪声的情况下,其他方法或组合可能有用。小波可以处理不平稳性。有些是相当移位不变的。其他一些是复杂的并提供局部相位信息。

我建议将连续复小波和相关性结合起来,例如在Time Delay Estimation Using Wavelet Transform for Pulsed-Wave Ultrasound中提出的,生物医学工程年鉴,1995 年。其他参考?关于小波去噪及其在时间延迟估计中的应用,IEEE Transactions on Signal Processing,1999。

仔细的参考分析或上述概念可能会为您提供其他有用的见解。

我的个人经验不是全球性的。它主要基于图像处理经验,以及用于地震数据中自适应模式减法的局部延迟自适应工作,使用复小波和非常短的一阶(一元)复相位滤波器,证明效果很好。