恢复被非整数因子上采样的信号

信息处理 下采样 重采样 多速率
2022-02-01 20:06:29

我有一个数据序列,它在通信系统的发射机上按非整数因子(准确地说是在接收端,我应该对数据进行下采样并恢复序列G[n]1.5G[n]

在 MATLAB 中,我同时实现了发送和接收信号。当我在发射机上按整数因子对信号进行上采样,然后按相同的整数因子对接收到的信号进行下采样时,我能够成功地恢复准确的,并继续进一步处理。G[n]G[n]

但是,当我按非整数因子上采样,然后按相同因子对接收的数据下采样时,我没有得到传输的确切序列在 MATLAB 中,对于传输的序列,我只使用了因子因子的命令。在接收器上,我按因子上采样,然后按因子下采样。G[n]1.51.5G[n]upsample3downsample223

有没有办法在接收器处恢复精确的序列,即使它在发送器处被非整数因子上采样?G[n]

〜瑞安

2个回答

采样操作(上采样和下采样)取决于两个非常关键的条件:

1-理想频率选择滤波器的存在和适用性

2-操作信号受到严格的带宽限制

对于大多数实际系统来说,这两个关键条件只能大致满足。因此,这些实际系统的计算结果只是近似的而不是精确的。

请注意,在通过零阶保持进行简单但粗略的插值(上采样)的情况下,它根本不需要过滤器,因为它只是一个样本复制,由于操作的简单性,您可以准确地恢复原始样本。

因此,除非使用一些高级算法,否则任何实际采样率转换系统的输出都会出现一些偏差(但可控)。

matlab 函数只插入零,并分别删除样本upsampledownsample将它们用于您可能会看到的分数重采样存在很大的混叠/成像问题。(那些成像和混叠问题仍然以非分数速率存在,但恰好在你upsample和 then时相互抵消downsample

您可以使用interpanddecimate代替。或者,该功能resample专为分数重采样而设计。所有这些功能都应用重采样过滤器。但是,我应该注意,正如其他人评论过的那样,经过这些重采样过滤器后的结果并不完美。

>> downsample(upsample(downsample(upsample([1 2 3 4 5 6],3),2),2),3)

ans =

     1     0     3     0     5     0

>> resample(resample([1 2 3 4 5 6],3,2),2,3)

ans =

    1.0154    1.9279    3.1060    3.8622    5.1736    5.7741

PS 较长的序列不会像这个例子那样有明显的误差,这个例子主要是边缘效应。