一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法与流程

文档序号:11250845阅读:602来源:国知局
一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法与流程

本发明涉及一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法,属于数字信号处理领域和嵌入式系统技术应用领域。



背景技术:

随着雷达信号处理、医学成像、天文、测控、导航等领域的快速发展,需要实时处理的数据规模越来越大,而绝大多数的数字信号处理过程都离不开快速傅里叶变换(fft)。然而,由于fft算法的时间复杂度都至少正比于信号的长度,所以当输入数据的点数特别多时,实时处理所需的处理量太大,硬件实现的难度也太大。然而在这些应用领域中,恰恰存在大量这样的信号:它们的全部傅里叶系数中只有很小一部分的值显著不为零,而其余大部分系数的值都极小甚至可以忽略不计。即这些信号在频域上是稀疏的。而稀疏傅里叶变换(sft)正是利用了这些信号在频域上的稀疏特性,通过提取信号的主要信息且忽略信号的次要信息,构建出了一套时间复杂度与信号长度成亚线性关系的新算法。

sft算法的核心思想,是通过对原始信号的频点进行分类入桶操作,将一个大点数(n点)的fft运算转化若干个小点数(b点,b远小于n)的fft运算,然后根据一定规则以很高的概率重构出原信号的若干个大值频点。假设某个信号在其频谱上有n个频率分量,但其中只有少数k个大值频点,则称这个信号的稀疏度为k。在sfft运算中,只要能将这k个大值频点重构出来,那么几个小点数的fft运算就实现了一个大点数fft运算主要的功能。由于若干个b点fft相比于一个n点fft而言,占用资源和运算时间都少了很多。因此在嵌入式设备中,sft经常被用来实现一些传统fft无法实现的运算和功能。

近些年出版了几种不同的sft硬件实现方法,虽然这些方法在细节上千差万别,但它们的理论框架是几乎一致的。2012年,hassanieh和indyk提出了一种近最优的实用sft算法,这种算法奠定了sft各种硬件实现结构的理论框架。2014年,abari提出了一种75万点的sft的硬件实现方法,同年,agarwal提出了一种百万点的sft的硬件实现方法,而schumacher也提出了一种改进的sft的硬件实现方法。然而,这些方法均有着容错率不高、硬件结构相对于参数不够灵活、运算时间上消耗较多等缺陷。

综上可知,在sft原理算法基本完善的情况下,其硬件实现上还存在很大的改进空间。本发明的目的是致力于解决之前的sft硬件实现方法所暴露出来的缺陷,提出了一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法。而用本发明中的流水反馈滤波结构代替传统sft实现方法中的候选值投票结构,可以用相同的结构适应不同参数的sft运算,并可以大量减少运算的时间消耗,显著地提高循环运算的容错率。



技术实现要素:

本发明的目的是为了克服传统的sft硬件实现方法中容错率不高、硬件结构相对于参数不够灵活、运算时间上消耗较多等缺陷,提出了一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法。

本发明的核心内容为:针对时域或频域稀疏的信号,先对输入信号进行缓存、重排、叠加、fft/ifft、大值选择和自适应筛选,然后进行流水反馈滤波,最后将补偿后的最终结果输出;

本发明所依托的稀疏傅里叶变换硬件处理系统,简称sft处理系统,主要包括fpga;其中,fpga中还包括时钟管理器、fifo、控制计数器、重排乘法器组、混叠器、ram、fft-ip核、大值选择排序器、重构乘法器组、流水反馈滤波器、除法器和补偿乘法器;其中,重排乘法器组包括线性数地址;

一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法,包括如下步骤:

步骤一、对输入数据进行缓存,再进行地址重排和混叠运算;

1.1当输入数据进入到sft处理模块中,对这些数据进行缓存,具体为:

步骤1.1a在fpga中开辟一个先进先出缓存空间来对这些数据进行缓存和跨时钟域处理,将sft处理系统的系统时钟设置为200mhz;先进先出缓存空间,即fifo;

步骤1.1b在fifo的输入端和输出端分别设置一个控制计数器,通过对输入输出的点数进行计数,进而控制fifo的读写和后续处理状态机的开始和停止,从而实现缓冲存储;

