采样就是采集模拟信号的样本。通常采样指的是下采样,也就是对信号的抽取。其实,上采样和下采样都是对数字信号进行重采,重采的采样率与原来获得该数字信号的采样率比较,大于原信号的称为上采样,小于的则称为下采样。上采样是下采样的逆过程,也称增取样或内插。
本文介绍一种使用Virtex-6器件和免费WebPACK工具实现实时四倍上采样的方法。
许多信号处理应用都需要进行上采样。从概念上讲,对数据向量进行M倍上采样的最简单方法是用实际频率分量数的(M-1)倍个零填充数据向量的离散傅里叶变换(DFT)[1],然后将零填充向量转换回时域[1,2]。但这种方法计算量很大,因此不能在FPGA内部高效实现。在本文介绍的高效并行实时上采样电路中,每个ADC时钟可产生M个上采样值,其中M是所需的上采样倍数。在我们的Virtex-6 XC6VLX75T FPGA实现方案中,上采样倍数M为4,可以作为较普遍方法的一个实例。
我们并行上采样方法的总体概念源于某些作者所称的“窗口SINC插值”,这种方法在文献资料[3,4]中有一些非常精彩的专文介绍。
为了更好的说明,现以图1中所示的16MHz模拟信号为例。该信号的表达式为:
等式 1
图1 - 展示上采样过程的16MHz信号实例
如果用12位ADC以80MHz的频率对图1所示的信号进行采样或量化,输入范围为ADC完整输入范围的97.7%,则每个信号周期只能采样五次,产生的样本数据序列如图2所示。如果对该示例数据序列进行四倍上采样,则有效采样率为320MHz,每个信号周期能够提供20个样本。虽然您可以使用本文介绍的方法进行更高倍数的上采样,但为了说明起见我们还是使用M=4的上采样。
图2 - 本图是12位ADC,输入范围为ADC完整输入范围的97.7%,用80MHz或每周期五次频率对图1的模拟信号采样得到的样本数据序列实例。
当然,还可以通过直接在ADC生成的数据序列的每个实际样本值之间插入(M-1)个零来获得上采样数据向量及所需的样本数(公认效果较差)。该“零插入步骤”对应于复制频域中的原始信号频谱。通过对得到的“零填充”时域信号进行低通滤波,就能去除频域中所需频谱的“复本”,从而获得上采样数据向量。 |