Matlab 几种卷积的实现与比较(conv与filter,conv2与filter2)

Matlab 几种卷积的实现与比较(conv与filter,conv2与filter2)

   

最近在做控制算法实现的时候,对于其中参杂的各种差分、卷积很头疼,就在网上搜集了些资料,汇总于此,以做备忘。

在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积。

(1)即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。

实现差分方程,先从简单的说起:

filter([1,2],1,[1,2,3,4,5]),实现y[k]=x[k]+2*x[k-1]

y[1]=x[1]+2*0=1   
(x[1]之前状态都用0)
y[2]=x[2]+2*x[1]=2+2*1=4


(2)y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。


卷积公式:z(n)=x(n)*y(n)=
∫x(m)y(n-m)dm.

程序一:以下两个程序的结果一样

(1)h = [3 2 1 -2 1 0 -4 0 3]; %
impulse response

x = [1 -2 3 -4 3 2 1]; %
input sequence

y = conv(h,x);

n = 0:14;

subplot(2,1,1);

stem(n,y);

xlabel(‘Time
index n‘); ylabel(‘Amplitude‘);

title(‘Output Obtained by Convolution‘); grid;

(2)x1 = [x zeros(1,8)];

y1 = filter(h,1,x1);

subplot(2,1,2);

stem(n,y1);

xlabel(‘Time index n‘); ylabel(‘Amplitude‘);

title(‘Output
Generated by Filtering‘); grid;

程序二:filter和conv的不同

x=[1,2,3,4,5];
               h=[1,1,1];

y1=conv(h,x)

y2=filter(h,1,x)
              
y3=filter(x,1,h)

结果:y1
= 1    
3    
6    
9   
12    
9    
5

y2
= 1    
3    
6    
9   
12

‍  
     
     y3
 =
1    
3    
6

可见:filter函数y(n)是从n=1开始,认为所有n<1都为0;而conv是从卷积公式计算,包括n<1部分。

因此filter 和conv 的结果长短不同

程序三:滤波后信号幅度的变化

num=100; %总共1000个数 
               
x=rand(1,num); %生成0~1随机数序列 
                x(x>0.5)=1;

x(x<=0.5)=-1;
                h1=[0.2,0.5,1,0.5,0.2];

h2=[0,0,1,0,0];
               
y1=filter(h1,1,x);
               
y2=filter(h2,1,x);
               
n=0:99;
               
subplot(2,1,1);
               
stem(n,y1);
               
subplot(2,1,2); 
               
stem(n,y2);


MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:

C = conv2(A,B)

C =
conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb-1)×(na+nb-1)。 


例:

A=magic(5)

A =

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

>> B=[1 2 1 ;0 2 0;3 1 3]

B =

1 2 1

0 2 0

3 1 3

>> C=conv2(A,B)

C =

17 58 66 34 32 38 15

23 85 88 35 67 76 16

55 149 117 163 159 135 67

79 78 160 161 187 129 51

23 82 153 199 205 108 75

30 68 135 168 91 84 9

33 65 126 85 104 15 27

MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:

Y = filter2(h,X)

其中Y =
filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:

其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。

Fspecial函数用于创建预定义的滤波算子,其语法格式为:

h = fspecial(type)

h = fspecial(type,parameters)

参数type制定算子类型,parameters指定相应的参数,具体格式为:

type=‘average‘,为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。

type=
‘gaussian‘,为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为0.5

时间: 2024-11-05 06:24:56

Matlab 几种卷积的实现与比较(conv与filter,conv2与filter2)的相关文章

Matlab三种归一化方法

归一化的具体作用是归纳统一样本的统计分布性.归一化在0-1之间是统计的概率分布,归一化在-1--+1之间是统计的坐标分布.归一化有同一.统一和合一的意思.无论是为了建模还是为了计算,首先基本度量单位要同一,神经网络是以样本在事件中的统计分别几率来进行训练(概率计算)和预测的,且sigmoid函数的取值是0到1之间的,网络最后一个节点的输出也是如此,所以经常要对样本的输出归一化处理.归一化是统一在0-1之间的统计概率分布,当所有样本的输入信号都为正值时,与第一隐含层神经元相连的权值只能同时增加或减

matlab两种不同模式的并行运算

