采样率转换是数字信号处理里一个被普遍应用的问题,处理的办法也很多。
这里只说几类采样率转换的处理方法,只是概要的介绍处理方法
第一类:用可变滤波器系数完成插值
这是基于这样一个原理:
对于输入序列x[n],对其设计长为L的滤波器进行滤波,那么,如果要对这个序列进行插值,且要求插值的精度达到1/N,怎么做呢?
可以将x[n]序列进行升采样,提升到原来的N倍,然后设计一个相应的长为N*L的滤波器,那么滤波的输出和原来的对x[n]序列用长为L的滤波器滤波得到的信号是一样的,只不过采样率增加了N倍,并且我们也得到了精度为1/N的插值。
实际上在实现的时候呢,不需要这么复杂,只需要把长为N*L的滤波器系数按N倍抽取,得到了N组,每组长为L,如果你的采样值是一个小数,如果小数部分是0,那么就用第一组系数,如果小数部分是1/N,那么就用第二组系数,以此类推,所以实现起来的时候可以用移位寄存器输入信号,在需要插值的时候,依据要插的分数部分的值选择合适的系数。
这种实现方法有两个需要注意的,一个是在存储滤波器系数的时候,因为滤波器是对称的,所以,一般不需要存L组,存L/2+1组就可以了;另一个需要注意的是,N组滤波器只是意味着它的精度是1/N,但是可以处理更精细的采样率,比如,如果你的小数是1.51,可以用1.5来近似1.51这个精度也是相当高的。
第二类:用可变滤波器系数完成抽取
这个实际上是第一个的延伸应用,我们想对一个信号进行抽取,需要设计一组滤波器,这个滤波器必须保证抽取后不会有混叠,设这个滤波器的系数为L,如果是整数倍的抽取,那么直接滤波,直接抽就可以了,如果抽取的点不是整数,而是一个小数,可以用第一类的应用方法,变换滤波器的系数,完成滤波抽取。从上面的分析可知,这可以完成分数倍的抽取。
第三类:用固定滤波器系数完成可变速率抽取
这个针对的是这样的场景,如果抽取的倍数变大的时候,滤波器的带宽也要变小,例如,x[n]的带宽是B,进行N倍抽取后,带宽要求是B/N,这个可以这样实现,如果对x[n]进行滤波的滤波器的系数长度为L,可以设置N组滤波器移位寄存器,寄存器初始都清零,把新设计的长为N*L的滤波器系数,按N倍抽取分别以分别给N组滤波器,处理的时候只需要控制把输入按节拍输给不同的滤波器组即可。例如如果是两倍抽取,那么就按节拍分别发信号分给第一组和中间的那一组,其它组的输入都是0,然后把每组的结果进行累加就得到了输出。
这种方法的好处就是乘法器的数量用的比较少,因为每一拍不同的组的滤波器可以共用乘法器。