在信号处理,图像处理,和通信领域,由于硬件的限制,或者由于算法处理的需要,需要在软件侧对采样数据进行采样率的改变。
一、倍采样的原理
有一个原始序列a,采样率是10M,序列长度是10000个IQ数据,需要获得该序列的40M采样的数据。首先通过对a进行0插值得到一个40000长度的序列a,如下图
那么序列a 和b 的频域图如下:
由频域图可知,插0后,频域的范围扩展了4倍,且在原a序列的频点的2倍,3倍,4倍处有了频率分量。那么心在要做的就是将2倍,3倍,4倍处有了频率分量滤除,保留原来的频率分量,再将频域数据进行IFFT,就完成了4倍采样。所以,只需要设计一个采样率是40M,截至频率大一原信号带宽的FIR滤波器,对原a序列进行卷积,即可
二、卷积的实现
设计的滤波系数为f,那么滤波器的输出可表示为:
实际上,a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[10],a[11],a[12],a[14],a[15],a[16],都等于0
所以,可以这些数据可以不计算。
c[1] = a[1]*b[16]+a[5]*b[12]+a[9]*b[8]+a[13]*b[4]
为了使用AVX,计算的数据必须连续排放,我们对a不做0插值,同时对滤波系数b进行4倍降采样,得到4组滤波系数,
b[1]= {b[1],b[5],b[9],b[13],},b[2]= {b[2],b[6],b[10],b[4],},b[3]= {b[3],b[7],b[11],b[15],},b[3]= {b[4],b[8],b[12],b[16],}
然后按照顺序循环取4组中的一组数据跟原始a序列进行成累加,即可完成卷积,同时这样的数据格式也符合AVX的使用需求
三、AVX的环境设置
四、扩展
通过不同的倍采样和降采样实现不同采样率的转换,比如通过先5倍升采样,再4倍降采样,可实现1.25倍采样率的转换
源码请通过文首链接下载!!!!!创作不易,请留下一个赞赞!!十分感谢!!