信号的插值计算

本文介绍了信号的插值计算,重点讨论了二次插值和分段式二次插值方法。通过牛顿法计算得到二次插值公式,并展示了如何使用三次插值来减少龙格现象,提高插值稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信号的插值计算


前言

最近在学习信号的插值,学到了一些常用的方法,遂在此博客记录之


一、二次插值

二次函数插值是一种常见的插值方法,如下图:
在这里插入图片描述

假设在 x ( n ) , x ( n − 1 ) , x ( n − 2 ) x(n),x(n-1),x(n-2) x(n),x(n1),x(n2)三个点已知,为了拟合估算 x ( n − u ) x(n-u) x(nu)的值,可以使用二次插值得到。假设二次曲线为 x ( t ) = a t 2 + b t + c x(t)=at^2+bt+c x(t)=at2+bt+c,将 x ( n ) , x ( n − 1 ) , x ( n − 2 ) x(n),x(n-1),x(n-2) x(n),x(n1),x(n2)三个点代入计算即可得到 a 、 b 、 c a、b、c abc的值。但这样计算略显繁琐,可以使用牛顿法直接插值得到这个二次曲线。
x ( t ) = x ( n ) + x ( n ) − x ( n − 1 ) n − ( n − 1 ) ( t − n ) + [ x ( n ) − x ( n − 1 ) n − ( n − 1 ) − x ( n − 1 ) − x ( n − 2 ) ( n − 1 ) − ( n − 2 ) ] ( t − n ) [ t − ( n − 1 ) ] n − ( n − 2 ) = x ( n ) + [ x ( n ) − x ( n − 1 ) ] ( t − n ) + 1 2 [ x ( n ) + x ( n − 2 ) − 2 x ( n − 1 ) ] ( t − n ) ( t − n + 1 ) \begin{aligned} x(t)&=x(n)+\frac{x(n)-x(n-1)}{n-(n-1)}(t-n)+\left [\frac{x(n)-x(n-1)}{n-(n-1)}-\frac{x(n-1)-x(n-2)}{(n-1)-(n-2)} \right]\frac{(t-n)[t-(n-1)]}{n-(n-2)}\\ &=x(n)+\left[x(n)-x(n-1)\right](t-n)+\frac{1}{2}\left[ x(n)+x(n-2)-2x(n-1)\right](t-n)(t-n+1) \end{aligned} x(t)=x(n)+n(n1)x(n)x(n1)(tn)+[n(n1)x(n)x(n1)(n1)(n2)x(n1)x(n2)]n(n2)(tn)[t(n1)]=x(n)+[x(n)x(n1)](tn)+21[x(n)+x(n2)2x(n1)](tn)(tn+1)

