时间序列的线性插值对其频谱的影响

信息处理 fft 傅里叶变换 连续信号 插值
2021-12-25 12:03:03

情况

为了同步不同的时间序列,我必须对它们应用线性插值。在插值和同步之后,信号被转移到其频域以供进一步分析。因此,插值步骤不应改变频域信息。

实验

通过 python,我创建了一个白噪声信号。第二个信号基于第一个信号,但偏移了原始采样间隔的一半。第三个信号是通过对原始信号进行 5.0 倍过采样而创建的。之后所有三个信号都被转移到频域(图的底部)

问题

  1. 为什么频移信号的曲线会随着频率的升高而下降?
  2. 为什么过采样信号的曲线会随着频率升高而下降?尽管过采样信号与原始信号具有完全相同的形状。
  3. 为了在特定点插入原始信号但最小化对其频谱的影响,我可以改进什么?

我的实验和情节的python代码:https ://pastebin.com/iz08Hiud

提前谢谢了!

更新

感谢大家提供全面且有用的答案,特别是 robert bristow-johnson 和 howpow2 指导我走上正确的道路。我现在正在使用 sinc 内核插值的实现,它显示了几乎完美的频率响应。有关原始频谱与插值信号频谱之间的误差形式的结果,请参见图的底行 顶部:时域中的原始信号,底部:频域中的原始、移位和过采样信号

4个回答

Duane Wise 和我在 90 年代写了一篇论文,我们向 AES 约定提出了如何在频域中对时域多项式插值(其中线性插值是一个例子)进行建模。

我想你可以在这里得到一份副本:Performance of Low-Order Polynomial Interpolators in Presence of Oversampled Input

采样序列的线性插值对应于与具有频率响应 $(1/f_s^2)\,\mathop{\rm sinc}^2(f/f_s)$ 的三角形信号的卷积,其中 $f_s$ 是采样频率和 $\mathop{\rm sinc}(f) = \frac{\sin \pi f}{\pi f}$。(1/fs2)sinc2(f/fs) where fs is the sampling frequency and sinc(f)=sinπfπf.

所以它具有两个短时积分器顺序的低通行为。通常,在上采样时最好使用一种不那么特别的低通滤波方法:$\mathop{\rm sinc}^2$ 与您最想要的矩形频率响应相去甚远。sinc2 is a far cry from the rectangular frequency response you'd optimally want.

线性内插器是一种频率响应非常差的滤波器。高阶插值器可能会做得更好,但对于带限信号样本的理想情况是使用 Sinc 内核插值(参考此处此处)。我在这里有一个任意时间位置窗口化 Sinc 插值器的伪代码(但可以使用更好的窗口函数)。

对于恒定时移,另一种可能性是使用 FFT 和 IFFT,在两者之间进行微小的线性(带频率)相位旋转,以执行子样本时移插值。预先零填充以避免环绕伪影。

看起来您正在使用线性插值进行半移。如果你绘制一个接近奈奎斯特频率的正弦波,你会看到相邻的样本相距近 $\pi$ 弧度。正弦每个周期只接近两个样本。线性插值在重新采样中间点时做得很差。在低频时,正弦波被密集采样,因此样本之间的线性趋势具有较小的误差。更高阶的插值可以减少误差,但是当您靠近 Nyquist 时,您需要在接近无穷大的样本窗口上进行 sinc 插值。π radians apart. The sine will approach only two samples per cycle . A Linear interpolation does a poor job resampling the intermediate point. At low frequency, a sine wave is densely sampled, so a Linear trend between samples has small error. A higher order interpolation can reduce the error, but as you get near Nyquist, you need to approach sinc interpolation on a window of samples that approaches infinity.