作业帮 > 综合 > 作业

matlab 不用conv求卷积

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/08/30 00:09:32
matlab 不用conv求卷积
随便定义两个序列,假设为n1,n2,想实现两个序列卷积,翻折,移位,相乘是自己写的函数,前面都没问题,就是在for循环两个序列相乘得到新的序列,将新的序列求和,将和赋值到一个数组中,把数组画出来,求指教
n1=0:2;
x1=[1,2,3];
subplot 321;stem(n1,x1);title('x1');
n2=0:2;
x2=[3,4,5];
subplot 322;stem(n2,x2);title('x2');
k3=length(n1)+length(n2);
a=[];
for i=1:1:k3
[n3,n4]=fan(x2,n2);
subplot 323;stem(n4,n3);title('翻折');
[k1,k2]=sigshift(x2,n2,i);
subplot 324;stem(k2,k1);title('移位');
[n5,n6]=sigmult(x1,n1,k1,k2);
%subplot 325;stem(n6,n5);title('相乘');
a=sum(n5);
end
subplot 325;stem(k3,a);
自己写个卷积的函数行不行?输入的x和y都是行向量:
function jj=juanji(x,y)
M=length(x);
N=length(y);
x=[x,zeros(1,N-1)];
y=[y,zeros(1,M-1)];
sum = 0;
for m=1:M+N-1
for n=1:m
sum = sum + x(n)*y(m+1-n);
end
jj(m)=sum;
sum=0;
end
再问: x,y的区间没有啊 比如x在(0,4)y在(4,9)之类的,卷积的结果区间在(-5,14),用stem画出卷积的结果 我要的是这种效果的
再答: x和y是卷积的输入,卷积得到的序列长度应该是Lx+Ly-1吧... 放在横轴的什么地方自己设一下就好了...比如这样: x=[ones(1,4) zeros(1,6)]; y=[zeros(1,3) ones(1,6) zeros(1,1)]; stem(-4:14,juanji(x,y));