为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

FPGA信号处理系列文章-多相滤波器解决Xilinx工程问题

2023-06-20 5页 doc 191KB 3阅读

用户头像 个人认证

is_856463

暂无简介

举报
FPGA信号处理系列文章-多相滤波器解决Xilinx工程问题     FPGA信号处理系列文章多相滤波器解决Xilinx工程问题          提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FPGA信号处理系列文章——多相滤波器解决Xilinx工程问题前言实际工程场景FIRIP可以例化,但浪费大量DSP资源FIRIP无法进行例化的情况直接滤波和多相分解matlab对比直接滤波和多相分解+系数对称化matlab对比前言上一篇我们讲到了多相滤波器中需要用到一些技术处理方式,包括按照相位均匀划分把数字滤波器的系统函数H(z)分解成若干个具有不同相位的组,形成多个分支,在...
FPGA信号处理系列文章-多相滤波器解决Xilinx工程问题
     FPGA信号处理系列文章多相滤波器解决Xilinx工程问题          提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档FPGA信号处理系列文章——多相滤波器解决Xilinx工程问题前言实际工程场景FIRIP可以例化,但浪费大量DSP资源FIRIP无法进行例化的情况直接滤波和多相分解matlab对比直接滤波和多相分解+系数对称化matlab对比前言上一篇我们讲到了多相滤波器中需要用到一些技术处理方式,包括按照相位均匀划分把数字滤波器的系统函数H(z)分解成若干个具有不同相位的组,形成多个分支,在每个分支上实现滤波;以及每个分支上,对系数进行对称化处理的方法。接下来我们来阐述利用多相分解方法来解决一些Xilinx工程问题。(注意,Intel平台没有进行考究)实际工程场景很多情况下,我们使用的FIR滤波器一般是对称性。在XILINX平台中,存在FIRIP核可以给我们进行调用,实际上,其IP核使用的实现方法就是使用的多相滤波实现的方法,但其使用的时候却存在着一些局限性。下面来说明两个方面的局限性以及对应FIRIP可以例化,但浪费大量DSP资源系统时钟为245.76MHz,采样率为245.76MHz,我们希望插值到491.52MHz。在博主的文章FIR半带插值滤波器-1个时钟2个采样点的优化处理文章中,实际上就是一种多相滤波的一种处理方式,只不过是一种特例化的情景。在这种情况下,FIRIP是可以进行例化的,但使用IP进行实现的话比使用手动处理的多相滤波方法乘法器资源多了将近3倍。这里就不在进行重复阐述了。FIRIP无法进行例化的情况假如有一个这样的场景需求:系统时钟为491.52MHz,采样率为491.52MHz,我们希望变采样到368.64MHz。或者系统时钟为368.64MHz,采样率为368.64MHz,我们希望变采样到491.52MHz很遗憾,你无法通过xilinxFIRip配置出这样的采样率变换出来。这种情况下,就算资源再多也我们只能进行手动处理了。下面给出一个定点化的matlab。直接滤波和多相分解matlab对比clc;clearall;closeall;%491.52e6->368.64e6n=[0:10000];fi=10e6;fs=491.52e6;signal=round(1024*exp(j*2*pi*fi/fs*n));signalup=upsample(signal,3);ff=importdata('filter1_fix.coe');coeff_val_fir=ff.Numerator;signal_f1=filter(coeff_val_fir,1,signalup);figure(2)power_figure(signal_f1,368.64e6*4)ff=importdata('filter1_fix_sub1.coe');coeff_val_fir=ff.Numerator;signal_f=filter(coeff_val_fir,1,signal);signal31=round(signal_f);ff=importdata('filter1_fix_sub2.coe');coeff_val_fir=ff.Numerator;signal_f=filter(coeff_val_fir,1,signal);signal32=round(signal_f);ff=importdata('filter1_fix_sub3.coe');coeff_val_fir=ff.Numerator;signal_f=filter(coeff_val_fir,1,signal);signal33=round(signal_f);signal_ff=[signal31.'signal32.'signal33.'];signal_ff=reshape(signal_ff.',1,length(signal33)*3);figure(3)power_figure(signal_ff,368.64e6*4)figure(4)plot(signal_f1-signal_ff)运行结果直接滤波和多相滤波后频谱对比直接滤波和多相滤波后时域对比,时域完全一致。直接滤波和多相分解+系数对称化matlab对比clc;clearall;closeall;%491.52e6->368.64e6n=[0:10000];fi=10e6;fs=491.52e6;signal=round(1024*exp(j*2*pi*fi/fs*n));signalup=upsample(signal,3);ff=importdata('filter1_fix.coe');coeff_val_fir=ff.Numerator;signal_f1=filter(coeff_val_fir,1,signalup);figure(2)power_figure(signal_f1,368.64e6*4)ff=importdata('filter1_fix_sub1.coe');coeff_val_fir1=ff.Numerator;ff=importdata('filter1_fix_sub3.coe');coeff_val_fir3=ff.Numerator;coeff_val_fir=coeff_val_fir1+coeff_val_fir3;signal_f=filter(coeff_val_fir,1,signal);signal31=round(signal_f);ff=importdata('filter1_fix_sub2.coe');coeff_val_fir=ff.Numerator;signal_f=filter(coeff_val_fir,1,signal);signal32=round(signal_f);coeff_val_fir=coeff_val_fir3-coeff_val_fir1;signal_f=filter(coeff_val_fir,1,signal);signal33=round(signal_f);signal311=(signal31-signal33)*0.5;signal333=(signal31+signal33)*0.5;signal_ff=[signal311.'signal32.'signal333.'];signal_ff=reshape(signal_ff.',1,length(signal33)*3);figure(3)power_figure(signal_ff,368.64e6*4)figure(4)plot(signal_f1-signal_ff)运行结果直接滤波和多相滤波+系数对称化处理后频谱对比直接滤波和多相滤波+系数对称化处理后时域对比,时域完全一致。至此,变采样率多相滤波定点化的matlab已经完全验证成功,相信以这个matlab为指导进行verilog实现对大家来说那就是水到渠成的事情了。程序中的coe文件,很好弄。想偷懒的可以在这里下载COE文件关注博主即可阅读全文 -全文完-
/
本文档为【FPGA信号处理系列文章-多相滤波器解决Xilinx工程问题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索