目錄
1.線性卷積原理
2.利用對位相乘法計算線性卷積
3.Matlab實操
3.1源代碼
3.2仿真結果
線性卷積原理
公示(1)為兩個離散非周期序列進行線性卷積
一般我們計算線性卷積時使用圖解法最為常見,簡單概括為“變數置換”、“翻轉”、“平移”、“相乘”以及“求和”,這里就不過多陳述,
利用對位相乘法計算線性卷積
將兩個離散非周期序列左端或右端對齊,對位相乘,然后按列求和,不進位,以序列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仿真結果

參考文獻
線性卷積、周期卷積、圓周卷積------一篇弄懂
*本人初來乍到,希望大家多多支持,如果上述內容有誤,請大家留言指正,我會及時修改*
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/303921.html
標籤:其他
