0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

剖析正交匹配追踪算法的优化设计与FPGA实现

电子工程师 来源:《电子技术应用》 作者:莫禹钧 柏正尧 黄 2021-04-08 13:28 次阅读

0 引言

2006年,CANDES D E等人提出了压缩感知(Compressed Sensing,CS)理论[1],CS理论利用与表达基不相干的观测矩阵,以低于奈奎斯特的采样速率非自适应地采样可稀疏表示的信号,得到低维的离散信息矢量,该信息矢量包含了原始信号的全部信息,然后通过非线性重建算法完美地重建信号。

压缩感知理论主要包含了三大核心部分:信号的稀疏表示、测量矩阵的构造和信号重构算法的设计。在压缩感知理论的三个核心问题中,如何设计并用硬件实现根据离散信息样点准确重构原始信号的行之有效的算法是该理论中较为重要的一环。目前,压缩感知信号重构算法主要分为两类:基于凸松弛的优化算法,如基追踪(Basis Pursuit,BP)算法;

基于贪婪迭代的匹配追踪算法,如OMP算法[2]。这两类算法各有优缺点:凸松弛算法具有很好的鲁棒性,然而由于需要将求解问题转化为线性规划问题,计算量大,信号重构效率低;贪婪算法虽然不具有强保证性,但实现简单,重构效率高,在工程应用中得到广泛使用[3]。

首次对压缩感知恢复算法进行VLSI设计是在参考文献[4]中,而之后,有文献进行优化设计。参考文献[5]根据OMP算法必须按照特定顺序执行这一特征,采用资源复用技术,提高了资源利用率。参考文献[6]设计了一个快速求逆平方根算法,在矩阵分解部分采用QR算法。参考文献[7]对OMP算法进行优化,减少了计算延时。参考文献[8]同时进行了OMP算法和AMP算法的VLSI设计。本文先对OMP算法进行理论分析,然后对OMP算法进行改进,通过增加一个阈值来减少乘法运算次数,使运算速度更快。在矩阵分解部分采用ACD方法避免开方运算,同时在硬件实现上也进行了相应的优化。仿真结果验证了设计的可行性。

1 OMP算法

1.1 基本OMP算法

在压缩感知中,原始信号x的稀疏度为k,观测矢量y是所采集的数据,y可通过测量矩阵Φ与x相乘而得。本设计的目的是在已知y和Φ的前提下恢复出x。OMP算法主要分为两部分,即寻找稀疏矢量中非零元素的位置和计算非零元素的值。

在OMP算法中残差r是一个很关键的参数,残差是通过当前选取的列向量和原始信号的线性组合不能对压缩测量值进行表示的部分。

1.2 改进OMP算法

令原始信号x的稀疏度为k,测量矩阵Φ大小为M×N,那么y为M维的离散信息矢量。本文提出一种新的方法,即加阈值法,通过添加一个阈值来减少乘法运算次数,阈值定为内积和的平均值的α倍,内积小于阈值的那些列在下一次迭代中不再求内积。每次迭代计算后都要对阈值进行更新。信号估计的均方误差随着α的增大而增大,当α为0时均方误差最小。改进的OMP算法步骤如下:

6356652168871000001521054.gif

6356652171385200005385437.gif

2 计算步骤

本文利用硬件实现重构长度N=256、稀疏度k=8的原始信号,观测矢量长度M=64。

改进后的OMP算法可分为4个模块。第1个模块对应重建过程的第(1)和第(2)步,也就是在剩余列的集

6356652173749200005384317.gif

中寻找对残差贡献最大的列为最匹配原子。

第2个模块对应重建过程的第(3)步,即计算新残差,为下次迭代做准备。

第3个模块对应重建过程的第(4)和第(5)步,即计算新的阈值并除去剩余列的集

6356652176521800009982774.gif

中和残差求内积小于阈值的列。求阈值前要先求内积的平均值。第t次迭代的内积平均值可用以下公式计算:

6356652179125100004473924.gif

