完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
2个回答
|
|
1 复信号多相滤波器无盲区算法分析
复信号多相滤波器的作用是用D个信道将-fs/2~fs/2频段均匀划分,然后用输入信号S(n)以复本振信号,再将特定频段的信号搬移到基带,并通过低通滤波器得到位于该信道的信号,然后进行抽取,以降低数据速率。无盲区的信道划分如图1所示。由于其相邻信道有50%的重叠,因此,相邻信道间不存在盲区,故能对信号进行全概率捕获。 为了防止频谱混叠,其抽取倍数应为D/2。这样,多相滤波器的第k路输出推导如下(D’=D/2时): 由式(2)可知,该算法是对多相滤波器的输入数据进行D/2倍的抽取,各多相分量是由原低通滤波器的系数先进行D抽取再做两倍内插得到的。根据式(2)可以得到如图2所示的数学模型和FPGA设计。 |
|
|
|
2 FPGA设计
2.1延迟和抽取 以下选用具体的例子来阐述复多相滤波器的FPGA设计方法。对于8信道的多相滤波器,其抽取因子为4的情况,经过延迟单元进入各抽取器的顺序如表1所列。 观察表1可知,进入每个子信道的数据都是4倍抽取。而且4信道比8信道延迟一个数据,3信道比7信道延迟一个数据,依此类推。这样,就可以将信道分为两部分,即1、2、3、4信道是一部分,5、6、7、8信道是另一部分。 由于每个子信道的滤波系数为12个,即每个抽取器必须同时输出12个数据与一个子信道的12个滤波系数进行乘加运算。采用可定制模块shift_tap,能够满足这样的延迟和抽取要求,它的输出即为抽取器的输出。若将shift_tap中的抽取因子设为4,一次同时输出13个数据,那么,第一次输出的13个数据为x(0)、x(4)、x(8)、……、x(56),这样可将1-12送入8信道,2-13送入4信道进行乘加运算;而第二次输出的13个数据为x(1)、x(5)、x(9)……、x(57),其中1-12送入7信道,2-13送人3信道,依此类推……这样,每个时钟节拍将得到两个信道的延迟和抽取输出,因而需要4次这样的操作才能完成一次所有信道的延迟和抽取。然后再重复执行以上操作。 2.2 滤波器的多相分量 设计多相分量时,首先可根据原低通滤波器的频率响应确定所需的滤波器类型和阶数,以求出冲击响应h(n);然后再根据式hp(m)=h(mD+p),D=8,p=0,1,…D-1来确定多相分量。 若采样频率fs为64 MHz,并把64 MHz带宽均匀划分为8路子信道,则每路通带的带宽为8MHz。图3所示是原型低通滤波器的频率响应图。 MATLAB中的firpmord函数,一般采用的是最佳逼近最大最小准则算法,该算法可以求出原型低通滤波器的阶数,而firpm函数可以求出原型低通滤波器的系数。即: a=firpmord([4 8],[1 0],[0.001 0.001],64);(3) h=firpm(a,[0 4/32 8/32 1],[1 1 0 0]); (4) (3)式中, [4 8]表示通带截止频率为4MHz,阻带截止频率为8 MHz; [1 0]表示通带幅度为1,阻带幅度为0; [0.001 0.001]表示通带、阻带波动均为0.001;64表示采样频率为64MHz。 而在(4)式中,[04/32 8/32 1]分别为对应于实际频率0、4、8、32(MH)的归一化频率;[1 1 0 0]为上述频率点上的幅度值。 求出原低通滤波器h(n)后,就可以求出多相滤波器的多相分量。图2中的多相分量是对h(n)进行8倍抽取,再做两倍内插得到的。用MATLAB语句可方便地得到各多相分量的系数,每个多相分量有6个非零系数,两倍内插后为12个系数。其MATLAB语句如下: hp=zeros(8,2*fix(length(h)/8)); for i=1:8 hp (i,1:2:end)=h(i:8:(fix(lengh (h)/8)-1)*8+i); end 一个多相分量的滤波运算可用三个乘加单元完成,每个乘加单元有四个乘法器,这样就可以完成12个系数的乘加。多相分量的滤波系数一般事先都将其转换为二进制补码存放在ROM中。 由上述分析可知,每个时钟节拍可完成两个信道的延迟和抽取(采用流水线操作),每个时钟节拍需要进行两个多相分量的乘加运算,即需要同时得到12个非零系数,这可用12个单口ROM实现。其中6个ROM存放1~4信道的系数。另6个ROM存放5~8通道的系数。其存储格式如表2和表3所列。 这样,每当时钟上升沿到来时,就可以同时输出两个子信道的12个非零系数。通常可以设计一个模4减法计数器来实现ROM地址的产生。当数据准备好后,发出一个计数器的使能信号,计数器开始计数。因为首先计算的是4信道和8信道,所以,计数器的初始值为3,采用减一计数,计数到0后再进行循环。 2.3 时序的设计 由于信号s(n)的输入速率为64 MHz。故在64 MHz时钟驱动下,每一个节拍计算两个子信道,8个信道的计算需要用4个节拍来完成,并得到8个复数。这8个复数必须同时进入FFT模块,所以,可在FFT之前设计一组乒乓RAM来接收这8个复数。其中一个RAM以64 MHz的速率存放前面的计算结果,每个节拍接收两个复数,4个节拍接收完8个复数后开始FFT运算,同时换成另一个RAM接收前面的计算结果。等到8个复数都存放好之后,再开始FFT运算,此时又再次换成第一个RAM接收前面的计算结果,并依次循环。根据这样的时序设计,FFT模块的时钟应为16 MHz。FFT运算由IP核完成。经FFT运算后同时可得到8个复数形式的结果,由于复数分成实虚部的表示形式,且实虚部都用32位二进制数表示,因此,8个复数需要16个32位的二进制数表示,也就是芯片上需要16×32=512个引脚,这对于任何芯片都是不可能办到的。为此,应在FFT模块的输出端也设计一个乒乓RAM。其中一个RAM先将8个FFT运算结果存储起来,然后以64 MHz的时钟频率每个节拍向外输出两个复数(即4个32为二进制数),直到4个节拍全部输出完毕(即8个复数全部输出的频率为16 MHz),同时另一个RAM以16MHz的时钟频率接收FFT的运算结果。然后将两个RAM的作用交换,再以此循环。 3 结束语 本文详细分析了复信号多相滤波器的无盲区改进算法,并根据推导出的数学模型完成了其FPGA的设计。该设计根据信道数和抽取因子之间的倍数关系,解决了延迟和抽取功能的实现问题,并使用乒乓RAM实现了复信号多相滤波器的多通道流水线输出。 |
|
|
|
只有小组成员才能发言,加入小组>>
2854 浏览 3 评论
27608 浏览 2 评论
3428 浏览 2 评论
3954 浏览 4 评论
基于采用FPGA控制MV-D1024E系列相机的图像采集系统设计
2296 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 21:10 , Processed in 0.660862 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号