verilog实现卷积运算
卷积的运算原理
卷积是一种线性运算,是很多普通图像处理操作的基本算法之一。它提供了两个数组相乘的方式,两个数组拥有不同的大小,但是具有相同的维数,生成了一个用于相同维数的新数组。可以用来图像的执行操作,输入一组特定的像素值线性组合成为另一组像素值。在图像处理中常见的msk运算都是卷积,广泛应用于图像滤波。
1.1卷积出现的背景
卷积是在信号与线性系统的基础或背景中出现的,脱离这个背景单独谈卷积是没有任何意义的,除了那个所谓褶反公式上的数学意义和积分(或求和,离散情况下)。
信号与线性系统,讨论的就是一个信号经过一个线性系统以后发生的变化(就是输入、输出和所经过的所谓系统,这三者间的运算关系)。
因此,实际都是要根据我们需要处理的信号形式,来设计所谓的系统传递函数,那么这个系统的传递函数和输入信号,在数学上的形式就是所谓的卷积关系。
卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。卷积的本质是滑动平均思想,它就是一种微元相乘累加的极限形式。卷积本身不过是一种数学运算而已,就跟“蝶形运算”一样,在信号与系统中,y(t)=f(t)*h(t)。时域的卷积等于频域的乘积,即有Y(s)=F(s)×H(s),拉氏变换后得到的函数其实就是信号的频域表达式)。
然而,在通信系统中,我们关心的以及要研究的是信号的频域,不是时域,原因是因为信号的频率是携带有信息的量。所以,我们需要的是这个表达式,但是实际上,我们往往不能很容易得到。
卷积其实就是通过两个函数 f和g生成第三个函数的一种数学算法,表征函数与经过翻转和平移的的重叠面积。如果将参加卷积的一个函数看作区间的指示函数,卷积也可以被看做是“移动平均”的推广。
图1.1中两个方形脉冲波做卷积。其中函数首先对反射,接着平移“t”,成为。那么重叠部分的面积就相当于“”处的卷积,其中横坐标代表待积变量以及新函数的自变量。
构造一个3 * 3的卷积核,并利用该卷积核完成与6×6矩阵的卷积运算,数据位宽8bit补码数, 结果位宽20bit补码数。
卷积的基本过程如下:
对卷积核进行180度翻转(数据读写顺序的调度)将3×3卷积核的中心对准 6×6 矩阵的每个数进行对应数据乘累加得出结果,如此往复作业。输入数据补码8bit,实际有效7bit,输出数据补码20bit,实际有效19bit,卷积增加位数3×3=9,所以单个乘法最多增加19-7-9=3bit。所以卷积核采用3bit数,即4bit补码数。
内置电路图如图二所示:
正如第二部分对本次设计的介绍,我们要做到的是对模拟信号的采样由A/D转换器来完成,而卷积过程由信号的移位来实现。为了设计卷积运算器,首先要设计RAM 和A/D转换器的VerilogHDL 模型。在电子工业发达的国家,可以通过商业渠道得到非常准确的外围器件的虚拟模型。如果没有外围器件的虚拟模型。因为RAM和A/D转换器不是我们设计的硬件对象,所以需要的只是他们的行为模型,精确的行为模型需要认真细致的编写,并不比综合模块容易编写。
运算过程简介
系统内置3×3的4bit补码数的卷积核
外部输入6*6的8比特补码数: