首页> 中国专利> 用于FPGA的高速高阶FIR滤波器的频域实现方法

用于FPGA的高速高阶FIR滤波器的频域实现方法

摘要

本发明公开了用于FPGA的高速高阶FIR滤波器的频域实现方法,该方法对利用频域处理卷积运算时,由于补零耗时造成的数据无法实时处理这一问题进行了改进,将原来利用一个FFT IP处理序列的常规方案改为利用两个FFT IP对输入的数据进行运算。两个FFT分别输出分段卷积数据,且后一个卷积与前一个卷积刚好相差N个时钟。因为分段卷积长度为2N,前N个数据与前一个分段卷积相加,后N个数据与后一个分段卷积相加。这样重叠相加时不需要多余延时便可得到卷积的结果,从而达到信号实时处理。因此,本发明提供的频域实现方法不仅能降低FPGA资源消耗,还能够消除现有技术中的补零延迟现象,提高了处理速度,能实现实时处理。

著录项

  • 公开/公告号CN104967428A

    专利类型发明专利

  • 公开/公告日2015-10-07

    原文格式PDF

  • 申请/专利权人 南京信息工程大学;

    申请/专利号CN201510450365.9

  • 发明设计人 陈钟荣;郭晓伟;

    申请日2015-07-28

  • 分类号

  • 代理机构南京汇盛专利商标事务所(普通合伙);

  • 代理人张立荣

  • 地址 210044 江苏省南京市浦口区宁六路219号

  • 入库时间 2023-12-18 11:23:54

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-03-13

    授权

    授权

  • 2015-11-11

    实质审查的生效 IPC(主分类):H03H17/02 申请日:20150728

    实质审查的生效

  • 2015-10-07

    公开

    公开

说明书

技术领域

本发明涉及离散信号处理技术领域,特别涉及一种用于FPGA的高速高阶FIR滤波器的 频域实现方法。

背景技术

在数字信号处理系统中,FIR(Finite Impulse Response)滤波器是最基本的单元。由于其 严格的线性相频特性和稳定的系统,FIR成为许多领域处理数据的主要手段。随着电子技术 的发展,信号采样频率不断提高,在高速采样下,基于乘法器结构的FIR滤波器和基于分布 式算法的FIR滤波器在FPGA中虽然能进行快速的流水线实时处理,但像脉冲压缩技术类似 FIR滤波器,其阶数成千上万,对FPGA资源消耗太大。

快速傅立叶变换(FFT)是一种能实现这种高阶FIR滤波器且消耗资源相对较小的方法。 傅立叶变换方法设计原理如下:

FIR滤波器的本质就是有限长序列与无限长序列的线性卷积,线性卷积频域表达式为:

y(n)=x(n)*h(n)=IFFT{FFT[x(n)]×FFT[h(n)]}

其中,*代表离散线性卷积关系,y(n)为输出序列,x(n)为输入序列,h(n)为滤波 器冲击响应。FFT方法实现卷积流程图如图1:为长度N的输入序列和长度M的冲击响应分 别补M-1个0和N-1个0,将长度均补成L=M+N-1,从而与卷积输出序列等长(长度为M 和N的序列卷积输出的序列长度为M+N-1)。然后对补零后长度均为L的输入序列和冲击响 应分别做FFT运算转到频域,接着将输入序列和冲击响应的频谱相乘,再做IFFT运算(逆 变换)便可得到长为L的卷积结果。在实际应用中,序列x(n)长度很长,做FFT和IFFT需 要很大的点数,而硬件资源有限,不能对过长的数据进行FFT。所以一般将数据x(n)分段 成多个长度为N的有限长子序列集xm(k),那么x(n)可以表示为:

x(n)=Σm=0xm(n-mN)

其中,

xm(k)=x(k+mN),0kN-10,NkM+N-2

将长度为M的冲击响应h(n)补零后得到序列h1(n)

h1(n)=h(n),0nM-10,MnM+N-2

所以序列x(n)和序列h(n)的线性卷积为:

y(n)=x(n)*h(n)=Σl=0M-1h(l)x(n-1)=Σm=0ym(n-mN)

其中,ym(k)=h1(k)*xm(k)。所求的线性卷积分成了无限个长度均为N+M-1的短 长度线性卷积的和,ym(k)和ym+1(k)之间会有一个范围为mN≤n≤mN+M-2的 M-1个样本重叠。

显然,基于上述原理的FFT方法可以显著降低FPGA资源的消耗。但是,补零部分一方 面耗费时间,降低处理速度,另一方面形成延时间隔,造成数据无法实时处理。这使得降低 资源消耗和提高处理速度难以兼得。

发明内容