为解决对Φ的列的定位问题,用一个256位的标志位来追踪Φ的列,标志位的第i位对应Φ的第i列。在第i列和残差求内积后,下一个时钟和残差求内积的就是下一个标志位为非零所对应的列,跳过标志位为零对应的列。开始前先把标志位的每一位全部初始化成1,在每一次迭代之后对标志位进行更新。

第4个模块对应重构过程的第(7)步,求解非零元素的值,即解决最小二乘问题。对于这类运算一般用Moore-Penrose伪逆的方法求解:

6356652182896000004892167.gif

求出C的逆矩阵后,就可以求得原始信号的估计:

6356652184855200008506623.gif

由于OMP算法的迭代性质,4个模块是不能并行执行的,只能每个模块依次执行。

3 硬件设计

硬件电路主要由以上4个模块组成,分为两个部分。整体硬件电路如图1所示。

o4YBAGBuk3KAV2mfAACxnHMEU2s044.png

首先用观测矢量y对残差r进行初始化。y用寄存器组存储,而观测矩阵Φ用多个RAM存储,这样就能在一个时钟内读出y的所有值和Φ的一列值。数据用24位定点数表示,10位整数,14位小数。设计64个24位乘法器并行工作来求内积,然后找到内积最大值来更新

6356652190670900005707599.gif

。矩阵

6356652192624000005808729.gif

的大小变化从N×1~N×8。

每次迭代后会把Φ中和残差内积小于阈值的列过滤掉,根据式(9)、(10)和(11),剩余列的集中的每一列和残差的内积都送到累加器进行求和,然后通过求内积平均值求得阈值。阈值参数α设置为一个常数。

256位标志位作为Φ的地址寻址,标志位每一位对应Φ每一列,初始化为所有位为1。每次迭代后对标志位进行更新,把Φ中和残差内积小于阈值的列所对应的标志位赋为零,否则保持为1。然后在下一次迭代时跳过标志位为零所对应的Φ的列,也就是直接用下一个非零标志位所对应的列与残差进行求内积。通过把标志位的前32位送到一个32位前导零计算器可以找出下一个非零位。

在寻找非零元素位置的部分迭代8次后,就开始计算非零元素的值。首先要计算矩阵

6356652198928900001562405.gif

可通过以下等式计算:

6356652200197600009844744.gif

此处复用之前的64个乘法器。C是一个对称矩阵,所以只需要计算C的对角线上8个元素和对角线下半部(或上半部)的28个元素。

然后要对C进行交替的柯列斯基分解,矩阵分解要求出下三角矩阵L和对角矩阵D。从式(13)和(14)可以看出,L和D是相互依存的,必须以特定的顺序计算。本设计中稀疏度k=8,L和D可以按照图2箭头所指顺序计算。设计7个乘法器并行计算D中的元素,那么每计算一个元素需要一个时钟周期。计算D-1时采用参考文献[9]的方法进行除法运算。由于L的同一列的各个元素并不是相互依存的,所以求L的每一列值都设计为并行计算各个元素,那么每一列的计算只需要一个时钟周期。

o4YBAGBuk4yALcw4AABx3IGB72c747.png

矩阵L的求逆需要迭代进行,如式(18):

6356652205299200003715136.gif

由于L的逆矩阵的各列的各个元素是相互依存的,所以列和列可以并行运算,每一列要按照特定的顺序运算,那么计算L-1需要7个时钟周期。

求C-1=(L-1)T×D-1×L-1时可以先求A=(L-1)T×D-1,然后再计算C-1=A×L-1。

4 仿真及结果分析

考虑到两个模块的最大运行频率不一样,本设计在寻找非零元素部分采用85 MHz的时钟,在求解非零元素值部分采用65 MHz的时钟。为了进行更好的对比,在MATLAB上用相同的算法、测量矩阵和观测矢量来重构原始估计值。当α=0.25时,软件和硬件的重构结果进行归一化后的对比如图3所示。

pIYBAGBuk5yAA77kAADI02TWj-8179.png

