卷积的运算过程及matlab实现

卷积是信号处理领域最为常见的运算,对于一个线性时不变系统而言,只要知道了系统的单位冲击响应,则可以由输入序列x[n]和单位冲击响应h[n]经卷积运算得到系统的输出。下面给出输入信号x = [1 2 3 4];单位冲击响应h = [2 1 1]时,系统输出的运算过程,虽然matlab自带了卷积函数conv,但是通过亲手编写代码可以加深对卷积的运算。

可以由这个例子得出,卷积之后的y[n]序列的长度等于x[n]长度值与h[n]长度值的和再减1。

clc;%清屏幕
clear all;%清除工作区间内所有变量
x = [1 2 3 4];%输入信号
h = [2 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]的下标
subplot(3,1,1);%选择3X1区域中的1号区
stem(xsub,x);axis([0,10,-0.2,15]);title('x[n]');
subplot(3,1,2);%选择3X1区域中的2号区
stem(hsub,h,'r');axis([0,10,-0.2,15]);title('h[n]'); 
A = zeros(6,6);B = zeros(6,1);%先生成一个0矩阵和0向量,x和h中维度高的作为0向量中的一部分元素;
%维度小的去填充矩阵
piec = ones(m2,n2);%piece为循环移位的非0值向量
for i = 1:n2
   piec(m2,i) = h(m2,n2+1-i);%对冲击响应矩阵h[n]进行翻转,尽管matlab自带了flipfl函数可以进行翻转,但这个过程非常简单,几行程序就实现了
end
piec%
B(n3-n1+1:n3) = x'
A=[1 1 2 0 0 0 ;0 1 1 2 0 0;0 0 1 1 2 0;0 0 0 1 1 2;0 0 0 0 1 1;0 0 0 0 0 1];%循环移位,对应点相乘,通过矩阵相乘即可实现
%B=[0 0 1 2 3 4]';%行向量转置为列向量
Y=A*B;
subplot(3,1,3);%选择3X1区域中的3号区
stem(ysub,Y,'g');axis([0,10,-0.2,15]);title('y[n]');
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nwsuaf_huasir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值