为了解决上述问题,本发明的目的在于提供一种用于FPGA的高速高阶FIR滤波器的频 域实现方法,对现有的FFT方法进行改进,以解决降低FPGA资源消耗和提高处理速度难以 兼得的问题,即:一方面降低高阶高速情况下对FPGA资源的消耗,另一方面提高处理速度 以实现实时处理。

上述目的是通过如下技术方案实现的:

一种用于FPGA的高速高阶FIR滤波器的频域实现方法,所述方法包括:

步骤A:确定FIR滤波器的冲击响应h(n)长度为M,将输入FIR滤波器的数据序列x(n) 分段成多个长度为N的分段序列,设定冲击响应h(n)和分段序列进行FFT的点数为2N,其 中,N=2i,i为正整数;使M=N+1,如M长度不足用零补足;

步骤B:对冲击响应h(n)进行点数为2N的FFT运算得到冲击响应频谱H(k),将分段 序列划分为奇数段和偶数段,利用乒乓操作将奇数段分段序列和偶数段分段序列分别补N个 零后输入两个FFTIP核进行点数为2N的FFT运算,得到时序相差N个时钟、长度为2N的 奇数段分段序列频谱和偶数段分段序列频谱,然后分别将奇数段分段序列频谱和偶数段分段 序列频谱与冲击响应频谱H(k)相乘;

步骤C:将奇数段分段序列频谱和偶数段分段序列频谱与冲击响应频谱H(k)的乘积分 别输入到两个IFFT IP核,分别获得长度为2N的奇数段卷积和偶数段卷积;

步骤D:将奇数段卷积结果和偶数段卷积结果相加,得到FIR滤波器的输出信号。

FFT和IFFT运算的点数为每个序列分段长度N的两倍,阶数为N+1;如果阶数不满足, 需要将阶数添零到N+1个。

进一步地,所述步骤B中,先将冲击响应h(n)补零至2N长度,再进行点数为2N的FFT 运算。

进一步地,所述步骤B中,点数为2N的FFT运算结果存入到RAM中,RAM使用写优 先模式。由于冲击响应先进入FFT模块,所以输出的数据先进入两个RAM中,RAM使用写 模式,进入的数据无需传完便可读取。

进一步地,所述步骤B中,按第1、3、5……个分段序列依次进入第一个FFT IP核进行 点数为2N的FFT运算,按第2、4、6……个分段序列依次进入第二个FFT IP核进行点数为 2N的FFT运算;第1个(长度为N的)分段序列输入进第一个FFT IP后补N个0,补零同 时,第2个(长度为N的)分段序列开始输入进第二个FFT IP,输入后补N个0,补零同时, 第3个长度为N的分段序列再输入进第一个FFT IP并补N个0,如此依次将奇数段分段序列 和偶数段分段序列输入,相邻两分段序列相差的时钟周期始终为N。

本发明的有益效果:

(1)本发明提供的用于FPGA的高速高阶FIR滤波器的频域实现方法不仅能降低FPGA 资源消耗,还能够消除现有技术中的补零延迟现象,提高了处理速度,能实现实时处理。

(2)本发明提供的FIR滤波器的频域实现方案解决了高阶情况下高速处理的资源消耗的 问题,优化硬件结构,且FIR滤波器的系数可配置。

附图说明

图1:现有技术频域实现两个序列的线性卷积流程图;

图2:本发明提供的在FPGA中设计FIR滤波器的结构图;

图3:本发明提供的是输入信号的具体时序图;

图4:本发明提供的分段卷积之后的输出信号的时序图;

图5:本发明所使用的FFTIP核模块示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合实施例和附图对本发明实时 方案进一步的详细描述。

本发明提供一种用于FPGA的高速高阶FIR滤波器的频域实现方法,该方法对利用频域 处理卷积运算时,由于补零耗时造成的数据无法实时处理这一问题进行了改进,将原来利用 一个FFTIP处理序列的常规方案改为利用两个FFTIP对输入的数据进行运算,序列时序如 图3所示。该方法适用于系数为实整数或复整数的系统,适用于超高阶系统,适用于脉冲压 缩系统,适用于系数可配置的系统。

下面以XILINX公司FPGA作为平台来阐述本发明所述的技术方案。

FIR滤波器的本质就是有限长序列与无限长序列的线性卷积,即:

y(n)=x(n)*h(n)=IFFT{FFT[x(n)]×FFT[h(n)]}