当α取值为零时,寻找非零元素部分共需要2 100个时钟周期,而仅仅是计算内积就需要256×8=2 048个时钟周期,计算非零元素部分共需要110个时钟周期,总的重构时间为26.40 μs。当α取值为0.25时,计算内积所需减少到约1 300个时钟周期,总的重构时间减少到约16.99 μs。在相同条件下,参考文献[7]重构时间为17.61 μs。而在参考文献[4]中,测量矩阵维数为32×128,观测向量维数为32×1,原始信号的稀疏度为5,总的重构时间就需要24 μs。

但是改进OMP算法归一化误差会随着α的增大而增大,当α取值为零时,归一化均方误差为0.001 5,取α=0.25时,归一化均方误差增加到0.007 1。

5 结论

本文采用一种阈值法,使得OMP恢复算法的求内积次数大大减少,从而缩短了信号重构所需要的时间,提高了恢复速率。同时,本文在硬件结构设计上也进行了一些优化,较好地平衡了占用资源和运算时间。本设计采用VHDL对改进的OMP算法进行了RTL级描述,在Quartus II上针对Altera公司的Cyclone II EP2C70F672C6进行设计和仿真,结果表明信号能够以更少的重构时间较好地恢复。

参考文献

[1] DONOHO D L.Compressed sensing[J].Information Theory,IEEE Trans. on,2006,52(4):1289-1306.

[2] TROPP J A,GILBERT A C.Signal recovery from random measurements via orthogonal matching pursuit[J].Information Theory,IEEE Trans.on,2007,53(12):4655-4666.

[3] 赵贻玖.稀疏模拟信号压缩采样与重构算法研究[D].成都:电子科技大学,2012.

[4] SEPTINUS A,STEINBERG R.Compressive sampling hardware reconstruction[C].Circuits and Systems(ISCAS),Proc.of 2010 IEEE International Symposium on.IEEE,2010:3316-3319.

[5] BLACHE P,RABAH H,AMIRA A.High level prototyping and FPGA implementation of the orthogonal matching pursuit algorithm[C].Information Science,Signal Processing and their Applications(ISSPA),2012 11th International Conference on.IEEE,2012:1336-1340.

[6] STANISLAUS J L V M,MOHSENIN T.High performance compressive sensing reconstruction hardware with QRD process[C].Circuits and Systems(ISCAS),2012 IEEE International Symposium on.IEEE,2012:29-32.

[7] STANISLAUS J,MOHSENIN T.Low-complexity fpga implementation of compressive sensing reconstruction[C].International Conference on Computing,Networking and Communications.2013.

[8] BAI L,MAECHLER P,MUEHLBERGHUBER M,et al.High-speed compressed sensing reconstruction on FPGA using OMP and AMP[C].Proc.19th Int.Conf.Electronics,Circuits and Systems(ICECS),Dec.2012:53-56.

[9] 周殿凤,王俊华.基于FPGA的32位除法器设计[J].信息化研究,2010(3):26-28.

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 测量
    +关注

    关注

    10

    文章

    4225

    浏览量

    109741
  • 稀疏信号重构

    关注

    0

    文章

    2

    浏览量

    645
