非整数因子的多相采样率转换

信息处理 图像处理 matlab 过滤器设计 插值 奈奎斯特
2022-01-30 23:06:54

我想通过随后以因子 I=5 进行上采样,然后以因子 D=9 进行下采样来进行采样率转换。

我设计了一个长度为 M 的奈奎斯特采样率转换滤波器 h(),使用 matlab 的 filterbuilder 工具用于插值因子 I=5,抽取因子 D=9。由于 D > I,我选择了滤波器的归一化截止频率为 1/9,将滤波器规格下的“Band”设置为 9。

然后我计算 I 个多相滤波器 pk(n),其长度为 K=M/I,根据以下公式对 h() 进行采样:

pk(n) = h(k + n*I),对于 k=0,...,I-1 和 n=0,...,K-1。

然后我只计算每个多相滤波器的输出样本,这些样本通过下采样操作进行采样。换句话说,我通过对多相滤波器 yk[] 的输出进行采样,根据以下公式计算输出 y[m]:

y[m] =   yk[ floor( m * D / I  ) ]
k    =   ( m * D ) modulo I

因此,我不计算输出中未使用的 yk[] 样本。

我首先应用这些多相滤波器对图像的行进行采样率转换。然后我应用相同的过滤器对列进行采样率转换。

但是,我得到一个失真的输出图像,它仍然清楚地包含别名:

在此处输入图像描述

有谁知道如果我在概念上做错了什么?

2个回答

你的方法在概念上似乎是合理的。我怀疑这个问题是两件事之一:1)你没有正确地实现它,2)你的过滤器带宽太宽了。

您正在实施“智能”方法,因为您正在以计算有效的方式进行操作。我会尝试以愚蠢的方式(在每个样本之间插入 I-1 零,用整个过滤器过滤,摆脱额外的样本)来验证您的实现并查看过滤器本身是否有问题。您可以通过将生成的样本与哑方法产生的样本进行比较来验证您的实现。过滤上采样数据后,样本“阶段”之一(有“D”阶段的起始样本是样本 0...D-1)应该与智能方法的结果相同。如果不是,那么您在实施智能或愚蠢方法时出现了问题。

如果结果确实匹配,那么问题出在您的过滤器上。您需要仔细查看带宽以确保它不会太宽。由于 D > I 理想的滤波器带宽,假设一个完美的砖墙滤波器,是,其中因子二来自奈奎斯特速率。I2D

我解决了我的问题。如上所述的设计方法是合理的。但是,我在执行 FIR 滤波器时出现了错误。对于对称滤波器,您可以用相关性代替卷积,这就是我所做的。然而,由于多相滤波器是不对称的,这导致了不正确的结果。我通过卷积实现了 FIR 滤波器,现在我的采样率转换器就像一个魅力。

您可以在下面看到正确重新采样的图像:

正确重采样的图像

这是原始输入图像:

原始图像