所以 x ( n − u ) x(n-u) x(nu)的插值结果为
x ( n − u ) = ( 1 2 u 2 − 3 2 u + 1 ) x ( n ) + ( − u 2 + 2 u ) x ( n − 1 ) + ( 1 2 u 2 − 1 2 u ) x ( n − 2 ) = c 0 x ( n ) + c 1 x ( n − 1 ) + c 2 x ( n − 2 ) \begin{aligned} x(n-u)&=\left(\frac{1}{2}u^2-\frac{3}{2}u+1\right)x(n)+(-u^2+2u)x(n-1)+\left(\frac{1}{2}u^2-\frac{1}{2}u\right)x(n-2)\\ &=c_0x(n)+c_1x(n-1)+c_2x(n-2) \end{aligned} x(nu)=(21u223u+1)x(n)+(u2+2u)x(n1)+(21u221u)x(n2)=c0x(n)+c1x(n1)+c2x(n2)
其中,
{ c 0 = 1 2 u 2 − 3 2 u + 1 c 1 = − u 2 + 2 u c 2 = 1 2 u 2 − 1 2 u \begin{cases} c_0&=\frac{1}{2}u^2-\frac{3}{2}u+1\\ c_1&=-u^2+2u\\ c_2&=\frac{1}{2}u^2-\frac{1}{2}u \end{cases} c0c1c2=21u223u+1=u2+2u=21u221u
很明显这是一个滤波器的结构,所以对任意的三个已知点 x ( n ) , x ( n − 1 ) , x ( n − 2 ) x(n),x(n-1),x(n-2) x(n),x(n1),x(n2)可以用滤波器插值得到 x ( n − u ) x(n-u) x(nu)的值,当 0 < u < 1 0<u<1 0<u<1时,该滤波器实现了信号的小数倍延时。

二、分段式二次插值

以前在学习插值公式时,看到一个用4个点实现分段式二次插值的方法。假设 x ( n + 1 ) , x ( n ) , x ( n − 1 ) , x ( n − 2 ) x(n+1),x(n),x(n-1),x(n-2) x(n+1),x(n),x(n1),x(n2)四个点已知,利用这四个点得到类似于二次插值的系数。这个方法我查了一些资料1 , 2,得到了一些点拨3,得到了计算方法。已知的4个点如下图所示。
在这里插入图片描述

这里的插值分为3段。
第1段利用 x ( n ) , x ( n − 1 ) , x ( n − 2 ) x(n),x(n-1),x(n-2) x(n),x(n1),x(n2)三个点插值得到第1条二次曲线 x 1 ( t ) x_1(t) x1(t),同上一节类似,可以利用牛顿插值得到。
x 1 ( t ) = x ( n ) + [ x ( n ) − x ( n − 1 ) ] ( t − n ) + 1 2 [ x ( n ) + x ( n − 2 ) − 2 x ( n − 1 ) ] ( t − n ) ( t − n + 1 ) \begin{aligned} x_1(t)=x(n)+\left[x(n)-x(n-1)\right](t-n)+\frac{1}{2}\left[ x(n)+x(n-2)-2x(n-1)\right](t-n)(t-n+1) \end{aligned} x1(t)=x(n)+[x(n)x(n1)](tn)+21[x(n)+x(n2)2x(n1)](tn)(tn+1)
并且计算出 x 1 ( n − u ) x_1(n-u) x1(nu)
x 1 ( n − u ) = ( 1 2 u 2 − 3 2 u + 1 ) x ( n ) + ( − u 2 + 2 u ) x ( n − 1 ) + ( 1 2 u 2 − 1 2 u ) x ( n − 2 ) \begin{aligned} x_1(n-u)=\left(\frac{1}{2}u^2-\frac{3}{2}u+1\right)x(n)+(-u^2+2u)x(n-1)+\left(\frac{1}{2}u^2-\frac{1}{2}u\right)x(n-2) \end{aligned} x1(nu)=(21u223u+1)x(n)+(u2+2u)x(n1)+(21u221u)x(n2)
第2段利用 x ( n + 1 ) , x ( n ) , x ( n − 1 ) x(n+1),x(n),x(n-1) x(n+1),x(n),x(n1)三个点插值得到第2条二次曲线 x 2 ( t ) x_2(t) x2(t)
x 2 ( t ) = x ( n + 1 ) + [ x ( n + 1 ) − x ( n ) ] ( t − n − 1 ) + 1 2 [ x ( n + 1 ) + x ( n − 1 ) − 2 x ( n ) ] ( t − n − 1 ) ( t − n ) \begin{aligned} x_2(t)=x(n+1)+\left[x(n+1)-x(n)\right](t-n-1)+\frac{1}{2}\left[ x(n+1)+x(n-1)-2x(n)\right](t-n-1)(t-n) \end{aligned} x2(t)=x(n+1)+[x(n+1)x(n)](tn1)+21[x(n+1)+x(n1)2x(n)](tn1)(tn)
并且计算出 x 2 ( n − u ) x_2(n-u) x2(nu)
x 2 ( n − u ) = ( 1 2 u 2 − 1 2 u ) x ( n + 1 ) + ( − u 2 + 1 ) x ( n ) + ( 1 2 u 2 + 1 2 u ) x ( n − 1 ) \begin{aligned} x_2(n-u)=\left(\frac{1}{2}u^2-\frac{1}{2}u\right)x(n+1)+(-u^2+1)x(n)+\left(\frac{1}{2}u^2+\frac{1}{2}u\right)x(n-1) \end{aligned} x2(nu)=(21u221u)x(n+1)+(u2+1)x(n)+(21u2+21u)x(n1)
第3段利用 x ( n ) , x ( n − 1 ) x(n),x(n-1) x(n),x(n1)两个点线性插值得到第3条曲线 x 3 ( t ) x_3(t) x3(t)
x 3 ( t ) = ( t − n + 1 ) x ( n ) + ( − t + n ) x ( n − 1 ) x_3(t)=(t-n+1)x(n)+(-t+n)x(n-1) x3(t)=(tn+1)x(n)+(t+n)x(n1)
可以计算出 x 3 ( n − u ) x_3(n-u) x3(nu)
x 3 ( n − u ) = ( 1 − u ) x ( n ) + u x ( n − 1 ) x_3(n-u)=(1-u)x(n)+ux(n-1) x3(nu)=(1u)x(n)+ux(n1)
这里,定义一个变量 α , 0 < α < 1 \alpha,0<\alpha<1 α0<α<1,将三段插值结果一起来看,即
x ( t ) = 2 α x 1 ( t ) + 2 α x 2 ( t ) + ( 1 − 4 α ) x 3 ( t ) x(t)=2\alpha x_1(t)+2\alpha x_2(t)+(1-4\alpha) x_3(t) x(t)=2αx1(t)+2αx2(t)+(14α)x3(t)
所以可以计算出 x ( n − u ) x(n-u) x(nu)的值
x ( n − u ) = ( α u 2 − α u ) x ( n + 1 ) + [ − α u 2 − ( 1 − α ) u + 1 ] x ( n ) + [ − α u 2 + ( 1 + α ) u ] x ( n − 1 ) + ( α u 2 − α u ) x ( n − 2 ) = c − 1 x ( n + 1 ) + c 0 x ( n ) + c 1 x ( n − 1 ) + c 2 x ( n − 2 ) \begin{aligned} x(n-u)&=(\alpha u^2-\alpha u)x(n+1)+[-\alpha u^2-(1-\alpha)u+1]x(n)+[-\alpha u^2+(1+\alpha)u]x(n-1)+(\alpha u^2-\alpha u)x(n-2)\\ &=c_{-1}x(n+1)+c_0x(n)+c_{1}x(n-1)+c_2x(n-2) \end{aligned} x(nu)=(αu2αu)x(n+1)+[αu2(1α)u+1]x(n)+[αu2+(1+α)u]x(n1)+(αu2αu)x(n2)=c1x(n+1)+c0x(n)+c1x(n1)+c2x(n2)
其中,
{ c − 1 = α u 2 − α u c 0 = − α u 2 − ( 1 − α ) u + 1 c 1 = − α u 2 + ( 1 + α ) u c 2 = α u 2 − α u \begin{cases} c_{-1}&=\alpha u^2-\alpha u\\ c_0&=-\alpha u^2-(1-\alpha)u+1\\ c_1&=-\alpha u^2+(1+\alpha)u\\ c_2&=\alpha u^2-\alpha u \end{cases} c1c0c1c2=αu2αu=αu2(1α)u+1=αu2+(1+α)u=αu2αu
这种结构的插值利用了三段插值的加权相加的结果,具有更好的稳定性,能更好的避免边缘点插值时的插值结果和真实值相差太大的现象(被称为龙格现象)。
接下来可以看看在u取不同值时的滤波器响应如何,如下的结果是在 α = 0.5 \alpha=0.5 α=0.5的条件下仿真的。
幅度响应和群延迟如下所示。
在这里插入图片描述

我们希望滤波器的幅度响应为0dB,群延迟 d ϕ d ω = − u \frac{d\phi}{d\omega}=-u dωdϕ=u,但是很显然,这种插值滤波器的响应和我们所期望的结果存在一定的误差。尤其是大约当 ω > 1.7 \omega>1.7 ω>1.7后,随着 ω \omega ω逐渐增大,误差也越来越大。如此看来这种滤波器适合工作在采样率和信号带宽比值较大的条件下。


参考


  1. 邱健伟. 小数倍多速率信号处理应用研究[D]. 北京邮电大学, 2017. ↩︎

  2. https://www.doc88.com/p-1334885958480.html?r=1 ↩︎

  3. https://www.douban.com/group/topic/6231956/ ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值