收藏 人收藏

    评论

    相关推荐

    怎么用FPGA算法 如何在FPGA实现最大公约数算法

    FPGA算法的优点在于它们可以提供高度的定制化和灵活性,使得算法可以根据实际需求进行优化和调整。此外,FPGA还可以
    的头像 发表于 01-15 16:03 629次阅读

    浮点LMS算法FPGA实现

    运算的运算步骤远比定点运算繁琐,运算速度慢且所需硬件资源大大增加,因此基于浮点运算的LMS算法的硬件实现一直以来是学者们研究的难点和热点。 本文正是基于这种高效结构的多输入FPA,在FPGA上成功
    的头像 发表于 12-21 16:40 308次阅读

    fpga布局布线算法加速

    任务是将逻辑元件与连接线路进行合理的布局和布线,以实现性能优化和电路连接的可靠性。然而,FPGA布局布线的过程通常是一项繁琐且耗时的任务,因此加速布局布线算法的研究具有重要意义。本文将
    的头像 发表于 12-20 09:55 281次阅读

    双目影像密集匹配算法的综合分析

    自适应权重法是推动局部密集匹配算法发展的关键。自2006年Yoon等[53]首次提出可以在匹配质量与全局匹配算法相媲美的局部
    的头像 发表于 11-27 10:29 894次阅读
    双目影像密集<b class='flag-5'>匹配</b><b class='flag-5'>算法</b>的综合分析

    基于FPGA的模式匹配系统设计

    电子发烧友网站提供《基于FPGA的模式匹配系统设计.pdf》资料免费下载
    发表于 11-08 09:26 0次下载
    基于<b class='flag-5'>FPGA</b>的模式<b class='flag-5'>匹配</b>系统设计

    基于FPGA的窄带干扰抑制算法实现方案

    电子发烧友网站提供《基于FPGA的窄带干扰抑制算法实现方案.pdf》资料免费下载
    发表于 11-07 09:29 0次下载
    基于<b class='flag-5'>FPGA</b>的窄带干扰抑制<b class='flag-5'>算法</b>的<b class='flag-5'>实现</b>方案

    SDAccel环境剖析和最优化指南

    电子发烧友网站提供《SDAccel环境剖析和最优化指南.pdf》资料免费下载
    发表于 09-15 11:37 0次下载
    SDAccel环境<b class='flag-5'>剖析</b>和最<b class='flag-5'>优化</b>指南

    请问如何将C语言算法移植到FPGA上?

    确定算法:首先,你需要确保要移植的C语言算法是合适的。FPGA适合并行计算和高度可定制的应用。因此,你需要选择一个适合FPGA实现
    发表于 09-12 17:20 1044次阅读

    hash算法FPGA中的实现(2)

    在前面的文章中:hash算法FPGA中的实现(一)——hash表的组建,记录了关于hash表的构建,这里记录另外一个话题,就是hash链表。我们知道,只要有hash的地方,就一定有冲突,关键就看
    的头像 发表于 09-07 17:02 413次阅读
    hash<b class='flag-5'>算法</b>在<b class='flag-5'>FPGA</b>中的<b class='flag-5'>实现</b>(2)

    hash算法FPGA中的实现(1)

    FPGA的设计中,尤其是在通信领域,经常会遇到hash算法实现。hash算法FPGA的设计中,它主要包括2个部分,第一个就是如何选择一
    的头像 发表于 09-07 17:01 607次阅读
    hash<b class='flag-5'>算法</b>在<b class='flag-5'>FPGA</b>中的<b class='flag-5'>实现</b>(1)

    怎么用FPGA算法 如何在FPGA实现最大公约数算法

    FPGA算法是指在FPGA(现场可编程门阵列)上实现算法FPGA是一种可重构的硬件设备,可以
    的头像 发表于 08-16 14:31 1835次阅读
    怎么用<b class='flag-5'>FPGA</b>做<b class='flag-5'>算法</b> 如何在<b class='flag-5'>FPGA</b>上<b class='flag-5'>实现</b>最大公约数<b class='flag-5'>算法</b>

    粒子群优化算法的应用 粒子群优化算法研究方法

      摘要:粒子群优化算法是一种基于群智能的随机优化算法,具有简单易实现、设置参数少、全局优化能力
    发表于 07-19 15:01 0次下载

    FPGA实现PID控制算法

    相信大家对于PID控制算法,都不感到陌生了,平衡车就是靠它平衡起来的,还有飞控的平衡算法也是它,以及FOC中的闭环控制中也是用的它,它不仅简单,而且易于理解。那么本篇文章将简要介绍一下算法的原理,然后带大家使用
    的头像 发表于 05-19 16:40 1238次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>PID控制<b class='flag-5'>算法</b>

    FPGA高级设计之实现功耗优化

    点击上方 蓝字 关注我们   FPGA 高级设计之实现功耗优化 与ASICs(Application Specific Integrated Circuits)比较,相似的逻辑功能,用FPGA
    的头像 发表于 05-19 13:50 891次阅读

    采用FPGA实现FFT算法示例

    差,成本昂贵。随着FPGA发展,其资源丰富,易于组织流水和并行结构,将FFT实时性要求与FPGA器件设计的灵活性相结合,实现并行算法与硬件结构的优化
    的头像 发表于 05-11 15:31 1931次阅读
    采用<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>FFT<b class='flag-5'>算法</b>示例