你那么写还是有问题的,应为matlab的数组下标是从1开始的,所以定义x1和h1有问题,应该从1开始,只是在作图的时候向左移动一个单位就行了。
关于R20(n)这是信号系统和数字信号处理处理里面的一种常用信号——单位脉冲序列,他表示在
n=0,1,2,3,。。。,一直到19这20个整数点上有值且值为1的离散信号。
两个题的代码如下,作图也做了,看的时候注意画图时从0开始的哦!!!
x=zeros(1,20)
for n=1:20
x(n+1)=x(n)+0.9^n
end
h=zeros(1,10)
for n=1:10
h(n)=1
end
y=conv(x,h)
n=0:(length(x)+length(h)-2)
subplot(211)stem(n,y)
xlabel('时间序号n')ylabel('幅植')
title('卷积')
x1=zeros(1,12)
for n=1:12
x1(n)=0.8
end
h1=zeros(1,6)
for n=1:6
h1(n)=1
end
y1=conv(x1,h1)
n1=0:(length(x1)+length(h1)-2)
subplot(212)stem(n1,y1)
xlabel('时间序号n1')ylabel('幅植')
title('卷积2')
function c = convolution(a,b)M= length(a) %a序列的长度
N=length(b) %b序列的长度
c=zeros(1,N+M-1) %用来存放卷积的结果
for n = 2:(M+N) %卷积之后的索引本应该的范围
tmp_max=min(n-1,M) %根据求和表达式,由1=<k<=M 且 1=<n-k<=N
tmp_min=max(n-N,1) %确定最终求和变量k的取值
for k =tmp_min:1:tmp_max
c(n-1) = c(n-1) +a(k)*b(n-k) %求和,同时由于c从1开始索引,
%将n的范围2:M+N
%对应到c的1:M+N-1中去
end
end
测试:
>>x = 1:9
>>y=2:8
>>convolution(x,y)
ans =
2 7 16 30 50 77 112 147 182 197 200 190 166 127 72
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)