MATLAB中不用自带的卷积函数conv实现序列的卷积

clc;%清屏幕
clear all;%清除工作区间内所有变量
x = [1 2 3 4 5 ];
h = [2 1 1 1 ];
[m1,n1] = size(x);%获取x[n]的行数和列数
[m2,n2] = size(h);%获取h[n]的行数和列数
n3 = n1+n2-1;%输出序列的长度,即x[n]序列长度和h[n]序列长度之和,再减1

xsub = 0:n1-1;%序列x[n]的下标
hsub = 0:n2-1;%序列h[n]的下标
ysub = 0:n3-1;%输出序列y[n]的下标

figure(1)
subplot(2,1,1);%选择2X1区域中的1号区
stem(xsub,x);
title('x[n]');
subplot(2,1,2);%选择2X1区域中的2号区
stem(hsub,h,'r');
title('h[n]');
%打印原始数据

A = zeros(n3,n3);B = zeros(n3,1);C = zeros(1,n3+n3);D=zeros(1,n3);
%先生成一个0矩阵和0向量A,x和h中维度高的作为0向量中的一部分元素;
%维度小的去填充矩阵
p=fliplr(h)
%翻转序列h并赋值给p
B(n2:n3) = x'
%转置序列x并赋值给B的第1列从n2到n3行
C(1,1:n2) = p
%把p赋值给c的1行从1列到n2列
for i=1:n3
    A(i,1:n3)=C(1,1:n3)
    C=circshift(C,1)
end
%把C序列循环移位并赋值给A
Y=A*B;%数组相乘得出卷积结果

figure(2)
subplot(1,1,1);%选择1X1区域中的3号区
stem(ysub,Y,'g');
title('y[n]');
%打印结果

结果

 本人菜逼;别骂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值