基于X86AVX的倍采样实现

在信号处理,图像处理,和通信领域,由于硬件的限制,或者由于算法处理的需要,需要在软件侧对采样数据进行采样率的改变。

一、倍采样的原理

有一个原始序列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,那么滤波器的输出可表示为:Filterout = f\bigotimes a

    实际上,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的环境设置

请参考https://download.csdn.net/download/bing_shao4/89336011?spm=1001.2014.3001.5503

四、扩展

通过不同的倍采样和降采样实现不同采样率的转换,比如通过先5倍升采样,再4倍降采样,可实现1.25倍采样率的转换

源码请通过文首链接下载!!!!!创作不易,请留下一个赞赞!!十分感谢!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值