对无限长序列的卷积,将x(n)分段成多个长度为N的有限长子序列集xm(n)在频域上 卷积,其中,冲击响应h(n)长度为M=N+1;xm(n)和h(n)分别补N和N-1个零变成两个 长度为2N的序列,进行2N点的FFT运算,运算的值相乘进行IFFT运算,得到卷积结果。 FFT和IFFT运算的点数为每个序列分段长度N的两倍,阶数为N+1;如果阶数不满足,需 要将阶数添零到N+1个。利用重叠相加法将多个长度均为2N的卷积结果相加。整数N、N+1 和2N是根据FIR滤波器实现方法设计的参数,N为2i,i为正整数。本发明需要用到XILINX FFTIP核,其引脚图如图5所示,首先选择Pipelined,StreamingI/O模式,处理点数为2N, 使IP核可以连续地对2N长的数据进行FFT操作。使用的端口主要有以下:

clk:时钟端口;XN_RE,XN_IM:输入信号的实部与虚部,当输入信号为实信号将XN_IM 输入为0;START:FFT开始信号,可以控制端口对信号进行连续的FFT。FWD_INV_WE, FWD_INV:FWD_INV_WE置1,FWD_INV为1时,为FFT运算,FWD_INV为0时,为 IFFT运算;XK_RE,XK_IM:输出的复数结果;XK_INDEX:输出信号标识,表示在此次 进行的FFT输出数据的个数,系数FFT模块将此信号作为存储FFT值的地址,数据FFT作 为读取RAM中值的地址。XN_INDEX:输入数据的标识,表示在此次进行的FFT输入数据 的个数,用于控制下个FFT的开始。

由此本发明提供的用于FPGA的高速高阶FIR滤波器的频域实现方法具体方法包括以下 步骤,参见图2:

步骤1:高阶FIR滤波器的冲击响应和数据序列的信号,通过CoefOrSignal信号判断是 冲击响应还是数据序列。开始时,先将CoefOrSignal信号置高,系数start置高一时钟,输入 冲击响应按时钟进入系数的FFT模块进行运算,当输入个数到达N+1时,按时钟补零,达到 2N长度时,系数输入结束,输出的结果分别存入两个RAM中,RAM使用写优先模式。

步骤2:将CoefOrSignal信号置低,输入序列x(n),按长度为N分段,得到奇数段分段 序列x1(n)和偶数段分段序列x2(n),以乒乓操作分别将序列x1(n)、x2(n)输入到两个FFT IP中,在其中一个输入序列信号时,另一个补零,使FFT IP处理长度始终为2N;具体是:

x1(n)=Σi=0x2i(n-2iN)

x2(n)=Σi=0x2i+1(n-2iN)

其中,

x2i(k)=x(k+2iN),0kN-10,Nk2N-1

x2i+1(k)=x(k+2iN+N),0kN-10,Nk2N-1

每个FFT IP始终在开始输入序列的前一个时钟将start信号置高一时钟,可以通过 XN_INDEX信号判断,这样可以对无限长序列实时处理。时序图如图3所示。

步骤3:将2个分段序列信号FFT处理出来的结果通过XK_INDEX作为地址,分别寻找 各自RAM中的系数频谱(即冲击响应频谱),进行相乘,然后分别通过IFFT IP核,获得分 段卷积序列ym(n);输出时序如图4所示。具体表示为:

y1(n)=IFFT{FFT(h(n))×FFT(x1(n))}=Σi-0y2i(n-2iN)

y2(n)=IFFT{FFT(h(n))×FFT(x2(n))}=Σi-0y2i+1(n-2iN-N)

步骤4:根据重叠相加法,ym(n)和ym+1(n)之间有一个范围为mN≤n≤mN+M-2的 M-1个样本重叠,因为N=M-1,那么重叠范围为mN≤n≤mN+N-1,重叠长度刚好为卷 积输出长度的一半,那么前一个序列的后N个值与后一个序列的前N个值相加就为卷积出来 的结果。具体表现为:

y1(n)+y2(n)=Σi-0y2i+1(n-2iN-N)+Σi-0y2i(n-2iN)=Σi=0yi(n-iN)=y(n)

从上面可以看出,输出的结果与原理一致。

在实际应用中,只要确定FIR滤波器阶数N的大小,其他如序列分段长度和FFT点数等 参数都确定,所以,增加阶数硬件结构不会改变。设计时可以先按较大的点数来设计,即使 阶数很小,也可以通过补零达到设计要求的参数。这样不仅能灵活改变系数,还可以灵活改 变系数长度。

本发明提供的FIR滤波器的频域实现方法,解决了在超高阶频域上实现FIR滤波器的速 度问题,做到了减少资源,且能高速处理,且对FIR滤波器系数可以灵活配置。上述实施例 的作用在于说明本发明的实质性内容,但并不以此限定本发明的保护范围。本领域的普通技 术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方 案的实质和保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号