我最近遇到了一个DSP系统,该系统通过零填充进行了一些内部上采样。期待零阶保持,我很惊讶地发现直流信号没有产生直流输出。输出中还存在许多内部(较低)采样频率的谐波。

这引起了我的问题:通常使用哪种上采样技术,它们的相对优点是什么?为什么要选择零填充,零阶保持或一阶保持,还有哪些其他可用的技术?

一些说明:


系统是真实的时间,因此上采样方案必须是因果关系。
上采样器后面是一个也可以指定的抗混叠滤波器。


#1 楼

出于这个答案的目的,我将使用Matlab的术语,并将“ upsampling”定义为在输入样本之间插入$ m-1 $零的过程,将“ interpolation”定义为上采样和过滤以去除$ m的组合过程上采样引入的-1 $别名($ m $是插值因子)。有关上采样如何/为什么引入别名的说明,请参见此线程。

重要的是要了解,可以使用任何低通滤波器摆脱别名并从而完成插值。但是,某些滤波器在插值中使用时具有优势。我将在下面讨论插值滤波的各种形式。

FIR滤波器

插值FIR滤波器之所以有效,是因为它们将上采样和别名滤波组合为一个步骤。在一个示例中最容易看出这一点。假设我们有一个数据序列$ x [n] $,并且我们想将其插值两倍。第一步是向上采样两倍。这会将原始数据序列从$ x_0,x_1,... x_N $更改为$ x_0、0,x_1、0,... x_N $。

现在假设我们有一个低通FIR过滤器$ h [n] $,我们将使用它删除别名。当我们用滤波器对上采样的数据序列进行卷积时,一半的滤波器抽头受到非零采样的刺激,而一半的抽头则处于非活动状态,因为它们对应于零采样。当过滤器遍历数据时,被激励的一半和不活动的一半来回翻转。这两组抽头有时称为滤波器相位。

通过消除上采样并使用插值FIR滤波器对原始数据序列进行滤波,可以隐式实现相同的效果。内插FIR滤波器为每个输入样本产生$ m $个输出。对于所有$ m $输出,滤波器将在相同的$ ceil(K / m)$输入采样上运行(其中K是滤波器抽头数,“ ceil”是上限函数)。

希望能有一个例子说明其工作原理。假设我们有一个六阶抽头滤波器,并且插值系数是二。过滤器抽头为[1 -2 4 4 -2 1]。如果我们从字面上进行插值然后过滤,则样本和过滤器抽头将按如下顺序排列(一旦完全重叠):

$$
0:1 \\
x_2: -2 \\
0:4 \\
x_1:4 \\
0:-2 \\
x_0:1 \\
$$
下一个示例...

$$
x_3:1 \\
0:-2 \\
x_2:4 \\
x_1:-2 \\
0:1 \\
$$
$$
0:1 \\
x_3:-2 \\
0:4 \\
x_2:4 \\
0:-2 \\
x_1: 1 \\
$$
依此类推。插值滤波器的要点是,它实际上跳过了零的插入,而只是交替使用了当前使用的那一组抽头。因此,前面的序列现在看起来如下:

$$
x_2:-2 \\
x_1:4 \\
x_0:1 \\
$$

$$
x_3:1 \\
x_2:4 \\
x_1:-2 \\
$$

$$
x_3:-2 \\
x_2:4 \\
x_1:1 \\
$$

零阶保持插值法零阶保持插值器只是简单地将每个样本重复$ m-1 $次。因此,两个零阶保持插值器将$ x_0,x_1,... x_N $转换为$ x_0,x_0,x_1,x_1,... x_N,x_N $。此方法之所以具有吸引力,是因为它在编码和计算负荷方面都非常容易实现。

问题在于它的低通滤波效果很差。我们可以看到,当我们认识到零保持插值器是FIR插值的特例时。它对应于上采样,后跟一个$ m $宽的矩形过滤器。矩形滤波器的傅立叶变换是一个Sinc函数,它是一个简陋的低通滤波器。可以通过补偿FIR滤波器来解决此问题,但是如果您打算这样做,则最好还是使用一个好的低通滤波器。

一阶保持功能

