MATLAB卷积运算(conv)以及通用的卷积函数my_conv的实现

MATLAB卷积运算(conv)以及通⽤的卷积函数my_conv的实现
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 =
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的卷积函数,解释了
天才就是非凡的傻劲
msn shellconv内部的计算过程:
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

本文发布于:2024-09-22 14:31:06,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/293224.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:卷积   函数   升幂   向量   排列
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议