利用对位相乘法计算线性卷积-附Matlab代码

目录

1.线性卷积原理

2.利用对位相乘法计算线性卷积

3.Matlab实操

3.1源代码

3.2仿真结果

线性卷积原理

公示(1)为两个离散非周期序列进行线性卷积

\large y(n)=x(n)\ast h(n)=\sum_{m=-\propto }^{+\propto}x(m)h(n-m)=\sum_{m=-\propto }^{+\propto }h(m)x(n-m)\left ( 1 \right )

一般我们计算线性卷积时使用图解法最为常见,简单概括为“变量置换”、“翻转”、“平移”、“相乘”以及“求和”,这里就不过多陈述。

利用对位相乘法计算线性卷积

将两个离散非周期序列左端或右端对齐,对位相乘,然后按列求和,不进位,以序列x(n)=[1 2 3] 和h(n)=[1 1 1 1]并且以左端对齐为例,运算过程如下:

 

首先以序列h(n)为对象,将左起第一个1分别与序列x(n)的三个元素1、2、3依次相乘得到1、2、3,然后右移移位一位,相当于移到h(2)的位置上,用该位置上的元素1分别乘以x(n)的1、2、3,依旧得到1、2、3,同样的,继续移位并执行相同的操作。注意移到某个位置时相乘后的结果要与该元素的位置对齐。最后,将每一行相乘的结果按列相加即可得到卷积结果。对比图解法,此方法更为快捷,明了。

同样我们也可以以x(n)为对象,用它的元素分别乘以h(n),如下图所示:

 当然,读者也可用图解法验证上述结果是否正确,并且以右端对齐为例验证上述结果。一个以右端对齐的例子:

 

Matlab实操

源代码

%% =========================================================================================================
% 程序说明:本程序提供一种基于对位相乘法的自定义线性卷积函数写法,替代Matlab自带conv函数,供大家参考
% 程序名称:linear convolution 线性卷积
% 作者: hill5678
% 当前版本:1.0
%% =========================================================================================================
clear all;
close all;
clc;
%% ==================================================主函数部分==============================================
X=input('enter a arbitrary discrete-time sequence here:');
H=input('enter a arbitrary discrete-time sequence here:');
Y=linear_convolution(X,H);
display(Y);
%% ================================================定义线性卷积函数============================================
function y=linear_convolution(x,h)
n=length(x);m=length(h);% 输入离散时间序列的长度
y=[];y1=[];y2=[];y3=[];y4=[];y5=[];y6=[];
a=m;
N=n+m-1;% 卷积后新序列的长度
b=N;
M=N-n;% 矩阵形成并移位后每行需要补零的个数
for i1=0:a-2
    for i=0:m-1
        for k=0:n-1
            y1(i+1,k+1)=h(i+1)*x(k+1);% 按照对位相乘法将两个序列左端对齐,依次对位相乘
        end
        y2=y1;% 将结果矩阵赋给要y2
    end
    y3=[y2,zeros(m,M)];%将y2后面加入零矩阵
    y4=circshift(y3(i1+2,:),i1+1,2);% 循环移位函数,将y4从第二行开始向右按行移位。第二行移一位,第三行移两位,按此规律依次类推
    y5=[y5;y4];
end
y6=[y3(1,:);y5];% y3的第一行不变
y=sum(y6);% 将矩阵y6按列相加得到卷积结果
disp(y);
stem(y,'fill')
title('线性卷积结果:序列y(n)');
grid on;
end

仿真结果 

例如输入序列x(n)=[1 2 3] 和h(n)=[1 1 1 1],Maltab命令框窗口:

Matlab仿真结果 

 

参考文献

线性卷积、周期卷积、圆周卷积------一篇弄懂


*本人初来乍到,希望大家多多支持,如果上述内容有误,请大家留言指正,我会及时修改*

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一枚雷达信号处理领域的小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值