一阶保持比零保持插值器高一阶,因为它使用两个最接近的输入采样对上采样进行线性插值。因此,两个一阶保持插值器的因数会将$ x_0,x_1,... x_N $转换为$ x_0,\ frac {x_0 + x_1} {2},x_1,\ frac {x_1 + x_2} {2} ,... x_N $。

像零阶保持插值器一样,一阶保持插值器是FIR插值的一种特殊情况。它对应于三角滤波器的上采样和滤波。对于二因子插值,滤波器为$ [\ frac {1} {2} 1 \ frac {1} {2}] $,对于三因子插值,滤波器为$ [\ frac {1} { 3} \ frac {2} {3} 1 \ frac {2} {3} \ frac {1} {2}] $,依此类推。

三角形滤波器是两个卷积的矩形滤波器在一起,它对应于在频域中的平方。这是从零阶保持开始的明确步伐,但仍然不是很好。

IIR滤波器

我从未使用过内插IIR滤波器,所以我不会多谈他们我假设适用的参数与常规过滤中的参数相同-IIR滤波器效率更高,不稳定,没有线性相位等。我不相信它们可以像FIR滤波器那样将上采样和滤波步骤结合在一起,但是我对此可能是错的。

FFT插值

即使不是很普遍,我也会扔掉它(当然,零保持也不是很普遍)。该线程讨论了FFT重采样,重采样既是插值又是抽取。

高阶保持值

二阶保持值插值器通常被称为“二次插值器”。它们是非线性的,因此不能实现为线性的FIR滤波器。我不太了解它们背​​后的数学原理,因此我不会讨论它们的性能。不过,我会说,我相信它们在信号处理之外有些普遍。

还存在高阶(三个或更多)方法。这些被称为“多项式回归”。

编辑:

级联积分梳状(CIC)过滤器

我忘了提到CIC过滤器。使用CIC滤波器的原因有两个:它们仅使用加法器/减法器(由于乘法运算快速且廉价,因此并不重要),并且它们可以非常有效地进行较大的采样率更改。它们的缺点是它们本质上是级联矩形滤波器的有效实现,因此它们具有如上所述的矩形滤波器的所有缺点。 CIC内插器几乎总是在补偿FIR滤波器之前,该滤波器对信号进行预失真以抵消CIC引入的失真。如果采样率变化足够大,那么使用预失真滤波器的成本就值得。

评论


$ \ begingroup $
很棒的调查吉姆先生。为了增加您的高阶持有类别,我相信这也称为“多项式回归”。在这种情况下,给定一组特定的点,我们计算出最佳拟合的直线,抛物线形,三次高阶多项式。一旦有了方程式,我们就可以轻松找出中间点是什么。
$ \ endgroup $
–太空
2012年10月10日15:09



$ \ begingroup $
问题:1)我对FIR过滤器部分的最后一段并不完全清楚。您提到与第一输入样本相对应的第二和第三输出使用滤带1、4、7,然后使用2、5、8。但是您还提到它们全为零...因此请不要在第二和第三输出中使用在这种情况下仅采样零? 2)这个“ FIR插值滤波器”,对于m = 3,看起来是否像[1 0 0 3.2 0 0 -2.1 0 0 1.1 0 0]? (数字组成)。
$ \ endgroup $
–太空
2012年10月10日15:31

$ \ begingroup $
@Mohammad我已经编辑了答案。我希望这有帮助。并感谢您提供有关多项式回归的信息。
$ \ endgroup $
–吉姆·克莱(Jim Clay)
2012年10月10日在20:36

$ \ begingroup $
@endolith,我认为有两个原因:复杂性,并且仅在过滤器长度超过某个数字(并且我不确定该数字是多少)时才有意义。 FFT方法在处理样本块时效果很好,但是如果要处理样本流,则还必须进行重叠加法或重叠保存以保持连续性。
$ \ endgroup $
–吉姆·克莱(Jim Clay)
2012年10月11日20:16

$ \ begingroup $
@endolith关于FFT方法的一件非常好的事情是,使用大型滤波器几乎没有成本。
$ \ endgroup $
–吉姆·克莱(Jim Clay)
2012年10月11日在20:19