1.2在数据缓存的同时进行地址随机重排,具体为:

步骤1.2a在sft处理模块的多次循环运算中,每一次循环都需要随机生成一个小于n的质数作为重排系数,并求出这个重排系数的模逆作为重构系数;

步骤1.2b将原始的线性数地址与重排系数相乘并对n求模,得到本次循环中重排后的新地址;

其中,原始的线性数地址与重排系数相乘可通过一组并行的乘法器组来实现;当n为2的幂次的时候,对n求模可用截位运算来代替;

步骤1.3等到1.1和1.2中的数据缓存和地址随机重排都完成的时候,建立一个随机存取存储器,其中,随机存取存储器,记为ram;再将步骤1.2输出的重排后的新地址作为ram的写地址,将缓存数据作为ram的写数据,即可将重排后的数据暂存到ram中;

步骤1.4然后对步骤1.3中重排后的数据在混叠器中进行混叠运算,混叠器由一个缓存器和一个移位寄存器组构成;在每一个系统时钟周期中,缓存器将上一个点的数据赋值给移位寄存器组的最右端,同时移位寄存器组内整体向左移一个点,而移位寄存器组最左端溢出的那个点的数据和ram中读出的重排后的数据相加,在下一个系统时钟周期赋值给缓存器;当重排后的数据从ram中全部读出之后,移位寄存器组里面即是混叠后的数据;其中,重排后的数据即是重拍后的新地址中的数据;

步骤二、对步骤一混叠运算后的数据做时频变换,再自适应筛选出时频变换结果的大值点,作为候选大值频点,具体为:

步骤2.1对步骤一混叠后的数据做fft/ifft运算;

其中,fft/ifft运算通过调用xilinx公司的fft-ip核来实现;从fft-ip核输出的结果中筛选出若干个大值点,筛选过程可通过大值选择排序器来实现,而其核心结构是一种流水线移位交换队列架构;该种结构主要是由一个大值寄存器组、一个移位寄存器组以及若干个查找表构成的,寄存器组都是流水线形式的,且长度都为n/b;

步骤2.2在每个系统时钟周期中,将步骤2.1的fft/ifft结果赋值给移位寄存器组中最左边的那个点,而移位寄存器组整体向右平移一个点,原来最右边的那个点溢出丢掉;将大值寄存器组和移位寄存器组相对应位置上的点逐个对比大小,如果移位寄存器组中点的值大于大值寄存器组中点的值,则互换两个点的值;而大值寄存器组上面最后留下来的就是幅值最大的n/b个点,且这些大值点从左到右从大到小排列;

步骤2.3将步骤2.2得到的大值寄存器组中的值累加,利用截位运算求出平均值,平均值乘以加权系数的结果作为自适应阈值,小于这个阈值的大值点全部舍弃,而将大于等于这个阈值的大值点输出到后续模块;

步骤2.4将步骤2.3输出到后续模块的大值点的幅值和地址以新的格式拼接在一起,然后对这些大值点的地址进行重构;将大值点的地址与重构系数相乘并对n求模,得到本次循环中重构后的地址,再用此重构后的地址替换掉旧地址;

其中,乘法运算通过一个重排乘法器组来实现,对n求模用截位来代替;

步骤三、对步骤二拼输出的候选大值频点进行流水反馈滤波,具体为:

步骤3.1将步骤二拼接后的候选大值频点输入到流水反馈滤波器中;

其中,流水反馈滤波器主要由一个流水寄存器组、一个反馈寄存器组、一个缓存寄存器组、一个累加寄存器组和若干个查找表构成的;

步骤3.2将步骤3.1输入的数据,即候选大值频点赋值给流水寄存器组最左边的点,而每经过一个时钟周期,流水寄存器组会整体向右移动一个点;再将流水寄存器组中的每一个点与其对应位置右下方和正下方的反馈寄存器组中点作对比,如果对应点的地址相同,流水寄存器组中相应点的地址清零,幅值则累加到反馈寄存器组的对应点中,同时计数器加一;而如果地址没有对应上,则流水寄存器组和反馈寄存器组的相应位置不做改动;

