MATLAB卷积运算(conv)以及通用的卷积函数my_conv的实现
2018-03-11 11:24
1051 查看
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]
注意:当确定是前一个序列用升幂或是降幂排列后,后一个序列也都要按这个方式排列,否则结果是不对的。
p = [1 2 3];q=[1 1];
conv(p,q)
ans =
当然MATLAB的卷积函数还有conv2(二维矩阵卷积运算)和convn(n维卷积运算),可以去参考文档了解
那么这里的问题是,当两个序列不是从0开始时,必须对conv函数稍加扩展:
知道了conv的这些用法之后,我便好奇想conv的实现过程:接下来是不使用conv的卷积函数,解释了
conv内部的计算过程:
测试my_conv函数:
yn =
y =
两个向量卷积,简单理解其实就是多项式乘法。
比如: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]
注意:当确定是前一个序列用升幂或是降幂排列后,后一个序列也都要按这个方式排列,否则结果是不对的。
p = [1 2 3];q=[1 1];
conv(p,q)
ans =
1 3 5 3
当然MATLAB的卷积函数还有conv2(二维矩阵卷积运算)和convn(n维卷积运算),可以去参考文档了解
那么这里的问题是,当两个序列不是从0开始时,必须对conv函数稍加扩展:
function [ y,ny ] = convu( h,nh,x,nx ) %CONVU 通用卷积函数 % function [ y,ny ] = convu( h,nh,x,nx ) % y为卷积结果向量,ny是y的位置向量,h和x是有限长序列 nys = nh(1)+nx(1); nyf = nh(end)+nx(end); y = conv(h,x); ny = nys:nyf; end
知道了conv的这些用法之后,我便好奇想conv的实现过程:接下来是不使用conv的卷积函数,解释了
conv内部的计算过程:
function y = my_conv( x,h ) %MY_CONV 重写MATLAB内置卷积函数conv() % function y = my_conv( x,h )用来计算y(n) = h(n)*x(n)的卷积 nx = length(x); nh = length(h); y = zeros(1,nx+nh-1); for index = 1:nx indexSum = x(index)*h; y(1,index:index+nh-1) = y(1,index:index+nh-1)+indexSum; end end
function [ y,ny ] = my_convu( x,nx,h,nh ) %MY_CONVU 通用的卷积函数(不使用conv()实现) % function [ y,ny ] = my_convu( x,nx,h,nh ) % 用来计算y(n) = h(n)*x(n)的卷积 % % y为卷积结果向量,ny是y的位置向量,h和x是有限长序列 nys = nx(1)+nh(1); nyf = nx(end)+nh(end); y = my_conv(h,x); ny = nys:nyf; end
测试my_conv函数:
%% 2.计算两个有限长序列的卷积 xn = [1 1 1 1 ]; hn = [1 1 1 1 ]; yn = my_conv(xn,hn); %% 3.编写通用卷积函数function [ y,ny ] = convu( h,nh,x,nx ) %如果h(n)=x(n)=R5(N+2),则计算y(n)=h(n)*x(n)的程序如下: h = ones(1,5);nh = -2:2; x = h;nx = nh; [y,ny] = my_convu(h,nh,x,nx);
yn =
1 2 3 4 3 2 1
y =
1 2 3 4 5 4 3 2 1
相关文章推荐
- Matlab 几种卷积的实现与比较(conv与filter,conv2与filter2)
- Matlab 几种卷积的实现与比较(conv与filter,conv2与filter2,imfilter)
- MATLAB conv2卷积的实现
- MATLAB conv2卷积的实现
- MATLAB conv2卷积的实现
- Matlab 几种卷积的实现与比较(conv与filter,conv2与filter2)
- 深度学习FPGA实现基础知识15(Matlab图像处理“卷积”运算)
- Matlab 几种卷积的实现与比较(conv与filter,conv2与filter2)
- MATLAB conv2卷积的实现
- 图像缩放插值算法以及matlab简单实现(最近邻法、双线性插值法、三次卷积法)
- Matlab 几种卷积的实现与比较(conv与filter,conv2与filter2)
- 【Tensorflow】tf.nn.depthwise_conv2d如何实现深度卷积?
- Matlab VC 联合编程 控制台以及MFC中实现(四)
- 实验一 离散时间序列卷积和MATLAB实现
- FastICA 在matlab代码实现以及运行结果
- 数组相关和卷积运算的实现
- MATLAB的基本运算以及常识
- 曲线在三维空间的旋转计算以及Matlab实例实现
- 信号的采样以及matlab实现
- matlab中的卷积——filter,conv之间的区别