#2 楼

吉姆的答案很好地涵盖了这一点。所有上采样方法都遵循相同的基本方案:


在样本之间插入零点:这会导致原始频谱的周期性重复,但会保留原始频段中的频谱完全不变
低通滤波器可消除所有镜光谱

方法之间的主要区别在于低通滤波的实现方式。理想的上采样器将包括理想的低通滤波器,但这是不切实际的。考虑到频域中的问题,可以找到适合您特定要求的正确的上采样算法:


我可以在原始频带中承受多少幅度失真?那是频率相关的吗?
我关心原始频段的相位吗?如果需要保持相位,则需要线性相位FIR。如果不是最低限度的阶段,则在保持“因果关系”和急剧发作方面做得更好。
我需要多少抑制镜像?基本上,镜像会在基带中显示为额外的噪声。

高阶非线性插值器(样条,厄米,拉格朗日)通常效果不佳,因为插值误差高度依赖于信号而且几乎不可能映射到特定要求。

评论


$ \ begingroup $
“什么能更好地保持因果关系”是什么意思?
$ \ endgroup $
–nibot
2012年10月12日18:34

#3 楼

当考虑采样保持(即重复采样值)与零填充之间的差异时,认识到采样保持可以解释为通过零填充和零填充来进行上采样(如Jim和Hilmar所指出的),这很有帮助。 FIR滤波器的脉冲响应由矩形脉冲组成。

例如,当从2 kHz到64 kHz(32的倍数)上采样时,我们可以通过在每2对之间插入31个零来实现kHz采样,然后通过由32个FIR滤波器组成的FIR滤波器进行滤波,所有其他系数均为零。

通过这种方式考虑采样保持,可以轻松进行分析。我们可以通过对矩形窗口进行傅立叶变换来获得采样保持操作的频率响应。正如Jim所指出的,矩形脉冲的傅立叶变换是具有线性相位的sinc函数(因为矩形不在$ \ tau = 0 $的中心)。

结果证明,此sinc函数其零点恰好在较低采样频率的谐波处。在我们从2048 Hz到65536 Hz的向上采样的示例应用中,采样保持操作的频率响应在2048 Hz,4096 Hz等处为零。



由此,我得出结论,任何能完全抑制原始采样频率谐波的插值滤波器看起来都像“采样并保持”。

关于抑制这些谐波的标准,采样保持似乎是最佳的。但是,它的抗混叠能力很差,因为除了谐波零点外,它的频率响应仅比旧的奈奎斯特速率高$ 1 / f $。

评论


$ \ begingroup $
问题是零位非常窄,因此大多数信号在零位之外都具有能量。
$ \ endgroup $
–吉姆·克莱(Jim Clay)
2012年10月11日在20:11

$ \ begingroup $
@JimClay,窄零点不是消除低采样率谐波的理想选择吗?我同意,您还希望在1 kHz左右再增加一些极点,以消除镜像频率。我想我会扩大我的问题:如何设计一个好的插值滤波器?
$ \ endgroup $
–nibot
2012-10-12 9:42

$ \ begingroup $
设计一个低通滤波器,其通带包括信号的带宽,阻带包括上采样时引入的别名。信号的3dB点和“别名”之间的频率是您的过渡频带。如果您的问题是“如何设计低通滤波器?”,请在另一个问题中提出,我们可以进行讨论。
$ \ endgroup $
–吉姆·克莱(Jim Clay)
2012年10月12日14:21

$ \ begingroup $
我通常了解如何设计滤波器,通常是将极点和零点明确地放置在s域中,然后将它们转换为z域滤波器。我想知道插值过滤器是否有任何特殊技巧。我要传达的信息是,实际上并没有任何技巧-插值滤波器就像其他任何类型的滤波器一样,它们的设计是在各种考虑因素(纹波,相位,群时延,最小阻带衰减,计算复杂度等)。
$ \ endgroup $
–nibot
2012年10月12日18:00



$ \ begingroup $
另一方面,我对设计FIR滤波器一无所知。
$ \ endgroup $
–nibot
2012年10月12日18:06