步骤3.3接下来判断步骤3.2中流水寄存器组最右边溢出的那个点;如果这个点的地址为零,则丢弃这个点;如果这个点的地址不为零,则将这个点打入到反馈寄存器组的最右边,同时反馈寄存器组整体左移一个点;

步骤3.4然后判断步骤3.3中反馈寄存器组最左边溢出的那个点;如果这个点的计数器计数值小于2,则丢弃这个点;如果这个点的计数值大于等于2,则将这个点打入到缓存寄存器组的最左边,同时缓存寄存器组整体右移一个点;

步骤3.5将步骤3.4中缓存寄存器组每个系统时钟周期都右移动一个点,这时缓存寄存器组中的每一个点与其对应位置正下方的累加寄存器组中点作对比;如果对应点的地址相同,缓存寄存器组中相应点的地址清零,幅值和计数值则累加到反馈寄存器组的对应点中;而如果地址没有对应上,则缓存寄存器组和累加寄存器组的相应位置不做改动;

步骤3.6将步骤3.5中累加寄存器组中所有点的计数值累加,利用截位运算求出平均值,平均值乘以加权系数的结果作为自适应阈值,将大于等于这个阈值的结果输出到后续模块;

步骤四、对步骤三流水反馈滤波后的结果取平均值,再进行校正补偿,具体为:

步骤4.1对步骤三中流水反馈滤波模块输出的每个大值频点中的幅值做相除运算来求其平均值;

其中,步骤三中流水反馈滤波模块输出的每个大值频点中的幅值都是多次循环的幅值累加之和;相除运算通过xilinx公司的除法器ip核来实现,用累加寄存器组中每个点的幅值除以其计数值,就得到了多次循环的平均值;

步骤4.2对步骤4.1输出的平均值乘以一个校正系数,来进行幅度补偿;

其中,乘以一个校正系数通过xilinx公司的乘法器ip核来实现,补偿后结果为sft运算最终的输出结果;

至此,从步骤一到步骤四,完成了一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法。

有益效果

本发明所提出的一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法,对比传统的sft硬件实现方法,具有如下有益效果:

1.本发明所提方法利用流水反馈滤波结构代替了传统sft实现方法中的候选值投票器结构,这节省接近一半的运算时间;

2.本发明所提方法采用了自适应阈值判断,不需要像传统sft实现方法那样需要提前设置稀疏度、票数阈值等参数,而是由系统通过计算结果来判断和筛选,其结构上对不同的稀疏参数具有更强的适应性和兼容性;

3.本发明所提方法中的流水反馈滤波结构是以点作为单位对数据进行滤波处理的,所以其与循环次数无关,与输入数据量的多少也无关,即不同循环不同数据量的运算可以使用相同的硬件结构;

4.传统方法中如果sft的前两次循环运算中出现了漏算和错算,会对最后的计算结果造成很大影响,而本方法中的流水反馈滤波结构利用了循环与循环之间的相关性解决了这一问题,很大程度地提高了sft运算的容错率。

附图说明

图1是本发明“一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法”中实施例1中的整体流程图;

图2是本发明“一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法”中实施例1中的数据缓存结构;

图3是本发明“一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法”中实施例1中的随机重排结构和存储方式;

图4是本发明“一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法”中实施例1中的混叠器的结构;

图5是本发明“一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法”中实施例1中的大值选择排序器结构;

图6是本发明“一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法”中实施例1中的流水反馈滤波结构;

图7是本发明“一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法”中实施例1中的流水反馈滤波工作原理;

图8是本发明“一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法”中实施例2中的实际测试结果;

图9是本发明“一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法”中实施例2中的直接做fft的理论结果;

图10是本发明“一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法”中实施例2中的不同硬件实现方法的运算时间对比。

具体实施方式

下面将结合附图及具体实例对本发明技术方法进行详细说明,需要指出的是,所描述的实施例仅旨在便于对本发明的理解,而不起任何限定作用。

实施例1

本实施例阐述了将本发明“一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法”应用于对输入信号实时做百万点稀疏傅里叶变换的流程。

图1为本发明“一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法”的本实施例的流程图。

从图1中可以看出,本方法包含如下步骤:

步骤a、对输入数据进行缓存、地址重排和混叠运算;

具体到本实施例,为了能实时处理百万点的sft运算,在综合考虑运算精度与资源消耗之后,本实施例将数据总长度n设置为1048576点,子采样长度b设置为4096点,sft循环次数设置为8次;图2显示了数据缓存模块的结构,输入数据的长度如果不是2的整数次幂个,则需要在尾部补零;图3显示了随机重排结构和存储方式,乘法器的个数与sft循环次数一致;图4显示了混叠器的结构,通过混叠将一个1048576点的长序列变成了一个4096点的短序列;

步骤b、对稀疏后的数据做时频变换,然后自适应筛选出结果中的大值点;

fft-ip核的参数设置为:fft类型选择radix-4bursti/o,舍入类型选择四舍五入,输入位宽和输出位宽分别为25bit和35bit,数据类型为定点有符号数;大值选择排序器的结构如图5所示,由于本实施例中寄存器组的长度为256,所以它最多可以从大到小排序出最大的256个候选大值点,然后再通过自适应阈值筛选出若干个幅值最大的大值点;大值点的存储方式为:每个点均为96位,其中低21位放置地址,中间的66位放置幅值,最高位增加9位放计数器;

步骤c、对候选的大值频点进行流水反馈滤波;

图6为流水反馈滤波结构的示意图,图7展示的是流水反馈滤波结构的工作原理;可以看出,流水反馈滤波结构采用了全流水线移位寄存器组的设计思想,相比于传统的候选值投票结构,工作原理上有以下几个明显的不同之处:

(1)传统的候选值投票结构在每一次循环中,在全部输入数据进入寄存器组之后,都需要专门留出一部分时间用来进行排序、比较和替换计算;而改为全流水线的结构后,输入数据可以一直不停地流入,比较和替换运算可以同时进行,这样就可以节省接近一半的运算时间;

(2)传统的候选值投票结构对应不用的循环次数,其结构也是不一样的;而流水反馈滤波结构则与循环次数无关,与输入数据量的多少也无关,其本质是不同循环结果之间的相互比对,所以它可以用完全相同的硬件结构来实现;

(3)传统的候选值投票结构十分依赖前两次循环运算的正确性,如果前两次循环中出现了漏算和错算,最终计算结果一定会受到影响;而流水反馈滤波结构则利用不用循环之间的关联性来进行过滤,只要某个候选的大值点在前后4个循环运算中的2次被计算出来,就被认定为有效,进入后续的筛选流程,与其所在循环运算出现的先后次序无关,这就有效地提高了sft循环运算的容错率;

步骤d、对运算结果取平均值,进行校正补偿;

至此,从步骤a到步骤d,完成了一种基于流水反馈滤波结构的稀疏傅里叶变换实现方法。

实施例2

本实施例按照实施例1中所述的参数设置,利用xilinx公司的ise14.7软件对稀疏傅里叶变换模块进行了程序编写、综合、布局、布线和下载文件生成,运用modelsim软件进行仿真之后,在一片fpga(xc6vlx240t)上进行了测试;在测试实验中,本实施例模拟了一个频域上有5个大值频率分量的时域稀疏信号作为sft运算模块的输入信号。

在测试试验中,输入信号加上一定量的高斯白噪声后,再输入到sft处理模块;图8显示了实际测试中sft模块的运算结果,图9显示的是直接对输入信号做fft的理论计算结果;对比可以发现,输入信号的主要信息被保留,而次要信息被全部滤掉,而相比于直接做fft,使用稀疏傅里叶变换节省了大量的硬件资源和运算时间,硬件实现的难度也大大降低;测试试验中,还图10显示了不同硬件实现方法的运算时间对比,其中传统方法1指的是agarwal在2014年提出的百万点sft硬件实现方法;传统方法2指的是schumacher在2014年提出的一种改进的sft硬件实现方法;传统方法3指的是本发明人在2017年提出的另一种改进的sft硬件实现方法;而本发明方法是在传统方法3的基础上,提出了一种新的流水反馈滤波结构,替代了旧的候选值投票结构;可以看出,本发明中的实现方法相比于其他的实现方法,运算时间上大大减少。

以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1