1.distributed job distributed job是一种比较简单的并行任务.假定用户需要完成一组作业,各个计算作业之间是独立的,而且相互之间不需要进行数据通信.这意味着各个作业的执行顺序不影响最终的执行结果.这种情况下可以采用distributed job完成此类作业. distributed job可以通过job manager(集群的scheduler).local scheduler(单机的scheduler)或第三方的scheduler(pbs)执行. 创建distrib

MATLAB卷积运算(conv、conv2、convn)解释

1 conv(向量卷积运算) 所谓两个向量卷积,说白了就是多项式乘法.比如:p=[1 2 3],q=[1 1]是两个向量,p和q的卷积如下:把p的元素作为一个多项式的系数,多项式按升幂(或降幂)排列,比如就按升幂吧,写出对应的多项式:1+2x+3x^2;同样的,把q的元素也作为多项式的系数按升幂排列,写出对应的多项式:1+x. 卷积就是"两个多项式相乘取系数".(1+2x+3x^2)×(1+x)=1+3x+5x^2+3x^3所以p和q卷积的结果就是[1 3 5 3]. 记住,当确定是用

matlab学习笔记之五种常见的图形绘制功能

分类: 离散数据图形绘制 函数图形绘制 网格图形绘制 曲面图形绘制 特殊图形绘制 本文重点介绍matlab五种图形绘制方法的后三种. 一.网格图形绘制 以绘制函数z=f(x,y)三维网格图为例,下面为绘制步骤: 确定自变量x和y的取值范围和取值间隔 x = x1:dx:x2; y = y1:dy:y2; 2.构成xoy平面上的自变量采样格点矩阵 1)  利用“格点”矩阵生成原理生成矩阵 X = ones(size(y))*x; Y = y*ones(size(x)); 2)  利用meshgri

(转载)图像处理(卷积)

图像处理-线性滤波-1 基础(相关算子.卷积算子.边缘效应) 这里讨论利用输入图像中像素的小邻域来产生输出图像的方法,在信号处理中这种方法称为滤波(filtering).其中,最常用的是线性滤波:输出像素是输入邻域像素的加权和. 1.相关算子(Correlation Operator) 定义:,  即 ,其中h称为相关核(Kernel). 步骤: 1)滑动核,使其中心位于输入图像g的(i,j)像素上 2)利用上式求和,得到输出图像的(i,j)像素值 3)充分上面操纵,直到求出输出图像的所有像素值

matlab中filter,conv之间的区别

conv是做卷积,就是按照书上的做法,先翻转,在一步步平移,得出结果.对于两个长度分别为n,m的序列,卷积结果长度为m+n-1 filter是做滤波,其实原理跟卷积是想通的,只不过处理结果的方法不同,先看示例程序: x=[1,2,3,4,5]; h=[1,1,1]; y1=conv(h,x) y2=filter(h,1,x) y3=filter(x,1,h) y4=filter(x,1,[h,zeros(1,4)]) 结果为: y1 = 1     3     6     9    12    

卷积神经网络CNN介绍:结构框架,源码理解【转】

1. 卷积神经网络结构 卷积神经网络是一个多层的神经网络,每层都是一个变换(映射),常用卷积convention变换和pooling池化变换,每种变换都是对输入数据的一种处理,是输入特征的另一种特征表达:每层由多个二维平面组成,每个平面为各层处理后的特征图(feature map). 常见结构: 输入层为训练数据,即原始数据,网络中的每一个特征提取层(C-层)都紧跟着一个二次提取的计算层(S-层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力.具体C层和S层的个数不确定

[综] 卷积的物理意义

卷积的物理意义是什么? https://www.zhihu.com/question/21686447?nr=1 果程C 他夏了夏天 1740 人赞同了该回答 对于初学者,我推荐用复利的例子来理解卷积可能更直观一些: 小明存入100元钱,年利率是5%,按复利计算(即将每一年所获利息加入本金,以计算下一年的利息),那么在五年之后他能拿到的钱数是,如下表所示:将这笔钱存入银行的一年之后,小明又往银行中存入了100元钱,年利率仍为5%,那么这笔钱按复利计算,到了第五年,将收回的钱数是,我们将这一结果作

【转】Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现

原作者:zouxy09 原文链接:http://blog.csdn.net/zouxy09/article/details/9993371 Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 [email protected] http://blog.csdn.net/zouxy09          自己平时看了一些论文,但老感觉看完过后就会慢慢的淡忘,某一天重新拾起来的时候又好像没有看过一样.所以想习惯地把一些感觉有用的论文中的知识点总结整理一下,一方面在整理过程中,自己