技术文章和通讯

将MATLAB算法转化为序列化设计HDL代码生成

Kiran Kintali MathWorks


万博1manbetx®允许您将MATLAB集成®算法仿真软件模型C或HDL代码生成。万博1manbetx然而,许多的MATLAB实现信号处理、通信和图像处理算法需要重新设计,使它们适合HDL代码生成。例如,他们经常使用的数据类型,比如双打,字符串,和结构,并包含控制流结构,如while循环和语句,不也映射到硬件。除了这些构造,MATLAB操作大型数据集的算法并不总是写入考虑硬件设计流和资源共享等特点。本文使用一个典型的软件实现的自适应中值滤波器的过程来说明MATLAB算法转换为HDL代码生成。

我们从一个仿真软件模型,嘈杂的1万博1manbetx31 x131像素图像和应用一种自适应中值滤波器获得去噪图像(图1中,左上角)。

当前版本的算法在MATLAB中实现对C代码生成(图1中,右上方)。算法将整个输入图像,“我”,作为输入,运行在双精度的数据,并返回,去噪图像“J”,作为输出。算法的核心是实现三个层次的嵌套循环作用于整个图像。两个外循环遍历图像的行和列。最内层循环实现了自适应滤波器的性质通过比较中值阈值,决定是否替换像素或增加社区规模和重新计算中位数。

matlab_fig1_w.jpg
图1所示。万博1manbetx自适应中值滤波器的仿真软件模型,建立了C代码生成,原始和输出图像(左上)和相应的MATLAB代码(右上角)。

该算法使用四个街区大小:3 x3, 5 x5, 7 x7, 9 x9。尽管当前的实现包含结构和典型范例在软件实现和高效的软件,目前的形式是不适合硬件合成,有以下原因:

该算法作用于整个图像。典型的硬件实现流数据在小块芯片窗户内核以减少芯片I / O数;数据处理速度和处理芯片完成整个框架下一帧之前的数据是可用的。

该算法使用双数据类型。双数据类型不是有效的硬件实现。硬件实现必须有效地利用硅区域和避免使用双精度运算,消耗更多的区域和力量。算法应该使用定点数据类型而不是浮点数据类型(双)。

该算法使用昂贵的数学函数。运营商的使用像罪、分裂和变量会导致效率低下的硬件上模。天真的实现这些功能的硬件导致较低的时钟频率。为硬件设计权衡,我们需要使用低成本的重复添加,或者subtract-based算法,如CORDIC。

软件算法的循环必须有效地映射到硬件。因为硬件执行需要确定的,我们不能让循环和动态范围。硬件是平行的,这意味着我们可以展开循环执行硬件提高并发性,但这种消耗更多的硅区域。

该算法包含大型数组和矩阵。当映射到硬件,大型数组和矩阵消耗地区资源如寄存器和公羊。

在下一节中我们将看到如何重组hardware-oriented实现相同的自适应中值滤波器解决了这些问题。

修改自适应滤波器算法的硬件

转换的过程最初的自适应中值算法硬件包括以下任务:

  • 序列化的输入图像进行处理
  • 分离自适应中值滤波器对并行计算
  • 更新使用去噪的原始图像的像素值

本文重点介绍前两个任务。

序列化的输入图像

大多数硬件算法不工作整体形象,但在每个时间步在较小的窗户。结果,原始输入图像必须序列化和涌入芯片,这取决于有多少可用的图像需要的算法计算,缓冲到芯片上的记忆。这个算法的硬件模型必须考虑可用的内存来保存图像数据量,除了可用I / O引脚的数量在芯片中的数据流。

在我们的示例中,串行化重组涉及到仿真软件模型,自适应滤波器设计把图像分为9 x1列像素数据提要作为滤波器的输入。万博1manbetx数据缓冲芯片9周期内,创建一个9 x9窗口像素来计算一个新的中心。数据的过滤过程这个窗口和小溪修改9 x9窗口中心像素值。在滤波器的输出,修改后的中心像素数据应用于原始图像重构去噪图像。现在过滤器是在小窗口的数据,它需要运行速度来完成整个算法在图像处理下一个图像可以在输入。我们这个算法行为模型使用速度过渡块。

这种图像缓冲将需要额外的控制信号的流媒体数据处理的算法在硬件中实现。在这个模型(图2)子系统“capture_column_数据”有助于席卷的形象,而在9 x1 windows,提要数据到主过滤器子系统(“MedianFilter_2D_ HW”)。二维自适应中值滤波器工作以来的最大窗口大小9 x9,填补过滤器管道需要9个周期开始时每一行的第一中心像素图像和计算。这意味着我们需要额外的控制信号的输出滤波器来指示中心像素输出的有效性。

matlab_fig2_w.jpg
图2。万博1manbetx仿真软件模型的自适应中值滤波器,建立了HDL代码生成,清洁工的代表9 x1列数据的“capture_column_data”子系统(左下)和实现自适应中值滤波器(右下角)。

在滤波器的输出,子系统“update_image”需要“MedianFilter_2D_HW”子系统的数据过滤和建构完整的图像根据控制信号。

并行算法

自适应中值滤波器的基础选择窗口大小的计算值在当地统计数据。面向软件实现计算这些统计数据为每个窗口大小顺序嵌套循环。硬件实现可以并行执行这些计算。

新滤波器实现分区数据缓冲区到3 x3, 5 x5, 7 x7,和9 x9地区和实现单独的中值滤波器计算最低,中值,最大值为每个分区并行(图2中,右下角)。并行计算的窗口让过滤器执行更快的硬件。

优化算法的硬件

找到最低、中值和最大值的邻近像素,软件实现的嵌套循环遍历所有的行从左到右和从上到下。在hardwarefriendly实现,最小/最大/中值计算时只对感兴趣的区域,确定使用一维中值滤波。图3(上)显示了最小/最大/中值的计算值3 x3窗口;我们可以看到,一个nxn像素区域要求{N2*地板(日志2N2/ 2)}比较器的数量。

上图:算法计算最小/最大/中位数为3 x3窗口;底部:hardware-optimized实现一维中值滤波
图3。上图:算法计算最小/最大/中位数为3 x3窗口;底部:hardware-optimized实现一维中值滤波。

实现算法3 x3, 5 x5, 7 x7,和9 x9窗户,我们一共需要4752(9 * 4 + 25 * 12 + 49 * 24 + 81 * 40)比较器。

我们可以探索其他领域的优缺点的例子中,我们可以实现二维滤波算法,适用于个人的行和列nxn地区,而不是在所有像素。这将消耗更少的资源比800 d过滤和需要比较器(18 + 100 + 196 + 486),而不是4752年。然而,因为我们知道中心像素值通常发现3 x3的地区,我们可以通过应用而在质量上妥协有损2 d算法(get_median_2d)其他地区在应用1 d算法3 x3地区(图3中,底部)。

尝试这些权衡我们只是交换对函数的调用路径get_median_1dget_ median_2d和模拟模型比较降噪区别不同的选择。

这个算法是用来消除干扰的输出像素的原始图像。

这种方法的优点

MATLAB和Simu万博1manbetxlink提供一种简洁的方式代表算法:自适应中值滤波中描述大约186行MATLAB代码。类似c代码的实现需要近1000行;HDL实现超过2000行。了解建模时权衡目标硬件和软件是有效的关键复杂的信号和视频处理算法的实现。MATLAB和Simu万博1manbetxlink帮助你探索这些权衡在较高的抽象级别没有编码太多硬件细节,提供一个有效的方法使用MATLAB环境硬件部署。

自适应中值滤波器

自适应中值滤波是一种常用的数字图像处理技术来降低散斑噪声和saltand——胡椒噪音。一个通用的中值滤波器替换当前的像素值中位数的邻近像素值;它会影响所有的像素,它们是否吵闹,高噪声,因此,模糊了图像的内容。自适应中值滤波克服了这一局限性,选择性地替换像素值。它决定通过分析值。如果噪音值是扭曲的,它适应本身通过定义中位数在更大的区域。

因为这些优点,自适应中值滤波器通常用作清理图像预处理步骤进行进一步处理。过滤器是非常可取的硬件实现由于算法的计算复杂性和高吞吐量的需求。

2011 - 91893 v00出版